Loading [MathJax]/extensions/Safe.js

Elastic properties of woven plies

The mechanical properties of ply materials with woven reinforcement are often limited or not supplied at all. Although the best solution obviously is to characterize the material by testing, simple estimations using micro-mechanical models and principles from laminate theory may provide reasonable values for preliminary design.

In this demonstration, we consider a plain E-glass weave in an epoxy, where the relevant elastic constants of the two (isotropic) materials are Young’s modulus and Poisson’s ratio:

In [1]:
Ef, vf = 70000.0, 0.22
Em, vm =  3000.0, 0.40

The shear moduli are not independent constants but related by:

In [2]:
Gf=Ef/(2+2*vf)
Gm=Em/(2+2*vm)

The volume fraction of woven materials is typically less than 0.5, and without further discussion here, $V_f$ = 0.45 will be used:

In [3]:
Vf=0.45

The longitudinal modulus $E_1$ and the in-plane Poisson’s ratio $\nu_{12}$ are very accurately predicted by the simple rules of mixture, while the transverse modulus and the in-plane shear modulus are reasonably well predicted by the Halpin-Tsai models and typical values of the empirical parameters. The models and the functions are described in Micro-mechanical models

In [4]:
import compositelib
E1= compositelib.micmec_E1(  Vf=Vf, E1f=Ef, Em=Em )
E2= compositelib.micmec_E2c( Vf=Vf, E2f=Ef, Em=Em, xi1=1)
v12=compositelib.micmec_v12( Vf=Vf, v12f=vf, vm=vm)
G12=compositelib.micmec_G12c(Vf=Vf, G12f=Gf, Gm=Gm,xi2=1)

print('E1=',round(E1,0))
print('E2=',round(E2,0))
print('v12=',round(v12,3))
print('G12=',round(G12,0))
E1= 33150.0
E2= 7222.0
v12= 0.319
G12= 2608.0

Then, create a new material from the estimated in-plane elastic properties:

In [5]:
m_UD = {'E1':E1, 'E2':E2, 'v12':v12, 'G12':G12}

For consistency (and simplicity), the laminate must be symmetric, for example:

In [6]:
layup = [{'mat':m_UD, 'ori':0,  'thi':1},
         {'mat':m_UD, 'ori':90, 'thi':2},
         {'mat':m_UD, 'ori':0 , 'thi':1}]

Compute the laminate compliance matrix as the inverse of the laminate stiffness matrix:

In [7]:
import laminatelib
import numpy as np

ABD=laminatelib.laminateStiffnessMatrix(layup)
abd = np.linalg.inv(ABD)

The total thickness $h$ of the laminate is:

In [8]:
h=laminatelib.laminateThickness(layup)

The effective engineering constants of the laminate are:

In [9]:
E1_w = (1/abd[0,0])/h
E2_w = (1/abd[1,1])/h
G12_w= (1/abd[2,2])/h
v12_w= -abd[0,1]*E1_w

print('E1=',round(E1_w,0))
print('E2=',round(E2_w,0))
print('v12=',round(v12_w,3))
print('G12=',round(G12_w,0))
E1= 20375.0
E2= 20375.0
v12= 0.029
G12= 2608.0

In effective-properties-of-laminates you find a function that also computes the effective thermal expansion and returns a new material as a dictionary. Coefficients of thermal expansion must be added to the UD-material, and for this example, let us just guess rather than use models (left as an exercise):

In [10]:
m_UD.update({'a1':5E-6, 'a2':30E-6})

Then:

In [11]:
woven_material=laminatelib.laminateHomogenization(layup)

display(woven_material)
{'E1': 20374.613730455807,
 'E2': 20374.613730455803,
 'v12': 0.11412564977434028,
 'G12': 2607.914363407802,
 'a1': 1.0294356918693716e-05,
 'a2': 1.0294356918693719e-05}

3D properties

The 3D properties may be required, for example in a FEA model. A simple homogenization method is based on averaging of the 3D stiffness matrices for the two layers. A discussion on the justification for and limitation of this approach is left as an exercise.

The assumption of transverse isotropy is reasonable. Hence, from the constants computed by micro-mechanical models:

In [12]:
E3=E2
v13=v12
v23=0.45     # Estimated based on reported values for similar materials
G13=G12
G23=E2/(2+2*v23)

Create a material for the 3D engineering constants:

In [13]:
m_UD3 = {'E1':E1,    'E2':E2,   'E3':E3,
        'v12':v12, 'v13':v13, 'v23':v23, 
        'G12':G12, 'G13':G13, 'G23':G23}

The stiffness matrix for this material and for a 0-oriented layer is:

In [14]:
C0 =compositelib.C3D(m_UD3)

The stiffness matrix for a 90-oriented layer is found by rotation:

In [15]:
C90=compositelib.C3Dtz(C0,90)

Computing the average stiffness matrix from the two layers:

In [16]:
Cav=0.5*(C0+C90)

The compliance matrix based on the average stiffness matrix is:

In [17]:
Sav=np.linalg.inv(Cav)

Finally, the engineering constants can be extracted from the compliance matrix by:

In [18]:
E1_3dw = 1/Sav[0,0]
E2_3dw = 1/Sav[1,1]
E3_3dw = 1/Sav[2,2]
G23_3dw = 1/Sav[3,3]
G13_3dw = 1/Sav[4,4]
G12_3dw = 1/Sav[5,5]
v23_3dw = -Sav[1,2]*E2_3dw
v13_3dw = -Sav[0,2]*E1_3dw
v12_3dw = -Sav[0,1]*E1_3dw
In [19]:
print('E1=',round(E1_3dw,0))
print('E2=',round(E2_3dw,0))
print('E3=',round(E3_3dw,0))
print('v12=',round(v12_3dw,3))
print('v13=',round(v13_3dw,3))
print('v23=',round(v23_3dw,3))
print('G12=',round(G12_3dw))
print('G13=',round(G13_3dw))
print('G23=',round(G23_3dw))
E1= 20375.0
E2= 20375.0
E3= 8084.0
v12= 0.114
v13= 0.423
v23= 0.423
G12= 2608
G13= 2549
G23= 2549
TOC Next Prev

Disclaimer:This site is designed for educational purposes only. There are most likely errors, mistakes, typos, and poorly crafted statements that are not detected yet... www.ntnu.edu/employees/nils.p.vedvik

Copyright 2024, All rights reserved