feat(nonlinear-static-newton-raphson): step 12 - execution-closure-and-evidence-docs

This commit is contained in:
KOKO\Mimi
2026-08-28 21:08:58 +09:00
parent d275e844f2
commit bf9487efc2
6 changed files with 317 additions and 11 deletions
+30 -5
View File
@@ -317,9 +317,25 @@ Abaqus input file
-> LinearSolver::solve(rhs, df) substitution
-> full displacement 복구
-> full residual/reaction = K*d - F 및 ElementResultBundle 복구
-> ResultsWriter로 results.h5 atomic finalization
-> ResultsWriter로 derived `<stem>_results.h5` atomic finalization
```
### 승인된 Nonlinear Static 경로
`PrepareAnalysisInput()`은 input syntax와 semantic Domain을 정확히 한 번 만든다.
`ExecutePreparedAnalysis()`는 sole static step의 procedure identity로 linear static 또는
nonlinear static executor를 선택하며 두 procedure의 mutable state를 공유하지 않는다.
Nonlinear executor는 committed/trial `NonlinearAnalysisState`, full unsymmetric CSR tangent
solver와 closed-before-finalization Newton iteration log를 소유한다. Completion 뒤
`FinalizePreparedAnalysisResult()`가 selected backend-neutral writer로 only accepted frames를
atomic finalization한다.
Nonlinear schema v1의 factor-one `/global/equilibrium`은 raw full-residual sum이 아니라
global origin `[0,0,0]`에서 current `X+u` force arm과 independently spatialized applied and
masked constrained-reaction moments를 합한 applied-plus-reaction balance error다. Accepted
free residual은 generalized residual의 free mask projection이고 constrained-reaction resultant는
별도 review summary다. 어느 quantity도 다른 quantity의 substitute가 아니다.
강성행렬 factorization은 하중벡터 조립보다 먼저 수행한다. 반력은 element end action의
별도 합이 아니라 조립된 전체 residual에서 구한다. Constrained component는 physical
reaction이고 free component는 equilibrium residual evidence로 full-index vector에 남긴다.
@@ -400,7 +416,8 @@ Schema requirements:
- schema version, units, coordinate system, solver version, source input identity를 metadata에 기록한다.
- field output과 history output을 구분한다.
- reference comparison을 위한 row identity는 node id, element id, integration point id, step/frame id를 포함한다.
- FESA solver는 `results.h5`를 authoritative output으로 쓴다.
- FESA solver는 input lexical sibling `<stem>_results.h5`를 authoritative output으로 쓰며,
같은 directory의 `<stem>_log.txt`는 procedure log다.
- Abaqus reference results는 기능 문서가 선언한 기존 CSV 파일이다. Directory/file
naming, README, metadata 또는 provenance는 architecture readiness 조건이 아니다.
- Verification은 기능이 요구하는 source identity와 component를 결정적으로 대응시키고
@@ -410,7 +427,7 @@ Schema requirements:
- Writer는 final과 같은 directory의 임시 HDF5에 전체 schema를 쓴 뒤 flush, checked close,
read-only reopen/self-check를 수행한다. Existing final은 `ReplaceFileW`, 새 final은
`MoveFileExW(..., MOVEFILE_WRITE_THROUGH)`로 완료하며 실패 시 temporary artifact를
정리하고 불완전한 파일을 정상 `results.h5`로 노출하지 않는다.
정리하고 불완전한 파일을 정상 `<stem>_results.h5`로 노출하지 않는다.
## V0 결과 복구와 reference normalization
@@ -438,10 +455,11 @@ Schema requirements:
## CLI와 diagnostics
```powershell
fesa.exe <model.inp> --output <results.h5>
fesa.exe <model.inp>
```
`--output`을 생략하면 현재 작업 디렉터리의 `results.h5`를 사용한다. Exit code는
CLI는 input과 같은 lexical sibling directory에 `<stem>_results.h5`와
`<stem>_log.txt`를 유도하고 `--output`을 거부한다. Exit code는
`0=success`, `2=usage`, `3=input syntax/semantic mapping`, `4=model validation`,
`5=factorization/substitution`, `6=HDF5 output`으로 고정한다. Diagnostic은 `severity`,
`code`, `file`, `line`, `keyword`, `entity_identity`, `message`를 가지며 stderr에
@@ -479,3 +497,10 @@ displacement CSV만 사용한다. Global `U1/U2/U3` translation family만 blocki
family-scale row/RMS 정책을 사용한다. S4R은
같은 kernel을 선택하는 source mapping과 metadata를 unit/integration tests로 검증하며
`reference/shellR/` artifact는 acceptance comparison에 포함하지 않는다.
Approved nonlinear MITC4 verification은 `reference/shellNL-meshfine/` fine primary,
`reference/shellNL/` coarse companion과 `reference/shell/` linear control을 각각 독립
copied-input directory에서 실행한다. Factor-one global force/moment balance와 accepted free
residual은 blocking internal evidence다. External `U1/U2/U3`는 blocking, `UR1/UR2/UR3`는
warning-only이며 local nodal `RF1/RF2/RF3/RM1/RM2`는 deterministic review-only evidence다;
`RM3`와 stress는 nonlinear numerical comparison에서 제외한다.