Shell property module (pyfe3d.shellprop)#

Highly based on the composites. module.

class pyfe3d.shellprop.GradABDE#

Container to store the gradients of the ABDE matrices with respect to the lamination parameters

Attributes:
gradAij, gradBij, gradDij, gradEijtuple of 2D np.array objects

The shapes of these gradient matrices are:

gradAij: (6, 5) gradBij: (6, 5) gradDij: (6, 5) gradEij: (3, 3)

They contain the gradients of each laminate stiffness with respect to the thickness and respective lamination parameters. The rows and columns correspond to:

Methods

calc_LP_grad(self, double thickness, ...)

Gradients of the shell stiffnesses with respect to the thickness and lamination parameters

calc_LP_grad(self, double thickness, MatLamina mat, LaminationParameters lp) void#

Gradients of the shell stiffnesses with respect to the thickness and lamination parameters

Parameters:
thicknessfloat

The total thickness of the laminate

matMatLamina object

Material object

lpLaminationParameters object

The container class with all lamination parameters already defined

Returns:
None

The attributes of the object are updated.

gradAij#

gradAij: ‘double[:, ::1]’

gradBij#

gradBij: ‘double[:, ::1]’

gradDij#

gradDij: ‘double[:, ::1]’

gradEij#

gradEij: ‘double[:, ::1]’

class pyfe3d.shellprop.Lamina#
Attributes:
plyidint

plyid: ‘int’

matlaminaMatLamina object

matlamina: pyfe3d.shellprop.MatLamina

hfloat

h: ‘double’

thetadegfloat

thetadeg: ‘double’

Methods

get_constitutive_matrix(self)

Return the constitutive matrix

get_transf_matrix_displ_to_laminate(self)

Return displacement transformation matrix from lamina to laminate

get_transf_matrix_stress_to_lamina(self)

Return stress transformation matrix from laminate to lamina

get_transf_matrix_stress_to_laminate(self)

Return stress transformation matrix from lamina to laminate

rebuild(self)

Update constitutive matrices

cos2t#

cos2t: ‘double’

cos4t#

cos4t: ‘double’

cost#

cost: ‘double’

get_constitutive_matrix(self) double[:, ::1]#

Return the constitutive matrix

get_transf_matrix_displ_to_laminate(self) double[:, ::1]#

Return displacement transformation matrix from lamina to laminate

get_transf_matrix_stress_to_lamina(self) double[:, ::1]#

Return stress transformation matrix from laminate to lamina

get_transf_matrix_stress_to_laminate(self) double[:, ::1]#

Return stress transformation matrix from lamina to laminate

h#

h: ‘double’

matlamina#

matlamina: pyfe3d.shellprop.MatLamina

plyid#

plyid: ‘int’

q11L#

q11L: ‘double’

q12L#

q12L: ‘double’

q16L#

q16L: ‘double’

q22L#

q22L: ‘double’

q26L#

q26L: ‘double’

q44L#

q44L: ‘double’

q45L#

q45L: ‘double’

q55L#

q55L: ‘double’

q66L#

q66L: ‘double’

rebuild(self) void#

Update constitutive matrices

Reference:

Reddy, J. N., Mechanics of Laminated Composite Plates and Shells - Theory and Analysys. Second Edition. CRC PRESS, 2004.

sin2t#

sin2t: ‘double’

sin4t#

sin4t: ‘double’

sint#

sint: ‘double’

thetadeg#

thetadeg: ‘double’

class pyfe3d.shellprop.LaminationParameters#

Lamination parameters

Attributes:
xiA1, xiA2, xiA3, xiA4float

Lamination parameters \(\xi_{Ai}\) (in-plane)

xiB1, xiB2, xiB3, xiB4float

Lamination parameters \(\xi_{Bi}\) (in-plane coupling with bending)

xiD1, xiD2, xiD3, xiD4float

Lamination parameters \(\xi_{Di}\) (bending)

xiE1, xiE2float

Lamination parameters \(\xi_{Ei}\) (transverse shear)

xiA1#

xiA1: ‘double’

