This case study applies the principles from Elastic properties of woven plies and the case study On transverse isotropy.
Details are left for an exercise. Basic code without further description:
import numpy as np
Ef, vf = 70000.0, 0.22
Em, vm = 3000.0, 0.40
Gf=Ef/(2+2*vf)
Gm=Em/(2+2*vm)
Vf=0.15
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))
E3=E2
v13=v12
v23=0.45
G13=G12
G23=E2/(2+2*v23)
m_UD3 = {'E1':E1, 'E2':E2, 'E3':E3,
'v12':v12, 'v13':v13, 'v23':v23,
'G12':G12, 'G13':G13, 'G23':G23}
C0 =compositelib.C3D(m_UD3)
C60p=compositelib.C3Dtz(C0,60)
C60n=compositelib.C3Dtz(C0,-60)
Cav=(C0+C60p+C60n)/3.0
Sav=np.linalg.inv(Cav)
m_csm = {'E1': 1/Sav[0,0],
'E2': 1/Sav[1,1],
'E3': 1/Sav[2,2],
'G23': 1/Sav[3,3],
'G13': 1/Sav[4,4],
'G12': 1/Sav[5,5],
'v23': -Sav[1,2]*(1/Sav[1,1]),
'v13': -Sav[0,2]*(1/Sav[0,0]),
'v12': -Sav[0,1]*(1/Sav[0,0]) }
display(m_csm)