Orthotropy
Orthotropy is invariance under the reflections through three mutually orthogonal planes. It is the least constrained class TensND gives a dedicated storage type (TensOrtho, src/tens_anisotropic.jl): nine constants plus a material frame, against 21 for a general minor- and major-symmetric tensor.
The nine constants
Let
Block-diagonal in the material frame
The whole point of the class is that in its own frame the Kelvin–Mandel matrix splits:
Extension and shear decouple entirely. This is KM_material; the matrix in the canonical frame is KM, and the two are related by the orthogonal congruence of Kelvin–Mandel representation,
with _km_congruence), without going through Euler angles. Because the two blocks never mix, the closed-form inverse is one
The product of two orthotropic tensors is not orthotropic
The block structure survives a double contraction, but major symmetry does not:
The product of two symmetric TensOrtho stores nine. Rather than introduce a twelve-parameter container, TensND returns the generic TensCanonical the dense route would have produced, and is_ORTHO on the result is false.
This is the same widening that makes TensTI{4,T,5} ⊡ TensTI{4,T,5} return an N=6 container (The Walpole basis), and it has the same cause: the major-symmetric tensors of a class do not form a subalgebra, only the class itself does.
Cubic symmetry is the exception that shows what is really at stake. There each irreducible representation of the group appears with multiplicity one, so the commutant is spanned by three mutually orthogonal projectors, any two cubic tensors about the same cube commute, and the product stays in the class and stays major-symmetric. Orthotropy fails on both counts for the same reason: its
When the two operands are expressed in different material frames the product is generally fully anisotropic, and the implementation falls back to the generic route bit for bit.
Where the classes sit
Each arrow is an exact re-expression, not an approximation: an isotropic tensor really is transversely isotropic about every axis, and a transversely isotropic one really is orthotropic in any frame containing its axis. The converse direction — pushing an arbitrary tensor down the chain — is approximation, and is the subject of Projection onto a symmetry class.
The promotions are implemented in src/structured_tens_promotion.jl and are what allow mixed-class arithmetic (TensISO ⊡ TensOrtho, TensTI{2} ⊡ TensTI{4}) to stay in closed form.
Order 2
An order-2 orthotropic tensor is simply one that is diagonal in the material frame,
i.e. three constants and a frame. Every symmetric order-2 tensor is orthotropic in its own eigenframe — which is why order-2 orthotropy is never an interesting hypothesis, only a useful representation. The corresponding projection at fixed frame is therefore just "keep the diagonal", as Projection onto a symmetry class makes explicit.