Tan Model Equations¶
Principal stress coordinate system¶
The coordinate system (x,y) is rotated to the principal stress frame (1,2).
The rotation angle is:
Load transformation¶
The load vector is transformed using a rotation matrix:
where \(T_\alpha\) is the rotation matrix.
Stress field computation¶
In this coordinate system, the membrane stress solution for an infinite anisotropic plate with a hole in its thickness is determined using a complex method. For each load component, p1 and p2, there is a membrane stress field denoted respectively as \(N_1(x, y)\) and \(N_2(x, y)\). These are expressed as the combination of a uniform membrane stress and a stress resulting from the hole. For any point with coordinates (x, y) in the initial coordinate system, the solution fields are expressed as follows.
The field driven by the load component \(p_1\) is
and the field driven by the load component \(p_2\) is
where each vector collects the \((N_{xx}, N_{yy}, N_{xy})\) components and \(\mathrm{Re}(\cdot)\) is the real part. The complex potentials \(\phi_j^{(k)}\) (root \(j \in \{1,2\}\), load component \(k \in \{1,2\}\)) are
with the auxiliary mapping functions
where the branch of the square root is chosen so that \(\mathrm{Re}(\zeta_j) \geq 0\). The characteristic roots \(s_1\) and \(s_2\) are obtained from the effective compliance matrix (see the following section).
Superposition and finite-width correction¶
The two fields are combined by superposition and rotated back to the coordinate system of the original load to obtain the membrane stress field for an infinite plate:
Because the theoretical formulation assumes an infinite plate, a correction factor \(C\) is applied to account for the finite plate width \(w\):
This factor is a theoretical value for quasi-isotropic materials and is extended to all types of laminates.
Degenerate quasi‑isotropic case¶
When the laminate approaches in‑plane isotropy, two distinct singularities appear in the formulation. The implementation regularises each one deterministically rather than by perturbing the stiffness matrix, so that the result stays reproducible across platforms and BLAS back‑ends.
Undefined orthotropy frame¶
The orthotropy axis angle \(\omega\) is normally identified from the extension–shear coupling terms and the \(C_{11}-C_{22}\) asymmetry of the stiffness matrix, essentially as
For a quasi‑isotropic laminate both the coupling and the asymmetry vanish, so this ratio becomes an ill‑defined \(0/0\). The orthotropy axes are then genuinely undefined — every rotation leaves the stiffness invariant. When both quantities fall below a relative tolerance (\(10^{-9}\,\lVert C\rVert\)), the frame is fixed to the arbitrary but exact choice \(\omega = 0\), i.e. the current coordinate frame is kept.
Coincident characteristic roots¶
The complex potentials \(\phi_1\) and \(\phi_2\) divide by \(s_1 - s_2\), which
vanishes at the isotropic double root \(s_1 = s_2 = i\). The stress field has a
finite (removable) limit there, but the direct evaluation loses all precision
once \(\lvert s_1 - s_2\rvert\) drops below \(\sim 10^{-6}\), and yields NaN
at exactly zero.
To keep the computation well conditioned, the separation of the roots is floored to a minimum value \(\delta_{\min} = 10^{-4}\). The two roots are pushed symmetrically apart about their midpoint, along the physical direction of the separation:
For an exactly double root the separation direction is undefined and the imaginary axis is chosen (both roots sit near \(+i\)). Because the stress field is continuous in \((s_1, s_2)\), the bias introduced by this flooring is of the order of \(\delta_{\min}\) and negligible for engineering purposes.
Computational steps¶
