Unidirectional Lamina Micromechanics (structures/composites/unidirectional-lamina-micromechanics)
Use when the task is predicting the four lamina engineering constants,
E1, nu12, E2 and G12, of a unidirectional composite ply from the fiber
and matrix constituent properties and the fiber volume fraction, the
producer side of the lamina-constant chain that
structures/composites/laminate-stiffness takes as a given input at its
workflow step 1. This leaf implements the rule of mixtures for the
longitudinal modulus, major Poisson ratio and density, and the
Halpin-Tsai closed form for the transverse modulus and in-plane shear
modulus, with the Voigt-Reuss and Hashin-Shtrikman bound bands as the
verification envelope. Pure Python, stdlib only. It pairs with
structures/composites/laminate-stiffness for the downstream ply
stiffness and laminate A matrix, and with
structures/materials/material-selection for constituent property
context.
Domain quick reference
- Rule of mixtures (exact for the composite cylinder assemblage): E1 =
V_f E_f + V_m E_m and nu12 = V_f nu_f + V_m nu_m, with V_m = 1 - V_f.
The fiber axial modulus E_f and major Poisson ratio nu_f enter the
longitudinal arm directly.
- Matrix shear modulus (isotropic matrix): G_m = E_m / (2 (1 + nu_m)).
- Halpin-Tsai shared form: eta = (Mr - 1) / (Mr + xi) with Mr the
constituent property ratio; P / P_m = (1 + xi eta V_f) / (1 - eta V_f).
- Transverse modulus E2: the Halpin-Tsai closed form against the fiber
TRANSVERSE modulus ratio E_fT / E_m with the circular-fiber shape
factor xi_E2 = 2.0. A carbon fiber is transversely isotropic; using
the fiber axial modulus in this arm overpredicts E2 by roughly a
factor of two.
- In-plane shear modulus G12: the Halpin-Tsai closed form against G_f /
G_m with the circular-fiber shape factor xi_G12 = 1.0, which equals
exactly the composite-cylinder-assemblage longitudinal shear solution.
- Density: rho_c = V_f rho_f + V_m rho_m, when both constituent
densities are given.
- Voigt/Reuss band: E2_Voigt = V_f E_fT + V_m E_m (iso-strain upper
bound) and E2_Reuss = 1 / (V_f / E_fT + V_m / E_m) (iso-stress lower
bound); the same two forms with G_f and G_m give the G12 band.
- Hashin-Shtrikman G12 band (anti-plane, circular-cylinder problem): the
lower endpoint equals the xi_G12 = 1 Halpin-Tsai value exactly.
- Hashin-Shtrikman E2 band (in-plane, Hashin 1965 plane-strain bulk
modulus k* and transverse shear modulus m* bounds): converted through
the exact transverse-isotropy identity E2 = 4 k m E1 / (E1 (k + m) +
4 k m nu12^2) at the exact CCA E1 and nu12.
- Module constants XI_E2 = 2.0 and XI_G12 = 1.0 are the standard
circular-fiber Halpin-Tsai shape factors (Halpin and Tsai, AFML-TR-67-
423, 1969); the model is closed-form arithmetic in SI units (Pa,
kg/m^3) on the unidirectional lamina in its material axes.
Workflow
- Collect the fiber constituent properties (axial modulus E_f, major
Poisson ratio nu_f, transverse modulus E_fT, longitudinal shear
modulus G_f), the matrix constituent properties (modulus E_m,
Poisson ratio nu_m) and the fiber volume fraction V_f.
- Derive the matrix shear modulus with shear_modulus_isotropic(E_m,
nu_m).
- Predict the longitudinal modulus E1 and major Poisson ratio nu12 by
the rule of mixtures with e1_longitudinal and nu12_major.
- Predict the transverse modulus E2 with e2_halpin_tsai, using the
fiber transverse modulus E_fT and the xi_E2 = 2 shape factor, never
the fiber axial modulus.
- Predict the in-plane shear modulus G12 with g12_halpin_tsai, using
the fiber shear modulus G_f and the xi_G12 = 1 shape factor.
- Compute the density with rho_composite when both constituent
densities are given.
- Verify E2 against the Voigt-Reuss bound band (e2_voigt_upper,
e2_reuss_lower) and the tighter Hashin-Shtrikman bound band
(e2_hashin_shtrikman_bounds).
- Verify G12 against the Voigt-Reuss bound band (g12_voigt_upper,
g12_reuss_lower) and the Hashin-Shtrikman bound band
(g12_hashin_shtrikman_bounds), noting the xi_G12 = 1 identity with
the lower endpoint.
- Run the one-shot report unidirectional_lamina_constants for the full
engineering-constants and bound-band dict.
- Confirm the deterministic checks with the contract test
scripts/test_unidirectional_lamina_micromechanics.py.
Worked example
A T300 carbon / epoxy 5208-class unidirectional ply at V_f = 0.60.
Constituent inputs: E_f = 230.0 GPa, nu_f = 0.20, E_fT = 20.0 GPa, G_f =
27.0 GPa (fiber); E_m = 3.5 GPa, nu_m = 0.35 (epoxy matrix); rho_f =
1760.0 kg/m^3, rho_m = 1230.0 kg/m^3.
- Matrix shear modulus: G_m = 3.5 / (2 (1 + 0.35)) = 1.296296 GPa.
- Rule of mixtures: E1 = 0.60 * 230 + 0.40 * 3.5 = 139.400000 GPa;
nu12 = 0.60 * 0.20 + 0.40 * 0.35 = 0.260000.
- Halpin-Tsai E2: eta = (20 / 3.5 - 1) / (20 / 3.5 + 2) = 0.611111, and
E2 = 3.5 * (1 + 2 * 0.611111 * 0.60) / (1 - 0.611111 * 0.60) =
9.578947 GPa.
- Halpin-Tsai G12: G12 = 4.402037 GPa, exactly the composite-cylinder-
assemblage longitudinal shear solution.
- Density: rho = 0.60 * 1760 + 0.40 * 1230 = 1548.000000 kg/m^3.
- E2 band (GPa): Reuss 6.930693 < Hashin-Shtrikman 8.821709 < 9.578947
< Hashin-Shtrikman 10.939799 < Voigt 13.400000, with the magnitude
gate E1 in [135, 145] GPa, E2 in [8, 12] GPa and G12 in [4, 6] GPa
(Daniel and Ishai textbook T300/5208 values).
- G12 band (GPa): Reuss 3.023033 < 4.402037 = Hashin-Shtrikman lower
4.402037 < Hashin-Shtrikman upper 12.608295 < Voigt 16.718519, the
Halpin-Tsai prediction attaining the Hashin-Shtrikman lower endpoint
exactly.
- Degeneracies: at V_f = 0 the E2 band closes to E_m (3.500000 GPa)
exactly; at V_f = 1 it closes to 20.758123 GPa, 3.8 percent above
E_fT because of the cross-section idealization in the k* and m*
bounds, while the Halpin-Tsai E2 limit at V_f = 1 is exactly E_fT.
Verification
- Confirm e1_longitudinal(230e9, 3.5e9, 0.6) is within 1e-6 relative of
139.4e9 and nu12_major(0.2, 0.35, 0.6) is within 1e-9 of 0.26.
- Confirm e2_halpin_tsai(20e9, 3.5e9, 0.6) is within 1e-6 relative of
9578947368.421053 and g12_halpin_tsai(27e9, 1296296296.2962961, 0.6)
is within 1e-6 relative of 4402037250.138515.
- Confirm the nested-band ordering at V_f = 0.6: E2 Reuss < E2
Hashin-Shtrikman lower < E2 Halpin-Tsai < E2 Hashin-Shtrikman upper <
E2 Voigt, and the analogous G12 ordering with the Halpin-Tsai and
Hashin-Shtrikman lower endpoint equal.
- Confirm the G12 Halpin-Tsai and Hashin-Shtrikman lower-bound identity
holds within 1e-9 relative at V_f in {0.3, 0.5, 0.6, 0.7}.
- Confirm the V_f = 0 and V_f = 1 degeneracies and the E2-in-band sweep
over V_f in [0.3, 0.9].
- Confirm every non-positive or boolean modulus, density and shape
factor, every Poisson ratio outside [0, 0.5), every fiber volume
fraction outside [0, 1], and a fiber that is not the stiffer shear or
cross-section phase raises ValueError.
- Run the contract test offline: python3
scripts/test_unidirectional_lamina_micromechanics.py (41 tests,
deterministic).
Related leaves
- structures/composites/laminate-stiffness: consumes E1, E2, nu12 and
G12 as workflow step 1 inputs to build the ply stiffness, rotate it
and assemble the laminate A matrix; this leaf produces those four
constants, it never assembles stiffness matrices.
- structures/composites/failure-criteria: consumes lamina allowables
and strength values, not the elastic constants this leaf predicts.
- structures/composites/laminate-hygrothermal-response: owns the
moisture content, CTE and CME vein from ply-level properties; this
leaf stops at density.
- structures/materials/material-selection: representative constituent
property bands for reference, verified against MMPDS, AMS or CMH-17
before design use; this leaf never looks up or reproduces those
bands.
Pitfalls
- Using the fiber axial modulus E_f in the transverse Halpin-Tsai arm
instead of the fiber transverse modulus E_fT: a carbon fiber is
transversely isotropic, and this substitution overpredicts E2 by
roughly a factor of two, the classic bug class here.
- Reading the Voigt/Reuss band as the tight envelope: the
Hashin-Shtrikman band is always tighter, with the Reuss bound at or
below the Hashin-Shtrikman lower bound and the Voigt bound at or
above the Hashin-Shtrikman upper bound (6.930693 GPa Reuss against
8.821709 GPa Hashin-Shtrikman lower at the worked V_f = 0.6).
- Expecting the E2 Hashin-Shtrikman band to close exactly to E_fT at
V_f = 1: the in-plane cross-section idealization used to keep the
band closed-form gives 20.758123 GPa, 3.8 percent above the 20.0 GPa
E_fT value that the Halpin-Tsai estimator itself reaches exactly.
- Trusting the xi_E2 = 2 estimator below roughly V_f = 0.25: the fixed
semi-empirical shape factor can dip slightly under the variational
Hashin-Shtrikman lower bound there (Wall 1997); the verification
sweep in this leaf deliberately starts at V_f = 0.3.
- Passing engineering constants E1, E2, nu12, G12 into this leaf as
inputs: they are the OUTPUTS of the constituent-level prediction here,
never collected inputs; structures/composites/laminate-stiffness is
the leaf that takes them as given.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_unidirectional_lamina_micromechanics.py
The test covers the T300/5208 worked example (E1, nu12, E2, G12 and
density within tolerance of the real module outputs and inside the
magnitude gates), the matrix shear derivation, the nested Voigt-Reuss
and Hashin-Shtrikman band ordering for both E2 and G12 at the worked
volume fraction, the G12 Halpin-Tsai and Hashin-Shtrikman lower-bound
identity across volume fractions, the V_f = 0 and V_f = 1 degeneracies,
the E2-in-band sweep over V_f in [0.3, 0.9], the isotropic-fiber
collapse, the one-shot report keys and determinism, and ValueError
rejection of every non-physical or boolean input and of a fiber that is
not the stiffer shear or cross-section phase.
Compliance
- Standards referenced, not reproduced: CMH-17 (Composite Materials
Handbook, SAE International) frames the constituent and lamina
property data conventions this prediction feeds, reference-only per
standards-map.yaml; no CMH-17 table or design value is reproduced.
- compliance: STANDARDS-REF, gated: false.
1---2name: unidirectional-lamina-micromechanics3description: Use when you must predict the engineering constants of a unidirectional composite lamina from the fiber and matrix constituent properties and the fiber volume fraction: compute the longitudinal modulus E1 and the major Poisson ratio nu12 by the rule of mixtures, the transverse modulus E2 by the Halpin-Tsai closed form with the xi equal to 2 shape factor on the fiber transverse modulus, the in-plane shear modulus G12 by the Halpin-Tsai closed form with the xi equal to 1 shape factor on the fiber shear modulus, and the density by the rule of mixtures. Produces the lamina engineering constants in the material axes and the Voigt-Reuss and Hashin-Shtrikman bound bands on E2 and G12 as the verification envelope predictions fall inside. Constituent properties are inputs; no property tables are reproduced. Trigger: unidirectional lamina micromechanics, fiber volume fraction, rule of mixtures, halpin tsai transverse and shear moduli, hashin shtrikman bounds.4license: Apache-2.05---67# Unidirectional Lamina Micromechanics (structures/composites/unidirectional-lamina-micromechanics)89Use when the task is predicting the four lamina engineering constants,10E1, nu12, E2 and G12, of a unidirectional composite ply from the fiber11and matrix constituent properties and the fiber volume fraction, the12producer side of the lamina-constant chain that13structures/composites/laminate-stiffness takes as a given input at its14workflow step 1. This leaf implements the rule of mixtures for the15longitudinal modulus, major Poisson ratio and density, and the16Halpin-Tsai closed form for the transverse modulus and in-plane shear17modulus, with the Voigt-Reuss and Hashin-Shtrikman bound bands as the18verification envelope. Pure Python, stdlib only. It pairs with19structures/composites/laminate-stiffness for the downstream ply20stiffness and laminate A matrix, and with21structures/materials/material-selection for constituent property22context.2324## Domain quick reference2526- Rule of mixtures (exact for the composite cylinder assemblage): E1 =27 V_f E_f + V_m E_m and nu12 = V_f nu_f + V_m nu_m, with V_m = 1 - V_f.28 The fiber axial modulus E_f and major Poisson ratio nu_f enter the29 longitudinal arm directly.30- Matrix shear modulus (isotropic matrix): G_m = E_m / (2 (1 + nu_m)).31- Halpin-Tsai shared form: eta = (Mr - 1) / (Mr + xi) with Mr the32 constituent property ratio; P / P_m = (1 + xi eta V_f) / (1 - eta V_f).33- Transverse modulus E2: the Halpin-Tsai closed form against the fiber34 TRANSVERSE modulus ratio E_fT / E_m with the circular-fiber shape35 factor xi_E2 = 2.0. A carbon fiber is transversely isotropic; using36 the fiber axial modulus in this arm overpredicts E2 by roughly a37 factor of two.38- In-plane shear modulus G12: the Halpin-Tsai closed form against G_f /39 G_m with the circular-fiber shape factor xi_G12 = 1.0, which equals40 exactly the composite-cylinder-assemblage longitudinal shear solution.41- Density: rho_c = V_f rho_f + V_m rho_m, when both constituent42 densities are given.43- Voigt/Reuss band: E2_Voigt = V_f E_fT + V_m E_m (iso-strain upper44 bound) and E2_Reuss = 1 / (V_f / E_fT + V_m / E_m) (iso-stress lower45 bound); the same two forms with G_f and G_m give the G12 band.46- Hashin-Shtrikman G12 band (anti-plane, circular-cylinder problem): the47 lower endpoint equals the xi_G12 = 1 Halpin-Tsai value exactly.48- Hashin-Shtrikman E2 band (in-plane, Hashin 1965 plane-strain bulk49 modulus k* and transverse shear modulus m* bounds): converted through50 the exact transverse-isotropy identity E2 = 4 k m E1 / (E1 (k + m) +51 4 k m nu12^2) at the exact CCA E1 and nu12.52- Module constants XI_E2 = 2.0 and XI_G12 = 1.0 are the standard53 circular-fiber Halpin-Tsai shape factors (Halpin and Tsai, AFML-TR-67-54 423, 1969); the model is closed-form arithmetic in SI units (Pa,55 kg/m^3) on the unidirectional lamina in its material axes.5657## Workflow58591. Collect the fiber constituent properties (axial modulus E_f, major60 Poisson ratio nu_f, transverse modulus E_fT, longitudinal shear61 modulus G_f), the matrix constituent properties (modulus E_m,62 Poisson ratio nu_m) and the fiber volume fraction V_f.632. Derive the matrix shear modulus with shear_modulus_isotropic(E_m,64 nu_m).653. Predict the longitudinal modulus E1 and major Poisson ratio nu12 by66 the rule of mixtures with e1_longitudinal and nu12_major.674. Predict the transverse modulus E2 with e2_halpin_tsai, using the68 fiber transverse modulus E_fT and the xi_E2 = 2 shape factor, never69 the fiber axial modulus.705. Predict the in-plane shear modulus G12 with g12_halpin_tsai, using71 the fiber shear modulus G_f and the xi_G12 = 1 shape factor.726. Compute the density with rho_composite when both constituent73 densities are given.747. Verify E2 against the Voigt-Reuss bound band (e2_voigt_upper,75 e2_reuss_lower) and the tighter Hashin-Shtrikman bound band76 (e2_hashin_shtrikman_bounds).778. Verify G12 against the Voigt-Reuss bound band (g12_voigt_upper,78 g12_reuss_lower) and the Hashin-Shtrikman bound band79 (g12_hashin_shtrikman_bounds), noting the xi_G12 = 1 identity with80 the lower endpoint.819. Run the one-shot report unidirectional_lamina_constants for the full82 engineering-constants and bound-band dict.8310. Confirm the deterministic checks with the contract test84 scripts/test_unidirectional_lamina_micromechanics.py.8586## Worked example8788A T300 carbon / epoxy 5208-class unidirectional ply at V_f = 0.60.89Constituent inputs: E_f = 230.0 GPa, nu_f = 0.20, E_fT = 20.0 GPa, G_f =9027.0 GPa (fiber); E_m = 3.5 GPa, nu_m = 0.35 (epoxy matrix); rho_f =911760.0 kg/m^3, rho_m = 1230.0 kg/m^3.9293- Matrix shear modulus: G_m = 3.5 / (2 (1 + 0.35)) = 1.296296 GPa.94- Rule of mixtures: E1 = 0.60 * 230 + 0.40 * 3.5 = 139.400000 GPa;95 nu12 = 0.60 * 0.20 + 0.40 * 0.35 = 0.260000.96- Halpin-Tsai E2: eta = (20 / 3.5 - 1) / (20 / 3.5 + 2) = 0.611111, and97 E2 = 3.5 * (1 + 2 * 0.611111 * 0.60) / (1 - 0.611111 * 0.60) =98 9.578947 GPa.99- Halpin-Tsai G12: G12 = 4.402037 GPa, exactly the composite-cylinder-100 assemblage longitudinal shear solution.101- Density: rho = 0.60 * 1760 + 0.40 * 1230 = 1548.000000 kg/m^3.102- E2 band (GPa): Reuss 6.930693 < Hashin-Shtrikman 8.821709 < 9.578947103 < Hashin-Shtrikman 10.939799 < Voigt 13.400000, with the magnitude104 gate E1 in [135, 145] GPa, E2 in [8, 12] GPa and G12 in [4, 6] GPa105 (Daniel and Ishai textbook T300/5208 values).106- G12 band (GPa): Reuss 3.023033 < 4.402037 = Hashin-Shtrikman lower107 4.402037 < Hashin-Shtrikman upper 12.608295 < Voigt 16.718519, the108 Halpin-Tsai prediction attaining the Hashin-Shtrikman lower endpoint109 exactly.110- Degeneracies: at V_f = 0 the E2 band closes to E_m (3.500000 GPa)111 exactly; at V_f = 1 it closes to 20.758123 GPa, 3.8 percent above112 E_fT because of the cross-section idealization in the k* and m*113 bounds, while the Halpin-Tsai E2 limit at V_f = 1 is exactly E_fT.114115## Verification116117- Confirm e1_longitudinal(230e9, 3.5e9, 0.6) is within 1e-6 relative of118 139.4e9 and nu12_major(0.2, 0.35, 0.6) is within 1e-9 of 0.26.119- Confirm e2_halpin_tsai(20e9, 3.5e9, 0.6) is within 1e-6 relative of120 9578947368.421053 and g12_halpin_tsai(27e9, 1296296296.2962961, 0.6)121 is within 1e-6 relative of 4402037250.138515.122- Confirm the nested-band ordering at V_f = 0.6: E2 Reuss < E2123 Hashin-Shtrikman lower < E2 Halpin-Tsai < E2 Hashin-Shtrikman upper <124 E2 Voigt, and the analogous G12 ordering with the Halpin-Tsai and125 Hashin-Shtrikman lower endpoint equal.126- Confirm the G12 Halpin-Tsai and Hashin-Shtrikman lower-bound identity127 holds within 1e-9 relative at V_f in {0.3, 0.5, 0.6, 0.7}.128- Confirm the V_f = 0 and V_f = 1 degeneracies and the E2-in-band sweep129 over V_f in [0.3, 0.9].130- Confirm every non-positive or boolean modulus, density and shape131 factor, every Poisson ratio outside [0, 0.5), every fiber volume132 fraction outside [0, 1], and a fiber that is not the stiffer shear or133 cross-section phase raises ValueError.134- Run the contract test offline: python3135 scripts/test_unidirectional_lamina_micromechanics.py (41 tests,136 deterministic).137138## Related leaves139140- structures/composites/laminate-stiffness: consumes E1, E2, nu12 and141 G12 as workflow step 1 inputs to build the ply stiffness, rotate it142 and assemble the laminate A matrix; this leaf produces those four143 constants, it never assembles stiffness matrices.144- structures/composites/failure-criteria: consumes lamina allowables145 and strength values, not the elastic constants this leaf predicts.146- structures/composites/laminate-hygrothermal-response: owns the147 moisture content, CTE and CME vein from ply-level properties; this148 leaf stops at density.149- structures/materials/material-selection: representative constituent150 property bands for reference, verified against MMPDS, AMS or CMH-17151 before design use; this leaf never looks up or reproduces those152 bands.153154## Pitfalls155156- Using the fiber axial modulus E_f in the transverse Halpin-Tsai arm157 instead of the fiber transverse modulus E_fT: a carbon fiber is158 transversely isotropic, and this substitution overpredicts E2 by159 roughly a factor of two, the classic bug class here.160- Reading the Voigt/Reuss band as the tight envelope: the161 Hashin-Shtrikman band is always tighter, with the Reuss bound at or162 below the Hashin-Shtrikman lower bound and the Voigt bound at or163 above the Hashin-Shtrikman upper bound (6.930693 GPa Reuss against164 8.821709 GPa Hashin-Shtrikman lower at the worked V_f = 0.6).165- Expecting the E2 Hashin-Shtrikman band to close exactly to E_fT at166 V_f = 1: the in-plane cross-section idealization used to keep the167 band closed-form gives 20.758123 GPa, 3.8 percent above the 20.0 GPa168 E_fT value that the Halpin-Tsai estimator itself reaches exactly.169- Trusting the xi_E2 = 2 estimator below roughly V_f = 0.25: the fixed170 semi-empirical shape factor can dip slightly under the variational171 Hashin-Shtrikman lower bound there (Wall 1997); the verification172 sweep in this leaf deliberately starts at V_f = 0.3.173- Passing engineering constants E1, E2, nu12, G12 into this leaf as174 inputs: they are the OUTPUTS of the constituent-level prediction here,175 never collected inputs; structures/composites/laminate-stiffness is176 the leaf that takes them as given.177178## Behavior contract (gate 3)179180Run the deterministic contract test (stdlib unittest, offline):181182 python3 scripts/test_unidirectional_lamina_micromechanics.py183184The test covers the T300/5208 worked example (E1, nu12, E2, G12 and185density within tolerance of the real module outputs and inside the186magnitude gates), the matrix shear derivation, the nested Voigt-Reuss187and Hashin-Shtrikman band ordering for both E2 and G12 at the worked188volume fraction, the G12 Halpin-Tsai and Hashin-Shtrikman lower-bound189identity across volume fractions, the V_f = 0 and V_f = 1 degeneracies,190the E2-in-band sweep over V_f in [0.3, 0.9], the isotropic-fiber191collapse, the one-shot report keys and determinism, and ValueError192rejection of every non-physical or boolean input and of a fiber that is193not the stiffer shear or cross-section phase.194195## Compliance196197- Standards referenced, not reproduced: CMH-17 (Composite Materials198 Handbook, SAE International) frames the constituent and lamina199 property data conventions this prediction feeds, reference-only per200 standards-map.yaml; no CMH-17 table or design value is reproduced.201- compliance: STANDARDS-REF, gated: false.