# Step 0 Audit: Phase 1 Rebaseline Date: 2026-05-04 Author: Codex ## Objective Audit the existing Phase 1 C++ implementation against the paper-based `docs/MITC4_FORMULATION.md` reset before changing solver behavior. This step did not modify production C++ code. The existing implementation remains useful historical scaffolding, but it is not authoritative for the rebuilt MITC4 element until each layer is revalidated through the rebaseline steps. ## Required Sources Read - `AGENTS.md` - `PLAN.md` - `PROGRESS.md` - `docs/README.md` - `docs/HARNESS_ENGINEERING.md` - `docs/PRD.md` - `docs/ARCHITECTURE.md` - `docs/ADR.md` - `docs/NUMERICAL_CONVENTIONS.md` - `docs/MITC4_FORMULATION.md` - `phases/1-linear-static-mitc4-rebaseline/step0.md` ## Code Areas Inspected - `include/fesa/fesa.hpp` - `tests/test_main.cpp` - `CMakeLists.txt` - `scripts/validate_workspace.py` - `references/quad_01.inp` - `references/quad_02.inp` ## High-Level Finding The existing implementation has a working single-header Phase 1 skeleton: parser, domain validation, DOF mapping, dense test solver, in-memory results, displacement CSV comparison, full-vector reaction recovery, and a basic linear static workflow. The existing MITC4 kernel is not compatible with the revised formulation contract. It uses a simplified midsurface local basis, 2D projected derivatives, separated membrane/bending/shear factors, direct shear row construction at tying points, 2 x 2 midsurface-only integration, and `drilling_stiffness_scale = 1.0e-6`. The revised contract requires degenerated-continuum geometry, director/local rotation handling, convected covariant strain rows, MITC transverse shear tying on tensor components, `2 x 2 x 2` Gauss integration, and drilling stabilization based on `1.0e-3 * min_positive_diagonal(K_local_without_drilling)`. ## Retain With Revalidation These areas should be kept as starting points, but each must be revalidated by the assigned rebaseline step before being treated as Phase 1 evidence. | Area | Current Evidence | Rebaseline Owner | |---|---|---| | CMake/CTest validation harness | CMake files and `scripts/validate_workspace.py` run a real C++ test executable. | P1R-02 | | Core numeric and DOF aliases | `Real`, int64 ids/equations, and Abaqus DOF 1..6 mapping exist. | P1R-02 | | Diagnostics model | Error/warning diagnostics and code-based checks exist. | P1R-02, P1R-04 | | Parser subset skeleton | `*Node`, `*Element TYPE=S4`, `*Nset`, `*Elset`, `*Material`, `*Elastic`, `*Shell Section`, `*Boundary`, `*Cload`, `*Step`, `*Static`, and `*End Step` are represented. | P1R-03 | | Unsupported feature rejection | Generic unsupported keyword rejection plus `S4R` and `NLGEOM=YES` checks exist. | P1R-01, P1R-03 | | Domain validation | Missing element nodes, shell section/material links, load/boundary targets, no active elements, and no load warnings are present. | P1R-04 | | DofManager foundation | Six-DOF full order, constrained/free partition, equation numbering, and full-vector reconstruction exist outside Node/Element. | P1R-05 | | Result field structure | In-memory step/frame fields for `U` and `RF` exist. | P1R-06 | | CSV displacement comparator | Required Abaqus displacement columns are parsed and compared by node id with abs/rel tolerance support. | P1R-06, P1R-14 | | Linear static flow | Reduced free-DOF solve, full vector reconstruction, and `R_full = K_full * U_full - F_full` are implemented. | P1R-12, P1R-13 | ## Rewrite Required These areas conflict with `docs/MITC4_FORMULATION.md` and should be rebuilt under the matching contracts, not patched casually. | Area | Conflict | Rebaseline Owner | |---|---|---| | MITC4 local basis | Current `computeLocalBasis` uses averaged edge directions from the four coordinates. The revised contract requires element-center midsurface normal, nodal director axes `V1/V2/Vn`, deterministic fallback axes, and integration local bases. | P1R-07 | | Geometry and Jacobian | Current code projects the element to local 2D `xy` and uses bilinear planar derivatives only. The revised contract requires degenerated-continuum geometry with through-thickness coordinate `zeta`, covariant bases `g_i`, and invalid basis/Jacobian diagnostics. | P1R-07, P1R-09 | | Local rotation transform | Current transform rotates three translations and three rotations with one basis block. The revised contract requires mapping global rotations to local `[alpha, beta, gamma]`, where drilling `gamma` does not enter physical strain. | P1R-08, P1R-10 | | Strain rows | Current B matrix is an 8-row engineering shell split, not the documented convected covariant strain vector `[eps_11, eps_22, eps_33, gamma_23, gamma_13, gamma_12]`. | P1R-08 | | MITC shear tying | Current `addStandardShearRow` builds Cartesian-like `gamma_xz/gamma_yz` rows at midside derivatives, then interpolates them. The revised contract ties convected tensor components `eps_13` and `eps_23` from direct covariant rows at A/B/C/D. | P1R-08 | | Material and integration | Current code uses pre-integrated membrane, bending, and shear factors at `2 x 2` midsurface points. The revised contract requires local plane-stress matrix with shear correction, material transform as needed, and `2 x 2 x 2` Gauss integration. | P1R-09 | | Drilling stabilization | Current default is `1.0e-6` and the stiffness is assembled through a drilling row using `E * thickness * scale`. The revised contract requires `1.0e-3 * min_positive_diagonal(K_local_without_drilling)` added to local `gamma` diagonals before transformation. | P1R-10 | | MITC4 tests | Existing element test only checks shape partition, stiffness symmetry, and one uniform translation. The revised contract requires director basis, rotation transform, tying-row finite difference, MITC interpolation, rigid-body, drilling, patch, and locking-sensitivity tests. | P1R-07 through P1R-11 | ## Revalidate Before Reference Regression These areas are promising but not sufficient for stored-reference credibility yet. | Area | Required Revalidation | |---|---| | `quad_02` reference path | `quad_02.inp` uses `TYPE=S4`, but also `Part/Assembly/Instance` and `*Density`. Step 1 must either add a normalized Phase 1-compatible derivative input or create an explicit parser compatibility plan. | | Parser rejection policy | The parser must continue rejecting `S4R`, `Part/Assembly/Instance`, `*Density`, `*Include`, pressure loads, nonzero prescribed displacement, and `NLGEOM=YES` unless a later contract changes the subset. | | Singular diagnostics | Existing diagnostics cover some conditions, but untouched free DOFs, rotational/drilling risks, invalid element geometry, non-positive thickness paths, and solver zero-pivot messages need stronger coverage. | | Reaction output | Full-vector reaction recovery exists, but `RF` should remain verified by equilibrium tests until user-provided Abaqus reaction CSV artifacts are available. | | Assembly and solver boundary | Current dense matrix and Gaussian solver are acceptable for deterministic tests, but the architecture requires a future sparse/MKL adapter boundary and int64 sparse path. | ## Deferred Or Out Of Scope - Abaqus `S4R`, reduced integration, and hourglass control. - `Part/Assembly/Instance` support unless Step 1 or a later parser contract explicitly adds it. - `*Density` as material support for Phase 1 static analysis. - `NLGEOM=YES`, geometric nonlinearity, pressure loads, RBE2/RBE3, nonzero prescribed displacements, dynamics, heat transfer, composite sections, stress/strain/resultant outputs, and mesh quality diagnostics. - Tuning drilling stiffness to match one reference case. ## Step Handoff Proceed to P1R-01 reference onboarding. P1R-01 must decide the `quad_02` compatibility path without silently expanding parser support. P1R-02 can proceed in parallel afterward for core harness guardrails, but production MITC4 work should wait until the reference and guardrail foundations are explicit.