xiA2#

xiA2: ‘double’

xiA3#

xiA3: ‘double’

xiA4#

xiA4: ‘double’

xiB1#

xiB1: ‘double’

xiB2#

xiB2: ‘double’

xiB3#

xiB3: ‘double’

xiB4#

xiB4: ‘double’

xiD1#

xiD1: ‘double’

xiD2#

xiD2: ‘double’

xiD3#

xiD3: ‘double’

xiD4#

xiD4: ‘double’

xiE1#

xiE1: ‘double’

xiE2#

xiE2: ‘double’

xiE3#

xiE3: ‘double’

xiE4#

xiE4: ‘double’

class pyfe3d.shellprop.MatLamina#

Orthotropic material lamina

Attributes:
e1float

e1: ‘double’

e2float

e2: ‘double’

g12float

g12: ‘double’

g13float

g13: ‘double’

g23float

g23: ‘double’

nu12

nu12: ‘double’

nu13

nu13: ‘double’

nu23

nu23: ‘double’

nu21

nu21: ‘double’

nu31

nu31: ‘double’

nu32

nu32: ‘double’

rho

rho: ‘double’

a1

a1: ‘double’

a2

a2: ‘double’

a3

a3: ‘double’

tref

tref: ‘double’

st1,st2

allowable tensile stresses for directions 1 and 2

sc1,sc2

allowable compressive stresses for directions 1 and 2

ss12

ss12: ‘double’

q11

q11: ‘double’

q12

q12: ‘double’

q13

q13: ‘double’

q21

q21: ‘double’

q22

q22: ‘double’

q23

q23: ‘double’

q31

q31: ‘double’

q32

q32: ‘double’

q33

q33: ‘double’

q44

q44: ‘double’

q55

q55: ‘double’

q66

q66: ‘double’

ci

lamina stiffness constants

ui

lamina material invariants

Methods

get_constitutive_matrix(self)

Return the constitutive matrix

get_invariant_matrix(self)

Return the invariant matrix

rebuild(self)

Update constitutive and invariant terms

trace_normalize_plane_stress(self)

Trace-normalize the lamina properties for plane stress

Notes

For isotropic materials when the user defines \(\nu\) and \(E\), \(G\) will be recaculated based on equation: \(G = E/(2 \times (1+\nu))\); in a lower priority if the user defines \(\nu\) and \(G\), \(E\) will be recaculated based on equation: \(E = 2 \times (1+\nu) \times G\).

a1#

a1: ‘double’

a2#

a2: ‘double’

a3#

a3: ‘double’

c11#

c11: ‘double’

c12#

c12: ‘double’

c13#

c13: ‘double’

c22#

c22: ‘double’

c23#

c23: ‘double’

c33#

c33: ‘double’

c44#

c44: ‘double’

c55#

c55: ‘double’

c66#

c66: ‘double’

e1#

e1: ‘double’

e2#

e2: ‘double’

e3#

e3: ‘double’

g12#

g12: ‘double’

g13#

g13: ‘double’

g23#

g23: ‘double’

get_constitutive_matrix(self) double[:, ::1]#

Return the constitutive matrix

get_invariant_matrix(self) double[:, ::1]#

Return the invariant matrix

nu12#

nu12: ‘double’

nu13#

nu13: ‘double’

nu21#

nu21: ‘double’

nu23#

nu23: ‘double’

nu31#

nu31: ‘double’

nu32#

nu32: ‘double’

q11#

q11: ‘double’

q12#

q12: ‘double’

q13#

q13: ‘double’

q21#

q21: ‘double’

q22#

q22: ‘double’

q23#

q23: ‘double’

q31#

q31: ‘double’

q32#

q32: ‘double’

q33#

q33: ‘double’

q44#

q44: ‘double’

q55#

q55: ‘double’

q66#

q66: ‘double’

rebuild(self) void#

Update constitutive and invariant terms

Reference:

Reddy, J. N., Mechanics of laminated composite plates and shells. Theory and analysis. Second Edition. CRC Press, 2004.

rho#

