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:
from compositelib import C3D, C3Dtz
Consider some orthotropic material with the engineering constants:
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:
C=C3D(m1)
import numpy as np
print(np.array2string(C, precision=0, suppress_small=True, separator=' ', floatmode='maxprec') )
What if we take the average of all transformed stiffness matrices obtained by rotation about the z-axis from 0 to 359 degrees?
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') )
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:
CavRandom=C3Dtz(Cav,12.34) # 12.34 represent a 'random' number here...
print(np.array2string(CavRandom, precision=0, suppress_small=True, separator=' ', floatmode='maxprec') )
Furthermore, we find that the following relation is true (why?):
\begin{equation} C_{66}= \frac{ (C_{11}-C_{12})}{2} \end{equation}print( (Cav[0,0]-Cav[0,1])/2 )
print( Cav[5,5] )
Try with angles from 0 to 360 in step of 10:
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') )
Step equal to 30?:
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') )
Just the angles 0, 45, 90 and 135:
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') )
And finally, the angles 0, 60 and 120:
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') )