Composites Core Utils Module (composites.utils)#
Functions that create a Laminate from the stacking sequence and the
ply data (laminated_plate()), for an isotropic plate
(isotropic_plate()) or for double-double and N-double laminates
(double_double_laminate(), n_double_laminate(), also available
as double_double_plate and n_double_plate), and a MatLamina
from a tuple of material properties (read_laminaprop()).
- 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\).In a new
Laminateobject, the stiffnessesA11toA66andD11toD66are computed fromthickness, from the trace and the trace-normalized invariants of the material given bylaminapropand from the two angles. No plies are created,stackis[phideg, psideg], all the other stiffnesses are zero andLaminate.calc_equivalent_properties()is called.- Parameters:
- thicknessfloat
Total plate thickness, length.
- phidegfloat
Angle \(\phi\) of the DD laminate, in degrees.
- psidegfloat
Angle \(\psi\) of the DD laminate, in degrees.
- laminaproptuple
See
read_laminaprop()for details. The defaultNoneis not accepted byread_laminaprop(), such that a value must be given.- rhofloat, optional
Material density, mass per unit volume. Default
0..
- Returns:
- lam
Laminate The double-double laminate.
- lam
See also
Notes
With the principle of homogenization, at the limit where many plies are used we have that \(B=0\), see Shrivastava et al. [1]. The four plies \(\pm\phi\), \(\pm\psi\) have the same thickness, such that the stiffnesses are the averages of the ply stiffnesses of
MatLamina.get_invariant_matrix()over the four angles, written with the trace \(tr\) and the trace-normalized invariants \(u_i^*\) ofMatLamina.trace_normalize_plane_stress()[2]. With \(\alpha = (\phi + \psi)/2\) and \(\beta = (\phi - \psi)/2\), the averages of \(\cos 2\theta\) and \(\cos 4\theta\) are \(\cos 2\alpha \cos 2\beta\) and \(\cos 4\alpha \cos 4\beta\), and those of \(\sin 2\theta\) and \(\sin 4\theta\) vanish:\[\begin{split}A_{11}^* = u_1^* + u_2^* \cos 2\alpha \cos 2\beta + u_3^* \cos 4\alpha \cos 4\beta, \quad A_{22}^* = u_1^* - u_2^* \cos 2\alpha \cos 2\beta + u_3^* \cos 4\alpha \cos 4\beta \\ A_{12}^* = u_4^* - u_3^* \cos 4\alpha \cos 4\beta, \quad A_{66}^* = u_5^* - u_3^* \cos 4\alpha \cos 4\beta, \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.
- 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\).In a new
Laminateobject, the stiffnessesA11toA66andD11toD66are computed fromthickness, from the trace and the trace-normalized invariants of the material given bylaminapropand from the two angles. No plies are created,stackis[phideg, psideg], all the other stiffnesses are zero andLaminate.calc_equivalent_properties()is called.- Parameters:
- thicknessfloat
Total plate thickness, length.
- phidegfloat
Angle \(\phi\) of the DD laminate, in degrees.
- psidegfloat
Angle \(\psi\) of the DD laminate, in degrees.
- laminaproptuple
See
read_laminaprop()for details. The defaultNoneis not accepted byread_laminaprop(), such that a value must be given.- rhofloat, optional
Material density, mass per unit volume. Default
0..
- Returns:
- lam
Laminate The double-double laminate.
- lam
See also
Notes
With the principle of homogenization, at the limit where many plies are used we have that \(B=0\), see Shrivastava et al. [1]. The four plies \(\pm\phi\), \(\pm\psi\) have the same thickness, such that the stiffnesses are the averages of the ply stiffnesses of
MatLamina.get_invariant_matrix()over the four angles, written with the trace \(tr\) and the trace-normalized invariants \(u_i^*\) ofMatLamina.trace_normalize_plane_stress()[2]. With \(\alpha = (\phi + \psi)/2\) and \(\beta = (\phi - \psi)/2\), the averages of \(\cos 2\theta\) and \(\cos 4\theta\) are \(\cos 2\alpha \cos 2\beta\) and \(\cos 4\alpha \cos 4\beta\), and those of \(\sin 2\theta\) and \(\sin 4\theta\) vanish:\[\begin{split}A_{11}^* = u_1^* + u_2^* \cos 2\alpha \cos 2\beta + u_3^* \cos 4\alpha \cos 4\beta, \quad A_{22}^* = u_1^* - u_2^* \cos 2\alpha \cos 2\beta + u_3^* \cos 4\alpha \cos 4\beta \\ A_{12}^* = u_4^* - u_3^* \cos 4\alpha \cos 4\beta, \quad A_{66}^* = u_5^* - u_3^* \cos 4\alpha \cos 4\beta, \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.
- 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.Calls
laminated_plate()with a single ply of angle0, thicknessthicknessandlaminaprop=(E, nu).- Parameters:
- thicknessfloat
Plate thickness, length.
- Efloat
Young modulus, force per unit area.
- nufloat
Poisson’s ratio, dimensionless.
- rhofloat, optional
Material density, mass per unit volume. Default
0..- offsetfloat, optional
Offset along the normal axis about the mid-surface, which influences the extension-bending coupling (B matrix). Length. Default
0..- calc_scfbool, optional
Deprecated, use
shear_correctioninstead. When given,Trueis mapped toshear_correction='rohwer'andFalsetoshear_correction=None, overridingshear_correction, and aDeprecationWarningis issued. DefaultNone.- 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. Default'rohwer'.
- Returns:
- lam
Laminate The plate, with its stiffnesses and equivalent properties computed.
- lam
See also
- 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.One
Laminais created for each entry ofstack, with its thickness, itsMatLaminagiven byread_laminaprop()with itslaminapropand density, andLamina.rebuild()called. ThenLaminate.calc_constitutive_matrix()andLaminate.calc_equivalent_properties()are called.- Parameters:
- stacklist
Angles of the stacking sequence in degrees, from the bottom to the top ply.
- plytfloat, optional
When all plies have the same thickness,
plytcan be supplied.plytorplytsmust be supplied. Length. DefaultNone.- laminaproptuple, optional
When all plies have the same material properties,
laminapropcan be supplied.laminaproporlaminapropsmust be supplied. For orthotropic plies, thelaminapropshould be:laminaprop = (E11, E22, nu12, G12, G13, G23)
For isotropic plies, the
laminapropshould be:laminaprop = (E, nu)
See
read_laminaprop(). DefaultNone.- rhofloat, optional
Uniform material density to be used for all plies, mass per unit volume. Default
0..- plytslist, optional
A list of floats with the thickness of each ply. When given,
plytis ignored. Length. DefaultNone.- laminapropslist, optional
A list of tuples with a laminaprop for each ply. When given,
laminapropis ignored. DefaultNone.- rhoslist, optional
A list of floats with the material density of each ply. When given,
rhois ignored. Mass per unit volume. DefaultNone.- offsetfloat, optional
Offset along the normal axis about the mid-surface, which influences the laminate properties. Length. Default
0..- calc_scfbool, optional
Deprecated, use
shear_correctioninstead. When given,Trueis mapped toshear_correction='rohwer'andFalsetoshear_correction=None, overridingshear_correction, and aDeprecationWarningis issued. DefaultNone.- 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().
- Returns:
- lam
Laminate The laminate, with its stiffnesses and equivalent properties computed.
- lam
- Raises:
- ValueError
If neither
plytnorplytsis supplied, or if neitherlaminapropnorlaminapropsis supplied.
- 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]\).
In a new
Laminateobject, the stiffnessesA11toA66andD11toD66are computed fromthickness, from the trace and the trace-normalized invariants of the material given bylaminapropand from the angles. No plies are created,stackisangles_deg, all the other stiffnesses are zero andLaminate.calc_equivalent_properties()is called.- Parameters:
- thicknessfloat
Total plate thickness, length.
- angles_deglist of float
List of \(\phi_n\) of the N-double laminate, in degrees.
- laminaproptuple
See
read_laminaprop()for details. The defaultNoneis not accepted byread_laminaprop(), such that a value must be given.- rhofloat, optional
Material density, mass per unit volume. Default
0..
- 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 stiffnesses are the same as those of
composites.core.n_double_laminate(), with \(n\) the number of angles ofangles_deg.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.
- 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]\).
In a new
Laminateobject, the stiffnessesA11toA66andD11toD66are computed fromthickness, from the trace and the trace-normalized invariants of the material given bylaminapropand from the angles. No plies are created,stackisangles_deg, all the other stiffnesses are zero andLaminate.calc_equivalent_properties()is called.- Parameters:
- thicknessfloat
Total plate thickness, length.
- angles_deglist of float
List of \(\phi_n\) of the N-double laminate, in degrees.
- laminaproptuple
See
read_laminaprop()for details. The defaultNoneis not accepted byread_laminaprop(), such that a value must be given.- rhofloat, optional
Material density, mass per unit volume. Default
0..
- 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 stiffnesses are the same as those of
composites.core.n_double_laminate(), with \(n\) the number of angles ofangles_deg.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.
- composites.utils.read_laminaprop(laminaprop, rho=0)#
Returns a
MatLaminaobject based on an inputlaminaproptupleThe entries of
laminapropandrhoare stored in a newMatLaminaobject, the Poisson’s ratiosnu21,nu31andnu32are computed fromnu12,nu13,nu23and the Young moduli, andMatLamina.rebuild()is called. With 2 entries,g12 = g13 = g23 = e/(2*(1+nu)); with 2 or 6 entries,e3,nu13andnu23are zero. Another number of entries fails anassertstatement.- 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
23 Shear Modulus
e3
Young Module in direction 3
nu13
13 Poisson’s ratio
nu23
23 Poisson’s ratio
The Young and shear moduli have the dimension of force per unit area, the Poisson’s ratios are dimensionless.
- rhofloat, optional
Material density, mass per unit volume. Default
0.
- Returns:
- matlamMatLamina
A
MatLaminaobject.
Notes
The Poisson’s ratios not given follow from the reciprocity relations of an orthotropic material, \(\nu_{ij}/E_i = \nu_{ji}/E_j\), which make its compliance matrix symmetric [1]:
\[\nu_{21} = \nu_{12} \frac{E_2}{E_1}, \quad \nu_{31} = \nu_{13} \frac{E_3}{E_1}, \quad \nu_{32} = \nu_{23} \frac{E_3}{E_2}\]and for an isotropic material \(G = E/(2(1 + \nu))\). With 2 or 6 entries,
e3 = 0makes the constitutive constants ofMatLamina.rebuild()the plane-stress reduced stiffnesses.References
[1]Reddy, J. N., Mechanics of Laminated Composite Plates and Shells, CRC Press, 2003. https://doi.org/10.1201/b12409