rho: ‘double’

sc1#

sc1: ‘double’

sc2#

sc2: ‘double’

ss12#

ss12: ‘double’

st1#

st1: ‘double’

st2#

st2: ‘double’

trace_normalize_plane_stress(self) void#

Trace-normalize the lamina properties for plane stress

Modify the original MatLamina object with a trace-normalization performed after calculating the trace according to Eq. 1 of reference:

Melo, J. D. D., Bi, J., and Tsai, S. W., 2017, “A Novel Invariant-Based Design Approach to Carbon Fiber Reinforced Laminates,” Compos. Struct., 159, pp. 44–52.

The trace calculated as \(tr = Q_{11} + Q_{22} + 2Q_{66}\). The universal in-plane stress stiffness components \(Q_{11},Q_{12},Q_{22},Q_{44},Q_{55},Q_{66}\) are divided by \(tr\), and the invariants \(U_1,U_2,U_3,U_4,U_5,U_6,U_7\) are calculated with the normalized stiffnesses, such they also become trace-normalized invariants. These can be accessed using the u1,u2,u3,u4,u5,u6,u7 attributes.

tref#

tref: ‘double’

u1#

u1: ‘double’

u2#

u2: ‘double’

u3#

u3: ‘double’

u4#

u4: ‘double’

u5#

u5: ‘double’

u6#

u6: ‘double’

u7#

u7: ‘double’

class pyfe3d.shellprop.ShellProp#
Attributes:
plieslist

plies: list

stacklist

stack: list

hfloat

h: ‘double’

offsetfloat

offset: ‘double’

e1, e2float

Equivalent laminate moduli in directions 1 and 2

g12float

g12: ‘double’

nu12, nu21float

Equivalent laminate Poisson ratios in the 12 and 21 directions

scf_k13, scf_k23float

Shear correction factor in the 13 and 23 directions

intrhofloat

intrho: ‘double’

intrhozfloat

intrhoz: ‘double’

intrhoz2float

intrhoz2: ‘double’

Methods

calc_constitutive_matrix(self)

Calculate the laminate constitutive terms

calc_equivalent_properties(self)

Calculate the equivalent laminate properties

calc_lamination_parameters(self)

Calculate the lamination parameters.

calc_scf(self)

Update shear correction factors of the ShellProp object

force_balanced(self)

Force a balanced laminate

force_orthotropic(self)

Force an orthotropic laminate

force_symmetric(self)

Force a symmetric laminate

A11#

A11: ‘double’

A12#

A12: ‘double’

A16#

A16: ‘double’

A22#

A22: ‘double’

A26#

A26: ‘double’

A66#

A66: ‘double’

B11#

B11: ‘double’

B12#

B12: ‘double’

B16#

B16: ‘double’

B22#

B22: ‘double’

B26#

B26: ‘double’

B66#

B66: ‘double’

D11#

D11: ‘double’

D12#

D12: ‘double’

D16#

D16: ‘double’

D22#

D22: ‘double’

D26#

D26: ‘double’

D66#

D66: ‘double’

E44#

E44: ‘double’

E45#

E45: ‘double’

E55#

E55: ‘double’

calc_constitutive_matrix(self) void#

Calculate the laminate constitutive terms

This is the commonly called ABD matrix with shape=(6, 6) when the classical laminated plate theory is used, or the ABDE matrix when the first-order shear deformation theory is used, containing the transverse shear terms.

calc_equivalent_properties(self) void#

Calculate the equivalent laminate properties

The following attributes are updated:

