test: onboard quad02 reaction reference

This commit is contained in:
NINI
2026-05-05 23:56:27 +09:00
parent 9741671f70
commit c47557885d
15 changed files with 597 additions and 24 deletions
+46 -5
View File
@@ -52,6 +52,7 @@ references/
quad_02.inp
quad_02_phase1.inp
quad_02_displacements.csv
quad_02_reactionforces.csv
```
`quad_01_displacements.csv` contains 121 nodal rows with these columns:
@@ -62,6 +63,12 @@ Node Label, U-U1, U-U2, U-U3, UR-UR1, UR-UR2, UR-UR3
`quad_02_displacements.csv` uses the same required columns and contains 121 nodal rows.
`quad_02_reactionforces.csv` contains 121 nodal rows with these columns:
```text
Node Label, RF-RF1, RF-RF2, RF-RF3, RM-RM1, RM-RM2, RM-RM3
```
Future manifest-driven layout is still recommended as the case set grows:
```text
@@ -140,13 +147,44 @@ Rules:
Structured JSON or HDF5 comparison artifacts may be added later, but `*_displacements.csv` is the accepted first automated reference format.
## Reaction CSV Artifact
Initial automated reaction comparison uses Abaqus-exported CSV files named:
```text
<case_name>_reactionforces.csv
<case_name>_reactions.csv
```
Required columns:
| CSV Column | FESA Field | Component |
|---|---|---|
| `Node Label` | `RF` | entity id |
| `RF-RF1` | `RF` | `RFX` |
| `RF-RF2` | `RF` | `RFY` |
| `RF-RF3` | `RF` | `RFZ` |
| `RM-RM1` | `RF` | `RMX` |
| `RM-RM2` | `RF` | `RMY` |
| `RM-RM3` | `RF` | `RMZ` |
Rules:
- Column matching is by exact normalized header text after trimming whitespace.
- `Node Label` is parsed as int64.
- All reaction force and reaction moment values are parsed as `double`.
- The comparator must match rows by node id, not by row order alone.
- Missing or nonnumeric `Node Label` values, duplicate CSV node labels, missing columns, or nonnumeric component values are reference artifact errors.
- Missing nodes in FESA output, duplicate FESA output node ids, wrong FESA `RF` component labels, or wrong nodal/global field metadata are comparison errors.
- CSV reaction comparison maps to `/results/steps/<step>/frames/<frame>/fieldOutputs/RF`.
- FESA `RF` must be recovered from full vectors, `K_full * U_full - F_full`.
## Other Result Artifacts
Additional Abaqus result exports may be added as the solver grows. Recommended naming:
| File Pattern | Purpose | Status |
|---|---|---|
| `*_displacements.csv` | Nodal `U` displacement/rotation comparison | Accepted initial format |
| `*_reactions.csv` | Nodal `RF` force/moment comparison | Recommended future format |
| `*_reactionforces.csv` | Nodal `RF` force/moment comparison | Accepted for `quad_02`; current node-wise comparison exposes an open solver/reference mismatch |
| `*_reactions.csv` | Nodal `RF` force/moment comparison | Accepted alias for future reaction CSV artifacts |
| `*_stresses.csv` | Stress output comparison | Future, after `S` output is documented |
| `*_strains.csv` | Strain output comparison | Future, after `E` output is documented |
| `*_section_forces.csv` | Shell resultant comparison | Future, after `SF` output is documented |
@@ -161,8 +199,8 @@ Current initial case:
| Case | Files | Notes |
|---|---|---|
| `quad_01` | `quad_01.inp`, `quad_01_displacements.csv` | Abaqus/CAE Learning Edition 2024 input; 121 displacement rows; includes `S4R`, `Part/Assembly/Instance`, `*Density`, and `NLGEOM=YES`, which are outside the current Phase 1 parser/solver subset |
| `quad_02` | `quad_02.inp`, `quad_02_displacements.csv` | Abaqus/CAE input; 121 displacement rows; uses `TYPE=S4` and `NLGEOM=NO`, but still includes `Part/Assembly/Instance` and `*Density`, so it must be normalized or handled by an explicit parser compatibility sprint before automated Phase 1 input acceptance |
| `quad_02_phase1` | `quad_02_phase1.inp`, `quad_02_displacements.csv`, `quad_02_notes.md` | Phase 1-compatible derivative input for `quad_02`; preserves ids, connectivity, material, thickness, boundary nodes, load node, and load magnitude while removing unsupported Abaqus/CAE scaffolding |
| `quad_02` | `quad_02.inp`, `quad_02_displacements.csv`, `quad_02_reactionforces.csv` | Abaqus/CAE input; 121 displacement rows and 121 RF/RM rows; uses `TYPE=S4` and `NLGEOM=NO`, but still includes `Part/Assembly/Instance` and `*Density`, so it must be normalized or handled by an explicit parser compatibility sprint before automated Phase 1 input acceptance |
| `quad_02_phase1` | `quad_02_phase1.inp`, `quad_02_displacements.csv`, `quad_02_reactionforces.csv`, `quad_02_notes.md` | Phase 1-compatible derivative input for `quad_02`; preserves ids, connectivity, material, thickness, boundary nodes, load node, and load magnitude while removing unsupported Abaqus/CAE scaffolding |
Rules:
- Original `.inp` files under `references/` should not be modified just to fit FESA Phase 1.
@@ -196,6 +234,7 @@ The first automated stored-reference displacement regression is active for:
```text
input: references/quad_02_phase1.inp
expected U: references/quad_02_displacements.csv
expected RF: references/quad_02_reactionforces.csv
```
Comparison rules:
@@ -203,7 +242,9 @@ Comparison rules:
- The normalized `quad_02_phase1.inp` is the executable Phase 1 input for this reference pair.
- The FESA `U` field is compared node-id-by-node-id against Abaqus CSV columns `U-U1`, `U-U2`, `U-U3`, `UR-UR1`, `UR-UR2`, and `UR-UR3`.
- The active tolerance is `abs_tol = 1.0e-12`, `rel_tol = 1.0e-5`, `reference_scale = 1.0`.
- Abaqus reaction CSV is still unavailable, so `RF` remains verified by full-vector equilibrium tests until a `*_reactions.csv` artifact is provided.
- The FESA `RF` field can now be compared node-id-by-node-id against Abaqus CSV columns `RF-RF1`, `RF-RF2`, `RF-RF3`, `RM-RM1`, `RM-RM2`, and `RM-RM3`.
- Current `quad_02_phase1` node-wise RF comparison is intentionally recorded as a non-passing known gap, not an accepted pass gate: with `abs_tol = 1.0e-6`, `rel_tol = 1.0e-5`, `reference_scale = 1.0`, the observed maximum absolute error is about `612.751347`, maximum relative error is about `0.494032`, and the first observed mismatch is node `1` `RFZ`, expected `6860.0`, actual `6652.459896`.
- Keep R-010 open until the `quad_02` RF mismatch is explained or fixed. Do not loosen reaction tolerances just to make this case pass.
## Phase 1 Benchmark Matrix
| Case | Purpose | Required Output |
@@ -275,7 +316,7 @@ Required negative tests:
## User Inputs Needed
- Additional small Abaqus `.inp` files and solved result CSV files under `references/`.
- Reaction output artifacts when available, preferably a documented `*_reactions.csv`.
- Additional reaction output artifacts when available, preferably documented `*_reactionforces.csv` or `*_reactions.csv` files.
- Abaqus version used to generate each reference when it is not evident from the `.inp`.
- Unit system notes and tolerances for each case.
- Whether future Phase 1-compatible reference files will use Abaqus `S4`, while `S4R` remains deferred.