TMM4175 Polymer Composites

Home About Python Links Table of Contents

CASE STUDY: On transverse isotropy

From Transformations, the transformed stiffness matrix for rotation about the z-axis is

\begin{equation} \mathbf{C{'}} = \mathbf{T}_{\sigma z}^{-1}\mathbf{C} \mathbf{T}_{\epsilon z} \end{equation}

The relevant functions are:

In [1]:
from compositelib import C3D, C3Dtz

Consider some orthotropic material with the engineering constants:

In [2]:
m1  = {'E1':50000, 'E2':20000, 'E3':10000,
       'v12':0.3,    'v13':0.4,  'v23':0.5, 'G12':5000,   'G13':4000, 'G23':3000 }

The stiffness matrix for the material is:

In [3]:
C=C3D(m1)

import numpy as np
print(np.array2string(C, precision=0, suppress_small=True, separator='  ', floatmode='maxprec') )
[[55875.  10217.   7024.      0.      0.      0.]
 [10217.  24725.   6999.      0.      0.      0.]
 [ 7024.   6999.  12312.      0.      0.      0.]
 [    0.      0.      0.   3000.      0.      0.]
 [    0.      0.      0.      0.   4000.      0.]
 [    0.      0.      0.      0.      0.   5000.]]

What if we take the average of all transformed stiffness matrices obtained by rotation about the z-axis from 0 to 359 degrees?

In [4]:
Cav=np.zeros((6,6))

count=0
for a in range(0,360): # not including 360
    Cav=Cav+C3Dtz(C,a)
    count=count+1
Cav=Cav/count
print(np.array2string(Cav, precision=0, suppress_small=True, separator='  ', floatmode='maxprec') )
[[35279.  15238.   7011.      0.      0.     -0.]
 [15238.  35279.   7011.      0.      0.      0.]
 [ 7011.   7011.  12312.      0.      0.      0.]
 [    0.      0.      0.   3500.     -0.      0.]
 [    0.      0.      0.     -0.   3500.      0.]
 [   -0.     -0.      0.      0.      0.  10021.]]

This stiffness matrix represents a material where the 1-2 plane is a plane of isotropy, since any random rotation of the stiffness matrix will result in the same matrix:

In [5]:
CavRandom=C3Dtz(Cav,12.34) # 12.34 represent a 'random' number here...

print(np.array2string(CavRandom, precision=0, suppress_small=True, separator='  ', floatmode='maxprec') )
[[35279.  15238.   7011.      0.      0.     -0.]
 [15238.  35279.   7011.      0.      0.      0.]
 [ 7011.   7011.  12312.      0.      0.      0.]
 [    0.      0.      0.   3500.      0.      0.]
 [    0.      0.      0.      0.   3500.      0.]
 [   -0.      0.      0.      0.      0.  10021.]]

Furthermore, we find that the following relation is true (why?):

\begin{equation} C_{66}= \frac{ (C_{11}-C_{12})}{2} \end{equation}
In [6]:
(Cav[0,0]-Cav[0,1])/2
Out[6]:
10020.753512132807
In [7]:
Cav[5,5]
Out[7]:
10020.753512132822

Try with angles from 0 to 360 in step of 10:

In [8]:
Cav=np.zeros((6,6))

count=0
for a in range(0,360,10): # 0, 10,...,350
    Cav=Cav+C3Dtz(C,a)
    count=count+1
Cav=Cav/count
print(np.array2string(Cav, precision=0, suppress_small=True, separator='  ', floatmode='maxprec') )
[[35279.  15238.   7011.      0.      0.      0.]
 [15238.  35279.   7011.      0.      0.      0.]
 [ 7011.   7011.  12312.      0.      0.     -0.]
 [    0.      0.      0.   3500.      0.      0.]
 [    0.      0.      0.     -0.   3500.      0.]
 [    0.     -0.     -0.      0.      0.  10021.]]

Step equal to 30?:

In [9]:
Cav=np.zeros((6,6))

count=0
for a in range(0,360,10): # 0, 10,...,350
    Cav=Cav+C3Dtz(C,a)
    count=count+1
Cav=Cav/count
print(np.array2string(Cav, precision=0, suppress_small=True, separator='  ', floatmode='maxprec') )
[[35279.  15238.   7011.      0.      0.      0.]
 [15238.  35279.   7011.      0.      0.      0.]
 [ 7011.   7011.  12312.      0.      0.     -0.]
 [    0.      0.      0.   3500.      0.      0.]
 [    0.      0.      0.     -0.   3500.      0.]
 [    0.     -0.     -0.      0.      0.  10021.]]

Just the angles 0, 45, 90 and 135:

In [10]:
Cav=np.zeros((6,6))

count=0
for a in (0,45,90,135):
    Cav=Cav+C3Dtz(C,a)
    count=count+1
Cav=Cav/count
print(np.array2string(Cav, precision=0, suppress_small=True, separator='  ', floatmode='maxprec') )
[[35279.  15238.   7011.      0.      0.      0.]
 [15238.  35279.   7011.      0.      0.      0.]
 [ 7011.   7011.  12312.      0.      0.      0.]
 [    0.      0.      0.   3500.     -0.      0.]
 [    0.      0.      0.      0.   3500.      0.]
 [    0.     -0.     -0.      0.      0.  10021.]]

And finally, the angles 0, 60 and 120:

In [11]:
Cav=np.zeros((6,6))

count=0
for a in (0,60,120):
    Cav=Cav+C3Dtz(C,a)
    count=count+1
Cav=Cav/count
print(np.array2string(Cav, precision=0, suppress_small=True, separator='  ', floatmode='maxprec') )
[[35279.  15238.   7011.      0.      0.      0.]
 [15238.  35279.   7011.      0.      0.     -0.]
 [ 7011.   7011.  12312.      0.      0.     -0.]
 [    0.      0.      0.   3500.      0.      0.]
 [    0.      0.      0.      0.   3500.      0.]
 [    0.      0.      0.      0.      0.  10021.]]
Note: This case study is the background for an exercise on quazi-isotropic laminates. Therefore, no further comments.

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.