modify tolerance policy

This commit is contained in:
KOKO\Mimi
2026-08-18 02:29:26 +09:00
parent 123a1b6ccc
commit 624ea4872c
36 changed files with 1909 additions and 672 deletions
@@ -12,9 +12,10 @@
- status: `ready-for-implementation-planning`
- owner_agent: `reference-model-agent`
- date: `2026-08-09`
- amended_on: `2026-08-18`
- approved_reference_model: `cantilever-beam-b33`
- approved_reference_schema: `abaqus-cae-report-csv-v0`
- reference_baseline: `reference/cantilever beam/` at source commit `2b34d0b`
- approved_reference_identity: direct source-node and element-endpoint rows
- reference_baseline: exact current files under `reference/cantilever beam/`
이 문서는 구현 전에 필요한 code verification, analytical solution verification 및
approved B33 reference comparison의 모델·artifact 계약을 정의한다. 이 status는 모델과
@@ -45,7 +46,7 @@ test fixtures이며 reference artifact bundle로 가장하지 않는다.
논리 모델 `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은 필수지만
수치 비교는 ADR-022의 common family-scale tolerance를 사용한다. Axial `S11` output은 필수지만
Abaqus beam stress comparison은 명시적 N/A다.
### Excluded validation scope
@@ -136,8 +137,8 @@ single-step deck and changes only the named condition.
- 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`
- historical_schema_record: `abaqus-cae-report-csv-v0` for the 2026-08-09 inventory only
- historical_source_commit: `2b34d0b` for the 2026-08-09 inventory only
- generator: `Abaqus/CAE Learning Edition 2024`
- units: SI
- nodal_coordinate_system: global Cartesian
@@ -145,7 +146,7 @@ single-step deck and changes only the named condition.
- step_name: `Step-1`
- increment: `1`
- step_time: `1.0`
- artifact_status: all four exact paths present; structural precheck observed; FESA comparison not run
- artifact_status: all four exact paths present; 20-row element-endpoint comparison passed on 2026-08-18
- 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
@@ -193,93 +194,44 @@ For this approved legacy bundle:
- `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 record 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. The optional metadata file's absence and the approved legacy
README/stress exclusions therefore do not change the record to `needs-reference-artifacts`.
This contract records the exact required paths, row identities, comparison quantities, tolerance
policy and the stress N/A reason. Historical schema/provenance fields are retained as dated
inventory only and are not readiness gates. The optional metadata file's absence and the approved
legacy README/stress exclusions do not change the record to `needs-reference-artifacts`.
### Future reference bundles
### Later reference cases and optional metadata
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 # optional
<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. `README.md` is mandatory for later bundles;
`metadata.json` is optional. A quantity CSV may be omitted only when the upstream acceptance
contract explicitly records N/A and gives its verification replacement. Missing required files
or required Reference Model Contract provenance keep that model at `needs-reference-artifacts`.
## Reference Metadata Contract
This document is the required source of truth for the following metadata. A later bundle may
optionally duplicate it in `metadata.json` using at least this schema:
```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. An absent `metadata.json` is allowed. If the file exists, inventory it read-only and report
any disagreement with this contract or stored artifacts as an upstream contract/provenance issue.
Each later feature requirement names its exact input and comparison CSV paths, required row
identity/components and N/A quantities. Canonical filenames, `README.md`, `metadata.json`,
generator/version, provenance, duplicated unit/schema fields and a portfolio-wide directory layout
are not readiness gates unless that feature explicitly makes one part of its numerical comparison
contract. No agent may invent unknown provenance. If optional metadata exists, inspect it read-only
and report disagreement without rewriting the reference artifacts.
## 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
preserved instance identity, every declared source identity must be unique, 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 |
| `reference/cantilever beam/cantilever beam elemental forces.csv` | `Frame, Part Instance Name, Element Label, Node Label, SF-SF1, SM-SM1, SM-SM2, SM-SM3` | `(Frame, Part Instance Name, Element Label, Node Label)` | 20 rows; 10 B33 elements x 2 connectivity-matched endpoints; 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.
For the elemental-force CSV, `(Part Instance Name, Element Label, Node Label)` is the source
element-endpoint identity. Each B33 element must have exactly two rows whose node labels match its
ordered input connectivity. Every row maps directly to the corresponding HDF5
`[element,endpoint,N/T/My/Mz]` row. Missing, extra, duplicate or connectivity-mismatched endpoint
identity fails as `schema-mismatch` before tolerance. The comparator does not collapse endpoints to
a node station, choose a representative or average values.
## Coverage Matrix
@@ -288,20 +240,20 @@ 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 |
| 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 | common translation/rotation family policy | HDF5-to-read-only CSV after artifact/row-set precheck | passed 2026-08-18 |
| 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 | common reaction-force family policy | HDF5-to-read-only CSV plus global equilibrium | passed 2026-08-18 |
| 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 | common reaction-moment family policy | HDF5-to-read-only CSV plus moment equilibrium | passed 2026-08-18 |
| 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` | direct instance + source element + endpoint node; beam local | common section-force family policy | direct HDF5-to-endpoint CSV comparison | passed 2026-08-18 |
| 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` | direct instance + source element + endpoint node; beam local | common section-moment family policy | direct HDF5-to-endpoint CSV comparison | passed 2026-08-18 |
| 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.
For every matched family, `S=max(abs(Abaqus reference rows))` uses only read-only reference values.
Rows with `abs(reference)<=0.01*S` use `error<=0.01*S`; other rows use relative error `<=0.05`;
the family also requires `RMS(error)/S<=0.01`. A zero-scale family requires exact-zero FESA values.
Every row branch/decision and family scale, near-zero band/count, max absolute error,
scale-relative RMS, worst row/component and zero-scale diagnostic must be reported.
### Complete must-requirement coverage
@@ -346,19 +298,20 @@ it does not waive the requirement.
| `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-036` | `cantilever-beam-b33` and comparison-policy unit fixtures | exact family membership and Abaqus-only scale tests |
| `FESA-REQ-LS3DEB-037` | same comparison fixtures, including boundary and zero-scale families | near-zero, relative-row, scale-relative RMS 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-039` | verification-report schema fixture | every row branch/decision and family 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-042` | three comparison quantities and direct endpoint projection | exact component mapping plus missing/extra/duplicate/connectivity-mismatch endpoint 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:
The following is historical 2026-08-09 pre-implementation inventory evidence. Its 11-row
elemental-force observation is superseded by the 2026-08-18 regenerated 20-row endpoint file:
- all four exact legacy paths exist;
- the input declares `TYPE=B33`;
@@ -370,6 +323,11 @@ Read-only inventory inspection on `2026-08-09` established the following pre-imp
- absent `metadata.json` is allowed by project-wide policy; legacy `README.md` and stress CSV are accepted N/A exceptions;
- no reference value was recalculated and no comparison was performed.
Read-only inspection on `2026-08-18` confirms that the elemental-force CSV has 20 rows,
exactly two connectivity-matched endpoint rows for each of the 10 B33 elements. Displacement and
reaction CSVs remain 11-row source-node tables. The fresh comparison passed on 2026-08-18;
current metrics are recorded in `reference-comparison.md`.
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
@@ -383,8 +341,8 @@ comparison pass.
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.
- Future reversed, branched, loaded-interior or section-jump reference models use the same
element-endpoint identity and require their own approved reference coverage.
### Implementation Planning Agent
@@ -403,8 +361,8 @@ 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
Run `ARTIFACT CHECK -> HDF5 ROW PROJECTION -> EXACT ROW-SET CHECK -> DIRECT ENDPOINT MATCH ->
COMMON FAMILY-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.