feat(nonlinear-static-newton-raphson): step 11 - equilibrium-projection-and-reference-gate
This commit is contained in:
@@ -4,234 +4,294 @@
|
||||
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- source_requirements: `docs/nonlinear-static-newton-raphson/requirements.md`
|
||||
- source_requirements_sha256: `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`
|
||||
- source_research: `docs/nonlinear-static-newton-raphson/research.md`
|
||||
- source_formulation: `docs/nonlinear-static-newton-raphson/formulation.md`
|
||||
- source_numerical_review: `docs/nonlinear-static-newton-raphson/numerical-review.md`
|
||||
- decision_source: `USER-DECISION-004 option 1`
|
||||
- balance_gate_decision: user-approved factor-one global force/moment normalized gate `<=1e-8`
|
||||
- status: `pass-for-io-definition`
|
||||
- owner_agent: `numerical-review-agent`
|
||||
- date: `2026-08-23`
|
||||
- date: `2026-08-28`
|
||||
- artifact_policy: `read-only-existing-files`
|
||||
- tolerance_policy: `docs/TOLERANCE.md`
|
||||
- external_tolerance_policy: `docs/TOLERANCE.md`
|
||||
|
||||
이 문서는 logical reference quantity, source identity, component matching, row precheck와
|
||||
blocking/warning 분류만 정의한다. 최종 HDF5 dataset projection은 I/O Definition Agent 소유다.
|
||||
이 문서는 logical quantity, source identity, component matching, row precheck와
|
||||
blocking/warning-only/review-only 분류를 정의한다. 최종 HDF5 dataset projection은 I/O
|
||||
Definition Agent 소유이며 이 문서에는 dataset path를 정의하지 않는다.
|
||||
|
||||
## 2. Reference Acceptance Scope
|
||||
|
||||
Required scope는 두 stored case다.
|
||||
세 stored case를 사용한다.
|
||||
|
||||
- `shellnl-s4-final`: `nlgeom=YES` nonlinear static S4 final accepted state를 비교하는
|
||||
primary external reference case.
|
||||
- `shell-s4-linear-limit`: 같은 S4 mesh의 `nlgeom=NO` read-only linear-limit/reference-identity
|
||||
regression case. 이 case는 nonlinear response evidence가 아니며, 현재 stress CSV의 element-label
|
||||
ordering을 row-order matching으로 사용하지 않는다.
|
||||
- `shellnl-meshfine-s4-final`: 사용자가 추가하고 검증을 요청한 729-node/676-element
|
||||
mesh-refined nonlinear primary case. External `U1/U2/U3`와 factor-one internal equilibrium은
|
||||
blocking이다.
|
||||
- `shellnl-s4-final`: 49-node/36-element coarse nonlinear companion regression. Fine case와
|
||||
별도 reference에 대해 external `U1/U2/U3`와 factor-one internal equilibrium을 blocking으로
|
||||
검증한다.
|
||||
- `shell-s4-linear-limit`: 같은 coarse topology의 `NLGEOM=NO` linear-limit/source-identity
|
||||
regression. Nonlinear response evidence로 부르지 않는다.
|
||||
|
||||
`shellNL`은 final-state reference comparison에는 충분하지만 weak nonlinear response다. Dominant
|
||||
`U3`/stress 값이 linear case와 거의 같으므로 finite-rotation objectivity, consistent tangent,
|
||||
commit/rollback과 convergence lifecycle은 `numerical-review.md`의 blocking internal tests로 검증한다.
|
||||
모든 selected case에서 displacement `U1/U2/U3`는 blocking, `UR1/UR2/UR3`는
|
||||
warning-only다. Coarse/fine local nodal `RF1/RF2/RF3`와 physical spatial `RM1/RM2`는
|
||||
common external policy로 exact error/precheck evidence를 만들되 review-only이고 전체 blocking
|
||||
verdict를 바꾸지 않는다. Local `RM3`와 stress는 numerical comparison에서 제외한다.
|
||||
|
||||
## 3. Reference Case Inventory with exact input and required CSV paths
|
||||
Coarse와 fine은 각자의 input/CSV에 독립적으로 비교한다. 두 mesh 사이 node interpolation,
|
||||
row pairing, averaging, collapse, observed convergence order 또는 direct coarse/fine equality
|
||||
gate를 만들지 않는다. Fine case 추가는 Abaqus S4와 FESA MITC4의 element formulation,
|
||||
integration, stabilization 또는 internal behavior equivalence를 의미하지 않는다.
|
||||
|
||||
| case id | artifact role | required comparison artifact | exact path | observed status |
|
||||
## 3. Reference Case Inventory
|
||||
|
||||
### 3.1 Exact input and CSV paths
|
||||
|
||||
| case id | purpose | exact path | required disposition | observed status |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `shellnl-s4-final` | nonlinear input | yes | `reference/shellNL/shellNL.inp` | readable; S4, 49 nodes, 36 elements, `NLGEOM=YES` |
|
||||
| `shellnl-s4-final` | displacement reference | yes | `reference/shellNL/shellNL displacements.csv` | 49 finite unique node rows; one factor-one Frame |
|
||||
| `shellnl-s4-final` | reaction reference | yes | `reference/shellNL/shellNL reactions.csv` | 49 finite unique node rows; one factor-one Frame |
|
||||
| `shellnl-s4-final` | stress review evidence | no | `reference/shellNL/shellNL stresses.csv` | 288 finite unique rows; element labels `1..36` in stored ascending blocks |
|
||||
| `shell-s4-linear-limit` | linear control input | yes | `reference/shell/shell.inp` | readable; S4, 49 nodes, 36 elements, `NLGEOM=NO` |
|
||||
| `shell-s4-linear-limit` | displacement reference | yes | `reference/shell/shell displacements.csv` | 49 finite unique node rows; no `Frame` column |
|
||||
| `shell-s4-linear-limit` | reaction review evidence | no | `reference/shell/shell reactions.csv` | 49 finite unique node rows |
|
||||
| `shell-s4-linear-limit` | stress review evidence | no | `reference/shell/shell stresses.csv` | 288 finite unique rows; element labels `1..36` in stored ascending blocks |
|
||||
| `shell-s4-linear-limit` | linear input | `reference/shell/shell.inp` | required | readable; S4, 49 nodes, 36 elements, `NLGEOM=NO` |
|
||||
| `shell-s4-linear-limit` | displacement reference | `reference/shell/shell displacements.csv` | required blocking/warning | 49 unique finite rows; single final static state |
|
||||
| `shell-s4-linear-limit` | reaction inventory | `reference/shell/shell reactions.csv` | inspection-only | 49 unique finite rows |
|
||||
| `shell-s4-linear-limit` | stress ordering inventory | `reference/shell/shell stresses.csv` | optional inspection | 288 rows; element labels `1..36` in contiguous ascending blocks |
|
||||
| `shellnl-s4-final` | coarse nonlinear input | `reference/shellNL/shellNL.inp` | required | readable; S4, 49 nodes, 36 elements, `NLGEOM=YES` |
|
||||
| `shellnl-s4-final` | displacement reference | `reference/shellNL/shellNL displacements.csv` | required blocking/warning | 49 unique finite rows; exact factor-one Frame |
|
||||
| `shellnl-s4-final` | local reaction reference | `reference/shellNL/shellNL reactions.csv` | required review-only | 49 unique finite inventory rows; exact factor-one Frame |
|
||||
| `shellnl-s4-final` | stress inventory | `reference/shellNL/shellNL stresses.csv` | optional inspection | 288 rows; element labels `1..36` in contiguous ascending blocks |
|
||||
| `shellnl-meshfine-s4-final` | fine nonlinear input | `reference/shellNL-meshfine/shellNL-meshfine.inp` | required | readable; S4, 729 nodes, 676 elements, `NLGEOM=YES` |
|
||||
| `shellnl-meshfine-s4-final` | displacement reference | `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | required blocking/warning | 729 unique finite rows; exact factor-one Frame |
|
||||
| `shellnl-meshfine-s4-final` | local reaction reference | `reference/shellNL-meshfine/shellNL-meshfine reactions.csv` | required review-only | 729 unique finite inventory rows; exact factor-one Frame |
|
||||
| `shellnl-meshfine-s4-final` | stress inventory | `reference/shellNL-meshfine/shellNL-meshfine stresses.csv` | optional inspection | 5,408 rows in ascending element blocks; one malformed optional node label `ss` |
|
||||
|
||||
`required comparison artifact=no`인 파일도 이번 review에서 읽기 가능성, row identity,
|
||||
finite values와 current ordering을 확인했다. 그러나 해당 파일은 missing-required-artifact
|
||||
판정이나 tolerance family를 만들지 않는다.
|
||||
`reference/shell/shell stresses.csv`는 사용자 변경 후 element label `1..36` 순서로 저장되어
|
||||
있음을 확인했다. Row order는 matching identity가 아니며 deterministic inspection display에만
|
||||
사용한다. Fine stress의 `Element Label=1`, `SNEG`, `Node Label=ss` 한 행은 optional excluded
|
||||
artifact issue다. 이 파일을 rename, repair, normalize 또는 rewrite하지 않는다.
|
||||
|
||||
두 `.inp`는 같은 node/element/connectivity, material/section, instance, boundary와 center-node
|
||||
`CLOAD`를 사용한다. Text 차이는 heading identity, `NLGEOM=NO -> YES`, 그리고 `*STATIC`
|
||||
data `1.,1.,1e-05,1. -> 0.1,1.,0.001,0.1`이다. 따라서 `shellNL`은 실제 nonlinear
|
||||
selector와 승인된 fixed increment `0.1`을 갖지만, 두 deck 차이를 오직 `NLGEOM` 하나의
|
||||
isolated effect라고 표현하지 않는다.
|
||||
Coarse와 fine nonlinear input은 homogeneous isotropic material `E=2.1e11`, `nu=0.3`,
|
||||
shell thickness `0.5`, center node-set load `DOF 3 = -100000`, all-six-DOF perimeter support,
|
||||
`*STATIC 0.1,1.,0.001,0.1`을 사용한다. Fine case는 같은 physical setup의 refined topology다.
|
||||
|
||||
Read-only SHA-256 observations:
|
||||
### 3.2 Read-only artifact hashes
|
||||
|
||||
| path | SHA-256 |
|
||||
| exact path | SHA-256 |
|
||||
| --- | --- |
|
||||
| `reference/shellNL/shellNL.inp` | `4BF3ECB0F7F1E8462C573E993DBC97AC5D920C91CF6F23AD4C6891D77FFBADA2` |
|
||||
| `reference/shellNL/shellNL displacements.csv` | `4E0F99CA9372B1ADF7FAF102F43BC0B887DC743FDEDA378E4342D2CF8E0C0786` |
|
||||
| `reference/shellNL/shellNL reactions.csv` | `001CB1541A9E94424E5E650509D46BC8724970DF4DE47184D9DB09C7938AB069` |
|
||||
| `reference/shellNL/shellNL stresses.csv` | `5500E5114B1C44887528E30CEC054A1EB0F68BE3F4B8CE81FA59FC74A881483F` |
|
||||
| `reference/shell/shell.inp` | `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF` |
|
||||
| `reference/shell/shell displacements.csv` | `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B` |
|
||||
| `reference/shell/shell reactions.csv` | `0E34EEC27E700C3C0C744C1DAFD8A3B95EFEF34B8616FE96665876586FE82D41` |
|
||||
| `reference/shell/shell stresses.csv` | `2B75A5B0DEB045A283C9BB7E9B1153B79F7537FF487214BF4A23316B59B660A7` |
|
||||
| `reference/shellNL/shellNL.inp` | `4BF3ECB0F7F1E8462C573E993DBC97AC5D920C91CF6F23AD4C6891D77FFBADA2` |
|
||||
| `reference/shellNL/shellNL displacements.csv` | `4E0F99CA9372B1ADF7FAF102F43BC0B887DC743FDEDA378E4342D2CF8E0C0786` |
|
||||
| `reference/shellNL/shellNL reactions.csv` | `001CB1541A9E94424E5E650509D46BC8724970DF4DE47184D9DB09C7938AB069` |
|
||||
| `reference/shellNL/shellNL stresses.csv` | `5500E5114B1C44887528E30CEC054A1EB0F68BE3F4B8CE81FA59FC74A881483F` |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine.inp` | `40DF1CE77311C8D799564A21A60F3BDEBB8148D52CAE22B7292FDFAD32018220` |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | `740819FF8AED0E279961581F7CDBFA12784CFBA3A488C35A652E80103F64433F` |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine reactions.csv` | `AEB01C98C596792B0E5F2B86A81945CAB0BEB0C6969CFC6738C6F81DF1F94363` |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine stresses.csv` | `6D6213AB5DB9D6B1F5FBD641367D08BACC805967B6C5A95BCE0E1A5395377782` |
|
||||
|
||||
## 4. Source Identity and Component Contract
|
||||
|
||||
### 4.1 Accepted-state identity
|
||||
### 4.1 Case and accepted-state identity
|
||||
|
||||
- Abaqus identifiers are case-insensitive semantic identities. Input spelling
|
||||
`Part-1-1` and CSV spelling `PART-1-1` match as one instance while original text is
|
||||
retained in artifacts and reports; no file or row is rewritten.
|
||||
- `shellnl-s4-final` rows require exact CSV `Frame` value
|
||||
`Increment 10: Step Time = 1.000`, mapped logically to the accepted factor-one state.
|
||||
- `shell-s4-linear-limit` rows have no `Frame` column and map to the single final static state.
|
||||
- Row order is never a matching identity. It may only be used for deterministic reporting after
|
||||
source keys are matched.
|
||||
- Instance identity는 case-insensitive semantic match다. Artifact spelling `Part-1-1`과
|
||||
`PART-1-1`은 같은 instance이지만 file text를 rewrite하지 않는다.
|
||||
- 두 nonlinear case required rows의 exact CSV Frame은
|
||||
`Increment 10: Step Time = 1.000`이며 accepted factor-one state에 대응한다.
|
||||
- Linear case에는 `Frame` column이 없고 single final static state로 해석한다.
|
||||
- Row order는 identity가 아니다. Stable key match 후 deterministic reporting order로만 정렬한다.
|
||||
|
||||
### 4.2 Nodal displacement contract
|
||||
### 4.2 Nodal displacement and rotation
|
||||
|
||||
Required mapping is `U-U1/U-U2/U-U3 -> U1/U2/U3` and
|
||||
`UR-UR1/UR-UR2/UR-UR3 -> UR1/UR2/UR3`. U is global length; UR is the
|
||||
dimensionless fixed-initial global rotation-vector output. Logical key is
|
||||
CSV `U-U1/U-U2/U-U3`는 logical `U1/U2/U3`, `UR-UR1/UR-UR2/UR-UR3`는
|
||||
logical `UR1/UR2/UR3`에 대응한다. Key는
|
||||
|
||||
```text
|
||||
(case_id, accepted_state, canonical_instance_name, source_node_label, component)
|
||||
```
|
||||
|
||||
Both cases require source node labels `1..49` exactly once. U components form one
|
||||
blocking translation family and UR components form one warning-only rotation family,
|
||||
preserving the project MITC4 classification.
|
||||
이다. Coarse/linear은 labels `1..49`, fine은 `1..729`를 각각 정확히 한 번 요구한다.
|
||||
U는 global length/blocking, UR은 fixed-initial global rotation-vector/warning-only다.
|
||||
|
||||
### 4.3 Nonlinear reaction contract
|
||||
### 4.3 Local reaction review contract
|
||||
|
||||
Reaction comparison applies only to `shellnl-s4-final` and only to the input boundary
|
||||
`Set-2` nodes:
|
||||
Reaction source rows는 input `Set-2` constraint mask로 선택한다.
|
||||
|
||||
```text
|
||||
1,3,4,5,6,7,8,9,14,15,16,17,22,23,24,25,26,27,28,29,30,31,32,33
|
||||
```
|
||||
- coarse: `1, 3..9, 14..17, 22..33` — 24 nodes, all six DOFs constrained.
|
||||
- fine: `1, 3..9, 34..57, 82..153` — 104 nodes, all six DOFs constrained.
|
||||
|
||||
All six global components are constrained at these 24 nodes. Other CSV node rows remain
|
||||
part of file/schema/finite inventory but are not numerical reaction rows: FESA free entries
|
||||
are equilibrium residual evidence, not Abaqus free-node zero reactions.
|
||||
다른 CSV node rows는 file/schema/finite inventory지만 local reaction numerical rows가 아니다.
|
||||
Free FESA entries는 reaction이 아니라 accepted free residual evidence다.
|
||||
|
||||
| CSV components | logical quantity | FESA meaning | disposition |
|
||||
| CSV components | logical quantity | matching FESA meaning | disposition |
|
||||
| --- | --- | --- | --- |
|
||||
| `RF-RF1`, `RF-RF2` | fixed-initial shell-plane reaction force | constrained translational full residual, global force | blocking family |
|
||||
| `RF-RF3` | fixed-initial transverse reaction force | constrained translational full residual, global force | blocking family |
|
||||
| `RM-RM1`, `RM-RM2` | tangent-plane spatial reaction moment | `J_l(phi)^(-T)` conversion of the constrained generalized reaction, global force-length | blocking family |
|
||||
| `RM-RM3` | director/drilling-axis reaction review value | stabilization-dependent; no physical external equivalence target | excluded |
|
||||
| `RF-RF1`, `RF-RF2` | in-plane local reaction force | constrained translational full residual, global force | `review-only` |
|
||||
| `RF-RF3` | transverse local reaction force | constrained translational full residual, global force | `review-only` |
|
||||
| `RM-RM1`, `RM-RM2` | tangent-plane physical reaction moment | constrained generalized residual converted by `J_l(phi)^(-T)`, global spatial force-length | `review-only` |
|
||||
| `RM-RM3` | director/drilling-axis row | no approved physical external equivalence target | `excluded` |
|
||||
|
||||
In-plane and transverse force are distinct model-fixed logical projections and therefore
|
||||
use distinct families. Raw generalized rotation-coordinate residual is not matched directly
|
||||
to the CSV `RM` value.
|
||||
Raw generalized rotational residual을 CSV RM에 직접 match하지 않는다. Review-only는 row omission을
|
||||
허용한다는 뜻이 아니다. Exact row precheck와 common-policy error/RMS를 모두 보고하되 그 결과가
|
||||
blocking verdict를 변경하지 않는다는 뜻이다.
|
||||
|
||||
### 4.4 Stress review identity and comparison exclusion
|
||||
### 4.4 Distinct factor-one equilibrium quantities
|
||||
|
||||
Stress rows have read-only identity
|
||||
각 nonlinear case에서 같은 accepted factor-one state를 사용한다.
|
||||
|
||||
| logical quantity | source identity / projection | components | disposition |
|
||||
| --- | --- | --- | --- |
|
||||
| accepted free residual | input mask로 결정한 stable free `(instance,node,global DOF component)` rows; force와 moment channel 분리 | free `UX/UY/UZ`; free `URX/URY/URZ` generalized covectors | `blocking-internal` |
|
||||
| constrained reaction resultant | constrained source rows만 current arm과 spatial physical moment로 합산 | force `[1,2,3]`; moment `[1,2,3]` | `review-only-summary` |
|
||||
| applied-plus-reaction balance error | all resolved applied sources plus constrained reactions; global origin `[0,0,0]`; `x=X+u`; physical spatial nodal moments | force `[1,2,3]`; moment `[1,2,3]` | `blocking-internal` |
|
||||
|
||||
Constrained reaction resultant force is `sum(F_react)`. Its moment is
|
||||
`sum(x cross F_react + M_react)`. Balance error adds the corresponding applied force and
|
||||
`x cross F_appl + M_appl`. Accepted free residual is neither sum. 세 quantity는 exact
|
||||
source/state identity를 공유하지만 interchangeable하지 않다.
|
||||
|
||||
현재 stored case의 constrained prescribed `u=phi=0` 때문에 support current arm과 initial arm,
|
||||
generalized moment와 spatial moment가 수치적으로 일치한다. 이는 supported general nonzero
|
||||
prescribed translation/rotation에서 initial arm/raw rotational residual을 재사용할 근거가 아니다.
|
||||
|
||||
### 4.5 Stress inventory and exclusion
|
||||
|
||||
Stress inspection key는
|
||||
|
||||
```text
|
||||
(case_id, accepted_state, instance, element label,
|
||||
element-corner node label, SPOS/SNEG section surface, component)
|
||||
```
|
||||
|
||||
Every current element has its four connectivity nodes and one `SPOS` plus one `SNEG`
|
||||
row per node. The files are ordered in contiguous ascending element-label blocks `1..36`;
|
||||
this exact artifact order is retained and no node/surface secondary reorder is applied.
|
||||
이다. Stored stress는 element-corner SPOS/SNEG rows이고 FESA 승인 recovery는 midsurface Gauss
|
||||
locations의 direct bottom/middle/top `[S11,S22,S12]`다. Nodal extrapolation/averaging을 만들지
|
||||
않으며 `S-S11/S-S22/S-S12/S-S33` 어느 것도 external family에 포함하지 않는다.
|
||||
|
||||
The identity is nevertheless not the approved FESA recovery location: FESA emits direct
|
||||
`[S11,S22,S12]` at four midsurface Gauss locations and bottom/middle/top positions, without
|
||||
nodal extrapolation or averaging, and does not emit `S33`. Consequently no stress column
|
||||
forms a blocking or warning-only comparison family. Stress files remain optional read-only
|
||||
review evidence only.
|
||||
### 4.6 External comparison families
|
||||
|
||||
### 4.5 Comparison families
|
||||
|
||||
| family id | components and source set | row count | units / coordinates | disposition |
|
||||
| family id | components / source rows | rows | units / coordinates | disposition |
|
||||
| --- | --- | ---: | --- | --- |
|
||||
| `linear.translation` | `U1,U2,U3`, nodes `1..49` | 147 | length / global | blocking regression |
|
||||
| `linear.rotation` | `UR1,UR2,UR3`, nodes `1..49` | 147 | dimensionless / fixed-initial global | warning-only |
|
||||
| `nonlinear.translation` | `U1,U2,U3`, nodes `1..49` | 147 | length / global | blocking |
|
||||
| `nonlinear.rotation` | `UR1,UR2,UR3`, nodes `1..49` | 147 | dimensionless / fixed-initial global | warning-only |
|
||||
| `nonlinear.reaction_inplane_force` | `RF1,RF2`, 24 constrained nodes | 48 | force / fixed-initial global plane | blocking |
|
||||
| `nonlinear.reaction_transverse_force` | `RF3`, 24 constrained nodes | 24 | force / fixed-initial global transverse | blocking |
|
||||
| `nonlinear.reaction_physical_moment` | `RM1,RM2`, 24 constrained nodes | 48 | force-length / global spatial | blocking |
|
||||
| `linear.translation` | U1/U2/U3; nodes `1..49` | 147 | length / global | `blocking` |
|
||||
| `linear.rotation` | UR1/UR2/UR3; nodes `1..49` | 147 | dimensionless / fixed-initial global | `warning-only` |
|
||||
| `coarse.translation` | U1/U2/U3; nodes `1..49` | 147 | length / global | `blocking` |
|
||||
| `coarse.rotation` | UR1/UR2/UR3; nodes `1..49` | 147 | dimensionless / fixed-initial global | `warning-only` |
|
||||
| `coarse.local_reaction_inplane_force` | RF1/RF2; 24 constrained nodes | 48 | force / global shell plane | `review-only` |
|
||||
| `coarse.local_reaction_transverse_force` | RF3; 24 constrained nodes | 24 | force / global transverse | `review-only` |
|
||||
| `coarse.local_reaction_physical_moment` | RM1/RM2; 24 constrained nodes | 48 | force-length / global spatial | `review-only` |
|
||||
| `fine.translation` | U1/U2/U3; nodes `1..729` | 2,187 | length / global | `blocking` |
|
||||
| `fine.rotation` | UR1/UR2/UR3; nodes `1..729` | 2,187 | dimensionless / fixed-initial global | `warning-only` |
|
||||
| `fine.local_reaction_inplane_force` | RF1/RF2; 104 constrained nodes | 208 | force / global shell plane | `review-only` |
|
||||
| `fine.local_reaction_transverse_force` | RF3; 104 constrained nodes | 104 | force / global transverse | `review-only` |
|
||||
| `fine.local_reaction_physical_moment` | RM1/RM2; 104 constrained nodes | 208 | force-length / global spatial | `review-only` |
|
||||
|
||||
### 4.7 Internal blocking verification families
|
||||
|
||||
| family id | exact rows/components | gate |
|
||||
| --- | --- | --- |
|
||||
| `coarse.accepted_free_force_residual` | 75 free translation DOFs | NSNR-069 force channel, factor one |
|
||||
| `coarse.accepted_free_moment_residual` | 75 free rotation DOFs | NSNR-069 moment channel, factor one |
|
||||
| `coarse.global_force_balance` | 3 global balance-error components | normalized `<=1e-8` |
|
||||
| `coarse.global_moment_balance` | 3 global balance-error components | normalized `<=1e-8` |
|
||||
| `fine.accepted_free_force_residual` | 1,875 free translation DOFs | NSNR-069 force channel, factor one |
|
||||
| `fine.accepted_free_moment_residual` | 1,875 free rotation DOFs | NSNR-069 moment channel, factor one |
|
||||
| `fine.global_force_balance` | 3 global balance-error components | normalized `<=1e-8` |
|
||||
| `fine.global_moment_balance` | 3 global balance-error components | normalized `<=1e-8` |
|
||||
|
||||
이 internal families에는 Abaqus CSV value 또는 `docs/TOLERANCE.md`를 적용하지 않는다.
|
||||
Approved analytical/invariant gates이며 exact definitions는 `numerical-review.md` §6.2다.
|
||||
|
||||
## 5. Row Prechecks
|
||||
|
||||
Before tolerance, the comparator shall fail the affected comparison if any required condition
|
||||
below is false.
|
||||
Tolerance 또는 internal metric 전에 다음을 검사한다.
|
||||
|
||||
1. Exact declared input path and every `required comparison artifact=yes` CSV path for the
|
||||
case exist and are readable.
|
||||
2. Required headers are present after trimming surrounding whitespace from header names.
|
||||
3. `shellnl-s4-final` contains only the exact required `Frame` value for required rows.
|
||||
4. Wide CSV rows expand to component rows using the component contract in Section 4.
|
||||
5. Required source row keys are unique. Duplicate wide keys or duplicate expanded component keys fail.
|
||||
6. Displacement projection requires all 49 source nodes and declared components. Nonlinear
|
||||
reaction projection derives the exact 24-node/component set from the input constraint mask;
|
||||
it does not infer reaction identity from CSV zero values.
|
||||
7. FESA and reference required projected row-key sets are exactly equal: missing and extra rows
|
||||
both fail.
|
||||
8. Every required numeric value is finite. Nonfinite required FESA or CSV value fails before tolerance.
|
||||
9. Optional stress inventory uses `(instance, element label, node label, section point)` and verifies
|
||||
the current ascending element-label blocks, connectivity nodes and SPOS/SNEG pair. This inspection
|
||||
does not create a stress equality gate.
|
||||
10. Required rows are not omitted, synthesized, normalized, averaged, sorted into a different identity,
|
||||
zero-clamped, or repaired.
|
||||
1. 각 case의 exact declared input과 해당 disposition에 필요한 CSV가 존재하고 readable하다.
|
||||
2. Header는 surrounding whitespace만 trim하고 required names/components가 모두 있어야 한다.
|
||||
3. Nonlinear required rows의 Frame은 exact factor-one identity여야 한다.
|
||||
4. Wide CSV는 Section 4 contract로 component rows에 결정적으로 expand한다.
|
||||
5. Wide key와 expanded key는 unique해야 한다. Duplicate는 affected family를 tolerance 전에 fail한다.
|
||||
6. Input node inventory와 source constraint mask로 expected key set을 만든다. CSV zero values 또는
|
||||
row position에서 reaction identity를 추론하지 않는다.
|
||||
7. FESA와 reference projected key sets는 exact equal해야 한다. Missing과 extra rows를 모두 fail한다.
|
||||
8. Required FESA/CSV/internal values와 derived scales/norms는 모두 finite여야 한다.
|
||||
9. Internal free residual rows는 exact free mask와 force/moment partition을 보존한다. Global balance는
|
||||
모든 applied source와 constrained reaction을 stable source order로 한 번씩만 사용한다.
|
||||
10. Local review rows는 global resultant로 collapse하거나 대체하지 않는다. Review precheck failure는
|
||||
deterministic review failure로 기록하지만 blocking verdict를 변경하지 않는다.
|
||||
11. Warning-only precheck/tolerance failure는 deterministic warning을 만들고 blocking verdict를
|
||||
변경하지 않는다. Blocking precheck failure는 전체 comparison을 fail한다.
|
||||
12. Row omission/synthesis, averaging, source-order matching, clamp, normalization 또는 artifact repair를
|
||||
허용하지 않는다.
|
||||
|
||||
Observed read-only inventory used for this contract:
|
||||
Observed read-only nodal CSV audit:
|
||||
|
||||
| CSV | observed wide key columns | duplicate wide keys | nonfinite observed values | observed element labels |
|
||||
| --- | --- | ---: | ---: | --- |
|
||||
| `reference/shellNL/shellNL displacements.csv` | `Frame`, `Part Instance Name`, `Node Label` | 0 | 0 | N/A |
|
||||
| `reference/shellNL/shellNL reactions.csv` | `Frame`, `Part Instance Name`, `Node Label` | 0 | 0 | N/A |
|
||||
| `reference/shellNL/shellNL stresses.csv` | `Frame`, `Part Instance Name`, `Element Label`, `Node Label`, `Section Point` | 0 | 0 | `1..36` |
|
||||
| `reference/shell/shell displacements.csv` | `Part Instance Name`, `Node Label` | 0 | 0 | N/A |
|
||||
| `reference/shell/shell reactions.csv` | `Part Instance Name`, `Node Label` | 0 | 0 | N/A |
|
||||
| `reference/shell/shell stresses.csv` | `Part Instance Name`, `Element Label`, `Node Label`, `Section Point` | 0 | 0 | `1..36` |
|
||||
| CSV | wide rows | duplicate keys | nonfinite required values | status |
|
||||
| --- | ---: | ---: | ---: | --- |
|
||||
| `reference/shell/shell displacements.csv` | 49 | 0 | 0 | readable |
|
||||
| `reference/shellNL/shellNL displacements.csv` | 49 | 0 | 0 | readable |
|
||||
| `reference/shellNL/shellNL reactions.csv` | 49 | 0 | 0 | readable |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | 729 | 0 | 0 | readable |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine reactions.csv` | 729 | 0 | 0 | readable |
|
||||
|
||||
## 6. Tolerance and Blocking/Warning Policy
|
||||
|
||||
Use exactly `docs/TOLERANCE.md` for every external reference family. This report does not invent
|
||||
or calibrate tolerance values.
|
||||
### 6.1 External families
|
||||
|
||||
For each comparison family:
|
||||
Section 4.6의 모든 external blocking, warning-only와 review-only error report는
|
||||
`docs/TOLERANCE.md`를 그대로 사용한다.
|
||||
|
||||
- `S = max(abs(reference_value_i))`, using reference values only.
|
||||
- near-zero band is `0.01*S`.
|
||||
- if `abs(reference_value_i) <= 0.01*S`, row passes iff `abs(fesa-reference) <= 0.01*S`.
|
||||
- otherwise row passes iff relative error `<= 0.05`.
|
||||
- family relative RMS is `RMS(error)/S <= 0.01`.
|
||||
- no independent absolute-error floor, `max(1, S)` clamp, row omission, averaging, or zero clamp is allowed.
|
||||
- if `S = 0`, the family passes only when all FESA values are exactly zero; otherwise report
|
||||
`zero-reference-scale-nonzero-error`.
|
||||
- Reference-only `S=max(abs(reference_i))`, near-zero band `B=0.01*S`.
|
||||
- `abs(reference_i)<=B`이면 `abs(fesa-reference)<=B`.
|
||||
- 그 외 row는 relative error `<=0.05`.
|
||||
- 모든 row와 `RMS(error)/S<=0.01`이 함께 pass해야 family가 pass한다.
|
||||
- Independent absolute floor, `max(1,S)`, omission, averaging 또는 zero clamp는 없다.
|
||||
- `S=0`이면 모든 FESA 값도 exact zero일 때만 pass한다.
|
||||
|
||||
Families are separated by the exact case/logical quantities in Section 4.5. Current
|
||||
reference-only scales provide a reproducible reader/comparator audit:
|
||||
Observed reference-only scales는 reader/family audit evidence이며 calibration 값이 아니다.
|
||||
|
||||
| family | `S` | `B=0.01*S` |
|
||||
| --- | ---: | ---: |
|
||||
| `linear.translation` | `2.37408203e-5` | `2.37408203e-7` |
|
||||
| `linear.rotation` | `7.60725743e-6` | `7.60725743e-8` |
|
||||
| `nonlinear.translation` | `2.37408203e-5` | `2.37408203e-7` |
|
||||
| `nonlinear.rotation` | `7.60725743e-6` | `7.60725743e-8` |
|
||||
| `nonlinear.reaction_inplane_force` | `1.91663182` | `1.91663182e-2` |
|
||||
| `nonlinear.reaction_transverse_force` | `1.17769805e4` | `1.17769805e2` |
|
||||
| `nonlinear.reaction_physical_moment` | `1.95418418e4` | `1.95418418e2` |
|
||||
| family | rows | `S` | `B=0.01*S` |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| `linear.translation` | 147 | `2.37408203e-5` | `2.37408203e-7` |
|
||||
| `linear.rotation` | 147 | `7.60725743e-6` | `7.60725743e-8` |
|
||||
| `coarse.translation` | 147 | `2.37408203e-5` | `2.37408203e-7` |
|
||||
| `coarse.rotation` | 147 | `7.60725743e-6` | `7.60725743e-8` |
|
||||
| `coarse.local_reaction_inplane_force` | 48 | `1.91663182` | `1.91663182e-2` |
|
||||
| `coarse.local_reaction_transverse_force` | 24 | `1.17769805e4` | `1.17769805e2` |
|
||||
| `coarse.local_reaction_physical_moment` | 48 | `1.95418418e4` | `1.95418418e2` |
|
||||
| `fine.translation` | 2,187 | `2.57957054e-5` | `2.57957054e-7` |
|
||||
| `fine.rotation` | 2,187 | `6.58704994e-6` | `6.58704994e-8` |
|
||||
| `fine.local_reaction_inplane_force` | 208 | `5.38827419e-1` | `5.38827419e-3` |
|
||||
| `fine.local_reaction_transverse_force` | 104 | `2.78506128e3` | `2.78506128e1` |
|
||||
| `fine.local_reaction_physical_moment` | 208 | `4.71557520e3` | `4.71557520e1` |
|
||||
|
||||
Any `blocking` family row or RMS failure fails the reference comparison for the feature.
|
||||
`warning-only` failures produce deterministic warning evidence but do not change the blocking
|
||||
verdict. `RM3` and stress artifacts create neither a blocking nor warning-only tolerance family.
|
||||
Blocking family의 precheck/row/RMS failure만 전체 external-reference verdict를 fail한다.
|
||||
Warning-only는 warning, review-only는 deterministic review finding/error table을 남기지만
|
||||
blocking verdict를 바꾸지 않는다. `RM3`와 stress는 family를 만들지 않는다.
|
||||
|
||||
### 6.2 Internal equilibrium families
|
||||
|
||||
- Accepted free force/moment residual은 factor-one accepted trial에서 NSNR-069을 그대로
|
||||
재현한다. Nonzero matching external scale이면 infinity-norm relative `<=1e-2`; exact-zero
|
||||
scale이면 typed absolute `<=1e-3` force 또는 force-length다.
|
||||
- Global force/moment balance는 `numerical-review.md` §6.2의 sum-of-contribution scale과
|
||||
dimension-separated normalized metric을 사용하며 각각 `<=1e-8`이다.
|
||||
- Internal gate에 external family tolerance, absolute floor, reference-derived scale 또는 local
|
||||
nodal reaction error를 섞지 않는다.
|
||||
|
||||
## 7. Open Issues and I/O Handoff
|
||||
|
||||
Open issues blocking I/O Definition: 없음.
|
||||
|
||||
I/O Definition Agent handoff:
|
||||
I/O Definition Agent handoff through Coordinator:
|
||||
|
||||
- Project only the comparison quantities in Sections 4.2, 4.3 and 4.5 to authoritative FESA
|
||||
result datasets without changing source identity or final comparison disposition.
|
||||
- Preserve `Frame` handling for `shellnl-s4-final` as accepted factor-one state identity; do not expose
|
||||
trial Newton history as reference rows.
|
||||
- Derive constrained reaction identity from the input mask. Compare `RM1/RM2` with the global
|
||||
spatial physical reaction moment, not the raw generalized rotation-coordinate covector.
|
||||
- Preserve approved Gauss direct stress recovery. Do not create element-corner stress,
|
||||
extrapolation, averaging or a stress CSV projection for the current optional SPOS/SNEG artifacts.
|
||||
- Keep `RM3`, `S-S33`, `S-S11`, `S-S22` and `S-S12` out of current comparison families.
|
||||
- Use the common tolerance policy exactly as written above and in `docs/TOLERANCE.md`.
|
||||
- Fine primary와 coarse companion nonlinear case의 accepted factor-one identity를 보존한다.
|
||||
- Section 4.4의 `(a)` applied-plus-reaction balance error, `(b)` constrained reaction resultant,
|
||||
`(c)` accepted free residual을 separate logical quantities로 최종 projection한다.
|
||||
- Global moment는 origin `[0,0,0]`, current `X+u` force arm과 spatial physical nodal moment를
|
||||
사용한다. General nonzero prescribed translation/rotation에서도 initial arm/raw rotational
|
||||
residual을 재사용하지 않는다.
|
||||
- Local RF/RM은 exact source-key/schema/inventory/finite/error reporting이 있는 review-only다.
|
||||
Local rows를 global sum으로 대체하거나 blocking으로 되돌리지 않는다.
|
||||
- Approved Gauss direct stress recovery를 유지한다. Optional element-corner stress artifact에
|
||||
맞춘 extrapolation/averaging 또는 stress comparison projection을 만들지 않는다.
|
||||
- Common external tolerance와 exact prechecks를 변경하지 않는다.
|
||||
|
||||
Reference artifact status: complete for I/O Definition. No declared required input or required
|
||||
comparison CSV is missing or unreadable. Optional stress CSVs are present and readable as inventory
|
||||
evidence only. No reference artifact was generated, renamed, repaired, normalized, or modified.
|
||||
Reference artifact status: required input/displacement/reaction artifacts are present and readable.
|
||||
Optional fine stress identity issue는 transparent nonblocking inventory finding이다. 어떤 reference
|
||||
artifact도 생성, rename, repair, normalize 또는 수정하지 않았다.
|
||||
|
||||
Reference in New Issue
Block a user