Shell property module (pyfe3d.shellprop)#

Highly based on the composites. module.

class pyfe3d.shellprop.GradABD#

Container to store the gradients of the ABD matrix and of the constant-strain transverse shear stiffnesses with respect to the lamination parameters

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

The shapes of these gradient matrices are:

gradAij: (6, 5) gradBij: (6, 5) gradDij: (6, 5) gradAtsij: (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]’

gradAtsij#

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

gradBij#

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

gradDij#

gradDij: ‘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)

xiAts1, xiAts2float

Lamination parameters \(\xi_{Ats,i}\) (transverse shear)

xiA1#

xiA1: ‘double’

xiA2#

xiA2: ‘double’

xiA3#

xiA3: ‘double’

xiA4#

xiA4: ‘double’

xiAts1#

xiAts1: ‘double’

xiAts2#

xiAts2: ‘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’

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

A44, A45, A55float

Transverse shear stiffnesses of the first-order shear deformation theory (FSDT) in the material coordinate system, with the shear correction already applied according to shear_correction. The elements use them directly, without any shear correction factor. See calc_transverse_shear_stiffness() and calc_Ats_element() for how they are brought to the element coordinate system.

Abar44, Abar45, Abar55float

Constant-strain (uncorrected) transverse shear stiffnesses \(\bar{A}_{ts} = \sum_k C_s^{(k)} h_k\).

Abarbar44, Abarbar45, Abarbar55float

Constant-stress transverse shear stiffnesses \(\bar{\bar{A}}_{ts} = h^2 [\sum_k (C_s^{(k)})^{-1} h_k]^{-1}\), for comparison only. Equal to nan when a ply has a singular \(C_s^{(k)}\).

shear_correctionstr or None

shear_correction: object

scf_k13, scf_k23float

Reported shear correction ratios A55/Abar55 and A44/Abar44. They are informative only, the correction is already inside A44, A45, A55.

intrhofloat

intrho: ‘double’

intrhozfloat

intrhoz: ‘double’

intrhoz2float

intrhoz2: ‘double’

Methods

calc_Ats_element(self, double thetadeg)

Transverse shear stiffness in an element coordinate system

calc_constitutive_element(self, double thetadeg)

Constitutive matrices in an element coordinate system

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_transverse_shear_stiffness(self)

Update the transverse shear stiffnesses A44, A45, A55

calc_transverse_shear_stress(self, double z, ...)

Transverse shear stresses at a given height

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’

A44#

A44: ‘double’

A45#

A45: ‘double’

A55#

A55: ‘double’

A66#

A66: ‘double’

Abar44#

Abar44: ‘double’

Abar45#

Abar45: ‘double’

Abar55#

Abar55: ‘double’

Abar_ts#

Constant-strain [[Abar44, Abar45], [Abar45, Abar55]]

Abarbar44#

Abarbar44: ‘double’

Abarbar45#

Abarbar45: ‘double’

Abarbar55#

Abarbar55: ‘double’

Abarbar_ts#

Constant-stress [[Abarbar44, Abarbar45], [Abarbar45, Abarbar55]]

Ats#

Transverse shear stiffness matrix [[A44, A45], [A45, A55]]

Index 4 corresponds to \(yz\) and index 5 to \(xz\), such that \(\{Q_y, Q_x\}^T = A_{ts} \{\gamma_{yz}, \gamma_{xz}\}^T\). The shear correction is already applied, see calc_transverse_shear_stiffness().

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’

calc_Ats_element(self, double thetadeg)#

Transverse shear stiffness in an element coordinate system

The element coordinate system is such that the material direction makes an angle \(\theta\) with the element \(x\) axis, measured towards the element \(y\) axis. This is the same rotation used by the shell elements, where \(m_{11} = \cos\theta\), \(m_{12} = -\sin\theta\), \(m_{21} = \sin\theta\) and \(m_{22} = \cos\theta\).

The transverse shear stiffness obtained with the equilibrium approach of Rohwer (1988) is not invariant to a rotation of the reference frame, because the two cylindrical bending states are tied to the \(x\) and \(y\) axes. Therefore, when shear_correction='rohwer' and the plies are available, the stiffness corresponds to the plies rotated to the element frame, i.e. all ply angles shifted by \(\theta\), such that the assumed static state and the element kinematics refer to the same pair of directions.

Re-evaluating the method of Rohwer for each element has a cost proportional to the number of plies. Instead, the compliance \(S = A_{ts}^{-1}\) in the element frame is represented exactly by its Fourier series:

