Composites Core Module (composites.core)#
Classes of the material (MatLamina), of the ply (Lamina)
and of the laminate (Laminate), of the lamination parameters
(LaminationParameters) and of their gradients (GradABD),
and functions that create a Laminate from lamination parameters or
from the angles of an N-double laminate. The functions of
composites.utils create these objects from the ply data.
- class composites.core.GradABD#
Container to store the gradients of the ABD matrices with respect to the lamination parameters
Created with all gradients equal to zero, which are updated by
calc_LP_grad(). The object can be pickled. The deprecated propertygradAtransijis an alias ofgradAtsij.- Attributes:
- gradAij, gradBij, gradDij, gradAtsijdouble[:, ::1]
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. Column 0 has the dimension of the respective stiffness divided by a length and the other columns the dimension of the stiffness. The transverse shear terms are the constant-strain (uncorrected)
Abar44,Abar45,Abar55, as given bylaminate_from_LaminationParameters(). The rows and columns correspond to:gradAij: h xiA1 xiA2 xiA3 xiA4 A11 A12 A16 A22 A26 A66 gradBij: h xiB1 xiB2 xiB3 xiB4 B11 B12 B16 B22 B26 B66 gradDij: h xiD1 xiD2 xiD3 xiD4 D11 D12 D16 D22 D26 D66 gradAtsij: h xiAts1 xiAts2 Abar44 Abar45 Abar55
Methods
calc_LP_grad(thickness, mat, lp)Gradients of the shell stiffnesses with respect to the thickness and lamination parameters
- calc_LP_grad(thickness, mat, lp)#
Gradients of the shell stiffnesses with respect to the thickness and lamination parameters
Updates
gradAij,gradBij,gradDijandgradAtsijwith the derivatives of the stiffnesses computed bylaminate_from_LaminationParameters()fromthickness, from the invariantsu1tou7ofmatand from the lamination parameters oflp; column 0 contains the derivatives with respect to the thickness. The entries[0, 2],[1, 1]and[2, 2]ofgradAtsij, which do not depend on the lamination parameters, are not updated. All six rows ofgradAij,gradBijandgradDijare updated, including row 5 (A66,B66,D66), whose derivatives with respect to \(\xi_{A3}\), \(\xi_{B3}\) and \(\xi_{D3}\) are \(-h u_3\), \(-h^2/4 \, u_3\) and \(-h^3/12 \, u_3\).- Parameters:
- thicknessfloat
The total thickness of the laminate, length
- mat
MatLaminaobject Material object
- lp
LaminationParametersobject The container class with all lamination parameters already defined
- Returns:
- None
The attributes of the object are updated.
Notes
The stiffnesses of
laminate_from_LaminationParameters()are \(A = h \, U \{1, \xi_A\}\), \(B = h^2/4 \, U \{0, \xi_B\}\), \(D = h^3/12 \, U \{1, \xi_D\}\) and \(\bar{A}_{ts} = h \, U_{ts} \{1, \xi_{A_{ts}}\}\), with \(U\) the rows of the in-plane terms ofMatLamina.get_invariant_matrix()and \(U_{ts}\) those of the transverse shear terms. At constant lamination parameters, \(\partial A/\partial h = U \{1, \xi_A\}\), \(\partial B/\partial h = h/2 \, U \{0, \xi_B\}\), \(\partial D/\partial h = h^2/4 \, U \{1, \xi_D\}\) and \(\partial \bar{A}_{ts}/\partial h = U_{ts} \{1, \xi_{A_{ts}}\}\), and at constant thickness the derivatives with respect to the lamination parameters are the columns of \(U\) multiplied by \(h\), \(h^2/4\) and \(h^3/12\), respectively, and those of \(U_{ts}\) by \(h\).
- class composites.core.Lamina#
Ply of a laminate
Created with all attributes equal to zero and
matlaminaequal toNone. Aftermatlamina,handthetadegare set,rebuild()computes the trigonometric terms of the ply angle and the ply stiffnessesq11Ltoq55Lin the laminate axes. Usually created bylaminated_plate().- Attributes:
- plyidint
Identificaiton of the composite lamina
- matlamina
MatLaminaobject A
MatLaminaobject- hfloat
Ply thickness, length
- thetadegfloat
Ply angle in degrees
- cost, sintfloat
Cosine and sine of the ply angle, dimensionless, computed by
rebuild()- cos2t, sin2t, cos4t, sin4tfloat
Cosine and sine of two and four times the ply angle, dimensionless, computed by
rebuild()- q11L, q12L, q16L, q22L, q26L, q66Lfloat
Plane-stress stiffnesses of the ply in the laminate axes, force per unit area, computed by
rebuild()- q44L, q45L, q55Lfloat
Transverse shear stiffnesses of the ply in the laminate axes, force per unit area, computed by
rebuild()
Methods
Return the constitutive matrix
Return displacement transformation matrix from laminate to lamina
Deprecated, use
get_transf_matrix_displ_to_lamina()insteadReturn stress transformation matrix from laminate to lamina
Return stress transformation matrix from lamina to laminate
rebuild()Update constitutive matrices
- get_constitutive_matrix()#
Return the constitutive matrix
Builds the symmetric matrix of the ply stiffnesses in the laminate axes computed by
rebuild(),[[q11L, q12L, q16L, 0, 0], [q12L, q22L, q26L, 0, 0], [q16L, q26L, q66L, 0, 0], [0, 0, 0, q44L, q45L], [0, 0, 0, q45L, q55L]].- Returns:
- Cdouble[:, ::1]
Memoryview of shape
(5, 5), force per unit area.
- get_transf_matrix_displ_to_lamina()#
Return displacement transformation matrix from laminate to lamina
Builds
[[cost, sint, 0], [-sint, cost, 0], [0, 0, 1]]from the terms computed byrebuild(), which maps the displacement components in the laminate axes to those in the material axes of the ply.- Returns:
- Tdouble[:, ::1]
Memoryview of shape
(3, 3), dimensionless.
Notes
With the ply angle \(\theta\) measured from the laminate \(x\) axis to the material direction 1, as in the stiffnesses of
rebuild(), the material direction 1 is \(\{\cos\theta, \sin\theta, 0\}\) in the laminate axes, such that \(\{u_1, u_2, u_3\}^T = T \{u_x, u_y, u_z\}^T\). The matrix is orthogonal, and its transpose maps the material components back to the laminate axes.
- get_transf_matrix_displ_to_laminate()#
Deprecated, use
get_transf_matrix_displ_to_lamina()insteadIssues a
DeprecationWarningand returns the matrix ofget_transf_matrix_displ_to_lamina(), which maps the displacements from the laminate axes to the material axes, contrary to what the old name says.- Returns:
- Tdouble[:, ::1]
Memoryview of shape
(3, 3), dimensionless.
- get_transf_matrix_stress_to_lamina()#
Return stress transformation matrix from laminate to lamina
Builds the matrix from the terms
cost,sintandsin2tcomputed byrebuild(), such that \(\{\sigma_{11}, \sigma_{22}, \sigma_{33}, \tau_{23}, \tau_{13}, \tau_{12}\}^T = T \{\sigma_{xx}, \sigma_{yy}, \sigma_{zz}, \tau_{yz}, \tau_{xz}, \tau_{xy}\}^T\), with the material axes 1, 2, 3 and the laminate axes \(x\), \(y\), \(z\).- Returns:
- Tdouble[:, ::1]
Memoryview of shape
(6, 6), dimensionless.
See also
Notes
With the stress components ordered as \(\{\sigma_{xx}, \sigma_{yy}, \sigma_{zz}, \tau_{yz}, \tau_{xz}, \tau_{xy}\}\), the order of
MatLamina.get_constitutive_matrix(), the matrix is the transformation of the stresses from the laminate axes to the material axes for a rotation by the ply angle \(\theta\) about \(z\), e.g. \(\sigma_{11} = \cos^2\theta \sigma_{xx} + \sin^2\theta \sigma_{yy} + \sin 2\theta \tau_{xy}\) [1]. Its inverse,get_transf_matrix_stress_to_laminate(), is the same matrix for \(-\theta\).References
[1]Reddy, J. N., Mechanics of Laminated Composite Plates and Shells, CRC Press, 2003. https://doi.org/10.1201/b12409
- get_transf_matrix_stress_to_laminate()#
Return stress transformation matrix from lamina to laminate
Builds the matrix from the terms
cost,sintandsin2tcomputed byrebuild(), with the opposite sign of all the terms insintandsin2twith respect toget_transf_matrix_stress_to_lamina(), such that \(\{\sigma_{xx}, \sigma_{yy}, \sigma_{zz}, \tau_{yz}, \tau_{xz}, \tau_{xy}\}^T = T \{\sigma_{11}, \sigma_{22}, \sigma_{33}, \tau_{23}, \tau_{13}, \tau_{12}\}^T\), with the material axes 1, 2, 3 and the laminate axes \(x\), \(y\), \(z\).- Returns:
- Tdouble[:, ::1]
Memoryview of shape
(6, 6), dimensionless.
See also
Notes
It is the inverse of
get_transf_matrix_stress_to_lamina(), i.e. the transformation of the stresses from the material axes to the laminate axes, obtained by replacing the ply angle \(\theta\) by \(-\theta\).
- rebuild()#
Update constitutive matrices
Computes
cost,sint,cos2t,sin2t,cos4tandsin4tfromthetadeg, and the ply stiffnessesq11Ltoq55Lin the laminate axes from the plane-stress stiffnesses ofmatlaminain the material axes, which are computed from itse1,e2,nu12,nu21,g12,g13andg23.Notes
The plane-stress reduced stiffnesses in the material axes are
\[Q_{11} = \frac{e_1}{1 - \nu_{12}\nu_{21}}, \quad Q_{12} = \frac{\nu_{12} e_2}{1 - \nu_{12}\nu_{21}}, \quad Q_{22} = \frac{e_2}{1 - \nu_{12}\nu_{21}}, \quad Q_{66} = g_{12}, \quad Q_{44} = g_{23}, \quad Q_{55} = g_{13}\]such that
e3,nu13andnu23are not used, and thermal expansion is not considered. With \(c = \cos\theta\) and \(s = \sin\theta\), \(\theta\) being the ply angle, the stiffnesses in the laminate axes are [1]:\[\begin{split}q_{11L} = Q_{11} c^4 + 2 (Q_{12} + 2 Q_{66}) s^2 c^2 + Q_{22} s^4 \\ q_{12L} = (Q_{11} + Q_{22} - 4 Q_{66}) s^2 c^2 + Q_{12} (s^4 + c^4) \\ q_{22L} = Q_{11} s^4 + 2 (Q_{12} + 2 Q_{66}) s^2 c^2 + Q_{22} c^4 \\ q_{16L} = (Q_{11} - Q_{12} - 2 Q_{66}) s c^3 + (Q_{12} - Q_{22} + 2 Q_{66}) s^3 c \\ q_{26L} = (Q_{11} - Q_{12} - 2 Q_{66}) s^3 c + (Q_{12} - Q_{22} + 2 Q_{66}) s c^3 \\ q_{66L} = (Q_{11} + Q_{22} - 2 Q_{12} - 2 Q_{66}) s^2 c^2 + Q_{66} (s^4 + c^4) \\ q_{44L} = Q_{44} c^2 + Q_{55} s^2, \quad q_{45L} = (Q_{55} - Q_{44}) s c, \quad q_{55L} = Q_{55} c^2 + Q_{44} s^2\end{split}\]References
[1]Reddy, J. N., Mechanics of Laminated Composite Plates and Shells, CRC Press, 2003. https://doi.org/10.1201/b12409
- class composites.core.Laminate#
Laminate, with its stiffnesses and mass integrals
Created with
offset = 0,plies = [],stack = [],shear_correction = 'rohwer',scf_k13 = scf_k23 = 5/6and all other attributes equal to zero. Afterplies, a list ofLaminaobjects from the bottom to the top face, andoffsetare set,calc_constitutive_matrix()computesh, the stiffnesses and the mass integrals, andcalc_equivalent_properties()the equivalent moduli. The stiffnesses are thickness integrals of the ply stiffnessesqijLofLamina, with \(z\) measured from the reference surface. Usually created bylaminated_plate(),isotropic_plate()orlaminate_from_LaminationParameters().The object can be pickled: the public attributes and the instance dictionary are saved, and the through-thickness transverse shear distribution used by
calc_transverse_shear_stress()is recomputed when needed.- Attributes:
- plieslist
List of plies
- stacklist
List of angles for each ply
- hfloat
Total thickness of the laminate, length
- offsetfloat
Offset at the normal direction, length
- e1, e2float
Equivalent laminate moduli in directions 1 and 2, force per unit area
- g12float
Equivalent laminate shear modulus in the 12 direction, force per unit area
- nu12, nu21float
Equivalent laminate Poisson ratios in the 12 and 21 directions, dimensionless
- A11, A12, A16, A22, A26, A66float
Membrane stiffnesses \(\int q_{ijL} dz\), force per unit length
- B11, B12, B16, B22, B26, B66float
Membrane-bending coupling stiffnesses \(\int q_{ijL} z dz\), force
- D11, D12, D16, D22, D26, D66float
Bending stiffnesses \(\int q_{ijL} z^2 dz\), force times length
- E11, E12, E16, E22, E26, E66float
Stiffnesses \(\int q_{ijL} z^3 dz\), force times length squared
- F11, F12, F16, F22, F26, F66float
Stiffnesses \(\int q_{ijL} z^4 dz\), force times length cubed
- H11, H12, H16, H22, H26, H66float
Stiffnesses \(\int q_{ijL} z^6 dz\), force times length to the fifth power
- D44, D45, D55float
Transverse shear stiffnesses \(\int q_{ijL} z^2 dz\), force times length, see
Dts- F44, F45, F55float
Transverse shear stiffnesses \(\int q_{ijL} z^4 dz\), force times length cubed, see
Fts- A44, A45, A55float
Transverse shear stiffnesses of the first-order shear deformation theory (FSDT), with the shear correction already applied according to
shear_correction. They are ready to be used in the element and no shear correction factor should be applied to them downstream. Seecalc_transverse_shear_stiffness(). Force per unit length.- Abar44, Abar45, Abar55float
Constant-strain (uncorrected) transverse shear stiffnesses \(\bar{A}_{ts} = \sum_k C_s^{(k)} h_k\). These are the terms to be used together with
DtsandFtsin the third-order shear deformation theory (TSDT). Force per unit length.- 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
nanwhen a ply has a singular \(C_s^{(k)}\). Force per unit length.- shear_correctionstr or None
Method used to obtain
A44,A45,A55from the ply data:'rohwer','vlachoutsis','whitney','chow','birman_bert','thickness_shear','constant'orNone, seecalc_transverse_shear_stiffness(). Default is'rohwer'.- scf_k13, scf_k23float
Reported shear correction ratios
A55/Abar55andA44/Abar44. They are informative only, the correction is already insideA44,A45,A55. Dimensionless.- intrhofloat
Integral \(\int_{-h/2+offset}^{+h/2+offset} \rho(z) dz\), used in equivalent single layer finite element mass matrices, mass per unit area
- intrhozfloat
Integral \(\int_{-h/2+offset}^{+h/2+offset} \rho(z)z dz\), used in equivalent single layer finite element mass matrices, mass per unit area times length
- intrhoz2float
Integral \(\int_{-h/2+offset}^{+h/2+offset} \rho(z)z^2 dz\), used in equivalent single layer finite element mass matrices, mass per unit area times length squared
- intrhoz3float
Integral \(\int_{-h/2+offset}^{+h/2+offset} \rho(z)z^3 dz\), used in the mass matrices of the third-order shear deformation theory (TSDT), mass per unit area times length cubed
- intrhoz4float
Integral \(\int_{-h/2+offset}^{+h/2+offset} \rho(z)z^4 dz\), used in the mass matrices of the TSDT, mass per unit area times length to the fourth power
- intrhoz6float
Integral \(\int_{-h/2+offset}^{+h/2+offset} \rho(z)z^6 dz\), used in the mass matrices of the TSDT, mass per unit area times length to the sixth power
Methods
calc_aposteriori_energy(grad_x, grad_y)Transverse shear strain energy of the recovered stresses
Calculate the laminate constitutive terms
calc_equilibrium_transverse_shear(grad_x, grad_y)Transverse shear stresses recovered from the actual strain gradients
Calculate the equivalent laminate properties
Calculate the lamination parameters.
calc_scf()Recompute the transverse shear stiffness and return the ratios
Update the transverse shear stiffnesses
A44,A45,A55calc_transverse_shear_stress(z, Qy, Qx)Transverse shear stresses at a given height
Make a balanced laminate
Make an orthotropic laminate
Make a laminated with smeared properties
Make a symmetric laminate
Notes
In the notation of Reddy [1], the stiffnesses relate the stress resultants to the generalized strains of the reference surface, \(\varepsilon^{(0)} = \{\varepsilon_{xx}^{(0)}, \varepsilon_{yy}^{(0)}, \gamma_{xy}^{(0)}\}\) and \(\varepsilon^{(1)} = \{\varepsilon_{xx}^{(1)}, \varepsilon_{yy}^{(1)}, \gamma_{xy}^{(1)}\}\), the in-plane strains being \(\varepsilon^{(0)} + z \varepsilon^{(1)}\). In the CLPT and in the FSDT:
\[\begin{split}\begin{Bmatrix} N \\ M \end{Bmatrix} = \begin{bmatrix} A & B \\ B & D \end{bmatrix} \begin{Bmatrix} \varepsilon^{(0)} \\ \varepsilon^{(1)} \end{Bmatrix}, \qquad \begin{Bmatrix} Q_y \\ Q_x \end{Bmatrix} = A_{ts} \begin{Bmatrix} \gamma_{yz} \\ \gamma_{xz} \end{Bmatrix}\end{split}\]with \(N = \{N_{xx}, N_{yy}, N_{xy}\}\) and \(M = \{M_{xx}, M_{yy}, M_{xy}\}\), the last relation of the FSDT only, where the constant transverse shear strains through the thickness require the shear correction contained in
A44,A45,A55. The TSDT uses as wellE,F,H,DtsandFts, with the uncorrectedAbar44,Abar45,Abar55, since the TSDT needs no shear correction. The stiffnesses are computed bycalc_constitutive_matrix(). Withoffsetdifferent than zero, the reference surface is not the mid-surface, andBis not zero even for an isotropic plate.References
[1]Reddy, J. N., Mechanics of Laminated Composite Plates and Shells, CRC Press, 2003. https://doi.org/10.1201/b12409
- A#
Membrane stiffness matrix
Built from the attributes
A11toA66; a new array is returned at each access, such that changing it does not change the attributes.- Returns:
- Andarray
Array of shape
(3, 3), force per unit length.
- ABD#
Stiffness matrix
[[A, B], [B, D]]Built from the attributes
A11toD66; a new array is returned at each access, such that changing it does not change the attributes.- Returns:
- ABDndarray
Array of shape
(6, 6), with the dimensions ofA,BandD.
- Abar_ts#
Constant-strain
[[Abar44, Abar45], [Abar45, Abar55]]Uncorrected transverse shear stiffness, to be used with
DtsandFtsin the third-order shear deformation theory (TSDT). A new array is returned at each access, such that changing it does not change the attributes.- Returns:
- Abar_tsndarray
Array of shape
(2, 2), force per unit length.
- Abarbar_ts#
Constant-stress
[[Abarbar44, Abarbar45], [Abarbar45, Abarbar55]]Built from the attributes
Abarbar44,Abarbar45,Abarbar55. A new array is returned at each access, such that changing it does not change the attributes.- Returns:
- Abarbar_tsndarray
Array of shape
(2, 2), force per unit length.
- Atrans#
Deprecated, use
AtsinsteadReturns the same corrected matrix as
Ats, issuing aDeprecationWarning.- Returns:
- Atransndarray
Array of shape
(2, 2), force per unit length.
- 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(). A new array is returned at each access, such that changing it does not change the attributes.- Returns:
- Atsndarray
Array of shape
(2, 2), force per unit length.
- B#
Membrane-bending coupling stiffness matrix
Built from the attributes
B11toB66; a new array is returned at each access, such that changing it does not change the attributes.- Returns:
- Bndarray
Array of shape
(3, 3), force.
- D#
Bending stiffness matrix
Built from the attributes
D11toD66; a new array is returned at each access, such that changing it does not change the attributes.- Returns:
- Dndarray
Array of shape
(3, 3), force times length.
- Dtrans#
Deprecated, use
DtsinsteadReturns the same matrix as
Dts, issuing aDeprecationWarning.- Returns:
- Dtransndarray
Array of shape
(2, 2), force times length.
- Dts#
TSDT transverse shear stiffness
[[D44, D45], [D45, D55]]Built from the attributes
D44,D45,D55. A new array is returned at each access, such that changing it does not change the attributes.- Returns:
- Dtsndarray
Array of shape
(2, 2), force times length.
- E#
Stiffness matrix of the third-order shear deformation theory
Built from the attributes
E11toE66; a new array is returned at each access, such that changing it does not change the attributes.- Returns:
- Endarray
Array of shape
(3, 3), force times length squared.
- F#
Stiffness matrix of the third-order shear deformation theory
Built from the attributes
F11toF66; a new array is returned at each access, such that changing it does not change the attributes.- Returns:
- Fndarray
Array of shape
(3, 3), force times length cubed.
- Ftrans#
Deprecated, use
FtsinsteadReturns the same matrix as
Fts, issuing aDeprecationWarning.- Returns:
- Ftransndarray
Array of shape
(2, 2), force times length cubed.
- Fts#
TSDT transverse shear stiffness
[[F44, F45], [F45, F55]]Built from the attributes
F44,F45,F55. A new array is returned at each access, such that changing it does not change the attributes.- Returns:
- Ftsndarray
Array of shape
(2, 2), force times length cubed.
- H#
Stiffness matrix of the third-order shear deformation theory
Built from the attributes
H11toH66; a new array is returned at each access, such that changing it does not change the attributes.- Returns:
- Hndarray
Array of shape
(3, 3), force times length to the fifth power.
- calc_aposteriori_energy(grad_x, grad_y)#
Transverse shear strain energy of the recovered stresses
With the stresses of
calc_equilibrium_transverse_shear()at the three Gauss-Legendre points of each ply, computes at each point the transverse shear strain energies per unit area of reference surface in the directions 13 and 23, and the resultants of the stresses, all integrated through the thickness with three Gauss-Legendre points per ply.- Parameters:
- grad_x, grad_yarray-like
- Returns:
- U13, U23, Qy, Qxnp.ndarray
The energies and the resultants \(\int \bar\tau dz\) of the recovered stresses, with shape
(npts,). Energy per unit area forU13andU23, force per unit length forQyandQx.
- Raises:
- ValueError
If a ply has a singular transverse shear constitutive matrix \(C_s^{(k)}\), e.g.
g13 = 0org23 = 0.
Notes
With the stresses of
calc_equilibrium_transverse_shear()and the strains \(\{\bar\gamma_{yz}, \bar\gamma_{xz}\} = (C_s^{(k)})^{-1} \{\bar\tau_{yz}, \bar\tau_{xz}\}\), the energies per unit area of reference surface of Noor and Peters (1989) [1], Eq. (7):\[\bar{U}_{13} = \int \frac{1}{2} C_{55} \bar\gamma_{xz}^2 dz \qquad \bar{U}_{23} = \int \frac{1}{2} C_{44} \bar\gamma_{yz}^2 dz\]integrated exactly with three Gauss-Legendre points per ply, since the recovered stresses are quadratic in \(z\) within each ply. The a posteriori factors follow by equating their integral over the domain with that of the FSDT, \(\frac{1}{2} Q_x^2/\bar{A}_{55}\) and \(\frac{1}{2} Q_y^2/\bar{A}_{44}\), i.e. Eqs. (8)-(9) of Noor and Peters (1989), with \(Q = k^0 \bar{A} \gamma^0\) the shear forces of the FSDT. The resultants are \(Q_y = \int \bar\tau_{yz} dz\) and \(Q_x = \int \bar\tau_{xz} dz\).
References
[1]Noor, A. K. and Peters, J. M., A posteriori estimates for the shear correction factors in multi-layered composite cylinders, Journal of Engineering Mechanics, 115, 1225-1244, 1989.
- calc_constitutive_matrix()#
Calculate the laminate constitutive terms
This is the commonly called
ABDmatrix withshape=(6, 6)when the classical laminated plate theory is used, or theABDmatrix when the first-order shear deformation theory is used, containing the transverse shear terms.The transverse shear stiffnesses
A44,A45,A55are calculated at the end bycalc_transverse_shear_stiffness(), with the shear correction selected byshear_correctionalready applied.The attributes
h,intrho,intrhoz,intrhoz2,intrhoz3,intrhoz4,intrhoz6,A11toH66,D44,D45,D55,F44,F45andF55are computed frompliesandoffset, with the ply stiffnesses of the last call toLamina.rebuild()and the densityrhoof the material of each ply.Notes
With the plies running from \(z_1 = -h/2 + offset\) to \(z_{N+1} = +h/2 + offset\), the stiffnesses of the CLPT, FSDT and TSDT in the notation of Reddy [1] and the mass integrals are, integrated exactly ply by ply:
\[\begin{split}(A_{ij}, B_{ij}, D_{ij}, E_{ij}, F_{ij}, H_{ij}) = \sum_k \int_{z_k}^{z_{k+1}} q_{ijL}^{(k)} (1, z, z^2, z^3, z^4, z^6) dz, \quad ij = 11, 12, 16, 22, 26, 66 \\ (D_{ij}, F_{ij}) = \sum_k \int_{z_k}^{z_{k+1}} q_{ijL}^{(k)} (z^2, z^4) dz, \quad ij = 44, 45, 55 \\ (intrho, intrhoz, intrhoz2, intrhoz3, intrhoz4, intrhoz6) = \sum_k \int_{z_k}^{z_{k+1}} \rho^{(k)} (1, z, z^2, z^3, z^4, z^6) dz\end{split}\]and
A44,A45,A55follow fromcalc_transverse_shear_stiffness().The mass integrals are the moments of the density through the thickness, \(I_n = \sum_k \int_{z_k}^{z_{k+1}} \rho^{(k)} z^n dz\), required by the kinetic energy \(T = \frac{1}{2} \int_V \rho (\dot{u}^2 + \dot{v}^2 + \dot{w}^2) dV\) of the displacement field of each theory. The in-plane displacements of the CLPT and of the FSDT contain the powers \(z^0\) and \(z\), requiring \(I_0\), \(I_1\), \(I_2\), while those of the TSDT [1] contain \(z^0\), \(z\) and \(z^3\), whose products give the powers \(z^0\) to \(z^4\) and \(z^6\), requiring \(I_0\), \(I_1\), \(I_2\), \(I_3\), \(I_4\), \(I_6\).
References
[1] (1,2)Reddy, J. N., Mechanics of Laminated Composite Plates and Shells, CRC Press, 2003. https://doi.org/10.1201/b12409
- calc_equilibrium_transverse_shear(grad_x, grad_y, z=None)#
Transverse shear stresses recovered from the actual strain gradients
Integrates through the thickness, from the bottom face, the equilibrium of the in-plane stresses of the plies given by the derivatives
grad_xandgrad_yof the generalized strains, e.g. those of an FSDT solution, atnptspoints, and returns the transverse shear stresses at the heightsz. The stresses vanish at the bottom face; at the top face they do not vanish in general.- Parameters:
- grad_x, grad_yarray-like, shape
(6,)or(npts, 6) Derivatives with respect to \(x\) and \(y\) of \(\{\varepsilon_{xx}^{(0)}, \varepsilon_{yy}^{(0)}, \gamma_{xy}^{(0)}, \varepsilon_{xx}^{(1)}, \varepsilon_{yy}^{(1)}, \gamma_{xy}^{(1)}\}\), at
nptspoints. The first three entries are per unit length and the last three per unit length squared.- zarray-like or None, optional
Heights from the reference surface. If
None, the three Gauss-Legendre points of each ply are used. DefaultNone. Length.
- grad_x, grad_yarray-like, shape
- Returns:
- z, tau_yz, tau_xznp.ndarray
The heights, with shape
(nz,), and the stresses, with shape(npts, nz). Withz=None,nzis three times the number of plies. Length forzand force per unit area for the stresses.
- Raises:
- ValueError
If a value of
zis outside the laminate.
See also
Notes
Integrates the three-dimensional equilibrium equations from the bottom face, where the tractions vanish, with the in-plane stresses of each ply \(\sigma^{(k)} = C^{(k)} (\varepsilon^{(0)} + z\varepsilon^{(1)})\):
\[\begin{split}\tau_{xz}(z) = -\int_{z_1}^{z} \left( c_1 \left[ \varepsilon^{(0)}_{,x} + \bar{z} \varepsilon^{(1)}_{,x} \right] + c_3 \left[ \varepsilon^{(0)}_{,y} + \bar{z} \varepsilon^{(1)}_{,y} \right] \right) d\bar{z} \\ \tau_{yz}(z) = -\int_{z_1}^{z} \left( c_2 \left[ \varepsilon^{(0)}_{,y} + \bar{z} \varepsilon^{(1)}_{,y} \right] + c_3 \left[ \varepsilon^{(0)}_{,x} + \bar{z} \varepsilon^{(1)}_{,x} \right] \right) d\bar{z}\end{split}\]where \(c_1\), \(c_2\) and \(c_3\) are the rows of \(C^{(k)}\) that give \(\sigma_{xx}\), \(\sigma_{yy}\) and \(\tau_{xy}\), respectively, and \(z_1\) is the bottom face. It uses the gradients of the generalized strains of the actual solution, as in the a posteriori approach of Noor and Peters (1989) [1], instead of the two cylindrical bending states of
calc_transverse_shear_stiffness(). The top face is traction free only if the gradients satisfy the in-plane equilibrium of the stress resultants. The integrals of each ply are computed exactly by_equilibrium_integrals(), with \(z\) measured from the mid-surface and the gradients \(\varepsilon^{(0)}\) shifted byoffsettimes \(\varepsilon^{(1)}\), which avoids the round-off of large values ofoffset.References
[1]Noor, A. K. and Peters, J. M., A posteriori estimates for the shear correction factors in multi-layered composite cylinders, Journal of Engineering Mechanics, 115, 1225-1244, 1989.
- calc_equivalent_properties()#
Calculate the equivalent laminate properties
The following attributes are updated:
e1,e2,g12,nu12,nu21They are computed from the inverse of the 6x6
ABDmatrix and fromh.Notes
With \(a = [[A, B], [B, D]]^{-1}\), whose upper-left 3x3 block is the membrane compliance of the laminate with zero moments and free curvatures:
\[e_1 = \frac{1}{h a_{11}}, \quad e_2 = \frac{1}{h a_{22}}, \quad g_{12} = \frac{1}{h a_{66}}, \quad \nu_{12} = -\frac{a_{12}}{a_{11}}, \quad \nu_{21} = -\frac{a_{12}}{a_{22}}\]where the index 6 is the third row and column of \(a\).
- calc_lamination_parameters()#
Calculate the lamination parameters.
The following attributes are calculated:
xiA,xiB,xiD,xiAtsThey are the attributes of the returned object, computed from the ply angles and from the ply heights measured from the reference surface, i.e. including
offset, divided by the total thickness. The object is not modified, except thatLamina.rebuild()is called for each ply.- Returns:
- lp
LaminationParameters New object with the lamination parameters, dimensionless.
- lp
- Raises:
- ValueError
If there are no plies.
Notes
With \(\bar{z} = z/h\), \(z\) measured from the reference surface, and \(\theta(\bar{z})\) the ply angle:
\[\begin{split}\{\xi_{A1}, \xi_{A2}, \xi_{A3}, \xi_{A4}\} = \int \{\cos 2\theta, \sin 2\theta, \cos 4\theta, \sin 4\theta\} d\bar{z} \\ \{\xi_{B1}, \xi_{B2}, \xi_{B3}, \xi_{B4}\} = 4 \int \{\cos 2\theta, \sin 2\theta, \cos 4\theta, \sin 4\theta\} \bar{z} d\bar{z} \\ \{\xi_{D1}, \xi_{D2}, \xi_{D3}, \xi_{D4}\} = 12 \int \{\cos 2\theta, \sin 2\theta, \cos 4\theta, \sin 4\theta\} \bar{z}^2 d\bar{z} \\ \{\xi_{A_{ts}1}, \xi_{A_{ts}2}\} = \int \{\cos 2\theta, \sin 2\theta\} d\bar{z}\end{split}\]integrated exactly ply by ply, such that
xiAts1 = xiA1andxiAts2 = xiA2. With these definitions, the stiffnesses of the laminate are linear in the lamination parameters, seelaminate_from_LaminationParameters().The \(\xi_{Ai}\) and \(\xi_{Di}\) are those of Krupa et al. [1], who integrate from \(z = -h/2\) to \(z = h/2\), i.e. with
offset = 0. The \(\xi_{Bi}\) and \(\xi_{A_{ts}i}\), not defined there, follow the same pattern, with the factor 4 of \(\xi_{Bi}\) corresponding to the factor \(h^2/4\) of \(B_{ij}\) inlaminate_from_LaminationParameters().References
[1]Krupa, E. P., Cooper, J. E., Pirrera, A. and Nangia, R., Improved aerostructural performance via aeroservoelastic tailoring of a composite wing, The Aeronautical Journal, 122 (1255), 1442-1474, 2018. https://doi.org/10.1017/aer.2018.66
- calc_scf()#
Recompute the transverse shear stiffness and return the ratios
Deprecated since version 0.9.1: Use
calc_transverse_shear_stiffness(), called automatically bycalc_constitutive_matrix(), and readscf_k13andscf_k23.The ratios are informative only, since the correction is already applied to
A44,A45,A55bycalc_transverse_shear_stiffness(). Ifshear_correctionisNone, it is set to'rohwer'before recomputing.- Returns:
- scf_k13, scf_k23tuple of float
The ratios
A55/Abar55andA44/Abar44, also stored in the attributesscf_k13andscf_k23.
- calc_transverse_shear_stiffness()#
Update the transverse shear stiffnesses
A44,A45,A55Called at the end of
calc_constitutive_matrix(), and computed once per laminate. The attributesA44,A45,A55are the transverse shear stiffnesses of the first-order shear deformation theory (FSDT) with the shear correction already applied, ready to be used in the element. No shear correction factor should be applied to them downstream.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. None of the methods depends on
offset.The method is selected by the attribute
shear_correction:'rohwer'(default): equilibrium approach, giving the full 2x2 matrix.'vlachoutsis': the scalar factorsk13,k23are applied to the constant-strain stiffness,A55 = k13*Abar55,A44 = k23*Abar44, andA45 = (k13 + k23)/2*Abar45.'whitney': the result is identical to'vlachoutsis'.'chow': for laminates symmetric about the mid-surface only, for which the result is identical to'vlachoutsis'.'birman_bert': average shear strain factors, applied as in'vlachoutsis'. It gives \(k = 1\) for a homogeneous plate.'thickness_shear': dynamic factors, applied as in'vlachoutsis'. It gives \(k = \pi^2/12\) for a homogeneous plate. The ply densities must be positive.'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,nanif a ply has a singular \(C_s^{(k)}\)), and the ratiosscf_k13 = A55/Abar55andscf_k23 = A44/Abar44, which are informative only. For'rohwer'the through-thickness distribution used bycalc_transverse_shear_stress()is also stored.Without plies,
A44,A45,A55,Abar44,Abar45,Abar55,Abarbar44,Abarbar45andAbarbar55are set to zero and nothing else is updated.- Raises:
- ValueError
If
shear_correctionis not recognized; if a ply has a singular transverse shear constitutive matrix \(C_s^{(k)}\), e.g.g13 = 0org23 = 0(all methods except'constant'andNone); if the ABD matrix of the laminate is singular ('rohwer'); if the laminate is not symmetric ('chow'); or if a ply has a non-positive density ('thickness_shear'). Also if the transverse shear compliance obtained with'rohwer'is singular, or if the sum ofq11L(direction 1) orq22L(direction 2) times the ply thicknesses is not positive ('vlachoutsis','whitney','chow','birman_bert').
Notes
All of the methods are evaluated with \(z\) measured from the mid-surface, which avoids the round-off of large values of
offset. The constant-strain stiffness \(\bar{A}_{ts} = \sum_k C_s^{(k)} h_k\) corresponds to transverse shear strains constant through the thickness, and the constant-stress stiffness \(\bar{\bar{A}}_{ts} = h^2 [\sum_k (C_s^{(k)})^{-1} h_k]^{-1}\) to the constant stresses \(\{\tau_{yz}, \tau_{xz}\} = \{Q_y, Q_x\}/h\), with the same complementary energy.'rohwer': equilibrium approach of Rohwer (1988) [1]. 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\), see_calc_transverse_shear_distribution(). 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 element axes, because the two cylindrical bending states are tied to the \(x\) and \(y\) axes. This is inherent to the method: for a \([0, 90]_s\) CFRP laminate, deviations up to about 7 % are observed at 45 degrees.'vlachoutsis': the scalar factors \(k_{13}\), \(k_{23}\) of Vlachoutsis (1992) [2] are applied to the constant-strain stiffness,A55 = k13*Abar55,A44 = k23*Abar44, and the ad-hocA45 = (k13 + k23)/2*Abar45, which cannot represent the coupling of angle-ply laminates withAbar45 = 0. The factors use \(C_{11}\) and \(C_{22}\) of each ply in laminate axes and the direction-wise neutral surfaces, being exact only for specially orthotropic plies. For the direction 1, with \(C_{11} = q_{11L}\) and \(C_{55} = q_{55L}\) of each ply:\[z_n = \frac{\int C_{11} z dz}{\int C_{11} dz}, \quad R = \int C_{11} (z - z_n)^2 dz, \quad g(z) = -\int_{z_1}^{z} C_{11} (\bar{z} - z_n) d\bar{z}, \quad k_{13} = \frac{R^2}{\bar{A}_{55} \int g^2/C_{55} dz}\]i.e. the energy of the transverse shear stress \(\tau_{xz} = Q_x g(z)/R\) of the one-dimensional equilibrium \(\tau_{xz,z} = -\sigma_{xx,x}\) is equated with that of the FSDT, \(Q_x^2/(k_{13} \bar{A}_{55})\). Analogously for \(k_{23}\) with \(C_{22} = q_{22L}\), \(C_{44} = q_{44L}\) and \(\bar{A}_{44}\). The integrals of \(g\) are evaluated with three Gauss-Legendre points per ply, which is exact, \(g^2\) being a polynomial of degree 4 within each ply.
'whitney': the scalar factors of Whitney (1973) [3], Eqs. (3)-(7), extending Chow (1971) [4] to unsymmetric orthotropic laminates in cylindrical bending. The derivative of the bending stress, Eq. (3), \(\sigma_{xx,x} = -C_{11}(B_{11} - A_{11}z) Q_x/(D_{11}A_{11} - B_{11}^2)\), vanishes at the neutral surface \(z_n = B_{11}/A_{11}\) and, since \(R = (D_{11}A_{11} - B_{11}^2)/A_{11}\), equals \(C_{11}(z - z_n) Q_x/R\). Integrated with the equilibrium \(\sigma_{xx,x} + \tau_{xz,z} = 0\), Eq. (4), it gives the \(\tau_{xz}\) of'vlachoutsis', Eq. (5), and the energy equivalence, Eqs. (6)-(7), gives the same \(k_{13}\). The result is identical to'vlachoutsis'.'chow': the scalar factors of Chow (1971) [4], Eqs. (11)-(12), with the transverse shear stress of a symmetric laminate obtained from the one-dimensional equilibrium \(\tau_{xz} = Q_x g(z)/D_{11}\), \(g(z) = -\int_{-h/2}^{z} C_{11} \bar{z} d\bar{z}\), and \(k_{13} = D_{11}^2 / (\bar{A}_{55} \int g^2/C_{55} dz)\), analogously for \(k_{23}\) with \(C_{22}\), \(D_{22}\) and \(C_{44}\). The coordinate is measured from the mid-surface and the laminate must be symmetric about it, see_check_symmetric(). For symmetric laminates the result is identical to'vlachoutsis', whose neutral surfaces then coincide with the mid-surface. The factors are applied as in'vlachoutsis'.'birman_bert': the average shear strain factors of Birman and Bert (2002) [5], Eq. (13) and Appendix B, obtained by equating the thickness integral of the transverse shear strain of the equilibrium distribution with that of the FSDT, \(k_{13} = R_1 h / (\bar{A}_{55} \int g_1/C_{55} dz)\), analogously for \(k_{23}\). The equilibrium distribution \(g_\alpha(z)\) and the bending stiffness \(R_\alpha\) about the direction-wise neutral surface are the same as in'vlachoutsis', which generalizes Eq. (13), derived for symmetric cross sections, to unsymmetric laminates. It gives \(k = 1\) for a homogeneous plate. The factors are applied as in'vlachoutsis'. Note that the value recommended by Birman and Bert (2002) for sandwich structures, \(K = 1\) applied to \(\bar{A}_{55} = \sum_k C_{55}^{(k)} h_k\) (their Eqs. A5-A7), isNone.'thickness_shear': dynamic factors of Yang, Norris and Stavsky (1966) [6], as described by Sun and Whitney (1973) [7], extending the criterion of Mindlin (1951) [8] to laminates, i.e. matching the frequency of the first thickness-shear mode of the FSDT, \(\omega^2 = k_{13} \bar{A}_{55} / \bar{I}_2\), with the exact frequency of the laminate, computed with a transfer matrix through the plies for the anti-plane motion \(u(z)\), with \(\rho^{(k)} \ddot{u} = (C_{55}^{(k)} u_{,z})_{,z}\), traction-free faces and continuity of \(u\) and \(\tau_{xz}\) at every interface, see_thickness_shear_frequency(). The rotatory inertia about the centre of mass, \(\bar{I}_2 = I_2 - I_1^2/I_0\), with \(I_n = \int \rho z^n dz\), makes the result independent ofoffset. Analogously for \(k_{23}\) with \(C_{44}\). The coupling \(C_{45}\) between the two directions is neglected in the eigenproblem, and the factors are applied as in'vlachoutsis'. It gives \(k = \pi^2/12\) for a homogeneous plate. The ply densities must be positive.'constant': \(k = 5/6\), the factor that'rohwer','vlachoutsis','whitney'and'chow'give for a homogeneous plate.
References
[1]Rohwer, K., Improved transverse shear stiffnesses for layered finite elements, DFVLR-FB 88-32, 1988.
[2]Vlachoutsis, S., Shear correction factors for plates and shells, International Journal for Numerical Methods in Engineering, 33, 1537-1552, 1992.
[3]Whitney, J. M., Shear correction factors for orthotropic laminates under static load, Journal of Applied Mechanics, 40, 302-304, 1973.
[4] (1,2)Chow, T. S., On the propagation of flexural waves in an orthotropic laminated plate and its response to an impulsive load, Journal of Composite Materials, 5, 306-319, 1971.
[5]Birman, V. and Bert, C. W., On the choice of shear correction factor in sandwich structures, Journal of Sandwich Structures and Materials, 4, 83-95, 2002.
[6]Yang, P. C., Norris, C. H. and Stavsky, Y., Elastic wave propagation in heterogeneous plates, International Journal of Solids and Structures, 2, 665-684, 1966.
[7]Sun, C. T. and Whitney, J. M., Theories for the dynamic response of laminated plates, AIAA Journal, 11, 178-183, 1973.
[8]Mindlin, R. D., Influence of rotatory inertia and shear on flexural motions of isotropic, elastic plates, Journal of Applied Mechanics, 18, 31-38, 1951.
- calc_transverse_shear_stress(z, Qy, Qx)#
Transverse shear stresses at a given height
Evaluates, for the transverse shear forces
QyandQx, the through-thickness distribution of the transverse shear stresses of the equilibrium approach used byshear_correction='rohwer', seecalc_transverse_shear_stiffness(), which is quadratic within each ply, vanishes at the bottom and top faces and is continuous at the ply interfaces, e.g. for failure criteria.The distribution only depends on the in-plane stiffnesses of the plies and is the same for every
shear_correction. It is computed once bycalc_transverse_shear_stiffness()whenshear_correctionis'rohwer', or on the first call otherwise, and it is reset bycalc_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
zis outside the laminate, or if the ABD matrix of the laminate is singular.
Notes
Evaluates the equilibrium distribution of Rohwer (1988) [1], see
_calc_transverse_shear_distribution():\[\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.
References
[1]Rohwer, K., Improved transverse shear stiffnesses for layered finite elements, DFVLR-FB 88-32, 1988.
- make_balanced()#
Make a balanced laminate
The attributes
A16,A26,Abar45andAbarbar45, andA45unlessshear_correction='rohwer', are set to zero to make a balanced laminate.Abarbar45is kept when it isnan, i.e. when a ply has a singular \(C_s^{(k)}\). The other attributes are not modified, among themB16,B26,D16,D26,E16,E26,F16,F26,H16,H26,D45andF45, which do not vanish in a balanced laminate in general, e.g.B16andB26of an antisymmetric \([+45/-45]\) laminate.- Raises:
- RuntimeError
If
offsetis not zero.
Notes
In a balanced laminate, for every ply at \(+\theta\) there is a ply at \(-\theta\) of the same material and thickness, anywhere in the stack. \(q_{16L}\), \(q_{26L}\) and \(q_{45L}\) are odd functions of the ply angle and the other \(q_{ijL}\) are even, see
Lamina.rebuild(). The contributions of such a pair of plies, of thickness \(t\) and with bottom faces at \(z_a\) and \(z_b\), to the integral of \(q_{16L} z^n\) add up to\[q_{16L}(\theta) \int_{z_a}^{z_a + t} z^n dz + q_{16L}(-\theta) \int_{z_b}^{z_b + t} z^n dz = q_{16L}(\theta) \left( \int_{z_a}^{z_a + t} z^n dz - \int_{z_b}^{z_b + t} z^n dz \right)\]which vanishes for any \(z_a\), \(z_b\) only for \(n = 0\), see
calc_constitutive_matrix(). Therefore, \(A_{16}\), \(A_{26}\) and \(\bar{A}_{45} = \sum_k q_{45L}^{(k)} h_k\) vanish in every balanced laminate, whereas the integrals with \(n \ge 1\), \(B_{16}\) to \(H_{26}\), \(D_{45}\) and \(F_{45}\), are proportional to \(z_a - z_b\) and depend on the positions of the plies. The determinant of \(C_s^{(k)}\) being even in \(\theta\), the off-diagonal term of \((C_s^{(k)})^{-1}\) is odd, its thickness integral vanishes and so does \(\bar{\bar{A}}_{45}\).A45is proportional toAbar45for everyshear_correctionother than'rohwer', seecalc_transverse_shear_stiffness(), and vanishes with it. With'rohwer',A45follows from the through-thickness distribution of the transverse shear stresses, which depends on the positions of the plies and on the whole ABD matrix, and does not vanish in general, e.g. for a \([+30/-30/0]_s\) laminate, even withg13 = g23, i.e. \(q_{45L} = 0\) in every ply.
- make_orthotropic()#
Make an orthotropic laminate
The attributes
A16,A26,B16,B26,D16,D26,E16,E26,F16,F26,H16,H26and the transverse shear couplingsA45,Abar45,Abarbar45,D45,F45are set to zero to make an orthotropic laminate.Abarbar45is kept when it isnan, i.e. when a ply has a singular \(C_s^{(k)}\), as inmake_balanced(). The other attributes are not modified.- Raises:
- RuntimeError
If
offsetis not zero.
Notes
These terms vanish in a laminate whose plies are all at 0 or 90 degrees, for which \(q_{16L} = q_{26L} = q_{45L} = 0\), see
Lamina.rebuild(). The terms \(ij = 16, 26\) of \(A_{ij}\) to \(H_{ij}\) and \(D_{45}\), \(F_{45}\), \(\bar{A}_{45}\) are thickness integrals of \(q_{16L}\), \(q_{26L}\) and \(q_{45L}\), seecalc_constitutive_matrix()andcalc_transverse_shear_stiffness(), and \(\bar{\bar{A}}_{45}\) vanishes with the diagonal \(C_s^{(k)}\) of every ply. With every ply diagonal and the ABD matrix decoupled between \(\{N_{xx}, N_{yy}, M_{xx}, M_{yy}\}\) and \(\{N_{xy}, M_{xy}\}\), the transverse shear distribution of'rohwer'is diagonal, andA45vanishes for everyshear_correction.
- make_smeared()#
Make a laminated with smeared properties
The \(B_{ij}\) terms of the constitutive matrix are set to zero.
The \(D_{ij}\) terms are calculated from the membrane terms \(A_{ij}\) according to \(D_{ij} = (h^2 A_{ij})/12\), where \(h\) is the laminate thickness.
- Raises:
- NotImplementedError
If
offsetis not zero.
Notes
\(D_{ij} = h^2 A_{ij}/12\) and \(B_{ij} = 0\) are the stiffnesses of a homogeneous plate with the in-plane stiffnesses \(A_{ij}/h\), i.e. of a laminate whose plies are smeared through the thickness, the limit of many repetitions of the stacking sequence.
- make_symmetric()#
Make a symmetric laminate
The \(B_{ij}\) terms of the constitutive matrix are set to zero.
The attributes
E11toE66of the TSDT are also set to zero. The other attributes are not modified.- Raises:
- RuntimeError
If
offsetis not zero.
Notes
In a laminate symmetric about its mid-surface the integrands of the odd powers of \(z\) are odd functions of \(z\), see
calc_constitutive_matrix(), such that \(B_{ij} = E_{ij} = 0\), \(ij = 11, 12, 16, 22, 26, 66\), the integrals of \(z\) and \(z^3\). The integrands of the even powers of \(z\), i.e. of \(A_{ij}\), \(D_{ij}\), \(F_{ij}\), \(H_{ij}\) and of the transverse shear terms \(D_{ij}\), \(F_{ij}\), \(ij = 44, 45, 55\), are even functions of \(z\), which the symmetry does not make zero.
- class composites.core.LaminationParameters#
Lamination parameters
Container of the 14 lamination parameters, all dimensionless and initialized to zero. It is returned by
Laminate.calc_lamination_parameters()and used bylaminate_from_LaminationParameters()andGradABD.calc_LP_grad(). The deprecated propertiesxiAtrans1andxiAtrans2are aliases ofxiAts1andxiAts2.- Attributes:
- xiA1, xiA2, xiA3, xiA4float
Lamination parameters \(\xi_{Ai}\) (in-plane), dimensionless
- xiB1, xiB2, xiB3, xiB4float
Lamination parameters \(\xi_{Bi}\) (in-plane coupling with bending), dimensionless
- xiD1, xiD2, xiD3, xiD4float
Lamination parameters \(\xi_{Di}\) (bending), dimensionless
- xiAts1, xiAts2float
Lamination parameters \(\xi_{{A_{ts}}i}\) (transverse shear), dimensionless
Notes
The lamination parameters are defined in
Laminate.calc_lamination_parameters(), and the stiffnesses that they give inlaminate_from_LaminationParameters().- xiAtrans1#
Deprecated, use
xiAts1insteadIssues a
DeprecationWarningand returnsxiAts1.- Returns:
- xiAts1float
Lamination parameter \(\xi_{A_{ts}1}\), dimensionless.
- xiAtrans2#
Deprecated, use
xiAts2insteadIssues a
DeprecationWarningand returnsxiAts2.- Returns:
- xiAts2float
Lamination parameter \(\xi_{A_{ts}2}\), dimensionless.
- class composites.core.MatLamina#
Orthotropic material lamina
Container of the elastic, thermal, density and strength properties of a material, created with all attributes equal to zero. After the elastic properties are set,
rebuild()computes the constitutive constantsq11toq66, the stiffness constantsc11toc66and the invariantsu1tou7, all with the dimension of force per unit area;trace_normalize_plane_stress()divides some of them by the trace, such that they become dimensionless. Usually created byread_laminaprop().- Attributes:
- e1float
Young Modulus in direction 1, force per unit area
- e2float
Young Modulus in direction 2, force per unit area
- e3float
Young Modulus in direction 3, force per unit area
- g12float
in-plane shear modulus, force per unit area
- g13float
transverse shear modulus for plane 1-Z, force per unit area
- g23float
transverse shear modulus for plane 2-Z, force per unit area
- nu12float
Poisson’s ratio 12, dimensionless
- nu13float
Poisson’s ratio 13, dimensionless
- nu23float
Poisson’s ratio 23, dimensionless
- nu21float
Poisson’s ratio 21: use formula nu12/e1 = nu21/e2, dimensionless
- nu31float
Poisson’s ratio 31: use formula nu31/e3 = nu13/e1, dimensionless
- nu32float
Poisson’s ratio 32: use formula nu23/e2 = nu32/e3, dimensionless
- rhofloat
especific mass (mass / volume)
- a1float
thermal expansion coeffiecient in direction 1, per unit temperature
- a2float
thermal expansion coeffiecient in direction 2, per unit temperature
- a3float
thermal expansion coeffiecient in direction 3, per unit temperature
- treffloat
reference temperature
- st1,st2float
allowable tensile stresses for directions 1 and 2, force per unit area
- sc1,sc2float
allowable compressive stresses for directions 1 and 2, force per unit area
- ss12float
allowable in-plane stress for shear, force per unit area
- q11float
lamina constitutive constant 11
- q12float
lamina constitutive constant 12
- q13float
lamina constitutive constant 13
- q21float
lamina constitutive constant 21
- q22float
lamina constitutive constant 22
- q23float
lamina constitutive constant 23
- q31float
lamina constitutive constant 31
- q32float
lamina constitutive constant 32
- q33float
lamina constitutive constant 33
- q44float
lamina constitutive constant 44
- q55float
lamina constitutive constant 55
- q66float
lamina constitutive constant 66
- c11, c12, c13, c22, c23, c33, c44, c55, c66float
lamina stiffness constants
- u1, u2, u3, u4, u5, u6, u7float
lamina material invariants
Methods
Return the constitutive matrix
Return the invariant matrix
rebuild()Update constitutive and invariant terms
Trace-normalize the lamina properties for plane stress
Notes
MatLaminarecomputes neither \(G\) nor \(E\):rebuild()uses the moduli and the Poisson’s ratios as they are set. For an isotropic material given aslaminaprop = (e, nu),read_laminaprop()setsg12 = g13 = g23 = e/(2*(1 + nu)), i.e. \(G = E/(2(1 + \nu))\); with 6 or 9 entries oflaminapropthe shear moduli are taken as given. Otherwise, the user must set the shear moduli consistently with \(E\) and \(\nu\).- get_constitutive_matrix()#
Return the constitutive matrix
Builds the symmetric matrix of the stiffness constants
c11toc66computed byrebuild(), with the rows and columns ordered as 11, 22, 33, 23, 13, 12 (c44 = g23,c55 = g13,c66 = g12).- Returns:
- Cdouble[:, ::1]
Memoryview of shape
(6, 6), force per unit area.
- get_invariant_matrix()#
Return the invariant matrix
Builds the matrix of the invariants
u1tou7computed byrebuild(). The rows correspond toq11,q22,q12,q66,q16,q26,q44,q45,q55and the columns to the factors of1and of the lamination parameters, in the same combinations used bylaminate_from_LaminationParameters().- Returns:
- Udouble[:, ::1]
Memoryview of shape
(9, 5), force per unit area.
Notes
The stiffnesses of a ply at the angle \(\theta\) in the laminate axes, see
Lamina.rebuild(), are linear in \(\cos 2\theta\), \(\sin 2\theta\), \(\cos 4\theta\) and \(\sin 4\theta\), with the invariants ofrebuild()as coefficients [1]:\[\{q_{11L}, q_{22L}, q_{12L}, q_{66L}, q_{16L}, q_{26L}, q_{44L}, q_{45L}, q_{55L}\}^T = U \{1, \cos 2\theta, \sin 2\theta, \cos 4\theta, \sin 4\theta\}^T\]which holds when
u1tou5are computed from the plane-stress reduced stiffnesses, i.e. withe3 = 0. Integrated through the thickness, the trigonometric terms give the lamination parameters, seelaminate_from_LaminationParameters().References
[1]Jones, R. M., Mechanics of Composite Materials, Second Edition, Taylor & Francis, Philadelphia, 1999.
- rebuild()#
Update constitutive and invariant terms
Computes, from the moduli
e1,e2,e3,g12,g13,g23and the Poisson’s ratiosnu12,nu21,nu13,nu31,nu23,nu32, the stiffness constantsc11toc66, the constitutive constantsq11toq66and the invariantsu1tou7, with the dimension of force per unit area.e1ande2must be non-zero.Notes
With \(\Delta = 1 - \nu_{12}\nu_{21} - \nu_{13}\nu_{31} - \nu_{23}\nu_{32} - \nu_{12}\nu_{23}\nu_{31} - \nu_{13}\nu_{21}\nu_{32}\), the constitutive constants are the stiffnesses of the orthotropic material in its principal axes [2]:
\[\begin{split}q_{11} = e_1 (1 - \nu_{23}\nu_{32})/\Delta, \quad q_{12} = e_1 (\nu_{21} + \nu_{23}\nu_{31})/\Delta, \quad q_{13} = e_1 (\nu_{31} + \nu_{21}\nu_{32})/\Delta \\ q_{21} = e_2 (\nu_{12} + \nu_{13}\nu_{32})/\Delta, \quad q_{22} = e_2 (1 - \nu_{13}\nu_{31})/\Delta, \quad q_{23} = e_2 (\nu_{32} + \nu_{12}\nu_{31})/\Delta \\ q_{31} = e_3 (\nu_{13} + \nu_{12}\nu_{23})/\Delta, \quad q_{32} = e_3 (\nu_{23} + \nu_{13}\nu_{21})/\Delta, \quad q_{33} = e_3 (1 - \nu_{12}\nu_{21})/\Delta \\ q_{44} = g_{23}, \quad q_{55} = g_{13}, \quad q_{66} = g_{12}\end{split}\]which are symmetric, \(q_{ij} = q_{ji}\), when the Poisson’s ratios satisfy the reciprocity \(\nu_{ij}/e_i = \nu_{ji}/e_j\), see
read_laminaprop(); the matrix of \(q_{ij}\), \(i, j = 1, 2, 3\), is then the inverse of the upper-left block of the compliance matrix given below. With \(e_3 = 0\), as given byread_laminaprop()for 2 or 6 entries, \(\nu_{31} = \nu_{32} = 0\) and \(q_{11}\), \(q_{12}\), \(q_{22}\) are the plane-stress reduced stiffnesses \(e_1/(1 - \nu_{12}\nu_{21})\), \(e_1 \nu_{21}/(1 - \nu_{12}\nu_{21})\) and \(e_2/(1 - \nu_{12}\nu_{21})\) used byLamina.rebuild().The stiffness constants are computed with \(\delta = (1 - \nu_{12}\nu_{21} - \nu_{23}\nu_{32} - \nu_{31}\nu_{13} - 2\nu_{21}\nu_{32}\nu_{13})/(e_1 e_2)\) [1]:
\[\begin{split}c_{11} = (1 - \nu_{23}\nu_{32})/(\delta e_2), \quad c_{12} = (\nu_{21} + \nu_{31}\nu_{23})/(\delta e_2), \quad c_{13} = (\nu_{31} + \nu_{21}\nu_{32})/(\delta e_2) \\ c_{22} = (1 - \nu_{13}\nu_{31})/(\delta e_1), \quad c_{23} = (\nu_{32} + \nu_{12}\nu_{31})/(\delta e_1), \quad c_{33} = e_3 (1 - \nu_{12}\nu_{21})/(\delta e_1 e_2) \\ c_{44} = g_{23}, \quad c_{55} = g_{13}, \quad c_{66} = g_{12}\end{split}\]With the reciprocity, \(\delta e_1 e_2 = \Delta\) and \(c_{ij} = q_{ij}\). The matrix of the stiffness constants, see
get_constitutive_matrix(), is then the inverse of the orthotropic compliance matrix, with \(S_{11} = 1/e_1\), \(S_{22} = 1/e_2\), \(S_{33} = 1/e_3\), \(S_{12} = -\nu_{12}/e_1\), \(S_{13} = -\nu_{13}/e_1\), \(S_{23} = -\nu_{23}/e_2\), \(S_{44} = 1/g_{23}\), \(S_{55} = 1/g_{13}\) and \(S_{66} = 1/g_{12}\) [1].The invariants \(u_1\) to \(u_5\) are those of Jones [3], and \(u_6\), \(u_7\) the transverse shear invariants of the ABAQUS manual [4]:
\[\begin{split}u_1 = (3 q_{11} + 3 q_{22} + 2 q_{12} + 4 q_{66})/8, \quad u_2 = (q_{11} - q_{22})/2 \\ u_3 = (q_{11} + q_{22} - 2 q_{12} - 4 q_{66})/8, \quad u_4 = (q_{11} + q_{22} + 6 q_{12} - 4 q_{66})/8 \\ u_5 = (u_1 - u_4)/2, \quad u_6 = (q_{44} + q_{55})/2, \quad u_7 = (q_{44} - q_{55})/2\end{split}\]They give the stiffnesses of a ply at any angle, see
get_invariant_matrix().The intended use is plane stress, with the default \(e_3 = 0\) of
read_laminaprop()for 2 or 6 entries: \(q_{11}\), \(q_{12}\), \(q_{22}\) are then the plane-stress reduced stiffnesses also used byLamina.rebuild(), and the invariants give the plane-stress stiffnesses \(q_{ijL}\) of the ply in the laminate axes. With \(e_3 \ne 0\), \(q_{11}\), \(q_{12}\), \(q_{22}\) are the three-dimensional stiffnesses \(c_{11}\), \(c_{12}\), \(c_{22}\), and the invariants give the components 11, 22, 12, 66, 16, 26, 44, 45 and 55 of the three-dimensional stiffness matrix ofget_constitutive_matrix()rotated by the ply angle about the 3 axis, which differ from the plane-stress \(q_{ijL}\) ofLamina.rebuild(). This is meant to compute three-dimensional properties, e.g. for continuum shell elements integrated with a user material (UMAT).References
[1] (1,2)Reddy, J. N., Mechanics of Laminated Composite Plates and Shells, CRC Press, 2003. https://doi.org/10.1201/b12409
[2]Gürdal, Z., Haftka, R. T. and Hajela, P., Design and Optimization of Laminated Composite Materials, Wiley-Interscience, 1999.
[3]Jones, R. M., Mechanics of Composite Materials, Second Edition, Taylor & Francis, Philadelphia, 1999.
[4]ABAQUS Example Problems Manual, Vol. 1, Example 1.2.2, Laminated composite shell: buckling of a cylindrical panel with a circular hole.
- trace_normalize_plane_stress()#
Trace-normalize the lamina properties for plane stress
Modify the original
MatLaminaobject with a trace-normalization: the constitutive constantsq11,q12,q22,q44,q55,q66and the invariantsu1tou7are divided by the tracetr = q11 + q22 + 2*q66, such that they become dimensionless trace-normalized values. These can be accessed using the same attributes. The other attributes are not modified.Notes
The trace is calculated according to Eq. 1 of Melo et al. [1], \(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; since the invariants are linear in the stiffnesses, they are divided by \(tr\) as well. The trace does not depend on the ply angle, since \(q_{11L} + q_{22L} + 2 q_{66L} = 2(u_1 + u_5)\), see
get_invariant_matrix().References
[1]Melo, J. D. D., Bi, J., and Tsai, S. W., A Novel Invariant-Based Design Approach to Carbon Fiber Reinforced Laminates, Composite Structures, 159, 44-52, 2017.
- composites.core.laminate_from_LaminationParameters(thickness, mat, lp)#
Return a
Laminateobject based in the thickness, material and lamination parametersIn a new
Laminateobject, the stiffnessesA11toD66andAbar44,Abar45,Abar55are computed fromthickness, from the invariantsu1tou7ofmatand from the lamination parameters oflp, with the combinations ofMatLamina.get_invariant_matrix(). No plies are created,offsetis zero, and the mass integralsintrho,intrhoz,intrhoz2,intrhoz3,intrhoz4,intrhoz6and the equivalent propertiese1,e2,g12,nu12,nu21are not computed, remaining zero. The stiffnessesE11toH66,D44,D45,D55,F44,F45andF55are also zero. The transverse shear stiffnessesA44,A45,A55are equal to the constant-strainAbar44,Abar45,Abar55,shear_correctionisNone,scf_k13 = scf_k23 = 1and the constant-stressAbarbar44,Abarbar45,Abarbar55arenan.- Parameters:
- thicknessfloat
The total thickness of the laminate, length
- mat
MatLaminaobject Material object
- lp
LaminationParametersobject The container class with all lamination parameters already defined
- Returns:
- lam
Laminate laminate with the constitutive matrices already calculated
- lam
Notes
The stiffnesses of a ply are linear in the trigonometric functions of its angle, with the invariants of
matas coefficients, seeMatLamina.get_invariant_matrix(), and the lamination parameters are their thickness integrals, seeLaminate.calc_lamination_parameters(). For a laminate of a single material, with \(h\) =thickness, \(\int dz = h \int d\bar{z}\), \(\int z dz = h^2/4 \cdot 4\int \bar{z} d\bar{z}\) and \(\int z^2 dz = h^3/12 \cdot 12 \int \bar{z}^2 d\bar{z}\) give:\[\begin{split}A_{11} = h (u_1 + u_2 \xi_{A1} + u_3 \xi_{A3}), \quad A_{12} = h (u_4 - u_3 \xi_{A3}), \quad A_{22} = h (u_1 - u_2 \xi_{A1} + u_3 \xi_{A3}) \\ A_{16} = h (u_2/2 \, \xi_{A2} + u_3 \xi_{A4}), \quad A_{26} = h (u_2/2 \, \xi_{A2} - u_3 \xi_{A4}), \quad A_{66} = h (u_5 - u_3 \xi_{A3}) \\ B_{11} = \frac{h^2}{4} (u_2 \xi_{B1} + u_3 \xi_{B3}), \quad B_{12} = -\frac{h^2}{4} u_3 \xi_{B3}, \quad B_{22} = \frac{h^2}{4} (-u_2 \xi_{B1} + u_3 \xi_{B3}) \\ B_{16} = \frac{h^2}{4} (u_2/2 \, \xi_{B2} + u_3 \xi_{B4}), \quad B_{26} = \frac{h^2}{4} (u_2/2 \, \xi_{B2} - u_3 \xi_{B4}), \quad B_{66} = -\frac{h^2}{4} u_3 \xi_{B3} \\ \bar{A}_{44} = h (u_6 + u_7 \xi_{A_{ts}1}), \quad \bar{A}_{45} = -h u_7 \xi_{A_{ts}2}, \quad \bar{A}_{55} = h (u_6 - u_7 \xi_{A_{ts}1})\end{split}\]and \(D_{ij}\) as \(A_{ij}\), with the factor \(h^3/12\) instead of \(h\) and \(\xi_{Di}\) instead of \(\xi_{Ai}\). Since the through-thickness distribution of the plies is not known from the lamination parameters, no shear correction can be computed, hence the uncorrected transverse shear stiffnesses.
- composites.core.laminate_from_lamination_parameters(thickness, matlamina, xiA1, xiA2, xiA3, xiA4, xiB1, xiB2, xiB3, xiB4, xiD1, xiD2, xiD3, xiD4, xiAts1=0.0, xiAts2=0.0, xiAtrans1=None, xiAtrans2=None)#
Return a
Laminateobject based in the thickness, material and lamination parametersThe 14 lamination parameters according to the first-order shear deformation theory are \(\xi_{A1} \cdots \xi_{A4}\), \(\xi_{B1} \cdots \xi_{B4}\), \(\xi_{D1} \cdots \xi_{D4}\), \(\xi_{A_{ts}1}\) and \(\xi_{A_{ts}2}\). They are stored in a new
LaminationParametersobject, passed tolaminate_from_LaminationParameters().- Parameters:
- thicknessfloat
The total thickness of the laminate, length
- matlamina
MatLaminaobject Material object
- xiA1, xiA2, xiA3, xiA4float
Lamination parameters \(\xi_{A1} \cdots \xi_{A4}\), dimensionless.
- xiB1, xiB2, xiB3, xiB4float
Lamination parameters \(\xi_{B1} \cdots \xi_{B4}\), dimensionless.
- xiD1, xiD2, xiD3, xiD4float
Lamination parameters \(\xi_{D1} \cdots \xi_{D4}\), dimensionless.
- xiAts1, xiAts2float, optional
Lamination parameters \(\xi_{A_{ts}1}\) and \(\xi_{A_{ts}2}\), dimensionless. Default
0.- xiAtrans1, xiAtrans2float, optional
Deprecated, use
xiAts1andxiAts2instead. DefaultNone; when notNone, the value replacesxiAts1orxiAts2and aDeprecationWarningis issued.
- Returns:
- lam
Laminate laminate with the constitutive matrices already calculated. See
laminate_from_LaminationParameters()for the transverse shear stiffnesses.
- lam
Notes
Note that \(\xi_{A_{ts}1}\) and \(\xi_{A_{ts}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}\), since they multiply the invariant \(u_7 = (q_{44} - q_{55})/2 = (g_{23} - g_{13})/2\), see
laminate_from_LaminationParameters().
- composites.core.make_balanced_LP(lp)#
Make balanced lamination parameters
The lamination parameters \(\xi_{A2}\), \(\xi_{A4}\) and \(\xi_{A_{ts}2}\) are set to null to make a balanced laminate. The other lamination parameters are not modified, among them \(\xi_{B2}\), \(\xi_{B4}\), \(\xi_{D2}\) and \(\xi_{D4}\), which do not vanish in a balanced laminate in general.
The object
lpis modified in place and returned.- Parameters:
- lp
LaminationParameters Lamination parameters, modified in place.
- lp
- Returns:
- lp
LaminationParameters The same object given as input.
- lp
See also
Notes
In a balanced laminate, with a ply at \(-\theta\) for every ply at \(+\theta\) of the same material and thickness, anywhere in the stack, the thickness integrals of the odd functions \(\sin 2\theta\) and \(\sin 4\theta\) vanish, see
Laminate.calc_lamination_parameters(), and so do \(A_{16}\), \(A_{26}\) and \(\bar{A}_{45}\), seeLaminate.make_balanced(). The integrals weighted by \(\bar{z}\) and \(\bar{z}^2\), \(\xi_{B2}\), \(\xi_{B4}\), \(\xi_{D2}\) and \(\xi_{D4}\), depend on the positions of the plies, e.g. \(\xi_{B2} \ne 0\) for an antisymmetric \([+45/-45]\) laminate.
- composites.core.make_orthotropic_LP(lp)#
Make orthotropic lamination parameters
The lamination parameters \(\xi_{A2}\), \(\xi_{A4}\), \(\xi_{B2}\), \(\xi_{B4}\), \(\xi_{D2}\), \(\xi_{D4}\) and \(\xi_{A_{ts}2}\) are set to null to make an orthotropic laminate.
The object
lpis modified in place and returned.- Parameters:
- lp
LaminationParameters Lamination parameters, modified in place.
- lp
- Returns:
- lp
LaminationParameters The same object given as input.
- lp
See also
Notes
The lamination parameters of the sine terms give the stiffnesses \(A_{16}\), \(A_{26}\), \(B_{16}\), \(B_{26}\), \(D_{16}\), \(D_{26}\) and \(\bar{A}_{45}\), see
laminate_from_LaminationParameters(), and they vanish when all plies are at 0 or 90 degrees, seeLaminate.make_orthotropic(). 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.
- composites.core.make_symmetric_LP(lp)#
Make symmetric lamination parameters
The lamination parameters \(\xi_{Bi}\) are set to null to make a symmetric laminate.
The object
lpis modified in place and returned.- Parameters:
- lp
LaminationParameters Lamination parameters, modified in place.
- lp
- Returns:
- lp
LaminationParameters The same object given as input.
- lp
See also
Notes
In a laminate symmetric about its mid-surface, the integrands of \(\xi_{Bi}\), linear in \(\bar{z}\), are odd functions of \(\bar{z}\), see
Laminate.calc_lamination_parameters(), such that \(\xi_{Bi} = 0\) and the coupling stiffnesses \(B_{ij}\) vanish.
- composites.core.n_double_laminate(thickness, n, angles_deg, matlamina)#
Create a N-double laminated plate using a faster code
This code is considerably faster than
composites.utils.n_double_laminate().In a new
Laminateobject, the stiffnessesA11toA66andD11toD66are computed fromthickness, from the trace and the trace-normalized invariants ofmatlaminaand from the firstnangles ofangles_deg. The objectmatlaminais modified in place byMatLamina.trace_normalize_plane_stress(). No plies are created,stackis empty, all the other stiffnesses are zero andLaminate.calc_equivalent_properties()is called.An N-double laminate consists of \([\pm\phi_1,\pm\phi_2, \cdots, \pm\phi_n]\).
- Parameters:
- thicknessfloat
Total plate thickness, length.
- nint
Number of angle pairs,m defines the “N” in “N-double”.
- angles_deg1-D array of float64
List of \(\phi_n\) of the N-double laminate. C-contiguous array of size at least
n, of which the firstnangles are used, in degrees.- matlaminaMatLamina
See
MatLaminafor details. Modified in place.
- Returns:
- lam
Laminate The N-double laminate.
- lam
Notes
With the principle of homogenization, at the limit where many plies are used we have that \(B=0\). Based on the double-double laminate as described by Shrivastava et al. [1]. The plies at \(\pm\phi_i\) have the same thickness, such that the stiffnesses are the averages of the ply stiffnesses of
MatLamina.get_invariant_matrix()over the \(2n\) angles, written with the trace \(tr\) and the trace-normalized invariants \(u_i^*\) ofMatLamina.trace_normalize_plane_stress()[2]:\[\begin{split}A_{11}^* = u_1^* + \frac{1}{n} \sum_{i=1}^{n} \left( u_2^* \cos 2\phi_i + u_3^* \cos 4\phi_i \right), \quad A_{22}^* = u_1^* + \frac{1}{n} \sum_{i=1}^{n} \left( -u_2^* \cos 2\phi_i + u_3^* \cos 4\phi_i \right) \\ A_{12}^* = u_4^* - \frac{1}{n} \sum_{i=1}^{n} u_3^* \cos 4\phi_i, \quad A_{66}^* = u_5^* - \frac{1}{n} \sum_{i=1}^{n} u_3^* \cos 4\phi_i, \quad A_{16}^* = A_{26}^* = 0 \\ A_{ij} = tr \, A_{ij}^* h, \qquad D_{ij} = tr \, A_{ij}^* h^3/12\end{split}\]where the bending stiffnesses are those of the homogenized laminate, see
Laminate.make_smeared().References
[1]Shrivastava, S., Sharma, N., Tsai, S. W., and Mohite, P. M., D and DD-Drop Layup Optimization of Aircraft Wing Panels under Multi-Load Case Design Environment, Composite Structures, 248, 112518, 2020.
[2]Melo, J. D. D., Bi, J., and Tsai, S. W., A Novel Invariant-Based Design Approach to Carbon Fiber Reinforced Laminates, Composite Structures, 159, 44-52, 2017.