test: onboard quad02 reaction reference
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user