Micro-mechanical models atempt to estimate the properties of composites based on the geometrical arrangement and the properties of the constituent materials in the composite material. The most simple models are typically based on a rule of mixture where assumtions of parallel or series coupling are being made.
Figure-1: Simplified model of a UD composite
We can reasonably assume that the longitudinal strain in the fiber is equal to the longitudinal strain in the matrix, and both strains are equal to the longitudinal strain of the composite:
ε1f=ε1m=ε1When subjected to a longitudinal force F1, this force is distributed between the fiber and the matrix:
F1=F1f+F1mTaking the cross section areas into consideration, the longitudinal stresses are introduced:
Aσ1=Afσ1f+Amσ1mor
σ1=AfAσ1f+AmAσ1m=Vfσ1f+Vmσ1mwhere the relations between volume fractions and area fractions have been used.
Now dividing by the strain: σ1ε1=Vfσ1fε1+Vmσ1mε1=Vfσ1fε1f+Vmσ1mε1m
and by applying the definition of modulus:
E1=VfEf1+VmEmor
E1=VfEf1+(1−Vf)EmThis model is considered to be very accurate for most of the common combinations of fibers and polymer matrices.
Example:
Ef=70 # Modulus for E-glass fiber
vf=0.2 # Poisson's ratio for glass
Gf=Ef/(2+2*vf) # Derived shear modulus assuming isotropy
Em=3 # Modulus for a polymer matrix
vm=0.4 # Poisson's ratio for the matrix
Gm=Em/(2+2*vm) # Derived shear modulus assuming isotropy
Vf=0.5 # Fiber volume fraction
E1=Vf*Ef + (1-Vf)*Em
print('E1=',E1)
import numpy as np
Sf = np.array([[1/Ef,-vf/Ef,-vf/Ef,0,0,0], # Compliance matrix of the (isotropic) fiber
[-vf/Ef,1/Ef,-vf/Ef,0,0,0],
[-vf/Ef,-vf/Ef,1/Ef,0,0,0],
[0,0,0,1/Gf,0,0],
[0,0,0,0,1/Gf,0],
[0,0,0,0,0,1/Gf] ])
Sm = np.array([[1/Em,-vm/Em,-vm/Em,0,0,0], # Compliance matrix of the (isotropic) matrix
[-vm/Em,1/Em,-vm/Em,0,0,0],
[-vm/Em,-vm/Em,1/Em,0,0,0],
[0,0,0,1/Gm,0,0],
[0,0,0,0,1/Gm,0],
[0,0,0,0,0,1/Gm] ])
Cf = np.linalg.inv(Sf) # Stiffness matrix of fiber
Cm = np.linalg.inv(Sm) # Stiffness matrix of matrix
C = Vf*Cf + (1-Vf)*Cm # Rule of mixture stiffness matrix
S = np.linalg.inv(C) # Compliance matrix from rule of mixture stiffness matrix
E1 = 1/S[0,0]
print('E1=',E1)
In the simplest model for the transverse modulus, we assume a series coupling of fibers and matrix where the resulting strain in the transverse direction is a superposition of the fiber strain and the matrix strain, while the stress in the two phases are equal. The resulting model gives
1E2=VfEf2+1−VfEmor
E2=E2fEmVfEm+VmE2fExample:
E2=1/(Vf/Ef + (1-Vf)/Em)
print('E2=',E2)
The model (9) provides a fair estimate of the property but tends to underestimate the value significantly since it is the true lower-bound value where constraints due to Poisson's effects are completly neglected. One simple approach for mitigating this issue suggests the modulus of the matrix be modified to
E′m=Em1−ν2mwhere νm is the Poisson's ratio of the matrix.
Hence, the modified model can be expressed by
E2=E2fE′mVfE′m+VmE2fExample:
Emm=Em/(1-vm**2)
E2=(Ef*Emm)/(Vf*Emm + (1-Vf)*Ef)
print('E2=',E2)
S = Vf*Sf + (1-Vf)*Sm # Rule of mixture of compliance matrices
E1 = 1/S[0,0]
print('E1=',E1)
The semi-empircal Halpin-Tsai model for the transverse modulus is
E2=Em1+ξ1η1Vf1−η1Vfwhere η1=E2f−EmE2f+ξ1Em
and ξ1 is an experimentally determined parameter which typically lay between 1 and 2.
Since the emperical parameter must be determined, the model is only useful for predicting the elastic constants for a given fiber volume fraction when it is known for another fiber volume fraction.
Examples: The model predictions as function of the fiber volume fraction for a UD glass fiber composite:
def micmec_E1(Vf,E1f,Em):
return Vf*E1f+(1-Vf)*Em
def micmec_E2a(Vf,E2f,Em):
return (E2f*Em)/(Vf*Em + (1-Vf)*E2f)
def micmec_E2b(Vf,E2f,Em,vm):
Emm=Em/(1-vm**2)
return (E2f*Emm)/(Vf*Emm + (1-Vf)*E2f)
def micmec_E2c(Vf,E2f,Em,xi1):
n1=(E2f-Em)/(E2f+xi1*Em)
return Em*(1+xi1*n1*Vf)/(1-n1*Vf)
import numpy as np
Vf=np.linspace(0,1.0)
E1 = micmec_E1(Vf,70,3)
E2a = micmec_E2a(Vf,70,3)
E2b = micmec_E2b(Vf,70,3,0.4)
E2c1 = micmec_E2c(Vf,70,3,1.0)
E2c2 = micmec_E2c(Vf,70,3,2.0)
import matplotlib.pyplot as plt
%matplotlib inline
fig,(ax1,ax2) = plt.subplots(nrows=1,ncols=2,figsize=(12,4))
ax1.plot(Vf,E1, color='black',label=r'$E_1$')
ax1.plot(Vf,E2a, color='blue',label=r'$E_2^{(a)}$')
ax1.plot(Vf,E2b, color='red',label=r'$E_2^{(b)}$')
ax1.plot(Vf,E2c1, color='orange',label=r'$E_2^{(c)}, \xi_1 = 1$')
ax1.plot(Vf,E2c2, color='cyan',label=r'$E_2^{(c)}, \xi_1 = 2$')
ax1.set_xlim(0,1)
ax1.set_ylim(0,)
ax1.set_xlabel('Fiber Volume Fraction',size=12)
ax1.set_ylabel('Modulus [MPa]',size=12)
ax1.grid(True)
ax1.legend(loc='best')
ax2.plot(Vf,E2a, color='blue',label=r'$E_2^{(a)}$')
ax2.plot(Vf,E2b, color='red',label=r'$E_2^{(b)}$')
ax2.plot(Vf,E2c1, color='orange',label=r'$E_2^{(c)},\xi_1 = 1$')
ax2.plot(Vf,E2c2, color='cyan',label=r'$E_2^{(c)},\xi_1 = 2$')
ax2.set_xlim(0.4,0.7)
ax2.set_ylim(0,15)
ax2.set_xlabel('Fiber Volume Fraction',size=12)
ax2.set_ylabel('Modulus [MPa]',size=12)
ax2.grid(True)
ax2.legend(loc='best')
plt.tight_layout()
A model for the Poisson's ratio v12 similar to the model for longitudinal modluls E1 has been found to be very close to experimental results:
v12=Vfv12f+(1−Vf)vmModels for the Poisson's ratio v23 tend to be rather involved, and will not be considered further in this course.
The simple rule of mixture similar to equation (9) for the transverse modulus provides an estimate for the composite shear modulues:
G12=G12fGmVfGm+VmG12fThe Halpin-Tsai semi-empirical model is
G12=Gm1+ξ2η2Vf1−η2Vfwhere η2=G12f−GmG12f+ξ2Gm
and ξ2 is an experimentally determined parameter.
Functions:
def micmec_v12(Vf,v12f,vm):
return Vf*v12f+(1-Vf)*vm
def micmec_G12a(Vf,G12f,Gm):
return (G12f*Gm)/(Vf*Gm + (1-Vf)*G12f)
def micmec_G12c(Vf,G12f,Gm,xi2):
n2=(G12f-Gm)/(G12f+xi2*Gm)
return Gm*(1+xi2*n2*Vf)/(1-n2*Vf)
Gm=3/(2+2*0.4)
G12f=70/(2+2*0.22)
G12a = micmec_G12a(Vf,G12f,Gm)
G12c = micmec_G12c(Vf,G12f,Gm,1)
fig,(ax1,ax2) = plt.subplots(nrows=1,ncols=2,figsize=(12,4))
ax1.plot(Vf,G12a, color='blue',label=r'$G_{12}^{(a)}$')
ax1.plot(Vf,G12c, color='orange',label=r'$E_{12}^{(c)}, \xi_1 = 1$')
ax1.set_xlim(0,1)
ax1.set_ylim(0,)
ax1.set_xlabel('Fiber Volume Fraction',size=12)
ax1.set_ylabel('Modulus [MPa]',size=12)
ax1.grid(True)
ax1.legend(loc='best')
ax2.plot(Vf,G12a, color='blue',label=r'$G_{12}^{(a)}$')
ax2.plot(Vf,G12c, color='orange',label=r'$G_{12}^{(c)},\xi_1 = 1$')
ax2.set_xlim(0.4,0.7)
ax2.set_ylim(0,5)
ax2.set_xlabel('Fiber Volume Fraction',size=12)
ax2.set_ylabel('Modulus [MPa]',size=12)
ax2.grid(True)
ax2.legend(loc='best')
plt.tight_layout()
Left as exercise.
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.