docs: reset mitc4 formulation baseline

This commit is contained in:
NINI
2026-05-04 12:00:16 +09:00
parent c5be1f988c
commit a385235e14
117 changed files with 5924 additions and 213 deletions
+375 -191
View File
@@ -1,257 +1,441 @@
# MITC4 Formulation
## Purpose
This document defines the baseline MITC4 formulation target for FESA Phase 1.
This document is the formulation contract for FESA's Phase 1 four-node MITC4 shell element.
It is intentionally a formulation contract, not implementation code. Exact formulas should be added and reviewed before coding the MITC4 element.
It supersedes the earlier simplified Phase 1 baseline that used an averaged-edge shell basis, analytic thickness integration, and `drilling_stiffness_scale = 1.0e-6`. The next Phase 1 implementation pass must treat this document as the MITC4 gate before coding or evaluating shell stiffness.
## Source Basis
- Dvorkin and Bathe's four-node shell element paper presents a continuum-mechanics-based, non-flat, general quadrilateral shell element for thin and thick shells and nonlinear analysis: https://web.mit.edu/kjb/www/Publications_Prior_to_1998/A_Continuum_Mechanics_Based_Four-Node_Shell_Element_for_General_Nonlinear_Analysis.pdf
- The paper identifies transverse shear locking as a key problem in simple 4-node shell interpolation and motivates modified transverse shear treatment: https://web.mit.edu/kjb/www/Publications_Prior_to_1998/A_Continuum_Mechanics_Based_Four-Node_Shell_Element_for_General_Nonlinear_Analysis.pdf
- OpenSees describes `ShellMITC4` as a bilinear isoparametric shell element with modified shear interpolation, four counter-clockwise nodes, and six DOFs per node: https://opensees.berkeley.edu/wiki/index.php/Shell_Element
- The MITC benchmark paper states that the MITC method is used to remedy shell locking and that the standard MITC4 employs MITC treatment for transverse shear strains; it also notes that Abaqus S4 uses Dvorkin-Bathe transverse shear interpolation: https://web.mit.edu/kjb/www/Principal_Publications/Performance_of_the_MITC3%2B_and_MITC4%2B_shell_elements_in_widely_used_benchmark_problems.pdf
- Abaqus finite-strain shell theory documentation provides useful comparison context for S4/S4R geometry, interpolation, orientation update, and transverse shear treatment, but FESA Phase 1 is linear static: https://abaqus-docs.mit.edu/2017/English/SIMACAETHERefMap/simathe-c-finitestrainshells.htm
The goal is not to reproduce Abaqus internals. The goal is to implement a documented, testable Dvorkin-Bathe-style MITC4 element that can be compared against stored Abaqus `S4` reference artifacts without running Abaqus locally.
## Phase 1 Target
Phase 1 implements a clear MITC4 baseline formulation and passes reference benchmarks before performance optimization.
## Local Source Basis
The formulation below is based on the local papers in `docs/Paper/`:
Scope:
- 4-node quadrilateral shell.
- Linear static analysis.
- Linear isotropic elastic material.
- Homogeneous shell section.
- 6 DOFs per node.
- Small-strain formulation for Phase 1.
- Transverse shear interpolation based on MITC4 assumptions.
- Abaqus-compatible result signs.
- `docs/Paper/AContinuumMechanicsBasedFourNodeShellElementforGeneralNonlinearAnalysis/`
- Dvorkin and Bathe's original four-node non-flat shell element.
- Defines the degenerated-continuum geometry, displacement interpolation, convected transverse shear interpolation, constitutive transformation, and benchmark expectations.
- `docs/Paper/FourNodeQuadrilateralShellElementMITC4/`
- Restates the MITC4 geometry and displacement interpolation, gives explicit midside shear tying relations, and reports patch-test and Scordelis-Lo verification behavior.
- `docs/Paper/유한요소해석법을이용한쉘구조물의동적좌굴해석/`
- Provides the Korean thesis derivation for covariant strain, plane-stress material matrix with shear correction, 6-DOF shell transformation, drilling stabilization, and nonlinear extension notes.
- `docs/Paper/2007쉘구조물의유한요소해석에대하여/`
- Provides shell-model background, locking behavior, asymptotic behavior, and benchmark/test interpretation.
- `docs/Paper/mitc공부/`
- Treated as supporting study notes only. Use the papers above for binding formulas.
Non-scope:
- S4R reduced-integration behavior.
- Hourglass control.
- Composite sections.
- Material nonlinearity.
- Geometric nonlinearity.
- Pressure loads.
- Thermal-stress coupling.
- Mesh quality diagnostics.
## Phase 1 Scope
Phase 1 implements:
## Phase 1 Closed Baseline Decisions
The following decisions close the Phase 1 implementation gate for the first baseline C++ implementation. They are intentionally conservative and may be revised by ADR after Abaqus S4 reference cases are added.
- Abaqus `TYPE=S4` mapped to FESA `MITC4`.
- Four-node quadrilateral shell in Abaqus S4 node order.
- Linear static, small-strain, linear isotropic elastic analysis.
- Homogeneous shell section with one thickness value per element for the initial implementation.
- Six global DOFs per node: `UX`, `UY`, `UZ`, `RX`, `RY`, `RZ`.
- MITC transverse shear interpolation in a convected coordinate system.
- Constrained DOF elimination, full-vector reaction recovery, and minimum output fields `U` and `RF`.
Decisions:
- Mandatory Phase 1 result outputs are limited to nodal `U` and `RF`. Element `S`, `E`, and `SF` remain future outputs.
- In-plane membrane and bending terms use standard bilinear Reissner-Mindlin interpolation with 2x2 Gauss integration.
- Transverse shear uses MITC4 mid-side tying interpolation:
Phase 1 does not implement:
- Abaqus `S4R`, reduced integration, or hourglass control.
- Geometric nonlinearity, material nonlinearity, dynamics, pressure loads, thermal-stress coupling, composite sections, or mesh quality diagnostics.
- Abaqus `*Orientation`, user-defined nodal normals, or shell offset behavior unless added by a later ADR.
## Natural Coordinates and Node Order
FESA uses the standard bilinear quadrilateral natural coordinates:
```text
gamma_xz_mitc(r, s) =
0.5 * (1 - s) * gamma_xz(0, -1)
+ 0.5 * (1 + s) * gamma_xz(0, +1)
gamma_yz_mitc(r, s) =
0.5 * (1 - r) * gamma_yz(-1, 0)
+ 0.5 * (1 + r) * gamma_yz(+1, 0)
node 1: (xi, eta) = (-1, -1)
node 2: (xi, eta) = (+1, -1)
node 3: (xi, eta) = (+1, +1)
node 4: (xi, eta) = (-1, +1)
zeta in [-1, +1] through the thickness
```
- The four tying points are the midside natural-coordinate points `(0,-1)`, `(0,+1)`, `(-1,0)`, and `(+1,0)`.
- Local basis construction uses averaged opposite edges:
Shape functions:
```text
v1 = 0.5 * ((x2 - x1) + (x3 - x4))
v2 = 0.5 * ((x4 - x1) + (x3 - x2))
e1 = normalize(v1)
e2_raw = v2 - dot(v2, e1) * e1
e2_pre = normalize(e2_raw)
e3 = normalize(cross(e1, e2_pre))
e2 = normalize(cross(e3, e1))
N1 = 0.25 * (1 - xi) * (1 - eta)
N2 = 0.25 * (1 + xi) * (1 - eta)
N3 = 0.25 * (1 + xi) * (1 + eta)
N4 = 0.25 * (1 - xi) * (1 + eta)
```
- For mildly warped quadrilaterals this is an averaged midsurface basis. Severe warpage is not diagnosed as mesh quality in Phase 1, but near-zero vectors or Jacobians are invalid/singular element diagnostics.
- Integration point order for stiffness tests is `(-g,-g)`, `(g,-g)`, `(g,g)`, `(-g,g)` conceptually, with `g = 1 / sqrt(3)`. Implementation may loop over the same set in row-major order as long as assembled stiffness is invariant.
- The default drilling stiffness scale is:
Midside MITC tying points in the FESA convention:
```text
drilling_stiffness_scale = 1.0e-6
A = ( 0, -1) edge 1-2
B = (-1, 0) edge 1-4
C = ( 0, +1) edge 4-3
D = (+1, 0) edge 2-3
```
The current baseline applies this scale to a representative `E * thickness` drilling stabilization term. The value is reported through the element options path and must be revisited after Abaqus S4 displacement references are available.
Dvorkin-Bathe papers may use a natural-coordinate orientation where the signs on the `A/C` interpolation are reversed relative to the FESA convention above. FESA implementation must preserve the edge definitions above and use the FESA interpolation formulas in the MITC shear section.
## Nodal DOFs
Each node has:
## Degenerated-Continuum Geometry
The shell is represented as a 3D continuum degenerated through the thickness:
```text
UX, UY, UZ, RX, RY, RZ
X(xi, eta, zeta) =
sum_k N_k(xi, eta) X_k
+ zeta / 2 * sum_k t_k N_k(xi, eta) Vn_k
```
Rules:
- Translational DOFs are global translations.
- Rotational DOFs are rotations about global or transformed axes following Abaqus component convention.
- `RZ` is retained as a drilling DOF.
- Drilling stiffness is artificial in Phase 1 and must be parameterized.
where:
## Element Input Contract
`MITC4Element` requires:
- four node ids in Abaqus S4 order.
- four node coordinates.
- shell thickness.
- linear elastic material constants `E` and `nu`.
- drilling stiffness parameter.
- element id and property id for diagnostics and output.
- `X_k` is the midsurface coordinate of node `k`.
- `t_k` is the nodal thickness. Phase 1 uses `t_k = t` for all four nodes.
- `Vn_k` is the nodal director. The papers allow the director to be non-normal to the midsurface; Phase 1 derives it from geometry because Abaqus nodal normals are not in the parser subset.
Node ordering:
- Input node order follows Abaqus S4 convention.
- Positive normal follows the right-hand rule around the nodes.
- FESA maps Abaqus `TYPE=S4` to `MITC4`.
- Abaqus `TYPE=S4R` is not supported in Phase 1.
Phase 1 director policy:
## Coordinate Frames
The Phase 1 local basis construction is defined by the averaged-edge algorithm in `Phase 1 Closed Baseline Decisions`.
Minimum requirements:
- Define a local shell normal from the quadrilateral geometry.
- Define local in-plane axes `e1` and `e2` so that `e1`, `e2`, and normal form a right-handed basis.
- Preserve Abaqus-compatible output signs.
- Document behavior for non-planar quadrilaterals.
- Use the same convention consistently for stiffness, stress/strain recovery, and result output.
Phase 1 convention:
- Use the element midsurface geometry to compute an average basis from opposite edges.
- Use the positive shell normal implied by the input node ordering.
- Use a right-handed local basis consistently for stiffness, reaction recovery, and future result output.
## Shape Functions
Baseline quadrilateral bilinear interpolation:
- If no parsed nodal directors exist, use the element-center midsurface normal for all four nodal directors:
```text
N1 = 0.25 * (1 - r) * (1 - s)
N2 = 0.25 * (1 + r) * (1 - s)
N3 = 0.25 * (1 + r) * (1 + s)
N4 = 0.25 * (1 - r) * (1 + s)
G1_c = dX_mid / dxi at (0, 0)
G2_c = dX_mid / deta at (0, 0)
Vn_k = normalize(G1_c x G2_c), k = 1..4
```
where `r, s` are natural coordinates in `[-1, 1]`.
- If `G1_c x G2_c` is near zero, reject the element with an invalid/singular element diagnostic.
- This flat-or-mildly-warped policy is sufficient for the Phase 1 S4 baseline. A true non-flat nodal-director policy requires a later ADR and benchmark update.
Implementation requirements:
- Compute shape function derivatives with respect to natural coordinates.
- Build the surface Jacobian and local derivatives.
- Detect invalid or near-zero Jacobian as a singular/invalid element diagnostic, not as a mesh quality metric.
The nodal local director axes are:
## Strain Treatment
The baseline element separates:
- membrane strain terms.
- bending curvature terms.
- transverse shear strain terms.
- artificial drilling stabilization.
```text
V1_k = normalize(EY x Vn_k)
V2_k = Vn_k x V1_k
```
MITC4 requirement:
- Use standard displacement interpolation for membrane and bending terms in Phase 1.
- Use MITC transverse shear interpolation to alleviate shear locking.
- Do not replace MITC4 with plain full-integration Reissner-Mindlin Q4.
If `EY x Vn_k` is near zero, use a deterministic fallback axis before normalization:
The Phase 1 transverse shear tying formula is the midside interpolation stated in `Phase 1 Closed Baseline Decisions`.
```text
V1_k = normalize(EZ x Vn_k)
if still near zero, V1_k = normalize(EX x Vn_k)
V2_k = Vn_k x V1_k
```
## Numerical Integration
Phase 1 baseline:
- In-plane integration: 2x2 Gauss for membrane, bending, MITC shear, and drilling stabilization.
- Thickness integration: homogeneous linear elastic shell section is integrated analytically using `t`, `t^3 / 12`, and shear correction `5 / 6`.
- Benchmark literature commonly reports 2x2 in-plane Gauss integration for S4/MITC4-style 4-node elements and 2-point thickness integration in comparative shell studies.
The implementation must keep `V1_k`, `V2_k`, and `Vn_k` orthonormal and right-handed.
Rules:
- Do not introduce reduced integration or hourglass control for S4R behavior in Phase 1.
- Do not optimize integration before reference benchmarks pass.
- Integration point ordering for output must be documented before stress/strain reference comparisons.
## Displacement and Rotation Interpolation
The local five-DOF MITC4 displacement field is:
```text
u(xi, eta, zeta) =
sum_k N_k u_k
+ zeta / 2 * sum_k t_k N_k q_k
q_k = -V2_k * alpha_k + V1_k * beta_k
```
where:
- `u_k` is the nodal translation vector.
- `alpha_k` is the rotation about `V1_k`.
- `beta_k` is the rotation about `V2_k`.
- Drilling rotation `gamma_k` about `Vn_k` does not enter the continuum strain field.
FESA stores six global DOFs per node. Global nodal rotations are mapped to local director rotations by:
```text
theta_k = [RX_k, RY_k, RZ_k]^T
[alpha_k, beta_k, gamma_k]^T = L_k theta_k
L_k =
[ EX dot V1_k EY dot V1_k EZ dot V1_k
EX dot V2_k EY dot V2_k EZ dot V2_k
EX dot Vn_k EY dot Vn_k EZ dot Vn_k ]
```
The element-level local-to-global transformation is block diagonal:
```text
u_local_e = T_e u_global_e
K_global_e = T_e^T K_local_e T_e
f_global_e = T_e^T f_local_e
```
Each node block maps `[UX, UY, UZ, RX, RY, RZ]` to `[u_x, u_y, u_z, alpha, beta, gamma]`.
## Covariant Strain Definition
Use convected covariant components for the MITC4 strain construction:
```text
g_i = dX / dr_i, where r_i = xi, eta, zeta
eps_ij =
0.5 * (du/dr_i dot g_j + du/dr_j dot g_i)
```
For the Phase 1 small-strain implementation:
- Membrane and bending terms are derived directly from the degenerated-continuum displacement field.
- `eps_33 = 0` is enforced by the shell assumption.
- The transverse shear rows `eps_13` and `eps_23` are not taken directly at the Gauss point. They are replaced by the MITC assumed transverse shear interpolation below.
Use the internal strain vector order:
```text
[ eps_11, eps_22, eps_33, gamma_23, gamma_13, gamma_12 ]^T
```
where engineering shear strains are:
```text
gamma_ij = 2 * eps_ij
```
If an implementation uses another row order internally, it must include an explicit permutation test against this documented order.
## MITC Transverse Shear Interpolation
The key MITC4 assumption is that the transverse shear tensor components are interpolated from midside tying points, instead of being evaluated directly at every Gauss point from the displacement field.
The original paper form is:
```text
eps_13 = 0.5 * (1 + r2) * eps_13^A + 0.5 * (1 - r2) * eps_13^C
eps_23 = 0.5 * (1 + r1) * eps_23^D + 0.5 * (1 - r1) * eps_23^B
```
With FESA's Abaqus-style natural coordinate convention and tying-point labels, use:
```text
eps_13_MITC(xi, eta) =
0.5 * (1 - eta) * eps_13^A
+ 0.5 * (1 + eta) * eps_13^C
eps_23_MITC(xi, eta) =
0.5 * (1 - xi) * eps_23^B
+ 0.5 * (1 + xi) * eps_23^D
```
The tying values are the direct covariant shear strains evaluated at midside points:
```text
eps_13^A = eps_13_DIRECT( 0, -1)
eps_13^C = eps_13_DIRECT( 0, +1)
eps_23^B = eps_23_DIRECT(-1, 0)
eps_23^D = eps_23_DIRECT(+1, 0)
```
Implementation rule:
- Build the direct covariant strain-displacement rows from the geometry and displacement interpolation.
- Evaluate only the needed direct transverse shear rows at `A`, `B`, `C`, and `D`.
- Interpolate those rows to the integration point using the formulas above.
- Do not compute MITC shear from local Cartesian `gamma_xz`/`gamma_yz` first; the tying is on convected tensor components.
For sign and regression checks, define:
```text
q_k = -V2_k * alpha_k + V1_k * beta_k
```
The paper edge formulas can be used as a diagnostic check for the direct tying rows:
```text
eps_13^A ~ 1/8 * [
(u1 - u2) dot 0.5 * (t1 Vn1 + t2 Vn2)
+ (X1 - X2) dot 0.5 * (t1 q1 + t2 q2)
]
eps_13^C ~ 1/8 * [
(u4 - u3) dot 0.5 * (t4 Vn4 + t3 Vn3)
+ (X4 - X3) dot 0.5 * (t4 q4 + t3 q3)
]
eps_23^B ~ 1/8 * [
(u1 - u4) dot 0.5 * (t1 Vn1 + t4 Vn4)
+ (X1 - X4) dot 0.5 * (t1 q1 + t4 q4)
]
eps_23^D ~ 1/8 * [
(u2 - u3) dot 0.5 * (t2 Vn2 + t3 Vn3)
+ (X2 - X3) dot 0.5 * (t2 q2 + t3 q3)
]
```
These compact formulas are not a license to skip the general direct-row evaluation. They are a sign/orientation cross-check derived from the same midside strain definitions.
## Local Cartesian Frame and Material Law
The constitutive law is defined in a local orthonormal Cartesian frame at each integration point with `sigma_33 = 0`.
Build the integration-point local basis from the covariant basis:
```text
e3_hat = normalize(g_3)
e1_hat = normalize(g_2 x e3_hat)
e2_hat = e3_hat x e1_hat
```
If `g_2 x e3_hat` is near zero, use a deterministic fallback that still creates a right-handed orthonormal basis and emits a diagnostic if no valid basis exists.
For isotropic linear elasticity, use the local plane-stress shell material matrix with transverse shear correction `kappa = 5/6`:
```text
D_hat = E / (1 - nu^2) *
[ 1 nu 0 0 0 0
nu 1 0 0 0 0
0 0 0 0 0 0
0 0 0 kappa*(1-nu)/2 0 0
0 0 0 0 kappa*(1-nu)/2 0
0 0 0 0 0 (1-nu)/2 ]
```
This matrix uses the documented strain order:
```text
[ eps_11, eps_22, eps_33, gamma_23, gamma_13, gamma_12 ]^T
```
For a general non-flat element, transform the local Cartesian material relation to the convected coordinate strain vector:
```text
E_hat = T_xi_to_x E_convected
D_convected = T_xi_to_x^T D_hat T_xi_to_x
```
The transformation matrix must be constructed from direction cosines between the local orthonormal basis and contravariant/covariant convected bases. For Phase 1, a flat-element implementation may compute the B-matrix directly in the local Cartesian frame only if tests prove it is equivalent to the convected formulation for the accepted reference cases.
## Element Stiffness and Numerical Integration
The baseline stiffness is:
```text
K_e = integral_V B^T D B dV
```
Phase 1 baseline integration:
- Use `2 x 2 x 2` Gauss integration in `(xi, eta, zeta)` for the first rebuilt MITC4 implementation.
- This follows the thesis derivation's `2 x 2 x 2` natural-coordinate integration and the Dvorkin-Bathe elastic recommendation of `2 x 2` in the midsurface with two through-thickness points.
- Do not introduce reduced integration or hourglass control.
- Analytic through-thickness integration may be introduced later only after equivalence tests preserve the MITC shear, drilling, and reference displacement behavior.
At every integration point:
1. Compute `g_i`, the metric/Jacobian, local Cartesian basis, and material transform.
2. Build direct membrane/bending strain rows.
3. Replace transverse shear rows with MITC interpolated rows.
4. Accumulate `B^T D B |J| w_xi w_eta w_zeta`.
Detect near-zero Jacobian, invalid basis, missing property/material, or non-positive thickness as invalid/singular element diagnostics. Do not report these as mesh quality diagnostics in Phase 1.
## Drilling DOF Stabilization
Decision:
- Phase 1 uses small artificial drilling stiffness.
- Default scale: `drilling_stiffness_scale = 1.0e-6`.
The continuum MITC4 formulation has five physical DOFs per node. FESA keeps six global DOFs, so the local drilling rotation `gamma` has no physical strain contribution and must be weakly stabilized.
Requirements:
- Expose a parameter such as `drilling_stiffness_scale`.
- Provide a deterministic default.
- Make the default small enough not to dominate physical response.
- Include benchmark sensitivity checks if reference results are sensitive to the value.
- Report the value in result metadata.
Baseline rule:
Baseline decision:
```text
k_drill = drilling_stiffness_scale * representative_element_stiffness
representative_element_stiffness = E * thickness
drilling_stiffness_scale = 1.0e-3
k_ref = min_positive_diagonal(K_local_without_drilling)
k_drill = drilling_stiffness_scale * k_ref
```
The representative stiffness may be refined after the first Abaqus S4 reference cases are available.
Rules:
## Element Outputs
Phase 1 minimum:
- element stiffness matrix.
- element equivalent nodal internal force for full-vector residual/reaction recovery.
- optional stress/strain output after displacement benchmarks are stable.
- `K_local_without_drilling` is the element local stiffness after MITC integration and before artificial drilling stabilization.
- Use the minimum positive diagonal entry over the physical local DOFs. Ignore zero, negative, NaN, or non-finite entries.
- Add `k_drill` to each nodal local `gamma` diagonal before transforming to global coordinates.
- If no positive reference diagonal exists, emit a singular/invalid element diagnostic.
- The scale must be configurable and written to result metadata or analysis diagnostics.
- Reference comparisons must include a drilling sensitivity check if displacement results change materially with the scale.
Future output:
- local shell stresses.
- local shell strains.
- section forces and moments.
- integration point and section point data.
This replaces the earlier arbitrary `1.0e-6 * E * thickness` rule. The `1.0e-3` scale follows the local thesis derivation's six-DOF stabilization note and is still an artificial numerical parameter, not a physical stiffness.
## Required Element-Level Tests
Before integration with the global solver:
- shape functions sum to one.
- derivatives satisfy expected bilinear identities.
- element stiffness dimensions are `24 x 24`.
- stiffness is symmetric for linear elastic Phase 1.
- rigid body translations produce near-zero internal strain energy.
- rigid body rotations do not create physical membrane/bending stiffness beyond documented drilling effects.
- constant membrane patch behavior.
- bending-dominated sanity case.
- drilling stiffness sensitivity check.
## Internal Force and Reaction Recovery
For Phase 1 linear static analysis:
## Pre-Implementation Gate
Phase 1 baseline implementation may proceed because these items are now recorded above:
- transverse shear tying point equations.
- local shell basis algorithm for flat and mildly warped quadrilaterals.
- default drilling stiffness scale and parameter name.
- integration point set and ordering convention.
- Phase 1 mandatory output scope: `U` and `RF` only.
```text
f_int_e = K_e u_e
R_full = K_full U_full - F_full
```
Stress/strain recovery locations for `S`, `E`, and `SF` remain future decisions and must not be implemented as mandatory Phase 1 outputs.
Rules:
## Reference Benchmarks
MITC4 baseline acceptance should include:
- single-element membrane test.
- single-element bending test.
- cantilever shell strip.
- simply supported square plate.
- Scordelis-Lo roof.
- pinched cylinder.
- twisted beam.
- Reactions must be recovered from the full global vector, not only from the reduced free-DOF system.
- `RF` output follows the Abaqus-style component convention documented in `docs/NUMERICAL_CONVENTIONS.md`.
- Element stress/strain/resultant outputs are not mandatory until displacement and reaction reference behavior is stable.
Distorted mesh tests should be added after the baseline passes, but Phase 1 does not implement general mesh quality diagnostics.
## Required Tests Before Reimplementation
The rebuilt MITC4 element must be protected by tests before implementation code is accepted.
Element-level tests:
- Shape functions sum to one and have correct derivatives at center, corners, and tying points.
- Center normal, local director axes, and integration local Cartesian axes are orthonormal and right-handed.
- The local-to-global rotation transform maps global rotations to `alpha`, `beta`, `gamma` as documented.
- Direct tying rows at `A`, `B`, `C`, `D` agree with finite-difference strain perturbations.
- MITC shear rows at Gauss points are interpolated from tying rows, not evaluated directly at the Gauss points.
- Stiffness is symmetric for linear elastic Phase 1.
- Rigid-body translations and rotations produce near-zero physical strain energy, with only documented drilling stabilization effects.
- The element has no spurious zero-energy modes beyond expected rigid-body behavior after drilling stabilization is accounted for.
Patch and benchmark tests:
- Constant membrane states.
- Pure bending.
- Pure shear.
- Pure twist.
- Thin cantilever or plate strip to expose shear locking.
- Scordelis-Lo roof after the basic flat tests pass.
- Pinched cylinder or twisted beam as later Phase 1/Phase 2 benchmark expansion.
Reference regression tests:
- Compare FESA `U` against stored Abaqus displacement CSV files using absolute and relative tolerances.
- Keep `RF` verified by full-vector equilibrium until matching Abaqus reaction CSV files are provided or explicitly deferred.
## Current Reference Artifacts
Stored artifacts currently known:
Current stored reference artifact:
- `references/quad_01.inp`
- `references/quad_01_displacements.csv`
- `references/quad_02.inp`
- `references/quad_02_displacements.csv`
Compatibility note:
- `quad_01.inp` is an Abaqus-generated S4R/NLGEOM reference input and is not a Phase 1 MITC4 parser acceptance case.
- It should be used as an external reference artifact and future compatibility target unless a normalized Phase 1 `S4` input is added.
- The displacement CSV can still exercise `U` field comparison infrastructure once node ids and component mapping are supported.
Compatibility notes:
- `quad_01.inp` contains `S4R`, `Part/Assembly/Instance`, `*Density`, and `NLGEOM=YES`; it remains future compatibility provenance, not a Phase 1 parser acceptance case.
- `quad_02.inp` contains `TYPE=S4`, which is the correct element target for Phase 1, but it also uses `Part/Assembly/Instance`. The next Phase 1 planning pass must either normalize this input into the Phase 1 flat keyword subset or explicitly add a parser sprint for this Abaqus/CAE structure. Do not silently expand parser support while implementing the element.
## Implementation Checklist
The next MITC4 implementation pass should proceed in this order:
1. Lock the shape-function, natural-coordinate, node-order, and tying-point tests.
2. Implement geometry/director/local-axis construction with diagnostics.
3. Implement the five-DOF degenerated-continuum displacement interpolation.
4. Implement global six-DOF to local `[alpha, beta, gamma]` transformation.
5. Implement direct covariant strain rows and finite-difference tests.
6. Replace transverse shear rows with MITC tying interpolation.
7. Implement material transform and `2 x 2 x 2` stiffness integration.
8. Add drilling stabilization in local coordinates.
9. Transform element stiffness and internal force to global coordinates.
10. Run element patch tests before assembly/reference regression work.
## Future Extensions
Geometric nonlinearity:
- Add updated geometry, current frame handling, tangent stiffness, and Newton-Raphson integration.
- Preserve `AnalysisState` element/internal state extension points.
- Update current geometry and nodal directors in `AnalysisState`.
- Add finite-rotation updates for `V1`, `V2`, and `Vn`.
- Add tangent stiffness, geometric stiffness, and Newton-Raphson convergence checks.
Thermal-stress coupling:
- Add temperature field state.
- Add thermal strain contribution.
- Add material expansion data.
- Add result fields for temperature and thermal strain/stress.
- Add temperature field state and thermal strain contribution.
- Add material expansion data and thermal output fields.
S4R:
- Add only after a separate ADR and formulation document update.
- Requires reduced integration and hourglass control decisions.
## Open Decisions Before Coding
- Exact stress/strain recovery locations.
- Whether local coordinate transforms from Abaqus input are deferred or rejected.
- Add only after a separate ADR and formulation update.
- Requires reduced integration, hourglass control, and separate reference artifacts.
Stress/resultant output:
- Define section point locations, component labels, local coordinate convention, and Abaqus CSV comparison format before making `S`, `E`, or `SF` mandatory.
## Remaining Open Decisions
The MITC4 stiffness formulation is now defined for the Phase 1 rebuild. Remaining decisions are outside the first stiffness pass:
- Exact stress/strain/resultant recovery locations and component labels.
- Whether to parse Abaqus `*Orientation` or nodal shell normals.
- Whether `quad_02.inp` should be normalized into the existing Phase 1 parser subset or used to justify a dedicated `Part/Assembly/Instance` parser sprint.
- Reference tolerances for `quad_02` after the input compatibility path is chosen.