composites API (composites)#
The composites module includes functions used to calculate properties and
perform analysis on laminated composites and isotropic plates.
Classical, first- and third-order shear deformation theories are supported. For
classical plate theories or classical laminated plate theories (CLPT), and for
the first-order shear deformation theory (FSDT) the relevant matrices are the
A, B, D and Ats. For the third-order shear deformation theory (TSDT) the
relevant matrices are the A, B, D, E, F, H; and the Abar_ts, Dts and Fts.
The matrices Ats, Abar_ts, Dts and Fts are 2 by 2 matrices containing
transverse shear stiffnesses, ordered as [[44, 45], [45, 55]] with index 4
corresponding to yz and index 5 to xz. All these matrices are part of
the Laminate object.
The FSDT transverse shear stiffness Ats already contains the shear
correction, computed by default with the equilibrium approach of Rohwer
(1988), see Laminate.calc_transverse_shear_stiffness(), such that no
shear correction factor should be applied to it. The uncorrected
constant-strain stiffness, used in the TSDT, is Abar_ts. Other methods are
selected with the argument shear_correction of
laminated_plate() and isotropic_plate():
'rohwer'(default): Rohwer (1988), equilibrium of two cylindrical bending states, full 2x2 matrix'vlachoutsis': Vlachoutsis (1992), energy equivalence with direction-wise neutral surfaces'whitney': Whitney (1973), unsymmetric orthotropic laminates, identical to'vlachoutsis''chow': Chow (1971), symmetric laminates only'birman_bert': Birman and Bert (2002), equivalence of the average transverse shear strain'thickness_shear': Yang, Norris and Stavsky (1966), first thickness-shear frequency, requires positive ply densities'constant': 5/6None: no correction
Problem-dependent, a posteriori factors in the sense of Noor and Peters (1989)
are supported by Laminate.calc_equilibrium_transverse_shear() and
Laminate.calc_aposteriori_energy(), which recover the transverse shear
stresses and their energies from the strain gradients of an FSDT solution.
The implementation of the CLTP, FSDT and TSDT closely follows the notation adopted by:
Reddy J.N., Mechanics of laminated composite plates and shells, theory and
analysis. Second Edition, Boca Raton: CRC Press, 2004.
For isotropic plates, the Laminate object is also used for
convenience, and since offsetting the mid-surface is supported, there can be an
extension-bending coupling (B matrix) different than zero even for isotropic
plates.
The most convenient usage is probably with the
composites.utils.isotropic_plate() or the
composites.utils.laminated_plate() functions:
from composites import laminated_plate
laminaprop = (E11, E22, nu12, G12, G13, G23)
plyt = ply_thickness
stack = [0, 90, +45, -45]
plate = laminated_plate(stack, plyt=plyt, laminaprop=laminaprop)
and with the composites.utils.isotropic_plate() function:
from composites import isotropic_plate
plate = isotropic_plate(thickness=5., E=E, nu=nu)
Where the laminate stiffness matrix, the often called ABD matrix, with
shape=(6, 6), can be accessed using:
>>> plate.ABD
and when transverse shear stiffnesses are required, with shape=(2, 2):
>>> plate.Ats
with the shear correction already applied. The transverse shear stresses
through the thickness, for given shear forces Qy and Qx, are obtained
with:
>>> tau_yz, tau_xz = plate.calc_transverse_shear_stress(z, Qy, Qx)
Composites Core Module (composites.core)#
- class composites.core.GradABD#
Container to store the gradients of the ABD matrices 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 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
- Parameters:
- thicknessfloat
The total thickness of the laminate
- mat
MatLaminaobject Material object
- lp
LaminationParametersobject The container class with all lamination parameters already defined
- Returns:
- None
The attributes of the object are updated.
- gradAtransij#
Deprecated, use
gradAtsijinstead
- class composites.core.Lamina#
- Attributes:
Methods
Return the constitutive matrix
Return displacement transformation matrix from lamina to laminate
Return 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
- get_transf_matrix_displ_to_laminate()#
Return displacement transformation matrix from lamina to laminate
- get_transf_matrix_stress_to_lamina()#
Return stress transformation matrix from laminate to lamina
- get_transf_matrix_stress_to_laminate()#
Return stress transformation matrix from lamina to laminate
- rebuild()#
Update constitutive matrices
Reference:
Reddy, J. N., Mechanics of Laminated Composite Plates and Shells - Theory and Analysys. Second Edition. CRC PRESS, 2004.
- class composites.core.Laminate#
- Attributes:
- plieslist
List of plies
- stacklist
List of angles for each ply
- hfloat
Total thickness of the laminate
- offsetfloat
Offset at the normal direction
- e1, e2float
Equivalent laminate moduli in directions 1 and 2
- g12float
Equivalent laminate shear modulus in the 12 direction
- 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), 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().- 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), which needs no shear correction.- 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)}\).- 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.- intrhofloat
Integral \(\int_{-h/2+offset}^{+h/2+offset} \rho(z) dz\), used in equivalent single layer finite element mass matrices
- intrhozfloat
Integral \(\int_{-h/2+offset}^{+h/2+offset} \rho(z)z dz\), used in equivalent single layer finite element mass matrices
- intrhoz2float
Integral \(\int_{-h/2+offset}^{+h/2+offset} \rho(z)z^2 dz\), used in equivalent single layer finite element mass matrices
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
- Abar_ts#
Constant-strain
[[Abar44, Abar45], [Abar45, Abar55]]Uncorrected transverse shear stiffness, to be used with
DtsandFtsin the third-order shear deformation theory (TSDT).
- 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().
- Dts#
TSDT transverse shear stiffness
[[D44, D45], [D45, D55]]
- Fts#
TSDT transverse shear stiffness
[[F44, F45], [F45, F55]]
- calc_aposteriori_energy(grad_x, grad_y)#
Transverse shear strain energy of the recovered stresses
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), 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. 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.
References:
Noor, A. K. and Peters, J. M. “A posteriori estimates for the shear correction factors in multi-layered composite cylinders”, Journal of Engineering Mechanics, Vol. 115, 1225-1244, 1989.
- 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,).
- 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.
- calc_equilibrium_transverse_shear(grad_x, grad_y, z=None)#
Transverse shear stresses recovered from the actual strain gradients
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), 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.References:
Noor, A. K. and Peters, J. M. “A posteriori estimates for the shear correction factors in multi-layered composite cylinders”, Journal of Engineering Mechanics, Vol. 115, 1225-1244, 1989.
- 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.- zarray-like or None
Heights from the reference surface. If
None, the three Gauss-Legendre points of each ply are used.
- 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).
- calc_equivalent_properties()#
Calculate the equivalent laminate properties
The following attributes are updated:
e1,e2,g12,`u12,nu21
- calc_lamination_parameters()#
Calculate the lamination parameters.
The following attributes are calculated:
xiA,xiB,xiD,xiE
- 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, and all of them are evaluated with \(z\) measured from the mid-surface, which avoids the round-off of large values ofoffset.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 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) 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.'whitney': the scalar factors of Whitney (1973), Eqs. (3)-(7), extending Chow (1971) to unsymmetric orthotropic laminates in cylindrical bending, with \(\sigma_{xx} = -C_{11}(B_{11} - A_{11}z) Q_x/(D_{11}A_{11} - B_{11}^2)\), i.e. the neutral surface \(z_n = B_{11}/A_{11}\), and the same energy equivalence. The result is identical to'vlachoutsis'.'chow': the scalar factors of Chow (1971), 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. 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), 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), as described by Sun and Whitney (1973), extending the criterion of Mindlin (1951) 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. The rotatory inertia about the centre of mass, \(\bar{I}_2 = I_2 - I_1^2/I_0\), 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\), 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.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.
Whitney, J. M. “Shear correction factors for orthotropic laminates under static load”, Journal of Applied Mechanics, Vol. 40, 302-304, 1973.
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, Vol. 5, 306-319, 1971.
Birman, V. and Bert, C. W. “On the choice of shear correction factor in sandwich structures”, Journal of Sandwich Structures and Materials, Vol. 4, 83-95, 2002.
Yang, P. C., Norris, C. H. and Stavsky, Y. “Elastic wave propagation in heterogeneous plates”, International Journal of Solids and Structures, Vol. 2, 665-684, 1966.
Sun, C. T. and Whitney, J. M. “Theories for the dynamic response of laminated plates”, AIAA Journal, Vol. 11, 178-183, 1973.
Mindlin, R. D. “Influence of rotatory inertia and shear on flexural motions of isotropic, elastic plates”, Journal of Applied Mechanics, Vol. 18, 31-38, 1951.
- 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').
- calc_transverse_shear_stress(z, Qy, Qx)#
Transverse shear stresses at a given height
Evaluates the equilibrium distribution of Rohwer (1988):
\[\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 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.
- make_balanced()#
Make a balanced laminate
The attributes \(A_{16}\), \(A_{26}\), \(B_{16}\), \(B_{26}\) are set to zero to make a balanced laminate.
- make_orthotropic()#
Make an orthotropic laminate
The attributes \(A_{16}\), \(A_{26}\), \(B_{16}\), \(B_{26}\), \(D_{16}\), \(D_{26}\) are set to zero to make an orthotropic laminate.
- 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.
- make_symmetric()#
Make a symmetric laminate
The \(B_{ij}\) terms of the constitutive matrix are set to zero.
- class composites.core.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_{{A_{ts}}i}\) (transverse shear)
- xiAtrans1#
Deprecated, use
xiAts1instead
- xiAtrans2#
Deprecated, use
xiAts2instead
- class composites.core.MatLamina#
Orthotropic material lamina
- Attributes:
- e1float
Young Modulus in direction 1
- e2float
Young Modulus in direction 2
- g12float
in-plane shear modulus
- g13float
transverse shear modulus for plane 1-Z
- g23float
transverse shear modulus for plane 2-Z
- nu12
Poisson’s ratio 12
- nu13
Poisson’s ratio 13
- nu23
Poisson’s ratio 23
- nu21
Poisson’s ratio 21: use formula nu12/e1 = nu21/e2
- nu31
Poisson’s ratio 31: use formula nu31/e3 = nu13/e1
- nu32
Poisson’s ratio 32: use formula nu23/e2 = nu32/e3
- rho
especific mass (mass / volume)
- a1
thermal expansion coeffiecient in direction 1
- a2
thermal expansion coeffiecient in direction 2
- a3
thermal expansion coeffiecient in direction 3
- tref
reference temperature
- st1,st2
allowable tensile stresses for directions 1 and 2
- sc1,sc2
allowable compressive stresses for directions 1 and 2
- ss12
allowable in-plane stress for shear
- q11
lamina constitutive constant 11
- q12
lamina constitutive constant 12
- q13
lamina constitutive constant 13
- q21
lamina constitutive constant 21
- q22
lamina constitutive constant 22
- q23
lamina constitutive constant 23
- q31
lamina constitutive constant 31
- q32
lamina constitutive constant 32
- q33
lamina constitutive constant 33
- q44
lamina constitutive constant 44
- q55
lamina constitutive constant 55
- q66
lamina constitutive constant 66
- ci
lamina stiffness constants
- ui
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
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\).
- get_constitutive_matrix()#
Return the constitutive matrix
- get_invariant_matrix()#
Return the invariant matrix
- rebuild()#
Update constitutive and invariant terms
Reference:
Reddy, J. N., Mechanics of laminated composite plates and shells. Theory and analysis. Second Edition. CRC Press, 2004.
- trace_normalize_plane_stress()#
Trace-normalize the lamina properties for plane stress
Modify the original
MatLaminaobject 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,u7attributes.
- composites.core.laminate_from_LaminationParameters(thickness, mat, lp)#
Return a
Laminateobject based in the thickness, material and lamination parameters- Parameters:
- thicknessfloat
The total thickness of the laminate
- 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
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,A55are therefore equal to the constant-strainAbar44,Abar45,Abar55,shear_correctionisNone,scf_k13 = scf_k23 = 1and the constant-stressAbarbar44,Abarbar45,Abarbar55arenan.
- 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 parametersNote 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}\).
- Parameters:
- thicknessfloat
The total thickness of the laminate
- matlamina
MatLaminaobject 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_{A_{ts}1}\) and \(\xi_{A_{ts}2}\)
- xiAtrans1, xiAtrans2float, optional
Deprecated, use
xiAts1andxiAts2instead.
- Returns:
- lam
Laminate laminate with the constitutive matrices already calculated. See
laminate_from_LaminationParameters()for the transverse shear stiffnesses.
- lam
- composites.core.make_balanced_LP(lp)#
Make balanced lamination parameters
The lamination parameters \(\xi_{A2}\) and \(\xi_{A4}\) are set to null to make a balanced laminate.
- composites.core.make_orthotropic_LP(lp)#
Make orthotropic lamination parameters
The lamination parameters \(\xi_{A2}\), \(\xi_{A4}\), \(\xi_{B2}\), \(\xi_{B4}\), \(\xi_{D2}\) and \(\xi_{D4}\) are set to null to make 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.
- composites.core.make_symmetric_LP(lp)#
Make symmetric lamination parameters
The lamination parameters \(\xi_{Bi}\) are set to null to make a symmetric laminate.
- 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().An N-double laminate consists of \([\pm\phi_1,\pm\phi_2, \cdots, \pm\phi_n]\). 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, S., Sharma, N., Tsai, S. W., and Mohite, P. M., 2020, “D and DD-Drop Layup Optimization of Aircraft Wing Panels under Multi-Load Case Design Environment,” Compos. Struct., 248(January), p. 112518.
- Parameters:
- thicknessfloat
Total plate thickness.
- nint
Number of angle pairs,m defines the “N” in “N-double”.
- angles_degarray-like
List of \(\phi_n\) of the N-double laminate.
- matlaminaMatLamina
See
MatLaminafor details.
Composites Core Utils Module (composites.utils)#
- composites.utils.double_double_laminate(thickness, phideg, psideg, laminaprop=None, rho=0.0)#
Create a double-double laminate
A double-double (DD) laminate consists of \([\pm\phi,\pm\psi]\), with
phideg=\(\phi\), andpsideg=\(\psi\). With the principle of homogenization, at the limit where many plies are used we have that \(B=0\). Reference:Shrivastava, S., Sharma, N., Tsai, S. W., and Mohite, P. M., 2020, “D and DD-Drop Layup Optimization of Aircraft Wing Panels under Multi-Load Case Design Environment,” Compos. Struct., 248(January), p. 112518.
- Parameters:
- thicknessfloat
Total plate thickness.
- phidegfloat
Angle \(\psi\) of the DD laminate.
- psidegfloat
Angle \(\phi\) of the DD laminate.
- laminaproptuple
See
read_laminaprop()for details.- rhofloat, optional
Material density
- composites.utils.double_double_plate(thickness, phideg, psideg, laminaprop=None, rho=0.0)#
Create a double-double laminate
A double-double (DD) laminate consists of \([\pm\phi,\pm\psi]\), with
phideg=\(\phi\), andpsideg=\(\psi\). With the principle of homogenization, at the limit where many plies are used we have that \(B=0\). Reference:Shrivastava, S., Sharma, N., Tsai, S. W., and Mohite, P. M., 2020, “D and DD-Drop Layup Optimization of Aircraft Wing Panels under Multi-Load Case Design Environment,” Compos. Struct., 248(January), p. 112518.
- Parameters:
- thicknessfloat
Total plate thickness.
- phidegfloat
Angle \(\psi\) of the DD laminate.
- psidegfloat
Angle \(\phi\) of the DD laminate.
- laminaproptuple
See
read_laminaprop()for details.- rhofloat, optional
Material density
- composites.utils.isotropic_plate(thickness, E, nu, offset=0.0, calc_scf=None, rho=0.0, shear_correction='rohwer')#
Read data for an isotropic plate
Laminateobject is returned based on the inputs given.- Parameters:
- thicknessfloat
Plate thickness.
- Efloat
Young modulus.
- nufloat, optional
Poisson’s ratio.
- rhofloat, optional
Material density
- offsetfloat, optional
Offset along the normal axis about the mid-surface, which influences the extension-bending coupling (B matrix).
- calc_scfbool, optional
Deprecated, use
shear_correctioninstead. When given,Trueis mapped toshear_correction='rohwer'andFalsetoshear_correction=None, overridingshear_correction.- shear_correctionstr or None, optional
See
laminated_plate(). For an isotropic plate'rohwer','vlachoutsis','whitney','chow'and'constant'giveA44 = A55 = 5/6 G h,'birman_bert'givesG hand'thickness_shear'givespi^2/12 G h, the latter requiringrho > 0.
- composites.utils.laminated_plate(stack, plyt=None, laminaprop=None, rho=0.0, plyts=None, laminaprops=None, rhos=None, offset=0.0, calc_scf=None, shear_correction='rohwer')#
Read a laminate stacking sequence data.
Laminateobject is returned based on the inputs given.- Parameters:
- stacklist
Angles of the stacking sequence in degrees.
- plytfloat, optional
When all plies have the same thickness,
plytcan be supplied.- laminaproptuple, optional
When all plies have the same material properties,
laminapropcan be supplied.- rhofloat, optional
Uniform material density to be used for all plies.
- plytslist, optional
A list of floats with the thickness of each ply.
- laminapropslist, optional
A list of tuples with a laminaprop for each ply.
- rhoslist, optional
A list of floats with the material density of each ply.
- offsetfloat, optional
Offset along the normal axis about the mid-surface, which influences the laminate properties.
- calc_scfbool, optional
Deprecated, use
shear_correctioninstead. When given,Trueis mapped toshear_correction='rohwer'andFalsetoshear_correction=None, overridingshear_correction.- shear_correctionstr or None, optional
Method used to compute the transverse shear stiffnesses
A44,A45,A55, which are returned with the correction already applied:'rohwer'(default, equilibrium approach),'vlachoutsis','whitney'(same as'vlachoutsis'),'chow'(symmetric laminates),'birman_bert'(average shear strain),'thickness_shear'(dynamic, requiresrho),'constant'(5/6) orNone(no correction). SeeLaminate.calc_transverse_shear_stiffness().
Notes
plytorplytsmust be suppliedlaminaproporlaminapropsmust be suppliedFor orthotropic plies, the
laminapropshould be:laminaprop = (E11, E22, nu12, G12, G13, G23)
For isotropic plies, the
laminapropshould be:laminaprop = (E, nu)
- composites.utils.n_double_laminate(thickness, angles_deg, laminaprop=None, rho=0.0)#
Create a N-double laminate
This code is considerably slower than
composites.core.n_double_laminate().An N-double laminate consists of \([\pm\phi_1,\pm\phi_2, \cdots, \pm\phi_n]\). 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, S., Sharma, N., Tsai, S. W., and Mohite, P. M., 2020, “D and DD-Drop Layup Optimization of Aircraft Wing Panels under Multi-Load Case Design Environment,” Compos. Struct., 248(January), p. 112518.
- Parameters:
- thicknessfloat
Total plate thickness.
- angles_degfloat
List of \(\phi_n\) of the N-double laminate.
- laminaproptuple
See
read_laminaprop()for details.- rhofloat, optional
Material density
- composites.utils.n_double_plate(thickness, angles_deg, laminaprop=None, rho=0.0)#
Create a N-double laminate
This code is considerably slower than
composites.core.n_double_laminate().An N-double laminate consists of \([\pm\phi_1,\pm\phi_2, \cdots, \pm\phi_n]\). 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, S., Sharma, N., Tsai, S. W., and Mohite, P. M., 2020, “D and DD-Drop Layup Optimization of Aircraft Wing Panels under Multi-Load Case Design Environment,” Compos. Struct., 248(January), p. 112518.
- Parameters:
- thicknessfloat
Total plate thickness.
- angles_degfloat
List of \(\phi_n\) of the N-double laminate.
- laminaproptuple
See
read_laminaprop()for details.- rhofloat, optional
Material density
- composites.utils.read_laminaprop(laminaprop, rho=0)#
Returns a
MatLaminaobject based on an inputlaminaproptuple- Parameters:
- laminaproplist or tuple
For the most general case of tri-axial stress, use a tuple containing the folliwing entries:
laminaprop = (e1, e2, nu12, g12, g13, g23, e3, nu13, nu23)
For isotropic materials aiming calculations with tri-axial stresses, use:
g = e/(2*(1+nu)) laminaprop = (e, e, nu, g, g, g, e, nu, nu)
For othotropic materials with in-plane stresses the user can only supply:
laminaprop = (e1, e2, nu12, g12, g13, g23)
For isotropic materials with in-plane stresses the user can only supply:
laminaprop = (e, nu) # new
symbol
value
e1
Young Module in direction 1
e2
Young Module in direction 2
nu12
12 Poisson’s ratio
g12
12 Shear Modulus
g13
13 Shear Modulus
g23
13 Shear Modulus
e3
Young Module in direction 3
nu13
13 Poisson’s ratio
nu23
23 Poisson’s ratio
- rhofloat, optional
Material density
- Returns:
- matlamMatLamina
A
MatLaminaobject.
Kassapoglou’s methods (composites.kassapoglou)#
Methods based on Kassapoglou’s book.
Reference:
Kassapoglou. Design and Analysis of Composite Structures. 2nd Edition. John Wiley & Sons Ltd, 2013.
- composites.kassapoglou.calc_Nxx_crit(a, b, m, n, D11, D12, D22, D66)#
Calculate uniaxial compression buckling for a composite plate
The output of this function is the result of Eq. 6.6, section 6.2 page 129. If \(m\) or \(n\) is set to
None, the function searchers for the critical number of half-waves in the corresponding direction, up to 10 half-waves.Reference:
Kassapoglou. Design and Analysis of Composite Structures. 2nd Edition. John Wiley & Sons Ltd, 2013.
- Parameters:
- a, bfloat
Plate length and width.
- m, nint or None
Number of half-waves along the plate length and width, respectively.
- D11, D12, D22, D66float
Terms of the D matrix.
- Returns:
- Nxx_critfloat
Critical uniaxial compression buckling load.
- composites.kassapoglou.calc_Nxx_crit_combined_shear(k, a, b, D11, D12, D22, D66)#
Calculate combined uniaxial-shear buckling load for a composite plate
The output of this function is the result of Eq. 6.34, section 6.5 page 142. This function calculates the critical \(N_{xx}\) buckling load under the current level of shear load given by \(N_{xy} = k N_{xx}\).
Reference:
Kassapoglou. Design and Analysis of Composite Structures. 2nd Edition. John Wiley & Sons Ltd, 2013.
- Parameters:
- kfloat
Load ratio defined as \(k=N_{xy}/N_{xx}\), where \(N_{xy}\) is the current shear load, and \(N_{xx}\) the current compression load.
- a, bfloat
Plate length and width.
- D11, D12, D22, D66float
Terms of the D matrix.
- Returns:
- N0float
Critical \(N_{xx}\) buckling load under the current level of shear load given by \(N_{xy} = k N_{xx}\).
- composites.kassapoglou.calc_Nxx_crit_combined_shear_full(Nxy, a, b, D11, D12, D16, D22, D26, D66)#
Calculate combined uniaxial-shear buckling load for a composite plate
This solution does not ignore the D16 and D26 terms. Furthermore, this solution takes as input \(N_{xy}\) instead of the \(k=N_{xy}/N_{xx}\) originally used by Kassapoglou.
Based on section 6.5. This function calculates the critical \(N_{xx}\) by \(N_{xy}\).
Reference:
Kassapoglou. Design and Analysis of Composite Structures. 2nd Edition. John Wiley & Sons Ltd, 2013.
- Parameters:
- Nxyfloat
Shear load \(N_{xy}\).
- a, bfloat
Plate length and width.
- D11, D12, D16, D22, D26, D66float
All terms of the D matrix.
- Returns:
- Nxx_critfloat
Critical \(N_{xx}\) buckling load under the current level of shear load given by \(N_{xy}\).
- composites.kassapoglou.calc_Nxy_crit(a, D11, D12, D16, D22, D66, rtol=1e-05, atol=1e-06, max_iter=50)#
Calculate shear buckling for a composite plate
The output of this function is the result of Eq. 6.28, section 6.4 page 137. Variables \(AR\) and \(\alpha\) are solved using a Newton-Raphson scheme that finds the solution of Eqs. 6.29 and 6.30 simultaneously.
Reference:
Kassapoglou. Design and Analysis of Composite Structures. 2nd Edition. John Wiley & Sons Ltd, 2013.
- Parameters:
- afloat
Plate length.
- D11, D12, D16, D22, D66float
Terms of the D matrix.
- rtol, atolfloat
Relative and absolute tolerances used to solve Eq. 6.30.
- max_iterint
Maximum number of iterations used in the Newton-Raphson scheme.
- Returns:
- Nxy_critfloat
Critical shear buckling load.
- composites.kassapoglou.calc_beff(b, Px, Pcr, A11, A12, A22)#
Calculate the effective width of a plate
The output of this function is the result of Eq. 7.15, section 7.1 page 164. The effective width \(b_{eff}\) is defined as:
\(\int_y N_{xx} dy = 2{N_x}_{max} b_{eff}\)
Reference:
Kassapoglou. Design and Analysis of Composite Structures. 2nd Edition. John Wiley & Sons Ltd, 2013.
- Parameters:
- bfloat
Plate width.
- Pxfloat
Applied compressive force.
- Pcrfloat
Critical buckling force.
- A11, A12, A22: float
Terms of the A matrix.
- Returns:
- befffloat
Effective width of the plate.