Composipy for strength analysis of a laminate¶
In this exemple we will use the exercise 6-7 from Analysis and Performance of Fiber Composites by B. Agarwal pg. 244.
[ ]:
from composipy import Ply, Laminate, Load, Strength
Fist, lets consider the following laminate
\([45_{ply1}/0_{ply2}/45_{ply1}]\)
Where \(ply_1\) is \(3 mm\) thick and \(ply_2\) is \(6mm\) thick with the following Elastic and strength characteristics
E1 = 19745 MPa
E2 = 1980 MPa
\(\nu_{12}\) = 0.35
G = 700 MPa
\(\sigma_1^T\) = 400 Mpa
\(\sigma_1^C\) = -250 Mpa
\(\sigma_2^T\) = 150 Mpa
\(\sigma_2^C\) = -200 Mpa
\(\tau_{12}\) = 25 Mpa
Setting the laminate¶
[ ]:
ply_1 = Ply(19745 , 1980, 0.35, 700, 3, 400, -250, 150, -200, 25,  name='3mm Unidirection Fiber Composite')
ply_2 = Ply(19745 , 1980, 0.35, 700, 6, 400, -250, 150, -200, 25, name='6mm Unidirection Fiber Composite')
Now, defining the laminate
[25]:
layup_1 = [
    (45, ply_1),
    (0, ply_2),
    (45, ply_1)
    ]
laminate_1 = Laminate(layup_1)
print(ply_1,'\n',ply_2)
print('==============================================')
print(laminate_1)
Ply(6mm Unidirection Carbon Fiber, E1 = 19745, E2 = 1980,
            v12 = 0.35, G12 = 700, thickness = 3,
            T1 = 400, C1 = -250, T2 = 150, C2 = -200, S = 25)
 Ply(6mm Unidirection Carbon Fiber, E1 = 19745, E2 = 1980,
            v12 = 0.35, G12 = 700, thickness = 6,
            T1 = 400, C1 = -250, T2 = 150, C2 = -200, S = 25)
==============================================
6mm Unidirection Carbon Fiber 45                  /////
6mm Unidirection Carbon Fiber 0                   =====
6mm Unidirection Carbon Fiber 45                  /////
The \(ABD'\) matrix can be called by the ABD_p atribute
[27]:
laminate_1.ABD_p
[27]:
matrix([[ 7.59007904e-06, -3.56488909e-06, -3.09494584e-06,
         -0.00000000e+00, -0.00000000e+00, -0.00000000e+00],
        [-3.56488909e-06,  3.43738980e-05, -2.36888731e-05,
         -0.00000000e+00, -0.00000000e+00, -0.00000000e+00],
        [-3.09494584e-06, -2.36888731e-05,  4.90937552e-05,
         -0.00000000e+00, -0.00000000e+00, -0.00000000e+00],
        [-0.00000000e+00, -0.00000000e+00, -0.00000000e+00,
          1.62021784e-06, -7.58814609e-07, -7.38051735e-07],
        [-0.00000000e+00, -0.00000000e+00, -0.00000000e+00,
         -7.58814609e-07,  3.01561903e-06, -1.93363381e-06],
        [-0.00000000e+00, -0.00000000e+00, -0.00000000e+00,
         -7.38051735e-07, -1.93363381e-06,  3.80139988e-06]])
Setting the loads¶
In the exemple, the element is subjected to the following loads
Nx = 1000 N/mm
Ny = 200 N/m
Nxy = 0
Mx = 0
My = 0
Mxy = 0
We will input the loads by using the Load class.
[26]:
loads_1 = Load(1000,200,0,0,0,0)
loads_1
[26]:
Load(Nx = 1000, Ny = 200,  Nxy = 0
                     Mx = 0, My = 0, Mxy = 0)
Checking the strength and elastic parameters of the laminate under load¶
Now we can analyse the strain and strees in the laminate using the Strength class.
[28]:
analysis = Strength(laminate_1,loads_1)
Let’s see the the mid-plane strain in the load direction (xy) by calling the mid_strain_xy atribute
[29]:
analysis.mid_strain_xy
[29]:
matrix([[ 0.0068771 ],
        [ 0.00330989],
        [-0.00783272],
        [ 0.        ],
        [ 0.        ],
        [ 0.        ]])
Or, in the laminate coordinates (12), by calling mid_strain_12.
[30]:
analysis.mid_strain_12
[30]:
[matrix([[ 0.00117714],
         [ 0.00900986],
         [-0.00356721]]),
 matrix([[ 0.0068771 ],
         [ 0.00330989],
         [-0.00783272]]),
 matrix([[ 0.00117714],
         [ 0.00900986],
         [-0.00356721]])]
Just like that, we can get the stress in all plies for both xy and 12 directions by calling stress_xy or stress_12.
[31]:
analysis.stress_xy
[31]:
[matrix([[26.86723559],
         [21.87314058],
         [ 5.48290432]]),
 matrix([[139.79943108],
         [ 11.46019275],
         [ -5.48290432]]),
 matrix([[26.86723559],
         [21.87314058],
         [ 5.48290432]])]
[32]:
analysis.stress_12
[32]:
[matrix([[29.8530924 ],
         [18.88728376],
         [-2.4970475 ]]),
 matrix([[139.79943108],
         [ 11.46019275],
         [ -5.48290432]]),
 matrix([[29.8530924 ],
         [18.88728376],
         [-2.4970475 ]])]
From the stresses in the laminate coordinates, we can calculate the Tsai-Wu failure index for all plies by calling TW_i.
[33]:
analysis.TW_i
[33]:
[0.011840177555671384, 0.04129615058665213, 0.011840177555671384]
Because the Tsai-Wu index is below 1 for all plies, the laminate is still undamaged.
We can discover in what load the first ply will fail based on the Tsai-Wu failure criterion by using the FPF parameter.
[34]:
analysis.FPF
FPF Load:
 [[2548.05698026]
 [ 509.61139605]
 [   0.        ]
 [   0.        ]
 [   0.        ]
 [   0.        ]]
Failed Ply(ies):
 [2]
Laminate Tsai-Wu Index in FPF:
 [0.12933910070551077, 1.0199433489695386, 0.12933910070551077]
Strength Ratio for FPF:
 2.573537550058799
By this, we now know that the second ply will fail under \(Nx = 2548.06 N/mm; Ny=509.61N/mm\) and that the Strenth Ratio for the FPF is \(2.57\).