See the Computational procedures for description of the functions imported from laminatelib
import numpy as np
from laminatelib import laminateStiffnessMatrix
# Material:
m1={'E1':140000, 'E2':10000, 'v12':0.3, 'G12':5000}
layup1= [ {'mat':m1 , 'ori': 30 , 'thi':1} ,
{'mat':m1 , 'ori': 10 , 'thi':1} ,
{'mat':m1 , 'ori': 80 , 'thi':1} ]
ABD1 = laminateStiffnessMatrix(layup1)
print(np.array2string(ABD1, precision=0, suppress_small=True, separator=' ', floatmode='maxprec_equal') )
# Material:
m1={'E1':140000, 'E2':10000, 'v12':0.3, 'G12':5000}
layup2= [ {'mat':m1 , 'ori': 30 , 'thi':1} ,
{'mat':m1 , 'ori': 90 , 'thi':1} ,
{'mat':m1 , 'ori': 30 , 'thi':1} ]
ABD2 = laminateStiffnessMatrix(layup2)
print(np.array2string(ABD2, precision=0, suppress_small=True, separator=' ', floatmode='maxprec_equal') )
# Material:
m1={'E1':140000, 'E2':10000, 'v12':0.3, 'G12':5000}
layup3= [ {'mat':m1 , 'ori': 30 , 'thi':1} ,
{'mat':m1 , 'ori': 80 , 'thi':1} ,
{'mat':m1 , 'ori': -30 , 'thi':1},
{'mat':m1 , 'ori': -80 , 'thi':1}]
ABD3 = laminateStiffnessMatrix(layup3)
print(np.array2string(ABD3, precision=0, suppress_small=True, separator=' ', floatmode='maxprec_equal') )
# Material:
m1={'E1':140000, 'E2':10000, 'v12':0.3, 'G12':5000}
layup4= [ {'mat':m1 , 'ori': 30 , 'thi':1} ,
{'mat':m1 , 'ori': -30 , 'thi':1} ,
{'mat':m1 , 'ori': -30 , 'thi':1},
{'mat':m1 , 'ori': 30 , 'thi':1}]
ABD4 = laminateStiffnessMatrix(layup4)
print(np.array2string(ABD4, precision=0, suppress_small=True, separator=' ', floatmode='maxprec_equal') )
# Material:
m1={'E1':140000, 'E2':10000, 'v12':0.3, 'G12':5000}
layup5= [ {'mat':m1 , 'ori': -30 , 'thi':1} ,
{'mat':m1 , 'ori': 30 , 'thi':1} ,]
ABD5 = laminateStiffnessMatrix(layup5)
print(np.array2string(ABD5, precision=0, suppress_small=True, separator=' ', floatmode='maxprec_equal') )
The components $B_{xs}$ and $B_{ys}$ cause a coupling between normal forces and twist deformation ($\kappa_{xy}$):
loads=[1000, 0, 0, 0, 0, 0]
deformations = np.linalg.solve(ABD5, loads)
print(deformations)
Now, if we double the number of layers while keeping the total thickness of the laminate constant:
layup5b= [ {'mat':m1 , 'ori': -30 , 'thi':0.5} ,
{'mat':m1 , 'ori': 30 , 'thi':0.5} ,
{'mat':m1 , 'ori': -30 , 'thi':0.5} ,
{'mat':m1 , 'ori': 30 , 'thi':0.5} ]
ABD5b = laminateStiffnessMatrix(layup5b)
print(np.array2string(ABD5b, precision=0, suppress_small=True, separator=' ', floatmode='maxprec_equal') )
... the components $B_{xs}$ and $B_{ys}$ are reduced by a factor 1/2, while all other components remain the same.
With an increased number of layers in an anti-symmetric laminate, the coupling terms approace zero (relatively to the other terms):
n, Bxs, Bys = [],[],[]
for k in (1,2,3,4,6,10):
layup5c=[]
for i in range(0,k):
tk=1/k
layup5c.append( {'mat':m1 , 'ori': -30 , 'thi':tk} )
layup5c.append( {'mat':m1 , 'ori': 30 , 'thi':tk} )
ABD5c = laminateStiffnessMatrix(layup5c)
Bxs.append(ABD5c[0,5])
Bys.append(ABD5c[1,5])
n.append(2*k)
import matplotlib.pyplot as plt
%matplotlib inline
fig,ax=plt.subplots(figsize=(6,3))
ax.plot(n,Bxs,label='Bxs')
ax.plot(n,Bys,label='Bys')
ax.set_xlabel('No. of layers',fontsize=12)
ax.set_ylabel('Bxs, Bys', fontsize=12)
ax.set_xlim(2,20)
ax.set_ylim(0,)
ax.grid(True)
ax.legend()
plt.show()
The coupling terms $B_{xs}$ and $B_{ys}$ as function of $\theta$ for a laminate [-$\theta$/+$\theta$]:
Bxs,Bys = [],[]
thetas=np.linspace(-90,90,180)
for theta in thetas:
layup5d= [{'mat':m1 , 'ori': -theta , 'thi':1},
{'mat':m1 , 'ori': theta , 'thi':1} ]
ABD5d = laminateStiffnessMatrix(layup5d)
Bxs.append(ABD5d[0,5])
Bys.append(ABD5d[1,5])
import matplotlib.pyplot as plt
%matplotlib inline
fig,ax=plt.subplots(figsize=(6,3))
ax.plot(thetas,Bxs,label='Bxs')
ax.plot(thetas,Bys,label='Bys')
ax.set_xlabel(r'$\theta$',fontsize=12)
ax.set_ylabel('Bxs', fontsize=12)
ax.set_xlim(-90,90)
ax.grid(True)
ax.legend()
plt.show()
# Material:
m1={'E1':140000, 'E2':10000, 'v12':0.3, 'G12':5000}
layup6a= [{'mat':m1 , 'ori': 0 , 'thi':1} ,
{'mat':m1 , 'ori': 90 , 'thi':1} ]
layup6b= [{'mat':m1 , 'ori': 0 , 'thi':0.5} ,
{'mat':m1 , 'ori': 90 , 'thi':0.5} ,
{'mat':m1 , 'ori': 0 , 'thi':0.5},
{'mat':m1 , 'ori': 90 , 'thi':0.5}]
ABD6a = laminateStiffnessMatrix(layup6a)
print('[0/90], total thickness = 2:\n')
print(np.array2string(ABD6a, precision=0, suppress_small=True, separator=' ', floatmode='maxprec_equal') )
print()
ABD6b = laminateStiffnessMatrix(layup6b)
print('[0/90/0/90], total thickness = 2:\n')
print(np.array2string(ABD6b, precision=0, suppress_small=True, separator=' ', floatmode='maxprec_equal') )
# Material:
m1={'E1':140000, 'E2':10000, 'v12':0.3, 'G12':5000}
layup7= [ {'mat':m1 , 'ori': 0 , 'thi':1} ,
{'mat':m1 , 'ori': 90 , 'thi':1} ,
{'mat':m1 , 'ori': 90 , 'thi':1},
{'mat':m1 , 'ori': 0 , 'thi':1}]
ABD7 = laminateStiffnessMatrix(layup7)
print(np.array2string(ABD7, precision=0, suppress_small=True, separator=' ', floatmode='maxprec_equal') )
where
\begin{equation} A_{yy}=A_{xx}, \quad A_{ss} = \frac{(A_{xx}-A_{xy})}{2} \end{equation}# Material:
m1={'E1':140000, 'E2':10000, 'v12':0.3, 'G12':5000}
layup8 = [ {'mat':m1 , 'ori': 0 , 'thi':1} ,
{'mat':m1 , 'ori': -45 , 'thi':1} ,
{'mat':m1 , 'ori': 45 , 'thi':1} ,
{'mat':m1 , 'ori': 90 , 'thi':1} ,
{'mat':m1 , 'ori': 90 , 'thi':1} ,
{'mat':m1 , 'ori': 45 , 'thi':1} ,
{'mat':m1 , 'ori': -45 , 'thi':1} ,
{'mat':m1 , 'ori': 0 , 'thi':1} ,]
ABD8 = laminateStiffnessMatrix(layup8)
print(np.array2string(ABD8, precision=0, suppress_small=True, separator=' ', floatmode='maxprec_equal') )
Consider the A submatrix:
A=ABD8[0:3,0:3]
print(np.round(A))
...and we do a random rotation about the z-axis, we find that
from laminatelib import Q2Dtransform
A_rotated=Q2Dtransform(A,13.543)
print(np.round(A_rotated))
...it is the same as before, implying that we have isotropy in the x-y plane
Disclaimer:This site is about polymer composites, designed for educational purposes. Consumption and use of any sort & kind is solely at your own risk.
Fair use: I spent some time making all the pages, and even the figures and illustrations are my own creations. Obviously, you may steal whatever you find useful here, but please show decency and give some acknowledgment if or when copying. Thanks! Contact me: nils.p.vedvik@ntnu.no www.ntnu.edu/employees/nils.p.vedvik
Copyright 2021, All right reserved, I guess.