The effective properties, or homogenized properties, are useful for describing the behaviour of laminates in familiar enginering terms. That includes the effective elastic properties, bending and torsional stiffness, thermal expansion and laminate strength. The concept of effective properties are usually limited to symmetric and balanced laminates.
For symmetric laminates, B=0 and
[NM]=[A00D][ε0κ]Hence, we can separate the in-plane relations from the out-of-plane relations;
N=Aε0and
M=DκFor a balanced laminate,
[NxNyNxy]=[AxxAxy0AxyAyy000Ass][ε0xε0yγ0xy]which can be separated into
[NxNy]=[AxxAxyAxyAyy][ε0xε0y]and
Nxy=Assγ0xyConsider the load case Nx≠0,Ny=0:
Nx=Axxε0x+Axyε0y0=Axyε0x+Ayyε0yCombining (7) and (8) leads to
Nx=(Axx−A2xyAyy)ε0xand
−ε0yε0x=AxyAyyThe resultant (average) stress ˉσx is now
ˉσx=Nxh=1h(Axx−A2xyAyy)ε0xwhere h is the total thickness of the laminate.
The effective modulus ˉEx is therefore
ˉEx=1h(Axx−A2xyAyy)The left hand side of equation (10) is simply the definition of Poisson's ratio:
vxy=AxyAyyCorrespondingly, when Nx=0,Ny≠0, we can derive the modulus
ˉEy=1h(Ayy−A2xyAxx)The effective in-plane shear modulus is obtained from equation (6):
Nxy=Assγ0xy⇒ˉGxy=ˉτxyγ0xy=1hAssExamples:
from laminatelib import laminateStiffnessMatrix, laminateThickness
# Material:
m1={'E1':140000, 'E2':10000, 'v12':0.3, 'G12':5000}
layup = [ {'mat':m1 , 'ori': 0 , 'thi':1} ,
{'mat':m1 , 'ori': 90 , 'thi':1} ,
{'mat':m1 , 'ori': 0 , 'thi':1} ]
ABD = laminateStiffnessMatrix(layup)
h=laminateThickness(layup)
Ex = (1/h)*( ABD[0,0] - (ABD[0,1]**2)/ABD[1,1] )
Ey = (1/h)*( ABD[1,1] - (ABD[0,1]**2)/ABD[0,0] )
vxy = ABD[0,1]/ABD[1,1]
Gxy = (1/h)*ABD[2,2]
print('Ex=',Ex)
print('Ey=',Ey)
print('vxy=',vxy)
print('Gxy=',Gxy)
The effective elastic constants as function of θ for a laminate of type [−θ/+θ/+θ/−θ]:
theta,Ex,Ey,vxy,Gxy = [],[],[],[],[]
for i in range(0,90):
layup = [ {'mat':m1 , 'ori': -i , 'thi':1} ,
{'mat':m1 , 'ori': i , 'thi':1} ,
{'mat':m1 , 'ori': i , 'thi':1},
{'mat':m1 , 'ori': -i , 'thi':1}]
ABD = laminateStiffnessMatrix(layup)
h=laminateThickness(layup)
Ex.append( (1/h)*( ABD[0,0] - (ABD[0,1]**2)/ABD[1,1] ) )
Ey.append( (1/h)*( ABD[1,1] - (ABD[0,1]**2)/ABD[0,0] ) )
vxy.append( ABD[0,1]/ABD[1,1] )
Gxy.append( (1/h)*ABD[2,2] )
theta.append(i)
import matplotlib.pyplot as plt
%matplotlib inline
fig,(ax1,ax2) = plt.subplots(nrows=1,ncols=2, figsize = (12,4))
ax1.plot(theta,Ex,'--',color='red',label='$E_x$')
ax1.plot(theta,Ey,'-.',color='blue',label='$E_y$')
ax1.plot(theta,Gxy,'-',color='green',label='$G_{xy}$')
ax1.grid(True)
ax1.set_xlim(0,90)
ax1.legend(loc='best',prop={'size': 12})
ax1.set_xlabel(r'$\theta}$',size=12)
ax1.set_ylabel('Modulus',size=12)
ax2.plot(theta,vxy,'-',color='orange',label=r'$\nu_{xy}$')
ax2.grid(True)
ax2.set_xlim(0,90)
ax2.legend(loc='best',prop={'size': 12})
ax2.set_xlabel(r'$\theta}$',size=12)
ax2.set_ylabel('Poissons ratio',size=12)
plt.tight_layout()
plt.show()
For a symmetric laminate:
[NM]+[NthMth]=[A00D][ε0κ]When the external forces and moments are zero,
Nth=Aε0Hence,
ε0=A−1NthThen, by definition, the effective coefficients of thermal expansion for the laminate is
ˉα=ε0=A−1Nth,whenΔT=1Example:
from laminatelib import thermalLoad
import numpy as np
# Material:
m1={'E1':140000, 'E2':10000, 'v12':0.3, 'G12':5000, 'a1':-0.5E-6, 'a2':30.0E-6}
layup = [ {'mat':m1 , 'ori': 0 , 'thi':1} ,
{'mat':m1 , 'ori':90 , 'thi':1} ,
{'mat':m1 , 'ori': 0 , 'thi':1} ]
ABD = laminateStiffnessMatrix(layup)
A=ABD[0:3,0:3]
Nth = thermalLoad(layup=layup,dT=1.0)[0:3]
effCTE = np.dot( np.linalg.inv(A), Nth)
print(effCTE)
The following function computes the effective elastic properties as well as the effective coefficient of thermal expansion and return the results as a new material:
def laminateHomogenization(layup):
ABD = laminateStiffnessMatrix(layup)
h=laminateThickness(layup)
Ex = (1/h)*( ABD[0,0] - (ABD[0,1]**2)/ABD[1,1] )
Ey = (1/h)*( ABD[1,1] - (ABD[0,1]**2)/ABD[0,0] )
vxy = ABD[0,1]/ABD[1,1]
Gxy = (1/h)*ABD[2,2]
(ax,ay,dummy) = np.dot( np.linalg.inv(ABD[0:3,0:3]), thermalLoad(layup,1.0)[0:3])
return {'E1':Ex, 'E2':Ey, 'v12':vxy, 'G12':Gxy, 'a1':ax, 'a2':ay}
Example:
m1={'E1':140000, 'E2':10000, 'v12':0.3, 'G12':5000, 'a1':-0.5E-6, 'a2':30.0E-6}
layup = [ {'mat':m1 , 'ori': 0 , 'thi':1} ,
{'mat':m1 , 'ori':90 , 'thi':1} ,
{'mat':m1 , 'ori': 0 , 'thi':1} ,
{'mat':m1 , 'ori':90 , 'thi':1} ,
{'mat':m1 , 'ori': 0 , 'thi':1} ]
m2 = laminateHomogenization(layup)
m2
For a symmetric laminate,
M=Dκor
[MxMyMxy]=[DxxDxyDxsDxyDyyDysDxsDysDss][κxκyκxy]When Dxs=Dys=0, the set of equations is reduced to
[MxMy]=[DxxDxyDxyDyy][κxκy]and
Mxy=DssκxyFrom a load case Mx≠0 and My=0:
Mx=(Dxx−D2xyDyy)κxConsider a beam having width b such that the total moment is Mxb. The bending stiffness of the beam defined as the ratio of the total moment to the curvature is therefore
b(Dxx−D2xyDyy)From the Euler–Bernoulli beam theory for a homogenuous beam cross section, the total moment is related to the curvature by:
M=−EId2wdx2=EIκxFrom equation (26), solutions to many specific loading and boundary problems have been solved, such as the deflection of a freely suported beame subjected to 3-point bending:
δ=FL348EINow, equation (25) and (26) suggest that we can subsitute EI in solutions such as (27) by:
Db=b(Dxx−D2xyDyy)where Db will be called bending stiffness.
Example:
Deflection of a laminated beam subjected to 3-point bending:
Figure-1: 3-point bending
m1={'E1':140000, 'E2':10000, 'v12':0.3, 'G12':5000}
layup = [ {'mat':m1 , 'ori': 0 , 'thi':1} ,
{'mat':m1 , 'ori':90 , 'thi':1} ,
{'mat':m1 , 'ori': 0 , 'thi':1} ,
{'mat':m1 , 'ori':90 , 'thi':1} ,
{'mat':m1 , 'ori': 0 , 'thi':1} ]
L,b,F = 200,20,100
ABD = laminateStiffnessMatrix(layup)
Db = b*(ABD[3,3]-(ABD[3,4]**2)/ABD[4,4])
deflection = (F*L**3)/(48*Db)
print(deflection,'mm')
For a single layer laminate we find that
b(Dxx−D2xyDyy)=Exbh312layup = [ {'mat':m1 , 'ori': 0 , 'thi':1} ]
b=20
ABD = laminateStiffnessMatrix(layup)
Db = b*(ABD[3,3]-(ABD[3,4]**2)/ABD[4,4])
print(Db)
I=b*(layup[0]['thi']**3)/12
print(m1['E1']*I)
import matlib
from laminatelib import solveLaminateLoadCase, layerResults
m1 = matlib.get('E-glass/Epoxy')
layup = [ {'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} ]
ABD=laminateStiffnessMatrix(layup)
loads,defs=solveLaminateLoadCase(ABD, Nx=1)
h=laminateThickness(layup)
res=layerResults(layup,defs)
fE=0
for r in res:
if r['fail']['TW']['bot']>fE:
fE=r['fail']['TW']['bot']
print('Effective strength, sx =', 1/(fE*h),'MPa')
fig,ax = plt.subplots(figsize=(8,8))
sx_0,sy_0=[],[]
sx_45,sy_45=[],[]
sx_90,sy_90=[],[]
for a in np.linspace(0,360,3600):
Nx=np.cos(np.radians(a))
Ny=np.sin(np.radians(a))
loads,defs=solveLaminateLoadCase(ABD, Nx=Nx, Ny=Ny)
res=layerResults(layup,defs)
# 0-layers:
fE=res[0]['fail']['TW']['bot']
sx_0.append(Nx/(fE*h))
sy_0.append(Ny/(fE*h))
# +-45 layers:
fE=res[1]['fail']['TW']['bot']
sx_45.append(Nx/(fE*h))
sy_45.append(Ny/(fE*h))
# 90-layers:
fE=res[3]['fail']['TW']['bot']
sx_90.append(Nx/(fE*h))
sy_90.append(Ny/(fE*h))
ax.plot(sx_0,sy_0,'--',color='blue',linewidth=1)
ax.plot(sx_45,sy_45,'--',color='green',linewidth=1)
ax.plot(sx_90,sy_90,'--',color='red',linewidth=1)
ax.scatter((0,),(0,),c='black', marker='+',s=500)
ax.set_xlabel(r'$\sigma_x$',fontsize=14)
ax.set_ylabel(r'$\sigma_y$',fontsize=14)
#ax.set_xlim(-1000,1000)
#ax.set_ylim(-1000,1000)
ax.grid(True)
plt.tight_layout()
m1['E2']=0.01*m1['E2']
m1['G12']=0.01*m1['G12']
fig,ax = plt.subplots(figsize=(8,8))
sx_0,sy_0=[],[]
sx_45,sy_45=[],[]
sx_90,sy_90=[],[]
for a in np.linspace(0,360,3600):
Nx=np.cos(np.radians(a))
Ny=np.sin(np.radians(a))
loads,defs=solveLaminateLoadCase(ABD, Nx=Nx, Ny=Ny)
res=layerResults(layup,defs)
# 0-layers:
fE=res[0]['fail']['TW']['bot']
sx_0.append(Nx/(fE*h))
sy_0.append(Ny/(fE*h))
# +-45 layers:
fE=res[1]['fail']['TW']['bot']
sx_45.append(Nx/(fE*h))
sy_45.append(Ny/(fE*h))
# 90-layers:
fE=res[3]['fail']['TW']['bot']
sx_90.append(Nx/(fE*h))
sy_90.append(Ny/(fE*h))
ax.plot(sx_0,sy_0,'--',color='blue',linewidth=1)
ax.plot(sx_45,sy_45,'--',color='green',linewidth=1)
ax.plot(sx_90,sy_90,'--',color='red',linewidth=1)
ax.scatter((0,),(0,),c='black', marker='+',s=500)
ax.set_xlabel(r'$\sigma_x$',fontsize=14)
ax.set_ylabel(r'$\sigma_y$',fontsize=14)
ax.grid(True)
plt.tight_layout()
fig,ax = plt.subplots(figsize=(8,8))
ax.plot(sx_0,sy_0,'--',color='blue',linewidth=1)
ax.plot(sx_45,sy_45,'--',color='green',linewidth=1)
ax.plot(sx_90,sy_90,'--',color='red',linewidth=1)
ax.scatter((0,),(0,),c='black', marker='+',s=500)
ax.set_xlabel(r'$\sigma_x$',fontsize=14)
ax.set_ylabel(r'$\sigma_y$',fontsize=14)
ax.set_xlim(-3000,3000)
ax.set_ylim(-3000,3000)
ax.grid(True)
plt.tight_layout()
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.