hermit.failure

failure_index / failure_field – Tsai-Wu failure, wired to Orientation.

hermit._laminate.failure.tsai_wu_field documents its input as laminate-frame strains, but the DG0 strain-measure output is in the element in-plane frame. So the same Tε(θ) (engineering-Voigt strain rotation, element -> laminate axes) the constitutive path already applies (hermit.fenics.kinematics.strain_rotation / hermit.csdl_helpers.rotate_abd) is applied to the strains first, before calling tsai_wu_field (unmodified – it already uses the correct (xz, yz) transverse-shear ordering, see that module’s docstring). This is covered by tests/test_material_api.py::test_failure_index_respects_orientation (“two spellings of one physical laminate must agree”).

This module’s entry points take mid-surface strain / curvature / shear directly, in the element frame, FE cell order – the raw DG0 strain-measure convention hermit.fenics.ops.strain_fields produces. hm.failure_index(state, ...) / hm.failure_field(state, ...) (hermit.outputs) are the public entry points; they assemble those measures off a solved ShellState and call in here.

Functions

failure_field(mid_strain, curvature, shear_strain, ...)

(n_cells, 3) / (n_cells, 3) / (n_cells, 2) element-frame

failure_index(mid_strain, curvature, shear_strain, ...)

KS-aggregated scalar (< 1 safe) -- see failure_field.

Module Contents

hermit.failure.failure_field(mid_strain, curvature, shear_strain, material, orientation_cs=None, *, faces=(-0.5, 0.5))

(n_cells, 3) / (n_cells, 3) / (n_cells, 2) element-frame engineering-Voigt strain / curvature / shear (FE cell order – e.g. model.strain_measure_op()’s raw output) + a composite Material -> (n_cells, n_plies * len(faces)) Tsai-Wu failure indices, rotated into the laminate frame by material.orientation first (None => no rotation).

hermit.failure.failure_index(mid_strain, curvature, shear_strain, material, orientation_cs=None, *, rho=100.0, faces=(-0.5, 0.5))

KS-aggregated scalar (< 1 safe) – see failure_field.