test: onboard quad02 reaction reference
This commit is contained in:
@@ -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.
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
@@ -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
@@ -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.
|
||||
|
||||
@@ -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