feat(linear-static-3d-euler-beam): step 5 - reference-model-contract
This commit is contained in:
@@ -0,0 +1,420 @@
|
||||
# Linear Static 3D Euler Beam Reference Models
|
||||
|
||||
## Metadata
|
||||
|
||||
- feature_id: `linear-static-3d-euler-beam`
|
||||
- source_requirement: `docs/requirements/linear-static-3d-euler-beam.md`
|
||||
- source_research: `docs/research/linear-static-3d-euler-beam-research.md`
|
||||
- source_formulation: `docs/formulations/3d-isoparametric-euler-beam-formulation.md`
|
||||
- source_numerical_review: `docs/numerical-reviews/linear-static-3d-euler-beam-review.md`
|
||||
- source_io_definition: `docs/io-definitions/linear-static-3d-euler-beam-io.md`
|
||||
- approved_design: `docs/superpowers/specs/2026-08-08-linear-static-3d-euler-beam-design.md`
|
||||
- status: `ready-for-implementation-planning`
|
||||
- owner_agent: `reference-model-agent`
|
||||
- date: `2026-08-09`
|
||||
- approved_reference_model: `cantilever-beam-b33`
|
||||
- approved_reference_schema: `abaqus-cae-report-csv-v0`
|
||||
- reference_baseline: `reference/cantilever beam/` at source commit `2b34d0b`
|
||||
|
||||
이 문서는 구현 전에 필요한 code verification, analytical solution verification 및
|
||||
approved B33 reference comparison의 모델·artifact 계약을 정의한다. 이 status는 모델과
|
||||
테스트를 구현 계획으로 넘길 준비가 되었다는 뜻일 뿐, FESA 결과 비교, physics sanity,
|
||||
release readiness 또는 Abaqus full compatibility의 pass를 뜻하지 않는다.
|
||||
|
||||
## Reference Strategy
|
||||
|
||||
### Code verification
|
||||
|
||||
요소 수식과 solver infrastructure를 외부 reference 값 없이 직접 검사한다. Hermite
|
||||
보간, `theta_y=-dw/dx`, 4x12 `B`, 12x12 closed-form stiffness, 2-point Gauss, six rigid
|
||||
modes/rank 6, positive deformation energy, local/global transform, constant local line-load
|
||||
kernel, constrained partition, deterministic assembly 및 HDF5 schema가 대상이다. Numerical
|
||||
Review의 `NR-T01`부터 `NR-T11`까지를 구현 전 RED test inventory로 사용한다.
|
||||
|
||||
### Analytical solution verification
|
||||
|
||||
서로 분리된 axial, torsion, local y bending, local z bending cantilever와 rigidly rotated
|
||||
beam을 사용한다. 각 모델은 displacement/rotation, reaction, end action, section
|
||||
resultant, residual 및 해당되는 axial `S11`을 upstream closed form과 비교한다. Nonzero
|
||||
prescribed displacement는 partition 식을, constant local line load는 formulation-only
|
||||
equivalent-vector 식을 검증한다. 이 모델들은 Abaqus CSV를 요구하지 않는 code/solution
|
||||
test fixtures이며 reference artifact bundle로 가장하지 않는다.
|
||||
|
||||
### B33 reference comparison
|
||||
|
||||
논리 모델 `cantilever-beam-b33`의 exact read-only legacy bundle만 사용하여 FESA
|
||||
`results.h5`의 displacement, reaction 및 endpoint section resultant를 Abaqus/CAE report
|
||||
CSV row와 비교한다. Artifact precheck와 exact row-set matching이 먼저 통과해야 하며,
|
||||
수치 비교는 component-scale mixed tolerance를 사용한다. Axial `S11` output은 필수지만
|
||||
Abaqus beam stress comparison은 명시적 N/A다.
|
||||
|
||||
### Excluded validation scope
|
||||
|
||||
실험 자료에 대한 physical validation, Abaqus/Nastran 실행, 새로운 reference 값 생성,
|
||||
deep-beam/Timoshenko validation, warping, `I12!=0`, instance transform, nonlinear/dynamic
|
||||
behavior는 이 portfolio에 포함하지 않는다.
|
||||
|
||||
## Model Inventory
|
||||
|
||||
| model_id | category | purpose | target quantities or tests | required artifacts | status |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `smoke-b33-cli` | smoke | 단일 B33 deck의 parse-to-HDF5와 mandatory output 확인 | CLI, diagnostics, HDF5 paths/identity/atomicity | implementation test fixture; Abaqus CSV N/A | planned |
|
||||
| `cv-b33-shape-stiffness` | code verification | Hermite, `B`, closed-form stiffness, 2-point Gauss와 signed line-load kernel 격리 | `NR-T01`, `NR-T03`, `NR-T06` | in-process test data; reference bundle N/A | planned |
|
||||
| `cv-b33-patch-rigid-assembly` | patch test | constant strain/curvature, six rigid modes, rank/energy와 deterministic assembly 확인 | `NR-T02`, `NR-T04`, `NR-T11` | implementation test mesh; Abaqus CSV N/A | planned |
|
||||
| `an-b33-axial-cantilever` | analytical | axial response와 centroidal axial stress 확인 | `UX`, `RF1`, `N`, `FX`, `S11`, residual | analytical test fixture; Abaqus CSV N/A | planned |
|
||||
| `an-b33-torsion-cantilever` | analytical | Saint-Venant torsion response 확인 | `URX`, `RM1`, `T`, `MX`, residual | analytical test fixture; Abaqus CSV N/A | planned |
|
||||
| `an-b33-local-y-bending` | analytical | local `+y` force와 `Iz=I22` bending 확인 | `UY`, `URZ`, `RF2`, `RM3`, `Mz`, `FY`, residual | analytical test fixture; Abaqus CSV N/A | planned |
|
||||
| `an-b33-local-z-bending` | analytical | local `+z` force와 `Iy=I11`, `theta_y=-w'` 확인 | `UZ`, `URY`, `RF3`, `RM2`, `My`, `FZ`, `S11`, residual | analytical test fixture; Abaqus CSV N/A | planned |
|
||||
| `an-b33-rotated-space` | analytical | non-axis-aligned 3D beam의 transform와 energy invariance 확인 | transformed displacement/reaction/resultant, work, energy, `NR-T05` | analytical test fixture; Abaqus CSV N/A | planned |
|
||||
| `an-b33-prescribed-displacement` | analytical | nonzero `dc` effective RHS, full reconstruction와 reaction 확인 | `df`, `dc`, `K*d-F`, `NR-T09` | analytical algebra fixture; Abaqus CSV N/A | planned |
|
||||
| `an-b33-line-load-kernel` | analytical | formulation-only constant local line-load equivalent vector 확인 | signed 12-component vector, mesh convergence negative/positive control | element unit fixture; `*DLOAD` reference N/A | planned |
|
||||
| `neg-b33-input-contract` | negative/invalid-input | unsupported/malformed input과 model-validation diagnostic 확인 | B31, second step, transform, nested assembly, `I12`, geometry, property, keyword cases | invalid input fixtures; result CSV N/A | planned |
|
||||
| `cantilever-beam-b33` | benchmark and regression | approved Abaqus B33 nodal/section rows와 end-to-end 회귀 비교 | displacement, reaction, section resultant; stress N/A | exact legacy four-file bundle | inventory-ready; comparison not run |
|
||||
|
||||
`planned` analytical/code rows do not have missing reference artifacts: their acceptance source is
|
||||
the reviewed formulation or an exact invariant. Only a model intended for Abaqus reference
|
||||
comparison is subject to the CSV bundle requirement.
|
||||
|
||||
## Model Records
|
||||
|
||||
### Code and patch verification records
|
||||
|
||||
| model_id | analysis and element | material/section | boundary/load | expected target and tolerance | source |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `smoke-b33-cli` | single linear static, two-node `B33` minimum deck | finite positive isotropic `E,nu,A,Iy,Iz,J`, `I12=0` | stable cantilever constraint and one `*CLOAD` | mandatory HDF5 inventory, identity and finite rows; exact schema | requirements and I/O definition |
|
||||
| `cv-b33-shape-stiffness` | free two-node Euler beam element | unequal positive `EA,GJ,EIy,EIz` to expose component swaps | no global BC/load; direct element states and local line load | matrix/Gauss/line-load normalized error `<=1e-12`; signed components exact by contract | formulation sections 8-13; `NR-T01/T03/T06` |
|
||||
| `cv-b33-patch-rigid-assembly` | one/multiple identity-oriented B33 elements | positive, well-scaled properties | rigid translation/rotation and constant strain/curvature fields | rigid residual `<=1e-10`, rank 6, positive deformation energy; identical CSR structure and values normalized `<=1e-12` | numerical review `NR-T02/T04/T11` |
|
||||
|
||||
### Analytical inventory
|
||||
|
||||
All analytical beam records use a straight prismatic B33 member, homogeneous isotropic linear
|
||||
elasticity with positive `E,G,A,Iy,Iz,J`, `I12=0`, small displacement/rotation and a fixed root.
|
||||
Signs follow the approved local `(x,y,z)=(t,n1,t x n1)` convention.
|
||||
|
||||
| model_id | boundary conditions and load | target quantity/test | analytical target | tolerance/status |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `an-b33-axial-cantilever` | root DOFs fixed; free-end local axial force `Px` | tip `UX`, root `RF1`, constant `N`, outward `FX`, centroid `S11`, residual | `u(L)=Px*L/(E*A)` with force equilibrium and `S11=N/A` | relative `1e-9`; residual normalized `1e-10`; planned |
|
||||
| `an-b33-torsion-cantilever` | root fixed; free-end local torque `Mx` | tip `URX`, root `RM1`, constant `T`, outward `MX`, residual | `theta_x(L)=Mx*L/(G*J)` with torque equilibrium | relative `1e-9`; residual normalized `1e-10`; planned |
|
||||
| `an-b33-local-y-bending` | root fixed; free-end force `Py` along local `+y` | tip `UY`, `URZ`, root `RF2/RM3`, endpoint `Mz/FY`, residual | `v(L)=Py*L^3/(3*E*Iz)`, `theta_z(L)=Py*L^2/(2*E*Iz)` | relative `1e-9`; end-sign normalized `1e-12`; planned |
|
||||
| `an-b33-local-z-bending` | root fixed; free-end force `Pz` along local `+z` | tip `UZ`, `URY`, root `RF3/RM2`, endpoint `My/FZ`, section-point `S11`, residual | `w(L)=Pz*L^3/(3*E*Iy)`, `theta_y(L)=-Pz*L^2/(2*E*Iy)` | relative `1e-9`; end-sign normalized `1e-12`; planned |
|
||||
| `an-b33-rotated-space` | rigidly rotate the axial/torsion/two-bending fixtures to a non-axis-aligned direction | `R*R^T`, `det(R)`, transformed displacement/reaction/resultant, work and energy | inverse-rotated physical results equal axis-aligned cases; `det(R)=+1` | normalized `1e-12`; planned |
|
||||
| `an-b33-prescribed-displacement` | stable free/constrained partition with nonzero `dc`, finite `Ff` and `Fc` | effective RHS, `df`, full `d`, constrained reaction and free residual | `rhs=Ff-Kfc*dc`, `Rc=Kcf*df+Kcc*dc-Fc` | normalized `1e-10`; planned |
|
||||
| `an-b33-line-load-kernel` | element-level constant local `[px,py,pz,mx]`; no parser/CLI `*DLOAD` | all 12 equivalent nodal components and signed end moments | formulation section 12.2 closed-form vector | normalized `1e-12`; planned |
|
||||
|
||||
The rotated record covers transformation rather than Abaqus instance transforms. The line-load
|
||||
record covers only the element kernel and must be paired with a negative parser test proving that
|
||||
`*DLOAD` remains unsupported.
|
||||
|
||||
### Invalid-input record
|
||||
|
||||
`neg-b33-input-contract` is a table-driven portfolio. Each case uses the smallest otherwise-valid
|
||||
single-step deck and changes only the named condition.
|
||||
|
||||
| case | expected result |
|
||||
| --- | --- |
|
||||
| `TYPE=B31` | `unsupported-element-formulation`; no Euler element |
|
||||
| second `*STEP` | `unsupported-multiple-step`; no solve/output |
|
||||
| instance translation or rotation data | `unsupported-instance-transform` |
|
||||
| nested assembly/dependent mesh semantic | structured unsupported diagnostic |
|
||||
| `I12!=0` | `unsupported-coupled-section` model failure |
|
||||
| nonpositive `E,G,A,Iy,Iz,J` | `invalid-beam-property` model failure |
|
||||
| zero/near-zero length | `invalid-beam-length` at the approved scale-aware boundary |
|
||||
| zero/tangent-parallel guide vector | `invalid-beam-guide-vector` at the approved projection boundary |
|
||||
| `*DLOAD` or unlisted model-affecting keyword | `unsupported-keyword`; no distributed-load Domain object |
|
||||
| malformed row, duplicate entity or dangling reference | input failure with source-backed deterministic diagnostic |
|
||||
| missing/extra/duplicate/nonfinite/schema- or identity-mismatched reference row | comparison precheck failure before tolerance evaluation |
|
||||
|
||||
### Approved reference record: `cantilever-beam-b33`
|
||||
|
||||
- category: benchmark and regression
|
||||
- purpose: end-to-end B33 displacement, reaction and section-resultant comparison
|
||||
- analysis_type: single linear static
|
||||
- element_type: ten straight two-node `TYPE=B33` elements, source labels 1 through 10
|
||||
- geometry: global x-axis cantilever, total length 10 m, eleven source nodes
|
||||
- material: `E=2.1e11`, `nu=0.3`, SI
|
||||
- section: `A=1`, `I11=0.0833333`, `I12=0`, `I22=0.0833333`, `J=0.140833`; `n1=(0,1,0)`
|
||||
- boundary_conditions: source node 1, DOFs 1 through 6 fixed
|
||||
- load: source node 11, global DOF 3, magnitude `-1e6` N
|
||||
- model_id: `cantilever-beam-b33`
|
||||
- logical_schema: `abaqus-cae-report-csv-v0`
|
||||
- source_commit: `2b34d0b`
|
||||
- generator: `Abaqus/CAE Learning Edition 2024`
|
||||
- units: SI
|
||||
- nodal_coordinate_system: global Cartesian
|
||||
- section_force_coordinate_system: beam local
|
||||
- step_name: `Step-1`
|
||||
- increment: `1`
|
||||
- step_time: `1.0`
|
||||
- artifact_status: all four exact paths present; structural precheck observed; FESA comparison not run
|
||||
- stress: N/A for Abaqus reference comparison; mandatory FESA `S11` remains covered by unit/analytical and HDF5 schema tests
|
||||
|
||||
The input and CSV numeric reference values are not recalculated, repaired, rounded, clamped or
|
||||
otherwise re-derived by this contract.
|
||||
|
||||
## Abaqus Input Requirements
|
||||
|
||||
The approved input is exactly
|
||||
`reference/cantilever beam/cantilever beam.inp`. Read-only inspection confirms that it contains
|
||||
`*ELEMENT, TYPE=B33` and remains within the V0 supported subset plus the documented warning
|
||||
no-op output-request allowlist. Its single identity instance is `PART-1_1-1`; its canonical result
|
||||
identity is `(Step-1, frame 0)` from increment 1, step time 1.0.
|
||||
|
||||
For later reference models:
|
||||
|
||||
- `model.inp` shall use only the feature-approved Abaqus keyword subset.
|
||||
- Model data shall define nodes, B33 connectivity, sets, material, general section and orientation.
|
||||
- History data shall define exactly one `*STEP, *STATIC`, supported boundary conditions and nodal
|
||||
loads.
|
||||
- `TYPE=B31`, instance transform, nested assembly, `I12!=0` and `*DLOAD` are not admissible ways
|
||||
to create a positive V0 reference model.
|
||||
- Abaqus output requests may be present for human generation of required CSVs, but they are
|
||||
warning no-ops for FESA and never select mandatory HDF5 output.
|
||||
|
||||
## Artifact Bundle Contract
|
||||
|
||||
### Approved legacy exception
|
||||
|
||||
The following exact paths are the entire approved read-only bundle:
|
||||
|
||||
```text
|
||||
reference/cantilever beam/cantilever beam.inp
|
||||
reference/cantilever beam/cantilever beam displacements.csv
|
||||
reference/cantilever beam/cantilever beam reactions.csv
|
||||
reference/cantilever beam/cantilever beam elemental forces.csv
|
||||
```
|
||||
|
||||
These files shall not be generated, modified, renamed, corrected or restored by an agent or
|
||||
Harness. Their spaces and existing CAE report headers are legacy aliases, not a naming pattern for
|
||||
new models.
|
||||
|
||||
Only for this approved legacy bundle:
|
||||
|
||||
- `metadata.json`: N/A
|
||||
- `README.md`: N/A
|
||||
- stress CSV: N/A because beam stress reference comparison is outside the approved V0 scope
|
||||
|
||||
The approved design and this contract jointly replace those missing files by recording model ID,
|
||||
provenance, generator, source commit, units, coordinate systems, step/frame identity, logical CSV
|
||||
schema, exact inventory, tolerance policy and the stress N/A reason. Their absence therefore does
|
||||
not change the legacy record to `needs-reference-artifacts`.
|
||||
|
||||
### Future reference bundles
|
||||
|
||||
Every later reference model shall use this structure unless its approved requirement explicitly
|
||||
marks a quantity N/A:
|
||||
|
||||
```text
|
||||
reference/
|
||||
<model-id>/
|
||||
model.inp
|
||||
metadata.json
|
||||
<model-id>_displacements.csv
|
||||
<model-id>_reactions.csv
|
||||
<model-id>_internalforces.csv
|
||||
<model-id>_stresses.csv
|
||||
README.md
|
||||
```
|
||||
|
||||
CSV names are canonical `<model-id>_*.csv` names. `metadata.json` and `README.md` are mandatory.
|
||||
A quantity CSV may be omitted only when the upstream acceptance contract explicitly records N/A
|
||||
and gives its verification replacement. Missing required files keep that model at
|
||||
`needs-reference-artifacts`.
|
||||
|
||||
## Metadata JSON Contract
|
||||
|
||||
`metadata.json` is N/A only for `cantilever-beam-b33`. Every later bundle shall include at least:
|
||||
|
||||
```json
|
||||
{
|
||||
"feature_id": "linear-static-3d-euler-beam",
|
||||
"model_id": "<model-id>",
|
||||
"artifact_status": "needs-reference-artifacts | ready-for-verification",
|
||||
"input_file": "model.inp",
|
||||
"abaqus_version": "<exact generator/version>",
|
||||
"generation_owner": "<person or approved procedure>",
|
||||
"generation_date": "<YYYY-MM-DD>",
|
||||
"source_commit": "<commit>",
|
||||
"units": "<consistent unit system>",
|
||||
"coordinate_system": "<nodal and element result systems>",
|
||||
"analysis_type": "single linear static",
|
||||
"element_types": ["B33"],
|
||||
"step_name": "Step-1",
|
||||
"increment": 1,
|
||||
"step_time": 1.0,
|
||||
"output_requests": ["U", "RF", "SF"],
|
||||
"reference_csv_schema_version": "<approved schema>",
|
||||
"reference_csv_files": ["<canonical filenames>"],
|
||||
"tolerance_policy": "<approved quantity/component policy>",
|
||||
"limitations": ["<known limitations and explicit N/A quantities>"]
|
||||
}
|
||||
```
|
||||
|
||||
No agent may invent unknown provenance fields or mark a bundle ready merely because filenames
|
||||
exist.
|
||||
|
||||
## Abaqus Reference CSV Requirements
|
||||
|
||||
Header comparison trims whitespace around each comma-separated field but does not rename fields.
|
||||
For every file, `Frame` must normalize exactly from
|
||||
`Increment 1: Step Time = 1.000` to `(Step-1, frame 0)`, `Part Instance Name` must resolve to the
|
||||
preserved instance identity, `Node Label` must be a unique source-node station, and all projected
|
||||
numeric values must be finite.
|
||||
|
||||
| exact legacy path | expected trimmed header | unique row key | observed inventory |
|
||||
| --- | --- | --- | --- |
|
||||
| `reference/cantilever beam/cantilever beam displacements.csv` | `Frame, Part Instance Name, Node Label, U-U1, U-U2, U-U3, UR-UR1, UR-UR2, UR-UR3` | `(Frame, Part Instance Name, Node Label)` | 11 rows; header/key/finite/arity checks observed |
|
||||
| `reference/cantilever beam/cantilever beam reactions.csv` | `Frame, Part Instance Name, Node Label, RF-RF1, RF-RF2, RF-RF3, RM-RM1, RM-RM2, RM-RM3` | `(Frame, Part Instance Name, Node Label)` | 11 rows; header/key/finite/arity checks observed |
|
||||
| `reference/cantilever beam/cantilever beam elemental forces.csv` | `Frame, Part Instance Name, Node Label, SF-SF1, SM-SM1, SM-SM2, SM-SM3` | `(Frame, Part Instance Name, Node Label)` | 11 rows; header/key/finite/arity checks observed |
|
||||
|
||||
The wide-row key becomes unique canonical component rows after adding `quantity` and `component`.
|
||||
Missing, extra, duplicate, nonfinite, header/schema or identity mismatch stops comparison as
|
||||
`needs-reference-artifacts` or `schema-mismatch`. No bad or near-zero row may be silently dropped.
|
||||
|
||||
For the elemental-force CSV, source node station is not an element-end identity. A boundary
|
||||
station uses its only incident endpoint. An interior station may collapse exactly two endpoints
|
||||
only when chain connectivity, section and local axes are consistent and the station has no
|
||||
concentrated force/moment. The two positive-local-x section-cut values must first agree within the
|
||||
approved component tolerance. If they agree, choose the endpoint with smaller stable internal
|
||||
element ID; never average. Reversed orientation, branch, section jump, local-axis discontinuity or
|
||||
loaded interior station requires an element-aware future schema and is a `schema-mismatch` under
|
||||
this legacy schema.
|
||||
|
||||
## Coverage Matrix
|
||||
|
||||
The authoritative comparison source is FESA HDF5, not an extracted FESA CSV. Dataset paths use
|
||||
the canonical V0 step identity.
|
||||
|
||||
| verification quantity | requirement ids | model_id | FESA HDF5 dataset | legacy CSV and components | row identity/location | tolerance | verification method | status |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| nodal displacement/rotation | 003, 029-031, 036-042 | `cantilever-beam-b33` | `/steps/Step-1/frames/0/nodal/displacement` | `reference/cantilever beam/cantilever beam displacements.csv`: `U-U1/U-U2/U-U3 -> UX/UY/UZ`, `UR-UR1/UR-UR2/UR-UR3 -> URX/URY/URZ` | preserved instance + source node; global nodal | `1e-9 + 1e-6*reference_scale` per displacement/rotation component | HDF5-to-read-only CSV after artifact/row-set precheck | ready for implementation planning; comparison not run |
|
||||
| nodal reaction force | 007, 027, 029-031, 036-042 | `cantilever-beam-b33` | `/steps/Step-1/frames/0/nodal/reaction` | `reference/cantilever beam/cantilever beam reactions.csv`: `RF-RF1/RF-RF2/RF-RF3 -> RF1/RF2/RF3` | preserved instance + source node; global nodal | `1e-3 + 1e-6*reference_scale` per force component | HDF5-to-read-only CSV plus global equilibrium | ready for implementation planning; comparison not run |
|
||||
| nodal reaction moment | 007, 027, 029-031, 036-042 | `cantilever-beam-b33` | `/steps/Step-1/frames/0/nodal/reaction` | `reference/cantilever beam/cantilever beam reactions.csv`: `RM-RM1/RM-RM2/RM-RM3 -> RM1/RM2/RM3` | preserved instance + source node; global nodal | `1e-3 + 1e-6*reference_scale` per moment component | HDF5-to-read-only CSV plus moment equilibrium | ready for implementation planning; comparison not run |
|
||||
| section axial force | 031, 036-042 | `cantilever-beam-b33` | `/steps/Step-1/frames/0/element/section_resultant` | `reference/cantilever beam/cantilever beam elemental forces.csv`: `SF-SF1 -> N` | positive-local-x endpoint projected to eligible source node station | `1e-3 + 1e-6*reference_scale` for `N` | endpoint consistency, deterministic station selection, HDF5-to-CSV | ready for implementation planning; comparison not run |
|
||||
| section moments/torsion | 031, 036-042 | `cantilever-beam-b33` | `/steps/Step-1/frames/0/element/section_resultant` | `reference/cantilever beam/cantilever beam elemental forces.csv`: `SM-SM1 -> My`, `SM-SM2 -> Mz`, `SM-SM3 -> T` | positive-local-x endpoint projected to eligible source node station; beam local | `1e-3 + 1e-6*reference_scale` separately for `My`, `Mz`, `T` | endpoint consistency, deterministic station selection, HDF5-to-CSV | ready for implementation planning; comparison not run |
|
||||
| equilibrium end action | 031, 035, 043 | analytical models and physics portfolio | `/steps/Step-1/frames/0/element/end_force_local` | Abaqus CSV N/A for direct outward-action comparison | element endpoint `xi=-1,+1`; local outward action `[FX,FY,FZ,MX,MY,MZ]` | analytical normalized `1e-12`; residual `1e-10` | unit/analytical end-sign tests and later physics sanity | planned |
|
||||
| generalized strain/resultant | 029, 031, 035 | code and analytical models | `/steps/Step-1/frames/0/element/generalized_strain` and `/steps/Step-1/frames/0/element/generalized_resultant` | Abaqus CSV N/A | two Gauss points; beam local | matrix/formulation normalized `1e-12`, analytical relative `1e-9` | formulation/unit/HDF5 schema tests | planned |
|
||||
| axial stress | 029, 032, 035 | axial/local-z analytical models | `/steps/Step-1/frames/0/element/stress_s11` | stress CSV N/A; Abaqus beam stress reference comparison N/A | element, Gauss point, input section point or `fesa-default` centroid | analytical relative `1e-9`; exact unit/row schema | unit/analytical recovery and HDF5 schema tests | planned; reference N/A |
|
||||
|
||||
For every matched reference group,
|
||||
`reference_scale=max(abs(Abaqus reference rows))` for the same model, step/frame, quantity and
|
||||
component, and `row_tolerance=absolute_floor+1e-6*reference_scale`. Abaqus values alone set the
|
||||
scale. A zero scale uses only the floor. Every row decision and max absolute, component-scale
|
||||
normalized, RMS, norm and worst-row/component metrics must be reported.
|
||||
|
||||
### Complete must-requirement coverage
|
||||
|
||||
Every approved `must` requirement is connected below to a model/test/quantity or an explicit
|
||||
non-reference governance check. `N/A` means that an Abaqus CSV is not the applicable evidence;
|
||||
it does not waive the requirement.
|
||||
|
||||
| requirement | model/test/quantity or explicit N/A | planned verification |
|
||||
| --- | --- | --- |
|
||||
| `FESA-REQ-LS3DEB-001` | `smoke-b33-cli`; `neg-b33-input-contract` second-step case | positive single-step and structured rejection test |
|
||||
| `FESA-REQ-LS3DEB-002` | all analytical B33 records | model-validation and formulation scope tests; CSV N/A except approved benchmark |
|
||||
| `FESA-REQ-LS3DEB-003` | all code/analytical records; displacement/reaction rows | exact DOF/component-order tests |
|
||||
| `FESA-REQ-LS3DEB-004` | axial, torsion and both bending records | four independent analytical solution tests |
|
||||
| `FESA-REQ-LS3DEB-005` | `smoke-b33-cli`, `cantilever-beam-b33` | B33 semantic mapping and artifact type precheck |
|
||||
| `FESA-REQ-LS3DEB-006` | `neg-b33-input-contract` B31 case | exact `unsupported-element-formulation` test |
|
||||
| `FESA-REQ-LS3DEB-007` | four cantilevers and prescribed-displacement record | DOF 1..6 load/BC and nonzero `dc` tests |
|
||||
| `FESA-REQ-LS3DEB-008` | `an-b33-line-load-kernel`; negative `*DLOAD` case | closed-form vector and unsupported parser tests; reference CSV N/A |
|
||||
| `FESA-REQ-LS3DEB-009` | `smoke-b33-cli`, keyword table tests, approved legacy input | exact positive keyword inventory |
|
||||
| `FESA-REQ-LS3DEB-010` | parser code-verification cases | case/comment/source-label preservation tests; CSV N/A |
|
||||
| `FESA-REQ-LS3DEB-011` | analytical load/BC decks and invalid arity/target cases | target expansion and row grammar tests |
|
||||
| `FESA-REQ-LS3DEB-012` | both bending and rotated-space records | property/axis mapping and transform checks |
|
||||
| `FESA-REQ-LS3DEB-013` | all analytical records; invalid property cases | `G` calculation and positive property tests |
|
||||
| `FESA-REQ-LS3DEB-014` | `neg-b33-input-contract` geometry cases; `NR-T05` | exact scale-aware length/projection boundary tests |
|
||||
| `FESA-REQ-LS3DEB-015` | multi-instance semantic fixture and all HDF5/reference identities | stable source/internal identity tests |
|
||||
| `FESA-REQ-LS3DEB-016` | multi-instance semantic fixture | distinct deterministic identity test; reference CSV N/A |
|
||||
| `FESA-REQ-LS3DEB-017` | invalid instance-transform case | exact diagnostic test |
|
||||
| `FESA-REQ-LS3DEB-018` | invalid nested/dependent cases | structured unsupported tests |
|
||||
| `FESA-REQ-LS3DEB-019` | `cantilever-beam-b33` input and allowlist table cases | warning/no-op and no semantic-effect tests |
|
||||
| `FESA-REQ-LS3DEB-020` | unknown-keyword negative case and `smoke-b33-cli` | error plus mandatory-output independence test |
|
||||
| `FESA-REQ-LS3DEB-021` | Domain/AnalysisModel code-verification fixture | non-copy/non-mutation ownership tests; CSV N/A |
|
||||
| `FESA-REQ-LS3DEB-022` | DOF/scatter/reconstruction code-verification fixture | DofManager ownership and exact mapping tests; CSV N/A |
|
||||
| `FESA-REQ-LS3DEB-023` | `smoke-b33-cli` and HDF5 state fixture | required/excluded state allocation tests; CSV N/A |
|
||||
| `FESA-REQ-LS3DEB-024` | `cv-b33-patch-rigid-assembly`, `NR-T11` | repeated thread-count CSR determinism test; CSV N/A |
|
||||
| `FESA-REQ-LS3DEB-025` | math/adapter dependency fixtures | storage/layout and public dependency review; CSV N/A |
|
||||
| `FESA-REQ-LS3DEB-026` | orchestration event-trace fixture | exact factorize-before-load order test; CSV N/A |
|
||||
| `FESA-REQ-LS3DEB-027` | `an-b33-prescribed-displacement` | effective RHS, reconstruction and residual reaction test |
|
||||
| `FESA-REQ-LS3DEB-028` | `smoke-b33-cli` writer failure/success fixtures | authoritative output and atomicity tests; CSV N/A |
|
||||
| `FESA-REQ-LS3DEB-029` | HDF5 rows in this Coverage Matrix | exact path/shape/component schema test |
|
||||
| `FESA-REQ-LS3DEB-030` | `smoke-b33-cli`; `cantilever-beam-b33` provenance | ordinary unit label and external SI metadata tests |
|
||||
| `FESA-REQ-LS3DEB-031` | all code/analytical models and three legacy CSV quantities | recovery component/location and mandatory-output tests |
|
||||
| `FESA-REQ-LS3DEB-032` | axial/local-z analytical stress; HDF5 `stress_s11` | stress unit/analytical/schema tests; Abaqus stress comparison N/A |
|
||||
| `FESA-REQ-LS3DEB-033` | `smoke-b33-cli`, diagnostic negative cases | CLI exit-code/field/order integration tests; CSV N/A |
|
||||
| `FESA-REQ-LS3DEB-034` | every implementation model/test | per-step RED/GREEN/VERIFY and full MSVC/CTest evidence; model CSV N/A |
|
||||
| `FESA-REQ-LS3DEB-035` | `NR-T01` through `NR-T11` and analytical inventory | exact numerical criteria in model records |
|
||||
| `FESA-REQ-LS3DEB-036` | `cantilever-beam-b33` and comparison-policy unit fixtures | Abaqus-only component scale and exact formula tests |
|
||||
| `FESA-REQ-LS3DEB-037` | same comparison fixtures, including zero-scale groups | exact SI floors and zero-scale tests |
|
||||
| `FESA-REQ-LS3DEB-038` | malformed reference cases in `neg-b33-input-contract` | pre-tolerance fail-fast and no-clamp/no-drop tests |
|
||||
| `FESA-REQ-LS3DEB-039` | verification-report schema fixture | every row decision and aggregate/worst metrics test |
|
||||
| `FESA-REQ-LS3DEB-040` | exact legacy Artifact Bundle Contract | inventory plus `git diff --exit-code -- reference/` process check |
|
||||
| `FESA-REQ-LS3DEB-041` | approved artifact precheck | four files, B33, exact headers, unique keys, finite values |
|
||||
| `FESA-REQ-LS3DEB-042` | three comparison quantities and station normalization | exact component mapping, endpoint consistency and no-average tests |
|
||||
| `FESA-REQ-LS3DEB-043` | gate audit; later physics portfolio | reference execution N/A at this step; enforce build/test -> comparison -> physics -> release order |
|
||||
| `FESA-REQ-LS3DEB-044` | process/Git diff audit and limitations review | no reference execution/mutation and no out-of-scope support claim |
|
||||
|
||||
## Artifact Acceptance Checklist
|
||||
|
||||
Read-only inventory inspection on `2026-08-09` established the following pre-implementation facts:
|
||||
|
||||
- all four exact legacy paths exist;
|
||||
- the input declares `TYPE=B33`;
|
||||
- each CSV trimmed header matches the documented `abaqus-cae-report-csv-v0` inventory;
|
||||
- each CSV has 11 data rows with a unique `(Frame, Part Instance Name, Node Label)` key;
|
||||
- every projected numeric field is finite and every row has the header arity;
|
||||
- generator, source commit, SI units, coordinates, step/increment/time and tolerance provenance are
|
||||
recorded in the approved design and this contract;
|
||||
- legacy `metadata.json`, `README.md` and stress CSV are accepted N/A exceptions;
|
||||
- no reference value was recalculated and no comparison was performed.
|
||||
|
||||
Before an actual comparison, tooling must repeat all artifact checks, verify the exact Frame and
|
||||
instance identities, compare the complete projected row sets, and stop on any failure. The Step AC
|
||||
must also show no working-tree diff under `reference/`. Passing this checklist is not a reference
|
||||
comparison pass.
|
||||
|
||||
## Open Issues and Downstream Handoff
|
||||
|
||||
### Open issues
|
||||
|
||||
- No missing artifact or user decision blocks implementation planning for the approved legacy
|
||||
model.
|
||||
- `NR-O01` (official oneMKL PARDISO contract) and `NR-O02` (deterministic duplicate-reduction
|
||||
algorithm) remain implementation-planning inputs, not reference artifact defects.
|
||||
- Future reversed, branched, loaded-interior or section-jump reference models require an
|
||||
element-aware canonical CSV schema; the legacy node-station schema must not be generalized.
|
||||
|
||||
### Implementation Planning Agent
|
||||
|
||||
Use this order for tests that must fail before their production implementation:
|
||||
|
||||
1. Hermite/DOF/sign and `B` checks.
|
||||
2. Gauss/closed stiffness, rigid modes, rank and energy.
|
||||
3. Rotation/local-axis and signed line-load kernel.
|
||||
4. Axial, torsion, local-y and local-z analytical cantilevers.
|
||||
5. Nonzero prescribed displacement, SPD/residual and deterministic assembly.
|
||||
6. Parser invalid-input portfolio and CLI/HDF5 output contract.
|
||||
7. Legacy artifact precheck, row projection and tolerance/report policy.
|
||||
|
||||
Keep reference comparison after the full MSVC build/test gate and do not require new Abaqus
|
||||
artifacts for code/analytical fixtures.
|
||||
|
||||
### Reference Verification Agent
|
||||
|
||||
Run `ARTIFACT CHECK -> HDF5 ROW PROJECTION -> EXACT ROW-SET CHECK -> ENDPOINT CONSISTENCY ->
|
||||
COMPONENT-SCALE COMPARE -> REPORT`. Use only the exact legacy files and the HDF5 paths/component
|
||||
mappings in the Coverage Matrix. Do not synthesize `SF2/SF3` or stress rows, clamp values, omit
|
||||
rows, average interior endpoints, or change the approved tolerance.
|
||||
|
||||
### Physics Evaluation Agent
|
||||
|
||||
Only after reference comparison passes, check global force/moment equilibrium, reaction sign,
|
||||
displacement direction, bending symmetry, outward end action versus positive-face section
|
||||
resultant consistency, and normalized residual. The approved reference model is one local-z
|
||||
bending cantilever; broader physical coverage comes from the analytical portfolio, not an inflated
|
||||
claim about the single CSV bundle.
|
||||
|
||||
### I/O Definition Agent
|
||||
|
||||
No upstream contract revision is requested. If a future reference model needs an element-aware row
|
||||
identity, define and approve that schema separately without changing the read-only legacy aliases.
|
||||
Reference in New Issue
Block a user