\[S(\theta) = S_0 + \sum_{n=1}^{5} \left( S_{cn} \cos 2n\theta + S_{sn} \sin 2n\theta \right)\]

because the equilibrium distribution \(f^{(k)}(z)\) is a polynomial of degree 4 in \(\cos\theta\), \(\sin\theta\) and \((C_s^{(k)})^{-1}\) of degree 2, such that \(S\) is a trigonometric polynomial of degree 10 with a period of 180 degrees. The coefficients are calculated once per laminate by calc_transverse_shear_stiffness(), from 16 evaluations in rotated frames, and the cost per element becomes independent of the number of plies.

In all other cases, i.e. shear_correction 'constant', 'vlachoutsis' or None, or when no plies exist, e.g. for a property created from lamination parameters or with A44, A45, A55 given directly, the stiffness is rotated as a second-order tensor:

\[\begin{split}A_{ts}^e = T_s A_{ts} T_s^T \qquad T_s = \begin{bmatrix} \cos\theta & \sin\theta \\ -\sin\theta & \cos\theta \end{bmatrix}\end{split}\]

which is exact for the constant-strain stiffness.

Note

Changes to A44, A45, A55 made after calc_constitutive_matrix() are only used for elements with \(m_{12} = 0\) when the plies are available and shear_correction='rohwer', because the stiffness is otherwise obtained from the Fourier coefficients calculated from the plies.

Parameters:
thetadegfloat

Angle \(\theta\) in degrees.

Returns:
Atsnp.ndarray

Matrix [[A44, A45], [A45, A55]] in the element coordinate system.

calc_constitutive_element(self, double thetadeg)#

Constitutive matrices in an element coordinate system

The element coordinate system is such that the material direction makes an angle \(\theta\) with the element \(x\) axis, measured towards the element \(y\) axis, as used by the shell elements, with \(m_{11} = \cos\theta\), \(m_{12} = -\sin\theta\), \(m_{21} = \sin\theta\) and \(m_{22} = \cos\theta\).

Parameters:
thetadegfloat

Angle \(\theta\) in degrees.

Returns:
A, B, D, Atstuple of np.ndarray

The 3x3 matrices A, B, D and the 2x2 matrix Ats in the element coordinate system. See calc_Ats_element().

calc_constitutive_matrix(self) → void#

Calculate the laminate constitutive terms

This is the commonly called ABD matrix with shape=(6, 6). When the first-order shear deformation theory is used, the transverse shear stiffnesses A44, A45, A55 are also required, which are calculated at the end by calc_transverse_shear_stiffness(), with the shear correction selected by shear_correction already applied.

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, xiAts

calc_transverse_shear_stiffness(self) → void#

Update the transverse shear stiffnesses A44, A45, A55

Called at the end of calc_constitutive_matrix(). The attributes A44, A45, A55 are the transverse shear stiffnesses of the first-order shear deformation theory (FSDT) with the shear correction already applied, and no shear correction factor is applied to them by the elements.

Conventions: \(\{\tau_{yz}, \tau_{xz}\}^T\), \(\{Q_y, Q_x\}^T\), \(A_{ts} = [[A_{44}, A_{45}], [A_{45}, A_{55}]]\), index 4 corresponds to \(yz\) and index 5 to \(xz\). The coordinate \(z\) is measured from the reference surface, with the plies running from \(z_1 = -h/2 + offset\) to \(z_{N+1} = +h/2 + offset\), and \(C_s^{(k)} = [[q_{44L}, q_{45L}], [q_{45L}, q_{55L}]]\), which is in general a full matrix.

