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
+1
View File
@@ -62,6 +62,7 @@ Current stored reference notes:
- It uses `TYPE=S4R`, `Part`, `Assembly`, `Instance`, `*Density`, and `NLGEOM=YES`, all of which are outside the current Phase 1 parser/solver subset.
- Its paired `references/quad_01_displacements.csv` is still valid as a stored displacement reference artifact for future compatibility and regression work.
- `references/quad_02.inp` uses `TYPE=S4`, so it targets the Phase 1 MITC4 element formulation, and its paired `references/quad_02_displacements.csv` has the accepted displacement CSV shape.
- `references/quad_02_reactionforces.csv` is a paired Abaqus RF/RM result export for the stored `quad_02` case. It is a reference result artifact and does not change parser scope.
- `quad_02.inp` still uses Abaqus/CAE `Part`, `Assembly`, `Instance`, and `*Density`; it is therefore a stored S4 reference artifact and compatibility decision point, not automatic parser acceptance as-is.
- `references/quad_02_phase1.inp` is the normalized Phase 1-compatible derivative input for `quad_02`. It preserves node ids, element ids/connectivity, S4 element type, elastic material, shell thickness, fixed boundary nodes, load node, and concentrated load while removing `Part/Assembly/Instance`, `*Density`, restart/output request keywords, and unsupported step metadata.
+3 -1
View File
@@ -391,11 +391,13 @@ Stored artifacts currently known:
- `references/quad_01_displacements.csv`
- `references/quad_02.inp`
- `references/quad_02_displacements.csv`
- `references/quad_02_reactionforces.csv`
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.
- `quad_02.inp` contains `TYPE=S4`, which is the correct element target for Phase 1, but it also uses `Part/Assembly/Instance`. The normalized `quad_02_phase1.inp` remains the executable Phase 1 input path. Do not silently expand parser support while implementing or verifying the element.
- `quad_02_reactionforces.csv` is now available for Abaqus RF/RM comparison. The current node-wise RF comparison does not pass; keep this as a formulation/solver verification gap until the mismatch is explained or fixed.
## Implementation Checklist
The next MITC4 implementation pass should proceed in this order:
+21
View File
@@ -124,6 +124,27 @@ Rules:
- Missing nodes, duplicate node labels, missing columns, or nonnumeric values are reference artifact errors.
- CSV comparison uses the same absolute/relative tolerance policy as other reference artifacts.
## Abaqus Reaction CSV Mapping
Reference reaction CSV files map Abaqus exported force and moment columns to FESA `RF` components:
| CSV Column | FESA Component | Meaning |
|---|---|---|
| `Node Label` | `entity_id` | Node id, stored as int64 |
| `RF-RF1` | `RFX` | Reaction force in global 1/x direction |
| `RF-RF2` | `RFY` | Reaction force in global 2/y direction |
| `RF-RF3` | `RFZ` | Reaction force in global 3/z direction |
| `RM-RM1` | `RMX` | Reaction moment about global 1/x direction |
| `RM-RM2` | `RMY` | Reaction moment about global 2/y direction |
| `RM-RM3` | `RMZ` | Reaction moment about global 3/z direction |
Rules:
- Accepted reaction CSV filenames may use `*_reactionforces.csv` or `*_reactions.csv`.
- CSV numeric values are parsed as `double`.
- Node labels are matched to FESA result entity ids exactly.
- Missing nodes, duplicate node labels, missing columns, or nonnumeric values are reference artifact errors.
- Node-wise reaction comparison uses the full-vector FESA `RF` field, not reduced solver quantities.
- Do not relax tolerances to pass a reaction comparison without documenting the numerical reason.
## Boundary Conditions
Phase 1 uses constrained DOF elimination:
+3 -1
View File
@@ -72,13 +72,15 @@ If a lower-precedence document needs to override a higher-precedence decision, u
- Require singular system diagnostics.
- Defer mesh quality diagnostics.
- Validate against stored reference artifacts under `../references/`; do not require Abaqus execution.
- Treat Abaqus `*.inp` files plus `*_displacements.csv` result files as the initial accepted reference artifact contract.
- Treat Abaqus `*.inp` files plus `*_displacements.csv` result files as the initial accepted displacement reference artifact contract.
- Treat Abaqus `*_reactionforces.csv` or `*_reactions.csv` files as reaction reference artifacts only after their RF/RM column mapping, tolerance, and pass/fail status are documented.
## Implementation Readiness Checklist
Before creating Phase 1 implementation steps:
- Use `../references/` as the accepted reference artifact folder.
- Use Abaqus `.inp` files plus solved `*_displacements.csv` files as the first automated displacement reference format.
- Use Abaqus RF/RM CSV files such as `*_reactionforces.csv` as the first reaction reference format when provided, but do not hide a node-wise RF mismatch by relaxing tolerances.
- Keep a compatibility note when a stored Abaqus reference input contains features outside the current Phase 1 parser subset.
- Use the current `MITC4_FORMULATION.md` as the Phase 1 MITC4 gate before implementing or reviewing element stiffness.
- Treat `U` and `RF` as the mandatory Phase 1 outputs; `S`, `E`, and `SF` require a later recovery-location decision.
+32 -2
View File
@@ -298,7 +298,37 @@ Rules:
- The comparator must require FESA `U` component labels `UX`, `UY`, `UZ`, `RX`, `RY`, `RZ` with `position = NODAL`, `entity_type = node`, and `basis = GLOBAL`.
- Duplicate FESA output node ids, duplicate CSV node labels, missing FESA nodes, missing CSV columns, and nonnumeric CSV values are comparison failures.
- The comparison report may be stored under `/referenceComparison`.
- Reaction CSV, stress CSV, or section force CSV formats must be documented before automated use.
Initial accepted reaction reference naming:
```text
references/<case_name>_reactionforces.csv
references/<case_name>_reactions.csv
```
`*_reactionforces.csv` and `*_reactions.csv` map to:
```text
/results/steps/<step>/frames/<frame>/fieldOutputs/RF
```
Required CSV columns:
| CSV Column | HDF5 Field Component |
|---|---|
| `Node Label` | `entity_ids` |
| `RF-RF1` | `RFX` |
| `RF-RF2` | `RFY` |
| `RF-RF3` | `RFZ` |
| `RM-RM1` | `RMX` |
| `RM-RM2` | `RMY` |
| `RM-RM3` | `RMZ` |
Rules:
- The comparator must require FESA `RF` component labels `RFX`, `RFY`, `RFZ`, `RMX`, `RMY`, `RMZ` with `position = NODAL`, `entity_type = node`, and `basis = GLOBAL`.
- The FESA `RF` field must be the full-vector reaction field recovered as `K_full * U_full - F_full`.
- Duplicate FESA output node ids, duplicate CSV node labels, missing FESA nodes, missing CSV columns, and nonnumeric CSV values are comparison failures.
- Stress CSV or section force CSV formats must be documented before automated use.
## Naming Rules
- Use stable ASCII group and dataset names.
@@ -318,4 +348,4 @@ For large models:
- Exact mandatory stress/strain/resultant output variables in Phase 1.
- Whether result files always mirror the model or only store output entity ids.
- Whether reference comparison results are stored in solver output files or separate reports.
- Exact naming and column contracts for non-displacement Abaqus CSV reference files.
- Exact naming and column contracts for stress, strain, and section-force Abaqus CSV reference files.
+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.