e1, e2, g12, `u12, nu21

calc_lamination_parameters(self) LaminationParameters#

Calculate the lamination parameters.

The following attributes are calculated:

xiA, xiB, xiD, xiE

calc_scf(self) void#

Update shear correction factors of the ShellProp object

Reference:

Vlachoutsis, S. “Shear correction factors for plates and shells”, Int. Journal for Numerical Methods in Engineering, Vol. 33, 1537-1552, 1992.

http://onlinelibrary.wiley.com/doi/10.1002/nme.1620330712/full

Using “one shear correction factor” (see reference), assuming:

  • constant G13, G23, E1, E2, nu12, nu21 within each ply

  • g1 calculated using z at the middle of each ply

  • zn1 = ShellProp offset attribute

Returns:
k13, k23tuple

Shear correction factors. Also updates attributes: scf_k13 and scf_k23.

e1#

e1: ‘double’

e2#

e2: ‘double’

force_balanced(self) void#

Force a balanced laminate

The attributes \(A_{16}\), \(A_{26}\), \(B_{16}\), \(B_{26}\) are set to zero to force a balanced laminate.

force_orthotropic(self) void#

Force an orthotropic laminate

The attributes \(A_{16}\), \(A_{26}\), \(B_{16}\), \(B_{26}\), \(D_{16}\), \(D_{26}\) are set to zero to force an orthotropic laminate.

force_symmetric(self) void#

Force a symmetric laminate

The \(B_{ij}\) terms of the constitutive matrix are set to zero.

g12#

g12: ‘double’

h#

h: ‘double’

intrho#

intrho: ‘double’

intrhoz#

intrhoz: ‘double’

intrhoz2#

intrhoz2: ‘double’

nu12#

nu12: ‘double’

nu21#

nu21: ‘double’

offset#

offset: ‘double’

plies#

plies: list

scf_k13#

scf_k13: ‘double’

scf_k23#

scf_k23: ‘double’

stack#

stack: list

pyfe3d.shellprop.force_balanced_LP(LaminationParameters lp) LaminationParameters#

Force balanced lamination parameters

The lamination parameters \(\xi_{A2}\) and \(\xi_{A4}\) are set to null to force a balanced laminate.

pyfe3d.shellprop.force_orthotropic_LP(LaminationParameters lp) LaminationParameters#

Force orthotropic lamination parameters

The lamination parameters \(\xi_{A2}\), \(\xi_{A4}\), \(\xi_{B2}\), \(\xi_{B4}\), \(\xi_{D2}\) and \(\xi_{D4}\) are set to null to force an orthotropic laminate. The \(\xi_{D2}\) and \(\xi_{D4}\) are related to the bend-twist coupling and become often very small for balanced laminates with a large amount of plies.

pyfe3d.shellprop.force_symmetric_LP(LaminationParameters lp) LaminationParameters#

Force symmetric lamination parameters

The lamination parameters \(\xi_{Bi}\) are set to null to force a symmetric laminate.

pyfe3d.shellprop.shellprop_from_LaminationParameters(double thickness, MatLamina mat, LaminationParameters lp) ShellProp#

Return a ShellProp object based in the thickness, material and lamination parameters

Parameters:
thicknessfloat

The total thickness of the laminate

matMatLamina object

Material object

lpLaminationParameters object

The container class with all lamination parameters already defined

Returns:
lamShellProp

laminate with the ABD and ABDE matrices already calculated

pyfe3d.shellprop.shellprop_from_lamination_parameters(double thickness, MatLamina matlamina, double xiA1, double xiA2, double xiA3, double xiA4, double xiB1, double xiB2, double xiB3, double xiB4, double xiD1, double xiD2, double xiD3, double xiD4, double xiE1=0, double xiE2=0) ShellProp#

Return a ShellProp object based in the thickness, material and lamination parameters

Note that \(\xi_{E1}\) and \(\xi_{E2}\) are optional and usually equal to zero, becoming important only when the transverse shear modulus is different in the two directions, i.e. when \(G_{13} \ne G{23}\).

Parameters:
thicknessfloat

The total thickness of the plate

matlaminaMatLamina object

Material object

xiAj, xiBj, xiDj, xiEjfloat

The 14 lamination parameters according to the first-order shear deformation theory: \(\xi_{A1} \cdots \xi_{A4}\), \(\xi_{B1} \cdots \xi_{B4}\), \(\xi_{D1} \cdots \xi_{D4}\), \(\xi_{E1}\) and \(\xi_{E2}\)

Returns:
lamShellProp

Shell property with the ABD and ABDE matrices already calculated