The method is selected by the attribute shear_correction:

  • 'rohwer' (default): equilibrium approach of Rohwer (1988). The transverse shear stresses are obtained from the equilibrium of two cylindrical bending states, with zero tractions at the bottom and top faces and continuity at every interface, \(\{\tau_{yz}, \tau_{xz}\}^T = f^{(k)}(z) \{Q_y, Q_x\}^T\). The 2x2 stiffness is obtained from the complementary energy:

    \[A_{ts} = \left[ \sum_k \int_{z_k}^{z_{k+1}} f^{(k)T} \left(C_s^{(k)}\right)^{-1} f^{(k)} dz \right]^{-1}\]

    The integrand is a polynomial of degree 4 in \(z\) within each ply, such that the 3-point Gauss-Legendre rule used per ply is exact. The method is valid for arbitrary anisotropic and unsymmetric laminates, and the result does not depend on offset. The result is not invariant to a rotation of the reference frame, because the two cylindrical bending states are tied to the \(x\) and \(y\) axes. For this reason, the shell elements use it evaluated in the element coordinate system, see calc_Ats_element().

  • 'vlachoutsis': the scalar factors \(k_{13}\), \(k_{23}\) of Vlachoutsis (1992) are applied to the constant-strain stiffness, A55 = k13*Abar55, A44 = k23*Abar44, and the ad-hoc A45 = (k13 + k23)/2*Abar45, which cannot represent the coupling of angle-ply laminates with Abar45 = 0. The factors use \(C_{11}\) and \(C_{22}\) of each ply and the direction-wise neutral surfaces, being exact only for specially orthotropic plies.

  • 'constant': \(k = 5/6\), i.e. A44 = 5/6*Abar44, A45 = 5/6*Abar45, A55 = 5/6*Abar55.

  • None: no correction, A44 = Abar44, A45 = Abar45, A55 = Abar55.

The following attributes are also updated: Abar44, Abar45, Abar55 (constant strain), Abarbar44, Abarbar45, Abarbar55 (constant stress, nan if a ply has a singular \(C_s^{(k)}\)), and the ratios scf_k13 = A55/Abar55 and scf_k23 = A44/Abar44, which are informative only.

References:

Rohwer, K. “Improved transverse shear stiffness for layered finite elements”, DFVLR-FB 88-32, 1988.

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

Raises:
ValueError

If shear_correction is not recognized; if a ply has a singular transverse shear constitutive matrix \(C_s^{(k)}\), e.g. g13 = 0 or g23 = 0 ('rohwer' and 'vlachoutsis'); or if the ABD matrix of the laminate is singular ('rohwer').

calc_transverse_shear_stress(self, double z, double Qy, double Qx) → tuple#

Transverse shear stresses at a given height

Evaluates the equilibrium distribution of Rohwer (1988), in the material coordinate system:

\[\begin{split}\begin{Bmatrix} \tau_{yz} \\ \tau_{xz} \end{Bmatrix} = f^{(k)}(z) \begin{Bmatrix} Q_y \\ Q_x \end{Bmatrix}\end{split}\]

where \(f^{(k)}(z)\) is quadratic within each ply, vanishes at the bottom and top faces and is continuous at the ply interfaces. This is the consistent way to recover \(\tau_{xz}\) and \(\tau_{yz}\), e.g. for failure criteria, since \(C_s \gamma\) is constant within each ply and non-zero at the free surfaces. For a homogeneous plate it gives the parabola \(\tau_{xz} = 3 Q_x/(2h) (1 - 4 \bar{z}^2/h^2)\), with \(\bar{z}\) measured from the mid-surface.

The distribution only depends on the in-plane stiffnesses of the plies and is the same for every shear_correction. It is computed by calc_transverse_shear_stiffness() when shear_correction is 'rohwer', or on the first call otherwise, and it is reset by calc_constitutive_matrix(), which must be called again if the plies are modified.

Parameters:
zfloat

Height measured from the reference surface, within \([-h/2 + offset, +h/2 + offset]\). At a ply interface both plies give the same result.

Qy, Qxfloat

Transverse shear forces per unit length, \(Q_y\) and \(Q_x\), e.g. {Qy, Qx} = Ats @ {gamma_yz, gamma_xz}.

Returns:
tau_yz, tau_xztuple of float

Transverse shear stresses.

Raises:
ValueError

If z is outside the laminate, if the laminate has no plies, or if the ABD matrix of the laminate is singular.

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’

shear_correction#

shear_correction: object

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 Ats matrices already calculated

Notes

Since the through-thickness distribution of the plies is not known from the lamination parameters, no shear correction can be computed. The transverse shear stiffnesses A44, A45, A55 are therefore equal to the constant-strain Abar44, Abar45, Abar55, shear_correction is None, scf_k13 = scf_k23 = 1 and the constant-stress Abarbar44, Abarbar45, Abarbar55 are nan. If a shear correction is desired, A44, A45, A55 can be modified directly, and the elements will rotate them as a tensor.

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 xiAts1=0, double xiAts2=0) → ShellProp#

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

Note that \(\xi_{Ats,1}\) and \(\xi_{Ats,2}\) 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, xiAtsjfloat

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_{Ats,1}\) and \(\xi_{Ats,2}\)

Returns:
lamShellProp

Shell property with the ABD and Ats matrices already calculated. See shellprop_from_LaminationParameters() for the transverse shear stiffnesses.