feat(nonlinear-static-newton-raphson): step 11 - equilibrium-projection-and-reference-gate
This commit is contained in:
@@ -6,25 +6,25 @@
|
||||
- workflow_state: `needs-implementation`
|
||||
- owner_agent: `coordinator-agent`
|
||||
- request_date: `2026-08-18`
|
||||
- last_updated: `2026-08-24` (REWORK-006 passed; Step 1 no-push Harness rerun authorized)
|
||||
- last_updated: `2026-08-28` (REWORK-009 passed; bounded Step 11 all-WindowsApps-filter rerun package prepared)
|
||||
- process_classification: `architectural`
|
||||
- requested_capability: Newton–Raphson 방법을 사용하는 새 nonlinear static analysis procedure
|
||||
- proposed_scope_boundary: 첫 release는 initial configuration 기준 Total Lagrangian, materially linear + geometrically nonlinear MITC4로 제한한다. 요구조건 인터뷰와 8단계 evidence gate를 먼저 완료하며, 승인 전에는 상세 수치·I/O·구현 범위를 확정하거나 기존 linear-static lifecycle을 변경하지 않는다.
|
||||
- naming_note: 사용자 표현 `Newton-Rhapson`은 표준 명칭 `Newton–Raphson`으로 정규화했다.
|
||||
- current_goal: REWORK-006 passed and Step 1 is reset to `pending`; authorize no-push Harness rerun from Step 1 under the approved Ninja/MSVC workspace-write envelope.
|
||||
- constraints: 승인된 Stage 1-5 hashes, physics/scope/tolerance/authoritative output/public compatibility, `rho_M <= 1e-12`, fixed-global source identity, no drilling load channel과 Stage 6 materialization evidence를 보존한다. Step 0 commits `fc16ef6` and `e7c6932`, Step 1 uncommitted implementation changes, phase block evidence and no-reference-artifact-change evidence must be preserved. The approved continuation envelope is MSVC/x64/Debug with Ninja generator, full CTest, `workspace-write`, Codex CLI `0.149.1`, `CODEX_HOME=C:\Users\baram\.codex`, child launch PATH filtering of `C:\Program Files\WindowsApps\Microsoft.PowerShell_*` and `C:\Users\baram\AppData\Local\Microsoft\WindowsApps`, implementation-agent `gpt-5.6-terra`/`xhigh`, hooks retained, no-push, no `danger-full-access`, and runner-retained `--disable unified_exec`. Do not edit feature contracts/reference artifacts/tolerance policies, run Abaqus/Nastran/reference solvers, clean/delete build artifacts, or advance Step 2/Physics/Release until `implementation-report.md`, `build-test.md`, `reference-comparison.md` and passing implementation evidence exist.
|
||||
- current_goal: Run one bounded Step `11` only no-push Harness/Implementation rerun after REWORK-009 proved the all-WindowsApps PATH filter; Step `12`, push, reference mutation, `danger-full-access`, `fesa.env` and runtime/product configuration remain forbidden.
|
||||
- constraints: 승인된 physics/scope/tolerance/authoritative output/public compatibility, `rho_M <= 1e-12`, fixed-global source identity, no drilling load channel, thresholds `1e-2`/typed absolute `1e-3`, four-channel AND, Full Newton, fixed stepping, no line search, 100-iteration limit, `docs/TOLERANCE.md`, reference artifact filenames/hashes, stress optional inspection and `RM3` exclusion을 유지한다. USER-DECISION-004 option 1 keeps local nodal `RF1/RF2/RF3` and physical spatial `RM1/RM2` review-only/nonblocking, with blocking factor-one global applied-plus-reaction resultant force `[3]`, global resultant moment `[3]` and accepted free-DOF residual gates/evidence; global resultant semantics are global origin `[0,0,0]`, current force arms and spatial physical nodal moments. USER-DECISION-006 supersedes/retire prior moment-only `1e-9` and all `fesa.env`/runtime-config discussion: do not add `fesa.env`, config parsing, runtime API, or product behavior. Current authoritative decision fixes both normalized factor-one global FORCE and MOMENT balance gates at `<=1e-8` while preserving exact formulas, sum-of-contribution scales, zero-scale rule, quantities/source identity, blocking/review/warning dispositions, NSNR-069 free-residual gates, HDF5 schema, reference artifacts and `docs/TOLERANCE.md` separation. Sequential reapproval is delegated to Coordinator without intermediate user approval through Stage 4 Numerical/reference, Stage 5 I/O, Stage 6 Implementation Planning materialization, then Step `11` only no-push Harness/Implementation under Codex CLI `0.150.1` USER-DECISION-005A envelope. No push, no `danger-full-access`, no reference mutation/solver and no Step `12` auto-advance. Any required change beyond the fixed `1e-8` global balance threshold stops as blocker.
|
||||
- repository_audit: 기존 worktree에는 `.codex/agents/*.toml`과 `AGENTS.md`의 사용자 변경이 있으며 이를 보존한다.
|
||||
|
||||
## 2. Eight-Stage Worklist
|
||||
|
||||
| stage | owner | status | output paths | acceptance gate | evidence summary | blockers | attempt count |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| 1. Requirements | `requirement-agent` | `passed` | `docs/nonlinear-static-newton-raphson/requirements.md` | `<=400` lines, 24 canonical shall requirements, exact 24-row Matrix, approved semantic loss 0, Stage-1 user question 0 | Approved compact content 395 lines; approval metadata 2 lines, current 397; 24↔24 exact ID sets, duplicate/missing/orphan 0, OQ/questions/trivia/placeholders 0; core semantics and NSNR-083 public precedence retained; forbidden changes 0; user explicitly approved on 2026-08-23. | 없음 | 40 |
|
||||
| 1. Requirements | `requirement-agent` | `passed` | `docs/nonlinear-static-newton-raphson/requirements.md` | USER-DECISION-004 option 1을 requirements/reference acceptance contract에 최소 반영하고 compact requirements contract, existing thresholds, four-channel AND, Full Newton, 100-iteration limit, `docs/TOLERANCE.md`, approved semantic loss 0을 보존함 | Requirement Agent returned revised `requirements.md` status `draft`, ready for Coordinator/user re-approval, SHA-256 `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`. Coordinator audit passed: hash matched, 401 lines, 24 requirement records, 24 Matrix rows, duplicate/missing/orphan IDs 0, USER-DECISION-004 option 1 expressed, local RF/RM review-only, blocking global applied-plus-reaction force/moment plus accepted free residual present, formulation semantics preserved, AUDIT-001 Stage5/6 handoff present, no tolerance/reference/HDF5/public-scope expansion. User explicitly re-approved this hash on 2026-08-27. | 없음 | 43 |
|
||||
| 2. Research | `research-agent` | `passed` | `docs/nonlinear-static-newton-raphson/research.md` | 필요한 이론·benchmark·source reliability·applicability limit가 충분함 | Owner/Coordinator pass와 2026-08-23 사용자 명시 승인; 10 required sections, S1–S17, 12 benchmark candidates, 11 research-relevant requirement IDs, 14 unique open issues; nonlinear stored reference gap explicit; SHA-256 `C920A6B02381230D1DB419D73FE767D611B36720D27D6410507BA88C3CA28EEE`; forbidden changes 0. | 없음 | 1 |
|
||||
| 3. Formulation | `formulation-agent` | `passed` | `docs/nonlinear-static-newton-raphson/formulation.md` | strong/weak form, kinematics, tangent/residual, integration, state/recovery가 구현 가능한 계약이며 O-ROT/O-MAP/O-DRILL/O-MOM/O-BC가 승인 scope 안에서 해소됨 | Rework attempt 2 owner/Coordinator pass와 사용자 명시 승인: reaction force/generalized moment/spatial moment symbols와 dimensions가 rotation matrix `R_I`와 분리됨; immutable fixed-global source, `rho_M <= 1e-12` admissibility, exact projected physical-work covector, `DP`/`DJ_l`/map-Hessian residual-tangent identity가 §§4.4/5/11.2–11.3/13.1/13.4/17에서 일치함; 18 sections와 7 closures 보존; SHA-256 `DFA629888041D5762FD0DF4271353464A692B325DC0C821A8D8689688C1EAFD0`. | 없음 | 2 |
|
||||
| 4. Numerical/reference review | `numerical-review-agent` | `passed` | `docs/nonlinear-static-newton-raphson/numerical-review.md`; `docs/nonlinear-static-newton-raphson/reference-model.md` | 두 문서가 함께 `pass-for-io-definition`이며 수치 안정성과 exact reference contract가 준비됨 | Corrected owner return, Coordinator audit pass and user explicit approval: status `pass-for-io-definition`; approved formulation hash matched; shellNL/shell artifacts inspected read-only with row counts `49/49/288`, duplicate required wide keys 0 and nonfinite required values 0; stress CSVs are optional read-only inspection/order evidence only; `RM3` excluded; required external comparison uses displacement, reaction force and physical spatial `RM1/RM2`; exact prechecks and `docs/TOLERANCE.md` policy retained. Current hashes: numerical-review `9517E11804C45A6F3822D18821D52EA493AE20353C8FFAD61E960F4315977D01`, reference-model `52D10B1D0C0500B295C5E48BCB3618B309D9696371B8070D4E3DCEE8D3D74CD3`. | 없음 | 2 |
|
||||
| 5. I/O definition | `io-definition-agent` | `passed` | `docs/nonlinear-static-newton-raphson/io.md` | Abaqus subset, semantic mapping, HDF5 schema, diagnostics, CSV projection이 승인됨 | Bounded rework owner status `ready-for-coordinator-review`, SHA-256 `DBB959A68F17D67CA2B42569610B9C1B595A8BFB5502BC194B7E62B656031B28`; Coordinator audit passed and user explicitly approved the same hash. REWORK-002 defects are corrected: every argv token containing literal `--output` fails pre-input/pre-log/pre-output with one `cli-usage` diagnostic; `nsnr-log-v1` uses UTF-8 no BOM/LF/TAB fixed fields with four-channel gates, typed thresholds, branch identity, early-failure `not-evaluated(reason)`, round-trip numerics and escaping; log open/write/flush/close is fail-closed with zero-byte non-Newton success logs; exact `VARIABLE=PRESELECT` output requests are ignored-with-warning; lexical path/stem derivation, single-writer/candidate collision rules, HDF5 schema v1, reference projection, stress/RM3 exclusions and `docs/TOLERANCE.md` policy are preserved. | 없음 | 2 |
|
||||
| 6. Implementation | `implementation-planning-agent`; `implementation-agent` | `in-progress` | `docs/nonlinear-static-newton-raphson/implementation-plan.md`; `docs/nonlinear-static-newton-raphson/implementation-report.md`; `docs/nonlinear-static-newton-raphson/build-test.md`; `docs/nonlinear-static-newton-raphson/reference-comparison.md`; `docs/nonlinear-static-newton-raphson/corrections.md` | 상세 인터뷰와 계획 승인 후 TDD, MSVC/x64/Debug CMake/CTest, blocking reference comparison이 통과함 | REWORK-006 Correction returned `corrected-for-implementation-rerun`; `corrections.md` SHA-256 `7FA66A14E694D0451B4422BB5A233E117F2100231A9644771EFD428AF7AD6B81`. Evidence: nested `workspace-write` launched from VsDevCmd x64 plus dependency env; Ninja/Debug/MSVC Hostx64-x64 configure/build/discovery/full CTest all exit 0; 228 discovered/228 passed; Stop-hook `codex exec` exit 0; focused contract test 1/1; full Python 24 passed plus one pre-existing `xhigh`/`extra high` mismatch; reference hashes unchanged; top phase and Step 1 reset to `pending` only after pass, Step 2 remains pending. | Stage 6 implementation evidence docs still absent; no-push Harness rerun from Step 1 is authorized | 14 |
|
||||
| 3. Formulation | `formulation-agent` | `passed` | `docs/nonlinear-static-newton-raphson/formulation.md` | §14.1만 USER-DECISION-003 option 1로 갱신하고 strong/weak form, kinematics, tangent/residual, integration, state/recovery, O-ROT/O-MAP/O-DRILL/O-MOM/O-BC closure를 보존함 | Owner returned `ready-for-coordinator-and-user-reapproval`, SHA-256 `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9`, §14.1-only diff `34` additions/`5` deletions, revised requirements hash matched, 13/13 contract assertions and diff check passed, no other owner file changes. Coordinator audit passed and user explicitly re-approved this hash on 2026-08-24: exact-zero branch selector is matching external residual-channel scale, nonzero external scale retains relative `max(internal, external)` denominator and `1e-2`, typed absolutes remain `1e-3`, correction gates/four-channel AND/lifecycle/reference disposition unchanged. | 없음 | 3 |
|
||||
| 4. Numerical/reference review | `numerical-review-agent` | `passed` | `docs/nonlinear-static-newton-raphson/numerical-review.md`; `docs/nonlinear-static-newton-raphson/reference-model.md` | USER-DECISION-006 delegated reapproval: both normalized factor-one global FORCE and MOMENT balance gates are fixed `<=1e-8`, with exact formulas, sum-of-contribution scales, zero-scale rule, source identity and USER-DECISION-004 dispositions preserved | Owner returned `pass-for-io-definition`, blockers none. Coordinator audit verified hashes `numerical-review.md` `C00994EF4BB23A237547459E157EE5BDA96B28CAF08F712CD31A8E0ABBF62D2C` and `reference-model.md` `B2E6845AB59A32F78261B7A47506C27F7BF4B61401B34BC5DE3DAD4F03D6ADDA`; both reports record global force/moment normalized gate `<=1e-8`, unchanged formulas/scales/exact-zero/current-arm/spatial moment/factor-one/NSNR-069/`docs/TOLERANCE.md` boundaries, 12 reference hashes/length/mtime unchanged, fine primary/coarse companion, U blocking, UR warning-only, local RF/RM review-only and `RM3`/stress excluded. Root independently verified hashes, target occurrences and `git diff --check` with only LF/CRLF warnings. | 없음 | 6 |
|
||||
| 5. I/O definition | `io-definition-agent` | `passed` | `docs/nonlinear-static-newton-raphson/io.md` | USER-DECISION-006 fixed both normalized factor-one global FORCE and MOMENT balance gates at `<=1e-8` while preserving HDF5 schema/projections/reference paths and `docs/TOLERANCE.md` separation | Owner returned `ready-for-coordinator-review`, blockers none. Coordinator verified raw SHA-256 `ED23274F4F15F7D1DFF886FA8158961362C75960990271D24A5FD010A8D51FD9`; owner/root LF-normalized SHA-256 `53AFBB1DF27FBD9CE6C2E23EE34480882241A859D3FC1993E82DB61ACC6637EB`. `io.md` records both coarse/fine global force and moment internal gates as dimension-separated normalized `<=1e-8`, preserves `/global/equilibrium` schema version/path/shape/source identity, constrained reaction/free residual projections, zero-scale rule, NSNR-069, local RF/RM review-only, U blocking, UR warning-only, `RM3`/stress exclusions, reference paths and external-only `docs/TOLERANCE.md`. | 없음 | 7 |
|
||||
| 6. Implementation | `implementation-planning-agent`; `implementation-agent` | `in-progress` | `docs/nonlinear-static-newton-raphson/implementation-plan.md`; `docs/nonlinear-static-newton-raphson/implementation-report.md`; `docs/nonlinear-static-newton-raphson/build-test.md`; `docs/nonlinear-static-newton-raphson/reference-comparison.md`; `docs/nonlinear-static-newton-raphson/corrections.md`; `docs/nonlinear-static-newton-raphson/translation-displacement-comparison.md` | Step `11` only no-push rerun uses Codex CLI `0.150.1`, `workspace-write`, hooks, Terra/`xhigh`, `--disable unified_exec`, VsDevCmd x64/deps, Ninja/MSVC Debug preset and a child launch PATH that removes every entry matching `\\WindowsApps(?:\\|$)`; Step `12` remains outside scope | REWORK-009 owner returned `corrected-for-implementation-rerun`, blockers none, `corrections.md` SHA-256 `4DC996E3D4CA2D515D19E5D244C3A112AF0C9429335698E03089B77B5E79346A`. Coordinator/root audit verified Section 14 records the confirmed all-WindowsApps filter, exact shell smoke, recovered RED->GREEN, focused passes, Stop `302/302`, no runner/source/test/CMake/phase/upstream/reference/tolerance edits, and one bounded Step `11` rerun recommendation. Step `11` and top phase remain `pending`, Step `12` pending, HEAD `65b56b1`, and canonical evidence docs are absent. | Step `11` rerun owner return missing; Step `12` not authorized | 33 |
|
||||
| 7. Physics evaluation | `physics-evaluation-agent` | `pending` | `docs/nonlinear-static-newton-raphson/physics-evaluation.md` | equilibrium, reaction, direction, path/history, energy, symmetry, model coverage가 `pass-for-release-agent`임 | 없음 | Stage 6 passing evidence 필요 | 0 |
|
||||
| 8. Release readiness | `release-agent` | `pending` | `docs/nonlinear-static-newton-raphson/release.md` | `ready-for-release` recommendation과 acceptance traceability가 완전함 | 없음 | Stage 7 passing evidence 필요 | 0 |
|
||||
|
||||
@@ -33,46 +33,52 @@
|
||||
### Active Dispatch Package
|
||||
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- current_dispatch: `stage-6-step1-no-push-harness-rerun`
|
||||
- target_sub_agent: `implementation-agent` via Harness Executor (`python scripts/execute.py nonlinear-static-newton-raphson`; root launch required)
|
||||
- current_dispatch: `STEP11-EXECUTION-004-all-windowsapps-filter-step11-only-rerun-root-executor-required`
|
||||
- target_sub_agent: `implementation-agent` via Harness Executor
|
||||
- required_inputs:
|
||||
- REWORK-006 Correction return: status `corrected-for-implementation-rerun`, `docs/nonlinear-static-newton-raphson/corrections.md` SHA-256 `7FA66A14E694D0451B4422BB5A233E117F2100231A9644771EFD428AF7AD6B81`.
|
||||
- User explicitly approved USER-DECISION-002 option A / DECISION-039: Ninja/MSVC is the accepted Stage 6 validation contract for continuation.
|
||||
- Current isolated worktree: `C:\git\FESADev\.worktrees\nonlinear-static-newton-raphson`; no push.
|
||||
- Step 0 evidence: completed and committed as feature commit `fc16ef6` plus metadata commit `e7c6932`.
|
||||
- Current Step 1 state: `pending` with historical `started_at`; existing uncommitted Domain/Abaqus mapping production and C++ test changes are preserved; Step 2..12 remain pending.
|
||||
- Current hashes: `phases/index.json` `307D8041537D73B579E53F96B052BA035774B65ABF071BB230AAE20CFCF966A7`; phase index `D3F30298EB728F4DECA948827900CF35989F47F009872B43DC4BD997B30C3950`.
|
||||
- Correction files/evidence: tracked `CMakePresets.json` SHA-256 `900EEE9EC564CEA09F2A73B8AC59865A7233E9480FAACD3CFEF60F2ABCDFFD43`; ignored `.harness/config.json` byte-identical to `.harness/config.example.json` SHA-256 `D07429860D472AE37D02D6CD638900FA46175085AF47F179E98601227F8D3C43`; contract test `tests/test_harness_preset_contract.py` SHA-256 `94433B65E155C90837724810A1E773BB990779AFB217268E557AE4E7662B8396`.
|
||||
- Correction validation: nested `workspace-write`/VsDevCmd x64/dependency env; Ninja/Debug/MSVC Hostx64-x64 configure/build/discovery/full all exit 0; 228 discovered/228 passed; Stop-hook `codex exec` exit 0; focused contract test 1/1; full Python 24 passed plus pre-existing `xhigh`/`extra high` mismatch 1.
|
||||
- Root independent review: no blocking finding; read AGENTS/ARCHITECTURE/ADR; focused contract test fresh pass 1/1; `cmake --list-presets` exposes only approved preset; `cmake --preset ... -N` exit 0; `git diff --check` pass; local config/build ignored as intended; `git diff -- reference` clean; no old VS/`.harness/build` commands remain in `implementation-plan.md` or `step0.md`..`step12.md`.
|
||||
- Approved Stage 1-5 hashes remain unchanged: requirements `910E351F3F90FFA42F07D15206B55E62C05EAE821E250424430148337506EBF2`; research `C920A6B02381230D1DB419D73FE767D611B36720D27D6410507BA88C3CA28EEE`; formulation `DFA629888041D5762FD0DF4271353464A692B325DC0C821A8D8689688C1EAFD0`; numerical-review `9517E11804C45A6F3822D18821D52EA493AE20353C8FFAD61E960F4315977D01`; reference-model `52D10B1D0C0500B295C5E48BCB3618B309D9696371B8070D4E3DCEE8D3D74CD3`; io `DBB959A68F17D67CA2B42569610B9C1B595A8BFB5502BC194B7E62B656031B28`.
|
||||
- Use `fesa-cpp-msvc-tdd` and project-local `harness`; execute only Executor-selected Step `11` `equilibrium-projection-and-reference-gate`.
|
||||
- Read `AGENTS.md`, `docs/SOLVER_AGENT_DESIGN.md`, `docs/HARNESS.md`, `docs/HARNESS_WORKFLOW.md`, `.codex/hooks.json`, `docs/nonlinear-static-newton-raphson/coordination.md`, approved Stage 4/5/6 documents, phase indexes, `step11.md`, `step11-output.json`, and `corrections.md` Section 14.
|
||||
- Preserve USER-DECISION-006: both normalized factor-one global FORCE and MOMENT balance gates are fixed inclusive `<=1e-8`; no `fesa.env`, config parsing, runtime API, CLI option, public API, HDF5 schema change or product solver acceptance behavior.
|
||||
- Preserve exact formulas, sum-of-contribution scales, exact-zero rule, source identities, NSNR-069 free residual gates, `docs/TOLERANCE.md` separation, reference artifact immutability, local RF/RM review-only, U blocking, UR warning-only, and `RM3`/stress exclusions.
|
||||
- Launch environment: Codex CLI `0.150.1`, app SHA-256 `CBD657DDFE151D1A6EBAD660BEFFDBD3265DC5AFF4B3A6095124D3E2F0156F2F`, `CODEX_HOME=C:\Users\baram\.codex`, `workspace-write`, hooks retained, implementation-agent `gpt-5.6-terra`/`xhigh`, `--disable unified_exec`, VsDevCmd Hostx64/x64 with approved dependency env vars and Ninja/MSVC Debug preset.
|
||||
- Before nested Codex execution, after VsDevCmd/dependency setup, filter child PATH exactly with entries satisfying `$_ -and $_ -notmatch '\\WindowsApps(?:\\|$)'`; preflight must leave `pwsh` unresolved, resolve `powershell` to `C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe`, and print exact `FESA_CODEX_SHELL_SMOKE_OK` with exit `0`.
|
||||
- Use the previously approved Step `11` only no-push wrapper/private single-step path that hard-stops before Step `12`; if only the public all-pending runner path is available and Step `12` cannot be blocked, stop and return to Coordinator.
|
||||
- Preserve current dirty Step `11` implementation/test/comparator/CMake work and recovered RED->GREEN evidence; do not fabricate a new RED by reverting code. Run the Step `11` required focused/full VERIFY commands and let automatic hooks run.
|
||||
- Current workdir: `C:\git\FESADev\.worktrees\nonlinear-static-newton-raphson`.
|
||||
- expected_outputs:
|
||||
- Executor-managed no-push Harness rerun beginning at Step 1. Executor owns branch state, pending selection, retries, timestamps, commits and advancement.
|
||||
- Implementation Agent owns only Executor-selected Step 1 `RED -> observed failure -> minimal GREEN -> VERIFY`, then Step 1 status/summary or blocker payload.
|
||||
- Final Stage 6 evidence remains `implementation-report.md`, `build-test.md`, and `reference-comparison.md` only after the approved phase reaches final verification.
|
||||
- acceptance_gate: Root is authorized to rerun no-push `python scripts/execute.py nonlinear-static-newton-raphson` from the isolated worktree, launched from VsDevCmd x64 with `FESA_GTEST_SOURCE_DIR`, `MKL_DIR`, `TBB_DIR`, `HDF5_DIR`, Codex `0.149.1`, aligned `CODEX_HOME`, filtered WindowsApps PATH, `workspace-write`, hooks retained, `gpt-5.6-terra`/`xhigh`, `--disable unified_exec`, Ninja/MSVC presets, and no `danger-full-access`. Passing Stage 6 still requires successful Harness execution, MSVC/x64/Debug full CTest, required reference comparison, and Coordinator audit of implementation evidence docs.
|
||||
- stop_condition: Stop and report if Step 1 rerun blocks/errors, if the old Visual Studio/FileTracker path recurs, if the nested Codex shell hang recurs, if Ninja/MSVC validation fails, or if any unauthorized `danger-full-access`, push, reference solver/artifact mutation or Step 2 advance is attempted before Step 1 completion.
|
||||
- missing_evidence: no-push Harness Step 1 rerun result and Stage 6 implementation evidence docs.
|
||||
- `phases/nonlinear-static-newton-raphson/step11-output.json`
|
||||
- Executor-owned phase metadata and Step `11` source/test/comparator commit if the Step passes
|
||||
- No `implementation-report.md`, `build-test.md` or canonical `reference-comparison.md` in this Step
|
||||
- acceptance_gate: Implementation/Harness returns Step `11` completed with output path/status/evidence/blockers, no push, Stop/focused CTest evidence green under `windows-msvc-ninja-debug`, fixed `<=1e-8` force/moment gates verified, reference artifact hashes/mtimes unchanged and `git diff -- reference` clean; Step `12` remains pending.
|
||||
- stop_condition: Stop and return classified blocker if the same user-local WindowsApps `pwsh.exe`/`CreateProcessAsUserW` failure recurs after the all-WindowsApps filter, if any change beyond fixed `<=1e-8` is needed, if Step `12` would start, if push/`danger-full-access`/manual hook/reference solver/reference mutation is required, or if runner/source/test/phase/upstream/tolerance edits outside `step11.md` contract are needed.
|
||||
- missing_evidence: Step `11` rerun owner return and Executor commit/status evidence. This Coordinator runtime has no callable `spawn_agent` tool (`tool_search` found no dispatch tool), so root/Executor launch is required.
|
||||
|
||||
### Latest Sub-Agent Return
|
||||
|
||||
- target_sub_agent: `correction-agent`
|
||||
- output_paths:
|
||||
- `docs/nonlinear-static-newton-raphson/corrections.md`
|
||||
- status: `corrected-for-implementation-rerun` (owner); Coordinator decision `passed`
|
||||
- status: `corrected-for-implementation-rerun`; Coordinator decision `passed`
|
||||
- evidence_summary:
|
||||
- `corrections.md` SHA-256 `7FA66A14E694D0451B4422BB5A233E117F2100231A9644771EFD428AF7AD6B81`.
|
||||
- Correction expressed DECISION-039 through tracked `CMakePresets.json`, ignored `.harness/config.json`, updated `.harness/config.example.json`, `.gitignore`, `implementation-plan.md`, and `step0.md`..`step12.md`, and added `tests/test_harness_preset_contract.py`; no Harness Python production change was required.
|
||||
- Nested `workspace-write` with VsDevCmd x64 and dependency environment passed Ninja/Debug/MSVC Hostx64-x64 configure/build/discovery/full CTest, 228 discovered/228 passed, and Stop-hook `codex exec` exit 0.
|
||||
- Focused contract test passed 1/1; full Python was 24 passed plus one pre-existing `xhigh`/`extra high` mismatch.
|
||||
- Top phase and Step 1 were reset to `pending` only after blocker-clear evidence; Step 2 remains pending.
|
||||
- Reference artifact hashes match the approved inventory and `git diff -- reference` is clean.
|
||||
- Correction did not run Harness phase, Step 2, reference solvers, cleanup, commit, push, or `danger-full-access`.
|
||||
- Coordinator/root verified `corrections.md` SHA-256 `4DC996E3D4CA2D515D19E5D244C3A112AF0C9429335698E03089B77B5E79346A` and scoped `git diff --check` exit `0` with only LF/CRLF warning.
|
||||
- Section 14 confirms the prior launch filter missed `C:\Users\baram\AppData\Local\Microsoft\WindowsApps`; filtering all entries matching `\\WindowsApps(?:\\|$)` makes `pwsh` unresolved, selects system Windows PowerShell and passes exact `FESA_CODEX_SHELL_SMOKE_OK`.
|
||||
- Owner recorded recovered old-gate RED, `<=1e-8` GREEN, focused implementation/reference passes, Stop `302/302`, no blockers, no Harness phase/build/full CTest rerun, no commit/push, no reference mutation and no runner/source/test/CMake/phase/upstream/tolerance edits.
|
||||
- blockers:
|
||||
- 없음 for REWORK-006; Stage 6 implementation evidence docs remain absent.
|
||||
- self_audit_findings: Coordinator accepted the Correction return, independently checked hashes, preset/config content, phase pending state, no reference/upstream contract diff, root independent review, and did not run Harness/build/tests/reference solvers.
|
||||
- return_contract_check: output path, corrected status, evidence summary, blockers, no-change assertion and cleanup evidence are present.
|
||||
- acceptance_evidence_check: REWORK-006 is closed; no-push Harness rerun from Step 1 is eligible under the approved envelope.
|
||||
- 없음
|
||||
- self_audit_findings: Coordinator accepts REWORK-009 as a report-only environment correction. It does not reopen Stage 4/5/6 semantics and does not itself complete Step `11`.
|
||||
- return_contract_check: Return includes output path, status, evidence summary and blockers; owner scope was limited to `corrections.md` and root verified the hash.
|
||||
- acceptance_evidence_check: The next eligible action is one bounded Step `11` only no-push Harness/Implementation rerun under the corrected all-WindowsApps child PATH filter.
|
||||
|
||||
### USER-DECISION-004 Selected Path
|
||||
|
||||
- selected: User explicitly approved option 1 on `2026-08-26`.
|
||||
- meaning: exact local nodal `RF1/RF2/RF3` and physical spatial `RM1/RM2` rows remain deterministic source-key/schema/finite/inventory/error-reporting evidence but become review-only/nonblocking; `RM3` remains excluded.
|
||||
- blocking evidence: factor-one global resultant force `[3]`, factor-one global resultant moment `[3]`, and accepted free-DOF residual gates/evidence. Resultant moment uses the existing I/O global-equilibrium contract: global origin `[0,0,0]`, current force arms and spatial physical nodal moments.
|
||||
- unchanged: displacement comparison remains blocking, `UR1/UR2/UR3` remains warning-only, stress CSVs remain optional inspection/no comparison projection, `docs/TOLERANCE.md` applies where external comparison remains, and exact source-ID prechecks are preserved.
|
||||
- prohibited: no averaging/collapse/zero clamp, no tolerance relaxation, no comparator weakening, no reference artifact edit, and no Abaqus S4 internal-equivalence claim.
|
||||
- re-approval path: Stage 1 requirements, Stage 4 Numerical/reference and Stage 5 I/O are re-approved. Stage 6 implementation-planning revision draft is returned, Coordinator-audited, user-approved and materialized by MATERIALIZATION-003. DECISION-042 now supplies the separate explicit Step 11 Harness/Implementation request. Stage 3 formulation has no immediate dispatch because current §11.4 and §13.4 already define full residual/reactions and global resultant identities.
|
||||
|
||||
`MESH-REFINEMENT-SPIKE-001` remains diagnostic evidence that option 3 is not met by the current Abaqus S4 coarse/fine pair. `TRANSLATION-REPORT-001` remains translation-only diagnostic evidence and does not authorize final reference-model, tolerance, comparator, HDF5 schema, implementation, Harness, Step 12, Physics or Release changes.
|
||||
|
||||
### Compact Migration Evidence
|
||||
|
||||
@@ -187,10 +193,56 @@
|
||||
| 2026-08-24 | REWORK-005 FileTracker Correction return and Coordinator audit | `blocked` | Correction returned `blocked` / `needs-user-decision`, changed only `docs/nonlinear-static-newton-raphson/corrections.md` SHA-256 `BCA9DEE6F6F262A70FB5C7A49B2BF06CA3FF8BC6C6838FB20A8B48071CF9D420`. VS18/MSBuild `18.8.2` fails in FESA and gtest at `FileTracker..cctor()` -> `GetLongFilePath` with `E_ACCESSDENIED`; inherited `TEMP`/`TMP` is outside workspace; `/p:TrackFileAccess=false` and `:workspace` echo were not proven; exact process trees were cleaned; Ninja/MSVC 27/27 focused and 228/228 full evidence is preserved but not an approved substitute. | `needs-user-decision` | User must choose A Ninja/MSVC evidence substitution, B isolated `danger-full-access` fallback, or C stop pending external Codex sandbox Temp/FileTracker repair |
|
||||
| 2026-08-24 | USER-DECISION-002 option A and REWORK-006 dispatch | `in-progress` | User explicitly approved option A: Ninja/MSVC is the accepted Stage 6 validation contract. Coordinator/root audit found `.harness/config.json` ignored/absent, CMake presets absent, and adapter preset triplets sufficient to route Stop hook to Ninja without Harness Python production changes. Root dispatched `correction-agent` for preset/config plumbing, preset-contract RED test, planning/phase command rewrite, blocker-clear evidence, and phase reset only after evidence. | `needs-correction` | Await REWORK-006 Correction return; no Harness rerun, Step 2, `danger-full-access`, push, reference solver or reference artifact change |
|
||||
| 2026-08-24 | REWORK-006 Correction return and Coordinator audit | `passed` | Correction returned `corrected-for-implementation-rerun`; `corrections.md` SHA-256 `7FA66A14E694D0451B4422BB5A233E117F2100231A9644771EFD428AF7AD6B81`; Ninja/MSVC Debug configure/build/discovery/full CTest passed with 228/228, Stop-hook `codex exec` exit 0, focused contract test 1/1, full Python 24 passed plus pre-existing `xhigh`/`extra high`; reference hashes unchanged; top phase and Step 1 reset to `pending` only after evidence; root independent review found no blocking issue. | `needs-implementation` | Root is authorized to rerun no-push `python scripts/execute.py nonlinear-static-newton-raphson` from Step 1 under approved Ninja/MSVC workspace-write envelope |
|
||||
| 2026-08-24 | Harness Step 11 reference-comparison block and REWORK-007 dispatch | `needs-rework` | Harness Steps 0..10 completed. Step 11 owner added reference comparator/test files but blocked because copied `shellNL.inp` reaches `nonlinear-nonconvergence` after 100 Newton iterations; `shellNL_results.h5` is absent, `git diff -- reference` is clean, and Step 12 remains pending. Log evidence shows force/correction channels passing while residual moment remains failing; approved convergence contract must not be relaxed silently. | `needs-correction` | Root profile dispatch to bounded `correction-agent`: diagnose/fix only implementation-owned nonlinear solver/convergence defect under approved contracts, or return `upstream-contract` / `needs-user-decision` if the approved moment-denominator contract is the blocker |
|
||||
| 2026-08-24 | REWORK-007 upstream-contract return and Coordinator audit | `blocked` | Correction returned `needs-upstream-decision`, `corrections.md` SHA-256 `63E0FF45AF44F564B276C2400B2D1A9AB5F90FC9E1470F4F8246ED57231B175B`, changed only that report. Proof: shellNL has no external rotational generalized force, so approved `D_M=max(||f_int||inf,||f_ext||inf)` gives `eta_M=1` for every nonzero rotational residual; focused CTest #288 reproduced the failure and 100/100 log records have numerator=denominator, relative branch, pass=0. | `needs-user-decision` | USER-DECISION-003: choose a residual-moment convergence contract path before requirements/formulation/numerical-review/io/planning rework or stop the feature |
|
||||
| 2026-08-24 | USER-DECISION-003 option 1 and Requirements rework dispatch | `in-progress` | User approved option 1: if the matching external residual-channel scale is exact zero, apply the existing typed absolute residual gate; otherwise retain the current relative denominator. Coordinator recorded required re-approval sequence and bounded Stage 1 rework to NSNR-069 in `requirements.md` only. | `needs-requirements` | Root profile dispatch to `requirement-agent`; await revised `requirements.md` return and Coordinator audit before explicit Stage 1 re-approval |
|
||||
| 2026-08-24 | Requirements NSNR-069 option 1 return and Coordinator audit | `passed` | Requirement Agent returned `draft`, `ready-for-coordinator-review`, `requirements.md` SHA-256 `89B6AEC25BD6AF5B79D328EEF63359A82DDB9402AE9482E3082A70C474A7B8B8`. Coordinator verified hash, `git diff --check`, 397 lines, 24/24 records/Matrix rows, scoped NSNR-069/status/tolerance/matrix/handoff diff, unchanged thresholds/four-channel AND/Full Newton/100 iterations/reference disposition, and no forbidden execution or artifact change. | `needs-user-decision` | Ask user to explicitly approve revised `requirements.md`; do not dispatch formulation yet |
|
||||
| 2026-08-24 | Revised Stage 1 approval and Formulation §14.1 dispatch | `in-progress` | User explicitly approved revised `requirements.md` SHA-256 `89B6AEC25BD6AF5B79D328EEF63359A82DDB9402AE9482E3082A70C474A7B8B8`. Coordinator closed the Stage 1 re-approval item and prepared a bounded `formulation-agent` package for `formulation.md` §14.1 only under USER-DECISION-003 option 1. | `needs-formulation` | Root profile dispatch to `formulation-agent`; await §14.1-only return and Coordinator audit; do not start numerical-review/I/O/planning/implementation |
|
||||
| 2026-08-24 | Formulation §14.1 option 1 return and Coordinator audit | `passed` | Formulation Agent returned `ready-for-coordinator-and-user-reapproval`, `formulation.md` SHA-256 `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9`. Coordinator verified hash, §14.1-only diff `34` additions/`5` deletions, revised requirements hash alignment, external-scale exact-zero selector, retained nonzero-external relative gate, unchanged thresholds/correction gates/four-channel AND/lifecycle/reference disposition, and no forbidden execution or artifact change. | `needs-user-decision` | Ask user to explicitly approve revised `formulation.md`; do not dispatch numerical-review yet |
|
||||
| 2026-08-24 | Revised Stage 3 approval and Numerical/reference dispatch | `in-progress` | User explicitly approved revised `formulation.md` SHA-256 `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9`. Coordinator closed REAPPROVAL-002 and prepared a bounded `numerical-review-agent` package to validate USER-DECISION-003 option 1, dimensions/predicates, shellNL readiness and reference disposition. | `needs-numerical-review` | Root profile dispatch to `numerical-review-agent`; await owner return and Coordinator audit; do not start I/O/planning/implementation |
|
||||
| 2026-08-24 | Numerical/reference option 1 return and Coordinator audit | `passed` | Numerical Review Agent returned `pass-for-io-definition`; `numerical-review.md` SHA-256 `E93E0DEF1FD5ECDF956D50C6F8B8F1C073E21650E14EDC97A683DCA4688FE153`, diff `+49/-11`; `reference-model.md` byte-identical SHA-256 `44B619BE2494007D8F2F51F34B9D974F934C26818F5AB8AF2DAA288ABF78D2FC`. Coordinator verified revised branch coverage, unchanged reference disposition, reference hashes/row counts, no concrete HDF5 dataset paths, no forbidden artifact/execution scope and diff check pass. | `needs-user-decision` | Ask user to explicitly approve revised Stage 4 artifacts; do not dispatch I/O yet |
|
||||
| 2026-08-24 | Revised Stage 4 approval and I/O dispatch | `in-progress` | User explicitly approved revised `numerical-review.md` SHA-256 `E93E0DEF1FD5ECDF956D50C6F8B8F1C073E21650E14EDC97A683DCA4688FE153` and unchanged `reference-model.md` SHA-256 `44B619BE2494007D8F2F51F34B9D974F934C26818F5AB8AF2DAA288ABF78D2FC`. Coordinator closed REAPPROVAL-003 and prepared a bounded `io-definition-agent` package for `io.md` only. | `needs-io-definition` | Root profile dispatch to `io-definition-agent`; await owner return and Coordinator audit; do not start planning/implementation/Harness |
|
||||
| 2026-08-24 | I/O option 1 return and Coordinator audit | `passed` | I/O Definition Agent returned `ready-for-coordinator-review`; `io.md` raw SHA-256 `DB0BD8339172FD05712D2B7469966DEB0A6A82CB5A0052817F4725319E741334`, LF-normalized SHA-256 `E0C42775FF5C3963A37DF70B00044DDA244A463A6DD222975C2903A1BFA205AF`, diff `+37/-20`. Coordinator verified approved source hash alignment, residual matching-external-scale exact-zero/nonzero selector, retained nonzero relative denominator, unchanged 39-field `nsnr-log-v1` labels/order, unchanged HDF5/reference projection and dispositions, stress optional/RM3 excluded, diff check pass and reference diff clean. | `needs-user-decision` | Ask user to explicitly approve revised `io.md`; do not dispatch planning/implementation/Harness |
|
||||
| 2026-08-24 | Revised Stage 5 approval and Implementation Planning revision-draft dispatch | `in-progress` | User explicitly approved revised `io.md` raw SHA-256 `DB0BD8339172FD05712D2B7469966DEB0A6A82CB5A0052817F4725319E741334`, LF-normalized SHA-256 `E0C42775FF5C3963A37DF70B00044DDA244A463A6DD222975C2903A1BFA205AF`. Coordinator closed REAPPROVAL-004 and prepared a bounded `implementation-planning-agent` package to draft exact plan/phase revisions for USER-DECISION-003 option 1 while preserving Steps 0..10 history and Step 11 blocked comparator work. | `needs-implementation-plan` | Root profile dispatch to `implementation-planning-agent`; owner returns concise revision draft only; do not materialize planning files or run Harness until user approves the draft |
|
||||
| 2026-08-25 | Implementation Planning option 1 revision draft return and Coordinator audit | `passed` | Implementation Planning owner returned `draft-ready-for-user-review`, no files changed/executed. Draft proposes minimal updates to `implementation-plan.md`, Step `5/7/10/11/12` and phase indexes; Step 11 owns RED-first `NSNR-CTRL-018..021` and `NSNR-LOG-012`, minimal `nonlinear_static_control.cpp` update, comparator preservation, copied `shellNL` reference comparison and full CTest. Coordinator verified approved upstream semantics and Harness ownership boundaries. | `needs-user-decision` | Ask user to explicitly approve the planning revision draft; do not materialize or run Harness |
|
||||
| 2026-08-25 | Implementation Planning revision draft approval and materialization dispatch | `in-progress` | User explicitly approved the audited Implementation Planning revision draft and requested materialization. Coordinator closed REAPPROVAL-005 and prepared bounded materialization dispatch limited to `implementation-plan.md`, Step `5/7/10/11/12`, feature index and top index. | `needs-implementation-plan` | Root profile dispatch to `implementation-planning-agent`; await materialization return and Coordinator audit; do not run Harness/CTest/code/reference/push |
|
||||
| 2026-08-25 | Implementation Planning materialization return and Coordinator audit | `passed` | Owner returned `ready-for-implementation`; approved 8 outputs materialized, Step 11 reset to `pending`, top phase reset to `pending`, Steps 0..10 completed history and Step 11 partial comparator files preserved, Step 12 pending, forbidden source/include/reference/tolerance diff empty, HEAD unchanged and no execution/commit/push. | `ready-for-implementation` | Await separate explicit no-push Harness/Implementation execution request; current Executor-selected pending Step is Step 11 |
|
||||
| 2026-08-25 | Step 11 no-push Harness/Implementation execution authorization | `in-progress` | User explicitly requested no-push Harness/Implementation rerun from Step 11. Coordinator preflight verified isolated linked worktree, branch `feat-nonlinear-static-newton-raphson`, HEAD `65b56b1`, Step 11 `pending` with historical `started_at`, Step 12 `pending`, Codex CLI `0.149.1`, approved `windows-msvc-ninja-debug` preset/config, runner `--disable unified_exec`, and approved dirty state with preserved comparator files. | `needs-implementation` | Launch no-push Harness Executor under DECISION-038/039 envelope; await Step 11 return; no `danger-full-access`, push, reference mutation, reference solver, Step 12, Physics or Release |
|
||||
| 2026-08-25 | Step 11 reference-comparison return and REWORK-008 dispatch package | `needs-rework` | Harness exit `2`; Step 11 blocked; Step 12 pending; `step11-output.json` SHA-256 `0F3B876AF84398EB1D2C90335998115797054B012899DE27E4070A6F533EEF91`. Selector/control/log fix passed and factor-one HDF5 exists, but reference gate `15/16` failed on blocking reaction RMS. Additional read-only diagnosis shows deterministic key mapping and global equilibrium but local reaction redistribution mismatch already present in linear-limit reactions, so Correction must audit implementation-vs-upstream-contract before any production edit. | `needs-correction` | Root profile dispatch to `correction-agent` for REWORK-008 diagnostic; no tolerance/reference/HDF5 schema contract change, reference solver, reference mutation, `danger-full-access`, push, Step 12, Physics or Release |
|
||||
| 2026-08-25 | REWORK-008 upstream-contract return and USER-DECISION-004 gate | `blocked` | Correction returned `needs-upstream-decision`, classification `upstream-contract` / `reference-blocking-model-adequacy-conflict`, Section 13 SHA-256 `C8AC5A5015E5F9622E2964F514F2C06572F953B5244F006044DEDDF0F3D0A194`. It found no reaction computation/storage/mapping defect: residual→reaction→HDF5 mapping exact, constrained `phi=0`, global resultant matches, and local RF/RM mismatch already exists in FESA-linear versus Abaqus-linear while each solver NL≈linear. No forbidden files changed by correction; reference diff clean and HEAD unchanged. | `needs-user-decision` | USER-DECISION-004: choose local nodal reactions review-only with global equilibrium blocking, global resultant-only blocking, or independent formulation-appropriate local-reaction benchmark; do not dispatch further work before explicit choice |
|
||||
| 2026-08-25 | MESH-REFINEMENT-SPIKE-001 numerical-review dispatch | `in-progress` | User added untracked main-checkout `reference/shellNL-meshfine` artifacts and explicitly approved a spike design for USER-DECISION-004 option 3 candidate validation. Coordinator verified read-only hashes/rows and feature-worktree missing state, then recorded a bounded `numerical-review-agent` package for artifact/input-equivalence/row-identity readiness only. | `needs-user-decision` | Root profile dispatch to `numerical-review-agent`; no final option selection, reference solver, artifact mutation, tolerance/comparator/HDF5 schema/implementation/Harness/Step 12/Physics/Release change |
|
||||
| 2026-08-25 | MESH-REFINEMENT-SPIKE-001 diagnostic return and Coordinator audit | `passed` | Fine artifacts copied byte-identically; required displacement/reaction artifacts are valid, stress is optional inventory only with one malformed optional key. Existing executable run exited `0` and produced H5/log hashes. Translation/rotation pass common tolerance, but local RF/RM rows still fail per-row gates; inplane reaction worsens under refinement. Global resultants and free residuals are sound. The same Abaqus S4 coarse/fine pair is not an independent formulation-appropriate local-reaction benchmark. | `needs-user-decision` | Ask user to choose USER-DECISION-004; Coordinator recommends option 1 review-only local nodal rows plus blocking global equilibrium/resultants; no Harness/Step 11 rerun before approval |
|
||||
| 2026-08-26 | TRANSLATION-REPORT-001 focused reporting dispatch | `in-progress` | User approved bounded focused report design for `docs/nonlinear-static-newton-raphson/translation-displacement-comparison.md`: coarse/fine U1/U2/U3 translation-only comparison with exact artifact/HDF5 identity, source-key prechecks, `docs/TOLERANCE.md`, metrics, worst rows, mesh trend and exclusions. | `needs-user-decision` | Root profile dispatch to `implementation-agent`; only the focused report may be created; do not create canonical `reference-comparison.md`, run solver/Harness/reference solver, edit code/comparator/tolerance/reference artifacts, change USER-DECISION-004, or advance Step 11/12 |
|
||||
| 2026-08-26 | TRANSLATION-REPORT-001 return and Coordinator audit | `passed` | Implementation Agent returned `translation-diagnostic-pass-not-a-gate` and created only `docs/nonlinear-static-newton-raphson/translation-displacement-comparison.md` SHA-256 `597D923FB1943CCB2BCF9D9FFC13FD904F795DFEB9CB71B097FF168B78694338`. Coordinator/root audit verified exact artifact hashes, coarse/fine U-key prechecks, `docs/TOLERANCE.md` pass metrics, explicit exclusions, diff check pass, tracked reference diff clean and canonical evidence docs absent. | `needs-user-decision` | Historical pre-decision state; superseded by USER-DECISION-004 option 1 entry below. No Step 11 rerun, Step 12, Physics or Release before required upstream re-approval |
|
||||
| 2026-08-26 | USER-DECISION-004 option 1 approval and requirements dispatch package | `in-progress` | User explicitly selected option 1. Coordinator recorded local nodal RF/RM as review-only/nonblocking, global resultant force/moment plus accepted free residual as blocking reaction/equilibrium evidence, verified Stage 3 formulation has no immediate semantic rework need because §11.4/§13.4 already define reactions/global resultants, and recorded the Stage 5/6 projection audit item for current-position/spatial-moment global equilibrium versus raw-residual implementation helper. | `needs-requirements` | Root profile dispatch to bounded `requirement-agent` for `requirements.md` only; after owner return, Coordinator audit and explicit user approval are required before Stage 4 |
|
||||
| 2026-08-27 | REAPPROVAL-006 Requirements return and Coordinator audit | `passed` | Requirement Agent returned revised `requirements.md` SHA-256 `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`, status `draft`. Coordinator verified hash, 24/24 requirement and matrix preservation, USER-DECISION-004 option 1 semantics, AUDIT-001 Stage5/6 handoff, preserved formulation meaning, unchanged thresholds/reference immutability and no forbidden gate advancement. | `needs-user-decision` | Ask user to explicitly approve revised `requirements.md`; do not dispatch Stage 4 Numerical/reference until approval |
|
||||
| 2026-08-27 | Revised Stage 1 approval and Stage 4 Numerical/reference dispatch package | `in-progress` | User explicitly approved revised `requirements.md` SHA-256 `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`. Coordinator closed Stage 1 re-approval and prepared bounded `numerical-review-agent` package requiring `fesa-numerical-review`, USER-DECISION-004 option 1 reaction disposition, coarse/fine reference role review and AUDIT-001 downstream separation. | `needs-numerical-review` | Root profile dispatch to `numerical-review-agent`; allowed outputs only `numerical-review.md` and `reference-model.md`; do not start Stage 5 |
|
||||
| 2026-08-27 | REAPPROVAL-007 Numerical/reference return and Coordinator audit | `passed` | Numerical Review Agent returned `pass-for-io-definition`, blockers none; `numerical-review.md` SHA-256 `0A7224003CFF706E9B4D9F55BA2624805299FAC8F42ECD2BC37E429B26DF0091`, `reference-model.md` SHA-256 `81A82D3B367FF501F3C355F81D4E5DD4677BE58E4182E4EB8EEDBB2462FEA2CE`. Coordinator verified requirements/formulation alignment, fine-primary/coarse-companion roles, local RF/RM review-only with `RM3`/stress excluded, U blocking/UR warning-only, internal normalized `1e-10` global balance gate separated from external `docs/TOLERANCE.md`, NSNR-069 free residual gate and AUDIT-001 Stage5/6 handoff. | `needs-user-decision` | Ask user to explicitly approve revised Stage 4 artifacts; do not dispatch Stage 5 I/O yet |
|
||||
| 2026-08-27 | Revised Stage 4 approval and Stage 5 I/O dispatch package | `in-progress` | User explicitly approved revised `numerical-review.md` SHA-256 `0A7224003CFF706E9B4D9F55BA2624805299FAC8F42ECD2BC37E429B26DF0091` and `reference-model.md` SHA-256 `81A82D3B367FF501F3C355F81D4E5DD4677BE58E4182E4EB8EEDBB2462FEA2CE`. Coordinator closed REAPPROVAL-007 and prepared bounded `io-definition-agent` package requiring `fesa-io-contract`, USER-DECISION-004 option 1 HDF5/reference projection update, AUDIT-001 logical quantity separation and no parser/API/code/reference changes. | `needs-io-definition` | Root profile dispatch to `io-definition-agent`; expected output only `io.md`; await owner return and Coordinator audit; do not start Stage 6/Harness |
|
||||
| 2026-08-27 | REAPPROVAL-008 I/O return and Coordinator audit | `passed` | I/O Definition Agent returned `ready-for-coordinator-review`, blockers none; `io.md` raw SHA-256 `C7400C2B1454BE7287EE22D18BB28DA7AFB27FE6F8287783BB83769A4AB8D83C`, LF-normalized SHA-256 `BF775990D83D95B470F814BE57C9676305119D97E48225E231D4926E7809029F`. Coordinator verified approved source hashes, HDF5 schema v1 authority, `/global/equilibrium` applied-plus-reaction current-position/spatial-moment semantics, distinct free-residual/constrained-resultant/balance-error projections, local RF/RM review-only, `RM3`/stress excluded, U blocking/UR warning-only, fine primary/coarse companion and internal `1e-10` versus external `docs/TOLERANCE.md` boundary. | `needs-user-decision` | Ask user to explicitly approve revised `io.md`; do not start Stage 6 planning/materialization/Harness before approval |
|
||||
| 2026-08-27 | Revised Stage 5 approval and Stage 6 planning re-entry draft dispatch | `in-progress` | User explicitly approved revised `io.md` raw SHA-256 `C7400C2B1454BE7287EE22D18BB28DA7AFB27FE6F8287783BB83769A4AB8D83C`. Coordinator closed REAPPROVAL-008 and prepared bounded DRAFT ONLY `implementation-planning-agent` package requiring `fesa-cpp-msvc-tdd` plus project-local `harness`; the owner must audit existing Step 11+ plan/phase state and return a chat draft only. | `needs-implementation-plan` | Root profile dispatch to `implementation-planning-agent`; no planning-file materialization, Harness, build, CTest, solver, reference solver, source/test/CMake/reference/tolerance edit, commit or push before draft approval |
|
||||
| 2026-08-27 | REAPPROVAL-009 Planning draft return and Coordinator audit | `passed` | Planning Agent returned `draft-ready-for-user-review`, blockers none, no files changed/executed. Coordinator verified the draft is a minimal Step 11/12 revision: preserve Steps `0..10`, reset/rename only Step `11` after approval, keep Step `12` pending, cover AUDIT-001 current-arm/spatial-moment projections, no new HDF5 dataset/public header, internal/external tolerance separation, fine primary/coarse companion and approved Ninja/MSVC commands. | `needs-user-decision` | Ask user to approve or reject the Stage 6 revision draft; do not materialize planning files or run Harness until explicit approval |
|
||||
| 2026-08-27 | REAPPROVAL-009 draft approval and MATERIALIZATION-003 dispatch package | `in-progress` | User explicitly approved the Coordinator-audited 2-Step draft. Coordinator prepared materialization-only dispatch to `implementation-planning-agent`, required `fesa-cpp-msvc-tdd` plus project-local `harness`, fixed current input hashes and allowed only `implementation-plan.md`, `phases/index.json`, phase index, `step11.md` and `step12.md` as outputs. | `needs-implementation-plan` | Root profile dispatch to `implementation-planning-agent`; no Harness/build/CTest/solver/reference solver, code/tests/CMake/upstream/reference/tolerance edit, evidence-doc creation, commit or push |
|
||||
| 2026-08-27 | MATERIALIZATION-003 return and Coordinator audit | `passed` | Planning Agent materialized exactly the allowed five outputs: `implementation-plan.md` `758F8F5BB224E88864338C48221D53D4BD2F8633E04C9F2136FFF9E2D1BADFB8`, `phases/index.json` `536D4BF9427792ECCCE4C9A2980210E050035D0202DB8A700BDD671E0DB218C7`, phase index `D808D5C0F389B444A529FC81A48B5726E4CF282CA51B62F3AECAC4D89EA6A5BF`, `step11.md` `D324F7E1495A25B3B8CEA7A2A6C68D559F8336C3A527A164ECD2D0A82C20A526`, `step12.md` `F2831F7E802A40631C91E638C9079508EF1A97CFE46FACC51DCBB4EC55337452`. Coordinator verified JSON parse, 24/24 requirements mapping, clean placeholder scan, scoped `git diff --check` pass, `NSNR-PROC-019` collision handling, Step `11` pending, Step `12` pending, Steps `0..10` preserved, canonical evidence docs absent, tracked reference diff clean, and no execution/commit/push. | `needs-implementation` | Await separate explicit no-push Step 11 Harness/Implementation request; do not run Harness automatically |
|
||||
| 2026-08-27 | Step 11 no-push Harness/Implementation execution approval | `in-progress` | User explicitly approved `Harness/Implementation 시작`. Coordinator verified current runner CLI takes slug `nonlinear-static-newton-raphson`, current phase has Step `11` pending and Step `12` pending, and prepared a no-push `implementation-agent` via Harness dispatch for Step `11` only under DECISION-038/039. Step `12` is outside this approval; current runner loops over pending steps, so root/Executor must enforce the one-step boundary or stop before Step `12`. | `needs-implementation` | Root may run `python scripts/execute.py nonlinear-static-newton-raphson` only under the recorded no-push Step 11 envelope; await Step `11` return |
|
||||
| 2026-08-27 | Step 11 execution recurrent runtime block | `blocked` | DECISION-042 Step11-only execution used the approved no-push envelope but timed out after `1800s`; `step11-output.json` SHA-256 `9FCBC5CE10E2C1B931EC16CADFADF7684C45FBB0B11D9A404922D607EB16706D`, exit `124`, stderr `Codex timed out after 1800 seconds.`, stdout nested command executions stuck `in_progress`. Retry was prevented by secondary CP949 `UnicodeEncodeError` printing `↻`. Read-only shell smokes under tested flag/env variants did not complete. Step `11` and Step `12` remain pending; no production/test/reference edits, commit or push. | `needs-user-decision` | No automatic correction dispatch; user must choose a runtime/runner route before any Step `11` rerun |
|
||||
| 2026-08-28 | USER-DECISION-005 option A and Step 11 runtime-smoke dispatch | `in-progress` | User approved option A: use official current Codex CLI `0.150.1` to restore the runtime/update path, prove same `workspace-write`/filtered WindowsApps PATH/`CODEX_HOME`/VsDevCmd/hooks/Terra-xhigh/`--disable unified_exec` envelope with a bounded nested shell smoke, then rerun only Step `11` no-push if the smoke passes. | `needs-implementation` | Root may perform the Codex `0.150.1` smoke preflight and, only on pass, launch Step `11` Harness/Implementation under the active dispatch; Step `12`, push, `danger-full-access`, reference solver/artifact mutation and manual hooks remain forbidden |
|
||||
| 2026-08-28 | USER-DECISION-005A smoke pass and Step 11 dispatch confirmation | `passed` | Root supplied smoke success evidence: Codex CLI `0.150.1`, app SHA-256 `CBD657DDFE151D1A6EBAD660BEFFDBD3265DC5AFF4B3A6095124D3E2F0156F2F`, doctor `20 ok/0 fail`, same-envelope smoke `93.621s`, nested exit `0`, command_execution completed, command exit `0`, output `CODEX_SHELL_SMOKE_OK`, stderr empty. Coordinator updated `BLOCKER-002` to smoke-passed and confirmed Step `11` dispatch. | `needs-implementation` | Historical smoke gate pass; superseded by the Step `11` blocked return below |
|
||||
| 2026-08-28 | USER-DECISION-005A Step 11 blocked return | `blocked` | Step `11` only no-push Harness ran after smoke pass; runner exit `2`; Step `11` blocked at `2026-08-28T02:03:23+09:00`; Step `12` pending. Current-arm/spatial projection reproduced and NSNR-069 free residual accepted, but coarse/fine factor-one global moment balance metrics `1.413750912531167e-10`/`2.7454660159924086e-10` exceed approved `1e-10`; CTest `295` and `299` failed. `step11-output.json` SHA-256 `D56EB816DDD63E71D8880CA5AF39C10A38E2BF562A28207D26417716154F1872`; no commits/push; reference hashes/length/mtimes unchanged and `git diff -- reference` empty. | `needs-user-decision` | USER-DECISION-006: choose an upstream convergence-acceptance/global-balance-gate path before any rework, Step `11` retry, Step `12`, Physics or Release |
|
||||
| 2026-08-28 | USER-DECISION-006 superseding global balance threshold and Stage 4 dispatch package | `in-progress` | User withdrew the entire `fesa.env`/runtime-config discussion and superseded the prior moment-only `1e-9` decision. Current authoritative decision fixes both normalized factor-one global FORCE and MOMENT balance gates at `<=1e-8`; all formulas, sum-of-contribution scales, zero-scale rule, quantities/source identity, blocking/review/warning dispositions, NSNR-069, HDF5 schema, reference artifacts and `docs/TOLERANCE.md` separation are preserved. User delegated Stage 4/5/6 reapproval and Step `11` completion without intermediate approval waits, bounded to this threshold-only change. | `needs-numerical-review` | Root/profile dispatch to `numerical-review-agent` with `fesa-numerical-review`; allowed outputs only `numerical-review.md` and `reference-model.md`; do not start Stage 5, planning, Harness, Step `11` retry, Step `12`, reference solver, push or `danger-full-access` before owner return and Coordinator audit |
|
||||
| 2026-08-28 | REAPPROVAL-010 Stage 4 return and Coordinator audit | `passed` | Numerical Review Agent returned `pass-for-io-definition`, blockers none; `numerical-review.md` SHA-256 `C00994EF4BB23A237547459E157EE5BDA96B28CAF08F712CD31A8E0ABBF62D2C`, `reference-model.md` SHA-256 `B2E6845AB59A32F78261B7A47506C27F7BF4B61401B34BC5DE3DAD4F03D6ADDA`. Coordinator verified required output paths/status, both normalized factor-one global force/moment gates `<=1e-8`, unchanged formulas/scales/exact-zero/current-arm/spatial moment/factor-one/NSNR-069/`docs/TOLERANCE.md` boundaries, unchanged dispositions and no forbidden Stage 5/6/source/reference advancement. | `needs-io-definition` | Prepare bounded Stage 5 `io-definition-agent` dispatch; expected output only `io.md` |
|
||||
| 2026-08-28 | REAPPROVAL-011 Stage 5 I/O dispatch package | `in-progress` | Coordinator prepared bounded `io-definition-agent` package requiring `fesa-io-contract` and the passed Stage 4 hashes. Scope is limited to `io.md` global balance gate literals/diagnostics/handoff for force and moment `<=1e-8`; HDF5 schema/projections/reference paths/dispositions and `docs/TOLERANCE.md` separation must be preserved. | `needs-io-definition` | Root/profile dispatch to `io-definition-agent`; await owner return and Coordinator audit; do not start Stage 6 planning/Harness/Step 11 retry |
|
||||
| 2026-08-28 | REAPPROVAL-011 Stage 5 I/O return and Coordinator audit | `passed` | I/O Definition Agent returned `ready-for-coordinator-review`, blockers none; `io.md` raw SHA-256 `ED23274F4F15F7D1DFF886FA8158961362C75960990271D24A5FD010A8D51FD9`, LF-normalized SHA-256 `53AFBB1DF27FBD9CE6C2E23EE34480882241A859D3FC1993E82DB61ACC6637EB`. Coordinator verified both coarse/fine global force and moment internal gates `<=1e-8`, unchanged HDF5 schema/projections/identities/scales/zero-scale/NSNR-069/reference paths and external-only `docs/TOLERANCE.md`, and no `fesa.env`/runtime-config direction. | `needs-implementation-plan` | Prepare bounded Stage 6 `implementation-planning-agent` materialization dispatch; do not run Harness or edit planning files as Coordinator |
|
||||
| 2026-08-28 | REAPPROVAL-012 Stage 6 planning materialization dispatch package | `in-progress` | Coordinator prepared bounded `implementation-planning-agent` package requiring `fesa-cpp-msvc-tdd` plus project-local `harness`. Scope is limited to `implementation-plan.md`, `phases/index.json`, phase index, `step11.md` and `step12.md`; update only obsolete `1e-10` global balance references to force/moment `<=1e-8`, preserve Steps `0..10` and dirty Step `11` implementation work, reset top/Step `11` for rerun only after materialization evidence, and keep Step `12` pending. | `needs-implementation-plan` | Root/profile dispatch to `implementation-planning-agent`; await materialization return and Coordinator audit; no Harness/build/CTest/solver/reference solver, implementation, commit or push |
|
||||
| 2026-08-28 | REAPPROVAL-012 Stage 6 planning materialization return and Coordinator audit | `passed` | Planning owner returned `ready-for-implementation`, blockers none; hashes verified for `implementation-plan.md` `CA3EF7D2E95AA1F15757CD138CEF67E06E51195F59FB8DBE676E5772CC1D6C2C`, `phases/index.json` `307D8041537D73B579E53F96B052BA035774B65ABF071BB230AAE20CFCF966A7`, phase index `E707372018A7F5DE86CDB40277AE567FE86915C47EFDB38A687E71DD65A2C9EB`, `step11.md` `F0DFD7BF2A473F47BCF7F6195DD41569B349474BF93F5D5B642882A037DBB8F8`, and `step12.md` `191432020B9C774BF153EECFD8F9A2EF74AF0014E2405478F541D85B517D7DD0`. Coordinator/root verified JSON parse, top/Step `11` pending, Step `12` pending, Steps `0..10` completed metadata retained, Step `11.started_at` retained, `NSNR-REF-024..025` gate requirements present, and no execution. | `needs-implementation` | Prepare Step `11` only no-push `implementation-agent` Harness package under USER-DECISION-005A; do not start Step `12` |
|
||||
| 2026-08-28 | STEP11-EXECUTION-003 global balance `1e-8` no-push dispatch package | `in-progress` | Coordinator prepared bounded Step `11` only package for `implementation-agent` via Harness. Runner/Executor owns branch, pending selection, retry, timestamps, commits, advancement and top-level phase status; Implementation Agent owns only Step `11` RED -> observed failure -> minimal GREEN -> VERIFY. Package requires `NSNR-REF-022` old-gate RED plus test-first `NSNR-REF-024..025`, no `fesa.env`/product config, reference immutability, no push and no Step `12` auto-advance. | `needs-implementation` | Root/Executor may launch Step `11` only under USER-DECISION-005A; await owner return and stop before Step `12` |
|
||||
| 2026-08-28 | STEP11-EXECUTION-003 runtime/environment return and Coordinator audit | `needs-rework` | Step `11` only wrapper attempt 1 timed out and attempt 2 selected user-local WindowsApps `pwsh.exe`, producing `CreateProcessAsUserW failed: 5 (Access denied)` on every exec. Stop-hook CTest evidence nevertheless passed all `302/302`, including the Step `11` global balance/reference tests; Step `11` remains pending because the agent did not update status/summary and Executor did not commit. Root stopped retry 3 and cleaned PIDs `4240`/`12000`/`16924`. | `needs-correction` | Dispatch bounded report-only `correction-agent` for launch PATH filter diagnosis; no Step `11` rerun or Step `12` before correction return |
|
||||
| 2026-08-28 | REWORK-009 user-local WindowsApps `pwsh.exe` launch filter return and Coordinator audit | `passed` | Correction Agent returned `corrected-for-implementation-rerun`, blockers none, `corrections.md` SHA-256 `4DC996E3D4CA2D515D19E5D244C3A112AF0C9429335698E03089B77B5E79346A`. Coordinator/root verified Section 14: all PATH entries matching `\\WindowsApps(?:\\|$)` filtered, `pwsh` unresolved, system Windows PowerShell selected, exact `FESA_CODEX_SHELL_SMOKE_OK`, recovered RED->GREEN, focused passes, Stop `302/302`, no forbidden edits/execution/commit/push/reference mutation. | `needs-implementation` | Issue one bounded Step `11` only no-push rerun package using corrected launch PATH filter |
|
||||
| 2026-08-28 | STEP11-EXECUTION-004 all-WindowsApps-filter Step 11 rerun package | `in-progress` | Coordinator prepared bounded `implementation-agent`/Harness package: run only Step `11`, preserve fixed `<=1e-8` force/moment gates and all Stage 4/5/6 contracts, use Codex CLI `0.150.1` with `CODEX_HOME`, `workspace-write`, hooks, Terra/`xhigh`, `--disable unified_exec`, VsDevCmd x64/deps, Ninja/MSVC Debug preset and child PATH filtered by `\\WindowsApps(?:\\|$)`. | `needs-implementation` | Root/Executor may launch Step `11` only; hard-stop before Step `12`; no push, `danger-full-access`, reference mutation/solver or manual hooks |
|
||||
|
||||
- current_dispatch: `stage-6-step1-no-push-harness-rerun`
|
||||
- current_dispatch: `STEP11-EXECUTION-004-all-windowsapps-filter-step11-only-rerun-root-executor-required`
|
||||
- current_workflow_state: `needs-implementation`
|
||||
- next_gate_requires_user_approval: `false` for Step 1 no-push Harness rerun; `true` before any `danger-full-access`, Visual Studio fallback, reference solver, push, or manual Step 2 advancement
|
||||
- next_gate_requires_user_approval: `false` only for the delegated threshold-only Stage 4 -> Stage 5 -> Stage 6 planning/materialization -> Step `11` path; `true` for any change beyond fixed `<=1e-8` global force/moment balance gates, `fesa.env`/runtime config, formula/source identity/zero-scale/NSNR-069/HDF5/reference/TOLERANCE change, Step `12`, Physics or Release.
|
||||
|
||||
## 5. Risk, Blocker, and User-Decision Register
|
||||
|
||||
@@ -200,12 +252,42 @@
|
||||
| REWORK-001 | report-contract | Stage 4 returned evidence had a cross-report contradiction on stress CSV and `RM3` comparison disposition. Corrected reports now consistently treat stress CSVs as optional read-only inspection/order evidence only and exclude `RM3` from comparison. | `numerical-review-agent` | closed |
|
||||
| REWORK-002 | io-contract | Stage 5 `io.md` bounded correction completed: public CLI `--output` substring rejection, Newton iteration log schema, exact `VARIABLE=PRESELECT` ignored-with-warning handling, repository-wide non-Newton log lifecycle, DECISION-028/029/030 path/log lifecycle and collision semantics are now recorded in `io.md`. | `io-definition-agent` | closed |
|
||||
| REWORK-003 | harness | Stage 6 attempt 1 timeout/no-retry defect is repaired in Harness infrastructure: timeouts now return structured exit `124` through `MAX_RETRIES`, and implementation-agent profile settings are passed to Codex. Same normalized failure attempt count remains 1; attempt 2 is authorized and same-class recurrence stops automatic rework. | `implementation-agent` via Harness Executor | closed |
|
||||
| BLOCKER-002 | harness-runtime | Nested Codex Windows shell tool execution hung inside Implementation/Correction Codex sessions. It is mitigated for the authorized rerun by Codex CLI `0.149.1`, aligned `CODEX_HOME`, filtered WindowsApps PATH entries, smoke success with exact `CODEX_SHELL_SMOKE_OK` output, and REWORK-004 runner retention of `--disable unified_exec`. Reopen only if the same hang recurs under the exact approved envelope. | external Codex runtime / user-root decision | mitigated |
|
||||
| BLOCKER-002 | harness-runtime | Closed for USER-DECISION-005A route: nested Codex Windows shell tool execution hung under the approved Codex CLI `0.149.1` envelope in DECISION-042, but Codex CLI `0.150.1` same-envelope smoke passed and the Step `11` Harness rerun reached deterministic CTest/reference-gate failures instead of a shell hang. Recurrence of nested command `in_progress` timeout reopens this blocker. | external Codex runtime / user-root decision | closed-smoke-passed-step11-executed |
|
||||
| BLOCKER-003 | dispatch-runtime | This Coordinator runtime exposed no callable `spawn_agent` tool, but root successfully performed the required Correction Agent profile dispatch. | coordinator/root tooling | closed |
|
||||
| REWORK-004 | harness | Corrected: `scripts/execute.py` now passes adjacent `--disable`, `unified_exec` immediately after `codex exec`; `tests/test_execute.py` asserts this while preserving terra/xhigh routing; `corrections.md` records RED/GREEN/VERIFY and no Harness phase/source C++/CMake/reference edits. | `correction-agent` | closed |
|
||||
| REWORK-005 | harness | FileTracker Correction returned `blocked`: VS18/MSBuild `FileTracker` `E_ACCESSDENIED` is classified as environment-owned sandbox/MSBuild interaction; no safe Visual Studio `workspace-write` workaround was proven. User resolved the route by approving option A Ninja/MSVC validation. | `correction-agent` | closed-by-USER-DECISION-002A |
|
||||
| REWORK-006 | harness | Corrected: approved option A is expressed through tracked `CMakePresets.json`, ignored `.harness/config.json`, preset-based implementation-plan/step verification commands, RED-first contract test, workspace-write Ninja/MSVC blocker-clear evidence, and blocked-to-pending phase reset only after pass. | `correction-agent` | closed |
|
||||
| REWORK-007 | upstream-contract | Step 11 reference comparison is blocked because the approved residual-moment convergence denominator makes no-applied-moment shellNL structurally nonconvergent for any nonzero rotational residual. Correction changed only `corrections.md` and returned `needs-upstream-decision`. | `correction-agent` | closed-upstream-contract |
|
||||
| REWORK-008 | upstream-contract | Correction returned `needs-upstream-decision`, classification `reference-blocking-model-adequacy-conflict`: local nodal RF/RM blocking assumes unsupported Abaqus S4 versus FESA MITC4 distribution adequacy, while reaction pipeline/global equilibrium evidence is sound. Section 13 SHA-256 `C8AC5A5015E5F9622E2964F514F2C06572F953B5244F006044DEDDF0F3D0A194`. | `correction-agent` | closed-upstream-contract |
|
||||
| USER-DECISION-004 | user decision | User explicitly approved option 1 on `2026-08-26`: local nodal `RF1/RF2/RF3` and physical spatial `RM1/RM2` rows are review-only/nonblocking with deterministic source-key/schema/finite/inventory/error reporting; `RM3` remains excluded; blocking reaction/equilibrium evidence is factor-one global resultant force `[3]`, global resultant moment `[3]` and accepted free-DOF residual gates/evidence. No tolerance/comparator/reference relaxation is authorized. | user via Coordinator | closed |
|
||||
| REAPPROVAL-006 | upstream-reapproval | USER-DECISION-004 option 1 Stage 1 propagation completed: requirements owner/Coordinator audit passed for `requirements.md` SHA-256 `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`, and the user explicitly re-approved that hash on `2026-08-27`. Stage 3 formulation has no immediate dispatch because §11.4/§13.4 already define residual/reaction/global-resultant semantics. | `requirement-agent` / Coordinator / user | closed |
|
||||
| REAPPROVAL-007 | upstream-reapproval | USER-DECISION-004 option 1 Stage 4 propagation completed: `numerical-review.md` SHA-256 `0A7224003CFF706E9B4D9F55BA2624805299FAC8F42ECD2BC37E429B26DF0091`, `reference-model.md` SHA-256 `81A82D3B367FF501F3C355F81D4E5DD4677BE58E4182E4EB8EEDBB2462FEA2CE`, owner status `pass-for-io-definition`, Coordinator audit passed, blockers none, and the user explicitly approved both hashes on `2026-08-27`. | `numerical-review-agent` / Coordinator / user | closed |
|
||||
| REAPPROVAL-008 | upstream-reapproval | USER-DECISION-004 option 1 Stage 5 propagation completed: `io.md` raw SHA-256 `C7400C2B1454BE7287EE22D18BB28DA7AFB27FE6F8287783BB83769A4AB8D83C`, LF-normalized SHA-256 `BF775990D83D95B470F814BE57C9676305119D97E48225E231D4926E7809029F`; owner/Coordinator audit passed and the user explicitly approved the raw hash on `2026-08-27`. | `io-definition-agent` / Coordinator / user | closed |
|
||||
| REAPPROVAL-009 | planning-reapproval | Stage 6 implementation planning re-entry draft returned `draft-ready-for-user-review`; Coordinator audit passed; user explicitly approved the draft on `2026-08-27`. Draft proposes only Step `11`/`12` replanning for USER-DECISION-004 option 1 and AUDIT-001 while preserving Steps `0..10`, current uncommitted Step 11 work, approved contracts, no-new-dataset semantics and no execution. | `implementation-planning-agent` / Coordinator / user | closed |
|
||||
| MATERIALIZATION-003 | planning-materialization | Passed: Planning Agent materialized exactly `implementation-plan.md` SHA-256 `758F8F5BB224E88864338C48221D53D4BD2F8633E04C9F2136FFF9E2D1BADFB8`, `phases/index.json` SHA-256 `536D4BF9427792ECCCE4C9A2980210E050035D0202DB8A700BDD671E0DB218C7`, `phases/nonlinear-static-newton-raphson/index.json` SHA-256 `D808D5C0F389B444A529FC81A48B5726E4CF282CA51B62F3AECAC4D89EA6A5BF`, `step11.md` SHA-256 `D324F7E1495A25B3B8CEA7A2A6C68D559F8336C3A527A164ECD2D0A82C20A526`, and `step12.md` SHA-256 `F2831F7E802A40631C91E638C9079508EF1A97CFE46FACC51DCBB4EC55337452`. Coordinator audit found JSON parse clean, no placeholders, scoped `git diff --check` pass, changed planning outputs within allowlist, Step `11`/top phase pending, Steps `0..10` preserved, Step `12` pending, reference diff clean and no Harness/build/solver execution. | `implementation-planning-agent` / Coordinator | passed |
|
||||
| DECISION-042 | user approval | User explicitly approved `Harness/Implementation 시작` for no-push Step `11` execution only. The verified command is `python scripts/execute.py nonlinear-static-newton-raphson`; Step `12` is not authorized and must not start before Coordinator audit. | user via Coordinator | closed |
|
||||
| USER-DECISION-005 | user decision | User approved option A on `2026-08-28`: use official current Codex CLI `0.150.1` to repair/validate the runtime route, run a bounded same-envelope nested shell smoke, and only if it passes rerun Step `11` no-push. Smoke passed with app SHA-256 `CBD657DDFE151D1A6EBAD660BEFFDBD3265DC5AFF4B3A6095124D3E2F0156F2F`, doctor `20 ok/0 fail`, duration `93.621s`, nested exit `0`, command_execution completed and output `CODEX_SHELL_SMOKE_OK`. This does not authorize `danger-full-access`, reference solver/artifact changes, push, Step `12`, manual hooks or runner/source/test/phase edits outside the Step `11` contract. | user via Coordinator | closed-option-A-smoke-passed |
|
||||
| USER-DECISION-006 | user decision | Closed/delegated superseding decision on `2026-08-28`: withdraw the entire `fesa.env`/runtime-config discussion; do not add `fesa.env`, config parsing, runtime API or product behavior. Current authoritative contract fixes both normalized factor-one global FORCE and MOMENT balance gates at `<=1e-8`, preserving exact formulas, sum-of-contribution scales, zero-scale rule, quantities/source identity, blocking/review/warning dispositions, NSNR-069 free-residual gates, HDF5 schema, reference artifacts and `docs/TOLERANCE.md` separation. Coordinator is delegated to run Stage 4/5/6 reapproval and Step `11` no-push completion without intermediate approval waits, but must stop on any change beyond this fixed threshold. | user via Coordinator | closed-delegated |
|
||||
| REAPPROVAL-010 | upstream-reapproval | Passed under delegated USER-DECISION-006 authority: Stage 4 owner returned `pass-for-io-definition`, blockers none, `numerical-review.md` SHA-256 `C00994EF4BB23A237547459E157EE5BDA96B28CAF08F712CD31A8E0ABBF62D2C` and `reference-model.md` SHA-256 `B2E6845AB59A32F78261B7A47506C27F7BF4B61401B34BC5DE3DAD4F03D6ADDA`; Coordinator audit passed against the threshold-only package. | `numerical-review-agent` / Coordinator | passed |
|
||||
| REAPPROVAL-011 | upstream-reapproval | Passed under delegated USER-DECISION-006 authority: Stage 5 owner returned `ready-for-coordinator-review`, blockers none, `io.md` raw SHA-256 `ED23274F4F15F7D1DFF886FA8158961362C75960990271D24A5FD010A8D51FD9`, LF-normalized SHA-256 `53AFBB1DF27FBD9CE6C2E23EE34480882241A859D3FC1993E82DB61ACC6637EB`; Coordinator audit passed against the threshold-only package with schema/projection/reference/TOLERANCE boundaries preserved. | `io-definition-agent` / Coordinator | passed |
|
||||
| REAPPROVAL-012 | planning-materialization | Passed under delegated USER-DECISION-006 authority: Planning owner returned `ready-for-implementation`, blockers none; `implementation-plan.md` SHA-256 `CA3EF7D2E95AA1F15757CD138CEF67E06E51195F59FB8DBE676E5772CC1D6C2C`, `phases/index.json` `307D8041537D73B579E53F96B052BA035774B65ABF071BB230AAE20CFCF966A7`, phase index `E707372018A7F5DE86CDB40277AE567FE86915C47EFDB38A687E71DD65A2C9EB`, `step11.md` `F0DFD7BF2A473F47BCF7F6195DD41569B349474BF93F5D5B642882A037DBB8F8`, `step12.md` `191432020B9C774BF153EECFD8F9A2EF74AF0014E2405478F541D85B517D7DD0`; Coordinator audit passed. | `implementation-planning-agent` / Coordinator | passed |
|
||||
| STEP11-EXECUTION-003 | implementation-dispatch | Needs rework: Step `11` only no-push wrapper attempt 1 timed out and attempt 2 hit inaccessible `C:\Users\baram\AppData\Local\Microsoft\WindowsApps\pwsh.exe` with `CreateProcessAsUserW failed: 5`; Stop-hook CTest evidence passed `302/302`, but Step `11` status/summary/commit are absent. | `implementation-agent` / Harness Executor / Coordinator | needs-rework |
|
||||
| REWORK-009 | harness-environment | Passed: Correction Agent diagnosed the user-local WindowsApps `pwsh.exe` launch filter miss and proved an all-`WindowsApps` PATH-filter same-envelope shell smoke. Output `corrections.md` SHA-256 `4DC996E3D4CA2D515D19E5D244C3A112AF0C9429335698E03089B77B5E79346A`; changed `corrections.md` only; no runner/source/test/CMake/phase/upstream/reference/tolerance edits. | `correction-agent` / Coordinator | passed |
|
||||
| STEP11-EXECUTION-004 | implementation-dispatch | In progress/dispatch-ready: one bounded Step `11` only no-push Harness rerun is authorized under corrected all-WindowsApps child PATH filter. Step `12` is not authorized; same WindowsApps `pwsh.exe` access-denied recurrence must stop without automatic retry. | `implementation-agent` / Harness Executor / Coordinator | in-progress |
|
||||
| BLOCKER-005 | dispatch-runtime | This Coordinator runtime exposes no callable collaboration `spawn_agent` tool and `tool_search` found no dispatch tool. Root completed Stage 4, Stage 5, Stage 6 planning and REWORK-009 profile dispatches; the current Step `11` rerun package is ready, but root/Executor launch is still required before owner evidence can be produced. | coordinator/root tooling | open-root-executor-required |
|
||||
| AUDIT-001 | projection-implementation | Stage 5 `io.md` now separates global applied+reaction balance error, constrained reaction resultant and accepted free residual as distinct deterministic HDF5 projections. Stage 6 planning/implementation must still update tests/implementation so `/global/equilibrium` uses current nodal positions and spatial physical nodal moments about global origin instead of raw full residual, initial coordinates or raw rotational residual shortcuts for general supported nonzero prescribed displacement/rotation cases. | `implementation-planning-agent` / `implementation-agent` | open |
|
||||
| MESH-REFINEMENT-SPIKE-001 | diagnostic-spike | Completed read-only numerical/reference spike for `reference/shellNL-meshfine`: artifacts copied byte-identically, required rows readable, existing executable run successful, primary displacement/rotation passed common tolerance, local RF/RM per-row gates failed, and current coarse/fine Abaqus S4 pair did not meet option 3 independent benchmark condition. | `numerical-review-agent` | passed |
|
||||
| TRANSLATION-REPORT-001 | focused-report | Completed bounded report for coarse/fine `U1/U2/U3` translation displacement only. Output `docs/nonlinear-static-newton-raphson/translation-displacement-comparison.md` SHA-256 `597D923FB1943CCB2BCF9D9FFC13FD904F795DFEB9CB71B097FF168B78694338`; diagnostic non-gate, not canonical `reference-comparison.md`, and does not alter reaction/rotation/stress or USER-DECISION-004 disposition. | `implementation-agent` | passed |
|
||||
| USER-DECISION-002 | user decision | User explicitly chose option A: approve Ninja/MSVC evidence contract for Stage 6 continuation. Option B `danger-full-access` and option C external sandbox wait are not selected. | user via Coordinator | closed |
|
||||
| USER-DECISION-003 | user decision | User approved option 1: if the matching external residual-channel scale is exact zero, use the existing typed absolute residual gate; keep current relative denominator when the external scale is nonzero. This starts required upstream re-approval in order: requirements NSNR-069, formulation §14.1, numerical-review, I/O, then implementation-plan/phase steps before implementation rerun. | user via Coordinator | closed |
|
||||
| REAPPROVAL-001 | upstream-reapproval | USER-DECISION-003 option 1 Stage 1 propagation completed: requirements owner return and Coordinator audit passed for `requirements.md` SHA-256 `89B6AEC25BD6AF5B79D328EEF63359A82DDB9402AE9482E3082A70C474A7B8B8`, and the user explicitly re-approved that hash. | `requirement-agent` / user via Coordinator | closed |
|
||||
| REAPPROVAL-002 | upstream-reapproval | USER-DECISION-003 option 1 Stage 3 propagation completed: formulation owner return and Coordinator audit passed for `formulation.md` SHA-256 `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9`, and the user explicitly re-approved that hash. | `formulation-agent` / user via Coordinator | closed |
|
||||
| REAPPROVAL-003 | upstream-reapproval | USER-DECISION-003 option 1 Stage 4 propagation completed: Numerical Review owner return and Coordinator audit passed for `numerical-review.md` SHA-256 `E93E0DEF1FD5ECDF956D50C6F8B8F1C073E21650E14EDC97A683DCA4688FE153`, `reference-model.md` remained byte-identical at SHA-256 `44B619BE2494007D8F2F51F34B9D974F934C26818F5AB8AF2DAA288ABF78D2FC`, and the user explicitly re-approved both hashes. | `numerical-review-agent` / user via Coordinator | closed |
|
||||
| REAPPROVAL-004 | upstream-reapproval | USER-DECISION-003 option 1 Stage 5 propagation completed: I/O owner return and Coordinator audit passed for `io.md` raw SHA-256 `DB0BD8339172FD05712D2B7469966DEB0A6A82CB5A0052817F4725319E741334`, LF-normalized SHA-256 `E0C42775FF5C3963A37DF70B00044DDA244A463A6DD222975C2903A1BFA205AF`, and the user explicitly re-approved both hashes. | `io-definition-agent` / user via Coordinator | closed |
|
||||
| REAPPROVAL-005 | planning-reapproval | USER-DECISION-003 option 1 Stage 6 planning propagation draft passed Coordinator audit and the user explicitly approved materialization on `2026-08-25`. | `implementation-planning-agent` / user via Coordinator | closed |
|
||||
| MATERIALIZATION-002 | planning-materialization | User-approved Stage 6 planning revision materialized only in `implementation-plan.md`, `step5.md`, `step7.md`, `step10.md`, `step11.md`, `step12.md`, feature index and top index; Steps 0..10 history/commits and partial Step 11 comparator files are preserved, Step 11/top status reset to `pending`, and Step 12 remains `pending`. | `implementation-planning-agent` | closed |
|
||||
| DECISION-040 | user approval | User explicitly approved the audited Implementation Planning revision draft and requested materialization. This approval does not authorize Harness, CTest, code/test/CMake/source edits, reference artifact changes, commit, or push. | user via Coordinator | closed |
|
||||
| DECISION-041 | user approval | User explicitly requested no-push Harness/Implementation rerun from Step 11 under DECISION-038/039: Codex CLI `0.149.1`, aligned `CODEX_HOME`, launch-env WindowsApps PATH filtering, `workspace-write`, hooks retained, `--disable unified_exec`, VsDevCmd x64, dependency env vars, approved Ninja/MSVC Debug preset, no `danger-full-access`, no push, no reference solver and no reference artifact mutation. | user via Coordinator | closed |
|
||||
| RISK-001 | architecture | 기존 `LinearStaticAnalysis` private lifecycle은 단일 factorization/substitution과 final frame만 소유하므로 nonlinear increment/iteration/state commit을 삽입하면 ADR 경계를 위반한다. | `coordinator-agent` routing | open |
|
||||
| RISK-002 | scope | `Newton–Raphson`은 solution algorithm이고 geometric/material/contact nonlinearity 범위를 단독으로 결정하지 않는다. | `requirement-agent` | mitigated by DECISION-001 |
|
||||
| RISK-003 | contract | 현재 `Element`는 displacement-dependent residual/consistent tangent/trial state 계약이 없고 `AnalysisState`는 nonlinear history를 소유하지 않는다. | downstream formulation/architecture gates | open |
|
||||
@@ -254,11 +336,12 @@
|
||||
|
||||
## 6. Rework-Loop Control and Stop Condition
|
||||
|
||||
- normalized_failure_attempts: `requirements-next-question-routing-mismatch`: 1; `requirements-output-failure-atomicity-scope-ambiguity`: 1; `requirements-compact-public-contract-omission`: 1; `formulation-equilibrium-reaction-symbol-collision`: 1; `formulation-moment-admissibility-work-inconsistency`: 1; `numerical-review-cross-report-disposition-contradiction`: 1; `io-contract-public-cli-log-output-request-gap`: 1; `harness-nested-codex-windows-shell-tool-execution-hang`: 2; `harness-msbuild-filetracker-eaccessdenied-workspace-write`: 2
|
||||
- normalized_failure_attempts: `requirements-next-question-routing-mismatch`: 1; `requirements-output-failure-atomicity-scope-ambiguity`: 1; `requirements-compact-public-contract-omission`: 1; `formulation-equilibrium-reaction-symbol-collision`: 1; `formulation-moment-admissibility-work-inconsistency`: 1; `numerical-review-cross-report-disposition-contradiction`: 1; `io-contract-public-cli-log-output-request-gap`: 1; `harness-nested-codex-windows-shell-tool-execution-hang`: 3; `harness-console-cp949-retry-glyph-unicodeencodeerror`: 1; `harness-msbuild-filetracker-eaccessdenied-workspace-write`: 2; `implementation-shellnl-nonlinear-nonconvergence-no-hdf5`: 1; `reference-blocking-model-adequacy-conflict`: 1; `upstream-global-moment-balance-gate-threshold-conflict`: 1; `harness-launch-path-filter-missed-user-windowsapps-pwsh-access-denied`: 2
|
||||
- automatic_rework_limit: 동일 normalized failure classification `2`회
|
||||
- correction_agent_policy: 명확한 implementation failure는 먼저 `implementation-agent`에 반환하고, 반복되거나 원인이 불명확할 때만 `correction-agent`를 dispatch한다.
|
||||
- stop_condition: 동일 classification이 두 번이면 자동 rework를 중단하고 workflow를 `needs-user-decision` 또는 `blocked`로 전환한다.
|
||||
- correction_cycle_authorization: REWORK-006 is closed and no correction dispatch is active. Step 1 no-push Harness rerun is authorized under the approved Ninja/MSVC workspace-write envelope; no Step 2 advancement, push, `danger-full-access`, Visual Studio fallback, or reference solver/artifact action is authorized outside Executor-owned progression.
|
||||
- correction_cycle_authorization: REWORK-008 is closed as `upstream-contract`. MATERIALIZATION-003 and REAPPROVAL-012 are closed as `passed`. USER-DECISION-006 resolves the prior `upstream-global-moment-balance-gate-threshold-conflict` by fixing both normalized global balance gates at `<=1e-8`. STEP11-EXECUTION-003 reached normalized environment failure count `2`, automatic retry was stopped, and REWORK-009 is now passed. STEP11-EXECUTION-004 is the only active implementation dispatch; same WindowsApps `pwsh.exe` access-denied recurrence after the corrected filter stops without another automatic retry.
|
||||
- upstream_reapproval_sequence: Prior USER-DECISION-003 and USER-DECISION-004 sequences remain closed. USER-DECISION-006 supersedes prior moment-only `1e-9` and withdraws `fesa.env`/runtime-config; Stage 4 Numerical/reference is passed by REAPPROVAL-010, Stage 5 I/O is passed by REAPPROVAL-011, Stage 6 planning materialization is passed by REAPPROVAL-012, and REWORK-009 environment correction is passed. Current delegated order is Step `11` no-push Harness/Implementation rerun with corrected all-WindowsApps filter. No intermediate user approval wait is required within the fixed `<=1e-8` global force/moment threshold scope, but runner/test/source/phase/upstream/reference/tolerance edits require separate approval.
|
||||
|
||||
## 7. Final Workflow Closure
|
||||
|
||||
@@ -268,11 +351,12 @@
|
||||
|
||||
## 8. No-Change Assertion
|
||||
|
||||
- source_code: Step 1 Implementation Agent left uncommitted production changes in `include/fesa/model/domain.h`, `include/fesa/model/model_types.h`, `src/fesa/io/abaqus/domain_mapping_context.cpp`, and `src/fesa/model/domain.cpp`; Coordinator did not edit source code.
|
||||
- tests: Step 1 Implementation Agent left uncommitted C++ test changes in `tests/unit/io/abaqus/domain_mapper_test.cpp`, `tests/unit/io/abaqus/domain_mapping_components_test.cpp`, `tests/unit/model/domain_test.cpp`, and `tests/unit/model/model_types_test.cpp`; Coordinator did not edit tests.
|
||||
- CMake: `CMakeLists.txt` 변경 없음; REWORK-006 Correction added tracked `CMakePresets.json` for DECISION-039 Ninja/MSVC validation; Coordinator did not edit CMake configuration.
|
||||
- reference_artifacts: 생성·수정·rename 없음
|
||||
- source_code: Steps 0..10 implementation source changes are committed through Harness; current Step 11 uncommitted implementation edits are preserved, including USER-DECISION-005A current-arm/spatial projection and USER-DECISION-006 fixed `<=1e-8` global balance work. Coordinator did not edit source code.
|
||||
- tests: Current Step 11 uncommitted comparator/test edits are preserved. Recovered rollout evidence shows old-gate RED failure, minimal GREEN for `<=1e-8`, focused procedure/writer/log/reference tests passing, and latest Stop-hook CTest evidence `302/302` passed. Coordinator did not edit tests.
|
||||
- CMake: Step 11 owner modified `tests/CMakeLists.txt`; REWORK-006 added tracked `CMakePresets.json` for DECISION-039 Ninja/MSVC validation. Coordinator did not edit CMake configuration.
|
||||
- reference_artifacts: Root copied four `reference/shellNL-meshfine` artifacts byte-identically into the feature worktree for the approved spike; SHA-256 values match the recorded main-checkout hashes and row counts `729/729/5408`. No reference artifact was generated, renamed, normalized, repaired or modified by Coordinator.
|
||||
- tolerance_policies: 변경 없음
|
||||
- phase_files: Executor/Correction updated `phases/index.json` and `phases/nonlinear-static-newton-raphson/index.json`; Step 0 is completed and committed, Step 1 is reset to `pending` after REWORK-006 blocker-clear evidence, and Steps 2..12 are pending. Coordinator did not edit phase files.
|
||||
- Harness: REWORK-006 Correction updated `.gitignore`, `.harness/config.example.json`, and created ignored `.harness/config.json` for Ninja/MSVC preset selection; no Harness Python production change was required. Coordinator did not run Harness/phase/build/test, advance Step 2, use `danger-full-access`, clean build outputs, commit or push.
|
||||
- feature_documents: REWORK-006 Correction updated `docs/nonlinear-static-newton-raphson/corrections.md` SHA-256 `7FA66A14E694D0451B4422BB5A233E117F2100231A9644771EFD428AF7AD6B81` and `implementation-plan.md`; this coordinator update changed only isolated `coordination.md`; `implementation-report.md`, `build-test.md`, `reference-comparison.md` are still absent.
|
||||
- phase_files: REAPPROVAL-012 Planning owner updated `phases/index.json` and `phases/nonlinear-static-newton-raphson/index.json`; top phase is now `pending`, Steps 0..10 remain completed with existing metadata, Step 11 is `pending` as `equilibrium-projection-and-reference-gate` with historical `started_at=2026-08-24T15:49:08+09:00` retained, and Step 12 is pending. Coordinator did not edit phase files.
|
||||
- Harness: Historical Step `11` executions include DECISION-042 timeout, USER-DECISION-005A `1e-10` global-moment blocker, then REAPPROVAL-012 reset for fixed `<=1e-8`. STEP11-EXECUTION-003 did not complete Harness metadata because nested Codex selected inaccessible `C:\Users\baram\AppData\Local\Microsoft\WindowsApps\pwsh.exe`; REWORK-009 is now passed and STEP11-EXECUTION-004 is the active Step `11` rerun package with all-WindowsApps child PATH filtering. Step `11` and top phase remain `pending`; Step `12` remains pending and outside the active dispatch. Coordinator did not run Harness/phase/build/test command, advance Step 12, use `danger-full-access`, clean build outputs, commit or push.
|
||||
- feature_documents: REWORK-008 Correction updated `docs/nonlinear-static-newton-raphson/corrections.md` Section 13 SHA-256 `C8AC5A5015E5F9622E2964F514F2C06572F953B5244F006044DEDDF0F3D0A194`; Requirement Agent updated only `docs/nonlinear-static-newton-raphson/requirements.md` SHA-256 `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`; Formulation Agent updated only `docs/nonlinear-static-newton-raphson/formulation.md` SHA-256 `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9`; REAPPROVAL-010 Numerical Review Agent updated Stage 4 reports to `docs/nonlinear-static-newton-raphson/numerical-review.md` SHA-256 `C00994EF4BB23A237547459E157EE5BDA96B28CAF08F712CD31A8E0ABBF62D2C` and `docs/nonlinear-static-newton-raphson/reference-model.md` SHA-256 `B2E6845AB59A32F78261B7A47506C27F7BF4B61401B34BC5DE3DAD4F03D6ADDA`; REAPPROVAL-011 I/O Definition Agent updated only `docs/nonlinear-static-newton-raphson/io.md` raw SHA-256 `ED23274F4F15F7D1DFF886FA8158961362C75960990271D24A5FD010A8D51FD9`, LF-normalized SHA-256 `53AFBB1DF27FBD9CE6C2E23EE34480882241A859D3FC1993E82DB61ACC6637EB`; REAPPROVAL-012 Planning owner materialized `docs/nonlinear-static-newton-raphson/implementation-plan.md` SHA-256 `CA3EF7D2E95AA1F15757CD138CEF67E06E51195F59FB8DBE676E5772CC1D6C2C`, `phases/index.json` SHA-256 `307D8041537D73B579E53F96B052BA035774B65ABF071BB230AAE20CFCF966A7`, phase index SHA-256 `E707372018A7F5DE86CDB40277AE567FE86915C47EFDB38A687E71DD65A2C9EB`, `step11.md` SHA-256 `F0DFD7BF2A473F47BCF7F6195DD41569B349474BF93F5D5B642882A037DBB8F8` and `step12.md` SHA-256 `191432020B9C774BF153EECFD8F9A2EF74AF0014E2405478F541D85B517D7DD0`. Implementation Agent created only `docs/nonlinear-static-newton-raphson/translation-displacement-comparison.md` SHA-256 `597D923FB1943CCB2BCF9D9FFC13FD904F795DFEB9CB71B097FF168B78694338`. This coordinator update changed only isolated `coordination.md`; `implementation-report.md`, `build-test.md`, and canonical `reference-comparison.md` are still absent.
|
||||
- correction_reports: REWORK-009 Correction Agent updated current `docs/nonlinear-static-newton-raphson/corrections.md` Section 14, SHA-256 `4DC996E3D4CA2D515D19E5D244C3A112AF0C9429335698E03089B77B5E79346A`. Coordinator did not edit `corrections.md`.
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
`implementation-report.md`, `build-test.md`, `reference-comparison.md`는 아직 생성되지 않았으므로 현재 Coordinator failure evidence와 Executor의 `step0-output.json` 및 `step1-output.json`을 source failure report로 사용했다.
|
||||
|
||||
Sections 2-6의 Codex `0.147.0` 내용은 initial correction history이고 Sections 7-9는 REWORK-004 history다. Section 10은 FileTracker diagnosis history이며 USER-DECISION-002 option A 이후 current correction과 status는 Section 11이 supersede한다.
|
||||
Sections 2-6의 Codex `0.147.0` 내용은 initial correction history이고 Sections 7-9는 REWORK-004 history다. Section 10은 FileTracker diagnosis history이고 Sections 11-13은 이전 correction history다. Current correction과 status는 Section 14가 supersede한다.
|
||||
|
||||
## 2. Failure Triage
|
||||
|
||||
@@ -318,3 +318,327 @@ Reference artifact no-change evidence: `git diff --name-only -- reference`는 em
|
||||
- status: `corrected-for-implementation-rerun`.
|
||||
- blockers: 이 correction 범위에는 없음. Existing Python `xhigh`/`extra high` mismatch는 명시된 out-of-scope pre-existing failure다.
|
||||
- prohibited actions not performed: Harness phase rerun, Step 2, `danger-full-access`, push, commit, reference solver/artifact mutation, build cleanup/deletion.
|
||||
|
||||
## 12. REWORK-007 Step 11 Nonlinear Nonconvergence Contract Triage
|
||||
|
||||
### 12.1 Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| source failure report | `phases/nonlinear-static-newton-raphson/step11-output.json`; `docs/nonlinear-static-newton-raphson/coordination.md` REWORK-007 |
|
||||
| source implementation plan | `docs/nonlinear-static-newton-raphson/implementation-plan.md`; `phases/nonlinear-static-newton-raphson/step11.md` |
|
||||
| status | `needs-upstream-decision` |
|
||||
| owner_agent | `correction-agent` |
|
||||
| date | `2026-08-24` |
|
||||
|
||||
### 12.2 Failure Triage
|
||||
|
||||
- classification: `upstream-contract`
|
||||
- normalized classification: `implementation-shellnl-nonlinear-nonconvergence-no-hdf5`
|
||||
- attempt: `1`
|
||||
- first failed command:
|
||||
|
||||
```powershell
|
||||
ctest --preset windows-msvc-ninja-debug -R "NonlinearStaticReference|ReferenceTolerance|Mitc4Reference" --output-on-failure
|
||||
```
|
||||
|
||||
- failed target or test: `NonlinearStaticReference.CopiesRunsComparesAndPreservesTheReadOnlyReferenceInventory` (CTest test 288)
|
||||
- evidence tail: copied build-local `shellNL.inp` reaches `severity=error`, `code=nonlinear-nonconvergence` after iteration 100. `generated.HasValue()` is false because no authoritative copied-sibling `shellNL_results.h5` is committed.
|
||||
- correction-agent reproduction: the exact focused test alone failed deterministically in 103.84 seconds with the same diagnostic. The original reference input was not passed to FESA.
|
||||
|
||||
### 12.3 Root Cause Summary
|
||||
|
||||
This is not an implementation defect in the observed convergence calculation. The implementation in `src/fesa/analysis/nonlinear_static_procedure.cpp` supplies same-trial free rotational residual, internal moment and external moment to `EvaluateNewtonConvergence`. `src/fesa/analysis/nonlinear_static_control.cpp` then implements the approved `NSNR-069` and formulation Section 14.1 literally:
|
||||
|
||||
\[
|
||||
D_M=\max(\|f_{int,f}^{\phi}\|_\infty,
|
||||
\|f_{ext,f}^{\phi}\|_\infty),\qquad
|
||||
\eta_M=\frac{\|r_f^{\phi}\|_\infty}{D_M}
|
||||
\]
|
||||
|
||||
for every nonzero \(D_M\), with the typed absolute `1e-3 force-length` branch available only when \(D_M=0\) exactly.
|
||||
|
||||
The approved `reference/shellNL/shellNL.inp` contains only `Set-1, 3, -100000.` under `*CLOAD`; it applies no rotational moment component. Therefore the free rotational external vector is exactly zero and
|
||||
|
||||
\[
|
||||
r_f^{\phi}=f_{int,f}^{\phi}-0=f_{int,f}^{\phi},
|
||||
\qquad
|
||||
D_M=\|f_{int,f}^{\phi}\|_\infty=\|r_f^{\phi}\|_\infty.
|
||||
\]
|
||||
|
||||
For every nonzero rotational residual, \(\eta_M=1>10^{-2}\). The channel can pass only if floating-point assembly produces the exact zero vector, at which point and only then the exact-zero branch is selected. Thus the current approved denominator structurally prevents practical convergence for a no-applied-moment shell case even when its residual is well below the approved typed absolute threshold.
|
||||
|
||||
The reproduced log contains 100/100 parsed iteration records with exact printed equality between `residual_moment_numerator_norm` and `residual_moment_denominator_scale`; all 100 use `branch=relative` and `pass=0`. Representative values are:
|
||||
|
||||
| iteration | numerator | denominator | branch | pass |
|
||||
| ---: | ---: | ---: | --- | ---: |
|
||||
| 1 | `2.363968570753043e-09` | `2.363968570753043e-09` | `relative` | 0 |
|
||||
| 2 | `1.4372536725204554e-06` | `1.4372536725204554e-06` | `relative` | 0 |
|
||||
| 3 | `3.138301877925187e-06` | `3.138301877925187e-06` | `relative` | 0 |
|
||||
| 99 | `3.8876064110127118e-06` | `3.8876064110127118e-06` | `relative` | 0 |
|
||||
| 100 | `4.6441010823627948e-06` | `4.6441010823627948e-06` | `relative` | 0 |
|
||||
|
||||
Every listed numerator is below `1e-3 force-length`, but the approved exact-zero-denominator predicate forbids use of that absolute branch. Changing the implementation alone would contradict the approved requirement and formulation.
|
||||
|
||||
### 12.4 Correction Scope
|
||||
|
||||
- changed report file: `docs/nonlinear-static-newton-raphson/corrections.md`
|
||||
- changed production source/header/test/CMake files: none
|
||||
- preserved dirty Step 11 files: `tests/CMakeLists.txt`, `tests/reference/nonlinear_static_reference_cases_test.cpp`, `tests/reference/nonlinear_static_reference_comparison.cpp`, `tests/reference/nonlinear_static_reference_comparison.h`
|
||||
- excluded upstream files: `requirements.md`, `formulation.md`, `numerical-review.md`, `reference-model.md`, `io.md`, `docs/TOLERANCE.md`
|
||||
- excluded workflow/final reports: phase indexes/status, `implementation-report.md`, `build-test.md`, `reference-comparison.md`
|
||||
- prohibited actions not performed: production/test/CMake change, threshold or denominator relaxation, Step 11 completion, Step 12 advancement, Abaqus/Nastran/reference solver, reference artifact generation/modification, `danger-full-access`, commit, push
|
||||
|
||||
No RED test was added because no implementation correction is authorized: a test requiring this case to pass would encode a new convergence contract before user/upstream approval. The existing focused reference test already provides the failing integration evidence.
|
||||
|
||||
### 12.5 Verification Evidence
|
||||
|
||||
| purpose | exact command/evidence | result |
|
||||
| --- | --- | --- |
|
||||
| focused reproduction | `ctest --preset windows-msvc-ninja-debug -R '^NonlinearStaticReference\.CopiesRunsComparesAndPreservesTheReadOnlyReferenceInventory$' --output-on-failure` | exit `1`; 0/1 passed; test 288 failed in 103.84 s with 100-iteration `nonlinear-nonconvergence` |
|
||||
| iteration-log audit | parse latest copied-run `shellNL_log.txt` fields for every iteration | 100 records; numerator equals denominator in 100/100; `relative` in 100/100; `residual_moment_pass=0` in 100/100 |
|
||||
| implementation trace | `nonlinear_static_procedure.cpp` residual/internal/external channel construction plus `nonlinear_static_control.cpp` denominator evaluation | matches `NSNR-069` and formulation Section 14.1 exactly |
|
||||
| input trace | `reference/shellNL/shellNL.inp` lines 149-151 | one translational direction-3 force; no applied rotational moment |
|
||||
| reference preservation | pre/post SHA-256 plus `git diff -- reference` | all eight declared hashes unchanged; reference diff empty |
|
||||
| full Ninja/MSVC build/CTest | not run | intentionally stopped at decisive `upstream-contract`; no implementation correction exists to verify |
|
||||
| Stop | not applicable | Correction was not a Harness Step and made no production/test/CMake change |
|
||||
| Harness Python pytest | not applicable | no Harness/Hook/agent-config behavior changed |
|
||||
|
||||
### 12.6 Traceability
|
||||
|
||||
| requirement id | task id | test id | failing command | corrected file | acceptance criterion |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `FESA-REQ-NSNR-069` | Step 5 `load-boundary-path-and-convergence-gates`; REWORK-007 | `CORR-NSNR-CONTRACT-001` log audit | focused test 288 | report only | no-applied-moment free rotational residual must have a reachable approved convergence decision; not met by current contract |
|
||||
| `FESA-REQ-NSNR-034` | Step 11 `reference-comparison-gate` | `NSNR-REF-002`, `NSNR-REF-004` via test 288 | focused test 288 | report only | copied shellNL run produces authoritative HDF5 before comparison; blocked by NSNR-069 contract |
|
||||
|
||||
### 12.7 Handoff Recommendation
|
||||
|
||||
- recommendation: return `upstream-contract` / `needs-user-decision` to Coordinator Agent. Do not request an Implementation Agent rerun yet.
|
||||
- narrowest contract alternative: when the matching external residual-channel scale is exactly zero, select the existing typed absolute gate (`||r_f^phi||inf <= 1e-3 force-length`) even if the internal residual is nonzero; retain the current relative denominator when matching external scale is nonzero.
|
||||
- broader contract alternative: make residual convergence pass when either its typed absolute gate or its current relative gate passes. This is simpler and symmetric across force/moment channels but changes acceptance for all load-scale regimes.
|
||||
- scale-based contract alternative: define an explicit nonzero model force-length reference scale for moment residual normalization, including its deterministic characteristic-length source. This is more general but expands the numerical contract and needs formulation/numerical review.
|
||||
- non-solution: changing the reference deck to add an applied moment would not correct the same structural failure for supported no-moment load cases and would also violate immutable reference ownership in this correction.
|
||||
|
||||
Any selected alternative requires the owning upstream documents and tests to be revised and approved before production code changes. Correction Agent does not choose among them.
|
||||
|
||||
### 12.8 Stop Condition
|
||||
|
||||
- upstream ambiguity: the exact approved `max(internal, external)` denominator and exact-zero branch are the demonstrated cause.
|
||||
- implementation stop: any code-only pass would relax/reinterpret `NSNR-069` and formulation Section 14.1.
|
||||
- reference artifact gap: none; all declared reference artifacts exist and remain unchanged.
|
||||
- repeated failure: normalized classification attempt `1`; no automatic second implementation correction is safe before an upstream decision.
|
||||
- final stop: status `needs-upstream-decision`; Step 11 remains blocked and Step 12 remains pending.
|
||||
|
||||
## 13. REWORK-008 Nonlinear Reaction Reference Mismatch Triage
|
||||
|
||||
### 13.1 Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| source failure report | `phases/nonlinear-static-newton-raphson/step11-output.json`; `docs/nonlinear-static-newton-raphson/coordination.md` dispatch `REWORK-008-nonlinear-reaction-reference-mismatch` |
|
||||
| source implementation plan | `docs/nonlinear-static-newton-raphson/implementation-plan.md`; `phases/nonlinear-static-newton-raphson/step11.md` |
|
||||
| status | `needs-upstream-decision` |
|
||||
| owner_agent | `correction-agent` |
|
||||
| date | `2026-08-25` |
|
||||
|
||||
`implementation-report.md`, `build-test.md`, `reference-comparison.md`는 아직 존재하지 않는다. 따라서 immutable `step11-output.json` SHA-256 `0F3B876AF84398EB1D2C90335998115797054B012899DE27E4070A6F533EEF91`, Coordinator dispatch, current implementation/CTest와 read-only result/reference audit를 source evidence로 사용했다.
|
||||
|
||||
### 13.2 Failure Triage
|
||||
|
||||
- initial failure classification: `reference-comparison`
|
||||
- final classification: `upstream-contract`
|
||||
- normalized classification: `reference-blocking-model-adequacy-conflict`
|
||||
- attempt: `1` for `REWORK-008`; 이전 `REWORK-007`은 별도 nonlinear convergence classification이다.
|
||||
- first failed command in Step 11:
|
||||
|
||||
```powershell
|
||||
cmake --build --preset windows-msvc-ninja-debug; ctest --preset windows-msvc-ninja-debug -R '^NonlinearStaticReference\.CopiesRunsComparesAndPreservesTheReadOnlyReferenceInventory$' --output-on-failure
|
||||
```
|
||||
|
||||
- correction-agent reproduction:
|
||||
|
||||
```powershell
|
||||
ctest --preset windows-msvc-ninja-debug -R '^NonlinearStaticReference\.CopiesRunsComparesAndPreservesTheReadOnlyReferenceInventory$' --output-on-failure
|
||||
```
|
||||
|
||||
- failed target or test: `NonlinearStaticReference.CopiesRunsComparesAndPreservesTheReadOnlyReferenceInventory` (fresh CTest test 293)
|
||||
- evidence tail: exit `8`, 0/1 passed, 16.88 s. Row identity/schema/nonfinite prechecks passed before the common tolerance gate reported exactly three failed blocking families: in-plane RF RMS `0.11437709952897851`, transverse RF RMS `0.048448360241294064`, physical spatial RM RMS `0.02746412616679237`, each above `0.01`.
|
||||
|
||||
### 13.3 Root Cause Summary
|
||||
|
||||
Observed reaction computation/storage/mapping path에는 implementation defect evidence가 없다.
|
||||
|
||||
1. `nonlinear_static_procedure.cpp`는 같은 accepted state에서 `residual = internal.force - external.generalized_external_force`를 만들고 `trial.reaction = trial.residual`로 저장한다. `nonlinear_analysis_state.cpp`는 모든 DOF에서 이 두 identity를 검증한다.
|
||||
2. `nonlinear_hdf5_results_writer.cpp`는 translation reaction을 그대로 쓰고 rotational reaction만 승인식 `J_l(phi)^(-T)`로 physical spatial moment에 변환한다. 24 constrained nodes에서 `phi=0`이므로 이 변환은 identity다. Full-precision HDF5 audit에서 constrained translation과 generalized residual의 차이, constrained moment 변환 차이, constrained `phi`가 모두 exact `0`이었다.
|
||||
3. Comparator는 `/model/nodal_constraint_mask`와 `(case, state, instance, node label, component)` exact key를 사용한다. 이번 실행이 schema/missing/extra/duplicate/nonfinite failure가 아니라 family tolerance report까지 도달했으므로 storage와 row mapping precheck도 통과했다.
|
||||
4. Dominant RF3/RM1/RM2 mismatch는 nonlinear 전용 경로에서 생기지 않는다. FESA nonlinear-linear 최대 차이는 RF3 `2.9441580409184098e-06`, RM1 `1.3046948879491538e-05`, RM2 `1.2039316061418504e-05`이고, Abaqus nonlinear-linear 차이는 각각 `0`, `5.0022208599999994e-12`, `1.1141310098e-11`이다. 그럼에도 FESA linear와 Abaqus linear 사이에는 nonlinear과 동일한 local RF3/RM mismatch가 이미 존재한다. 예를 들어 node 31 RF3는 FESA `1059.5675655371299`, reference `339.61334199999999`; node 22 RM1은 FESA `-1564.1175318019484`, reference `-515.62542699999995`다.
|
||||
5. 전체 constrained reaction 합은 FESA nonlinear `[7.9591888635377472e-12, 7.2906680692597092e-12, 100000.00000082512]`, Abaqus nonlinear `[4.5008441418303846e-13, -1.7997131562808022e-12, 99999.999592799955]`로 global balance와 sign이 일치한다. Stored `/global/equilibrium`도 `[-5.2007287365540833e-12, 2.1302730413008675e-11, 99999.999999999985, 1.5669833723712425e-11, 6.4043503405991029e-12, -3.0183203934097235e-11]`다.
|
||||
6. RF1/RF2는 nonlinear에서 새로 생기는 weak geometric membrane reaction이지만 FESA extrema `±1.3774894254907935`와 Abaqus extrema `±1.9166318200000001`의 차이는 storage/mapping 오류가 아니다. Linear Abaqus reaction은 거의 zero이고, independent FESA MITC4와 Abaqus S4가 서로 다른 local nodal support-force redistribution을 만들 수 있다는 approved formulation/model limitation 안에 있다.
|
||||
|
||||
따라서 demonstrated cause는 nonlinear reaction implementation이 아니라 reference blocking quantity의 model-adequacy 전제다. Approved `reference-model.md`는 linear reaction CSV를 review-only로 두면서, 같은 local RF3/RM distribution을 nonlinear에서 blocking으로 승격한다. Project contract는 FESA MITC4의 integration/stabilization/internal behavior가 Abaqus S4와 동등하다고 주장하지 않는다. Global equilibrium은 맞지만 formulation-sensitive local nodal reaction 분포가 1% RMS를 만족해야 한다는 분석적 또는 독립 benchmark 근거는 없다. 이를 code-only로 Abaqus 값에 맞추는 것은 formulation/model adequacy 또는 reference acceptance contract 변경이며 Correction Agent 범위를 벗어난다.
|
||||
|
||||
### 13.4 Correction Scope
|
||||
|
||||
- changed report file in this rework: `docs/nonlinear-static-newton-raphson/corrections.md`
|
||||
- changed production source/header/test/CMake files in this rework: none
|
||||
- preserved pre-existing dirty Step 11 files, including selector/control/log tests, comparator/reference tests, plan/phase/coordination and upstream approval edits
|
||||
- excluded upstream contract files: `requirements.md`, `formulation.md`, `numerical-review.md`, `reference-model.md`, `io.md`, `docs/TOLERANCE.md`
|
||||
- excluded immutable/reference files: `reference/**`, stored Abaqus CSV, HDF5 schema and tolerance policy
|
||||
- prohibited actions not performed: new RED test without an implementation defect, production/comparator/test/CMake change, tolerance weakening, reference artifact generation/modification, Abaqus/Nastran/reference solver, Harness phase execution, Step 12/Physics/Release advancement, `danger-full-access`, commit, push
|
||||
|
||||
No focused RED test was added because the dataflow audit disproved a bounded nonlinear computation/storage/mapping defect. The existing focused integration test is already RED for an upstream blocking/model-adequacy assumption; encoding a replacement expected result before upstream approval would itself change that contract.
|
||||
|
||||
### 13.5 Verification Evidence
|
||||
|
||||
Visual Studio environment는 `VsDevCmd.bat -arch=x64 -host_arch=x64`로 설정했고, `.harness/config.json`/preset가 요구한 `FESA_GTEST_SOURCE_DIR=C:/git/googletest`, `MKL_DIR=C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl`, `TBB_DIR=C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb`, `HDF5_DIR=C:/Program Files/HDF_Group/HDF5/2.1.1/cmake`를 사용했다.
|
||||
|
||||
| purpose | exact command/evidence | exit/result |
|
||||
| --- | --- | --- |
|
||||
| focused reproduction | `ctest --preset windows-msvc-ninja-debug -R '^NonlinearStaticReference\.CopiesRunsComparesAndPreservesTheReadOnlyReferenceInventory$' --output-on-failure` | exit `8`; 0/1 passed; only three reaction-family RMS gates failed |
|
||||
| reaction dataflow audit | `nonlinear_static_procedure.cpp` residual/reaction assignment, `nonlinear_analysis_state.cpp` identities, `nonlinear_hdf5_results_writer.cpp` physical-moment projection and comparator exact-key prechecks; build-local datasets dumped with `$hdf5Bin='C:\Program Files\HDF_Group\HDF5\2.1.1\bin'; $env:PATH="$hdf5Bin;$env:PATH"; & "$hdf5Bin\h5dump.exe" -m %.17g -d <dataset> <results.h5>` | exit `0`; constrained pipeline differences and constrained rotation were exact zero |
|
||||
| nonlinear/linear audit | join build-local FESA HDF5 and immutable CSV rows by exact `(instance, node label, component)` in read-only PowerShell | exit `0`; dominant mismatch is already present in both solvers' linear results and survives nonlinear unchanged |
|
||||
| targeted nonlinear output | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shellNL/shellnl-s4-final-441332835013800-0/shellNL_results.h5` | SHA-256 `A82349F1AABDC2B042A7DBF643D0D917B04245B64E5D73F9507B83A2D67FDE91` |
|
||||
| targeted linear output | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shell/shell-s4-linear-limit-441349319977100-1/shell_results.h5` | SHA-256 `167248AB523484FB6F515AE6A309C7380B4A1226B74BE03B207F4532C3064B66` |
|
||||
| configure | `cmake --preset windows-msvc-ninja-debug` | exit `0`; 0.342 s; configure/generate complete |
|
||||
| build | `cmake --build --preset windows-msvc-ninja-debug` | exit `0`; 0.116 s; `ninja: no work to do.` |
|
||||
| CTest discovery | `ctest --preset windows-msvc-ninja-debug --show-only=json-v1` | exit `0`; 294 tests discovered |
|
||||
| full MSVC CTest | `ctest --preset windows-msvc-ninja-debug --output-on-failure` | exit `8`; 293/294 passed; only test 293 failed with the same three RMS values; test 294 comparator invalid-HDF5/warning checks passed |
|
||||
| source failure hash | `Get-FileHash phases/nonlinear-static-newton-raphson/step11-output.json -Algorithm SHA256` | exit `0`; `0F3B876AF84398EB1D2C90335998115797054B012899DE27E4070A6F533EEF91` |
|
||||
| reference preservation | `git diff -- reference` | exit `0`; empty diff |
|
||||
| repository identity | `git rev-parse HEAD` | exit `0`; `65b56b1755e4537b48b44476375b6235da732648` |
|
||||
| Stop | not applicable | Correction Agent session은 Harness Step이 아니며 production/test/CMake를 변경하지 않았다. Full preset build/CTest를 직접 실행했다. |
|
||||
| Harness Python pytest | not applicable | Harness Python, Hook, agent config behavior를 변경하지 않았다. |
|
||||
|
||||
### 13.6 Traceability
|
||||
|
||||
| requirement id | task id | test id | failing command | corrected file | acceptance criterion |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `FESA-REQ-NSNR-019` | Step 10 reaction/HDF5 path; REWORK-008 | `CORR-NSNR-REACTION-PIPELINE-001` read-only audit | focused test 293 | report only | accepted full residual, constrained reaction and HDF5 physical moment mapping are identical at constrained zero-rotation DOFs; met |
|
||||
| `FESA-REQ-NSNR-034` | Step 11 `reference-comparison-gate`; REWORK-008 | `NSNR-REF-015`, `NSNR-REF-017` via test 293 | focused test 293 and full CTest | report only | exact keys/prechecks pass, but three local reaction families exceed blocking RMS `0.01`; not met because approved reference quantity assumes unsupported local S4/MITC4 distribution agreement |
|
||||
| `FESA-REQ-NSNR-034` | Step 11 model-adequacy audit | `CORR-NSNR-LINEAR-CROSSCHECK-001` | read-only HDF5/CSV audit | report only | distinguish nonlinear reaction implementation error from pre-existing formulation-sensitive local redistribution; implementation-error hypothesis rejected |
|
||||
|
||||
### 13.7 Handoff Recommendation
|
||||
|
||||
- recommendation: return `upstream-contract` / `needs-user-decision` to Coordinator Agent. Do not request an Implementation Agent rerun and do not advance Step 12 until an upstream alternative is explicitly selected and approved.
|
||||
- recommended narrow alternative: align nonlinear local nodal RF/RM disposition with the approved linear reference contract—keep local rows as read-only model-adequacy/physics-review evidence, while blocking reaction evidence is global force/moment equilibrium plus free-residual checks. Blocking displacement comparison remains unchanged.
|
||||
- local-to-global alternative: retain reaction as a blocking external quantity only after projecting it to formulation-independent global resultant force/moment families; keep exact local nodal rows as warning/characterization evidence.
|
||||
- local-blocking alternative: if exact local RF/RM rows must remain blocking, Numerical Review/Reference Model owners must supply an analytical or independent formulation-appropriate benchmark, or explicitly approve Abaqus S4 local nodal reaction distribution as an FESA MITC4 model-adequacy target after a mesh/formulation study. Implementation must not calibrate reactions to Abaqus without that decision.
|
||||
- excluded alternative: tolerance relaxation, row averaging/collapse, comparator weakening or reference artifact rewriting is not acceptable.
|
||||
|
||||
Each viable alternative changes blocking quantity/model-adequacy ownership in `requirements.md`, `numerical-review.md`, `reference-model.md`, `io.md` and the implementation/reference plan. Correction Agent does not select or edit those contracts.
|
||||
|
||||
### 13.8 Stop Condition
|
||||
|
||||
- upstream ambiguity: current contracts simultaneously disclaim Abaqus S4 internal equivalence, make linear local reaction review-only, and require the same formulation-sensitive local distribution as nonlinear blocking evidence.
|
||||
- implementation stop: no nonlinear reaction computation, storage or exact-key mapping defect was reproduced; a code-only pass would alter formulation/reference meaning.
|
||||
- reference artifact gap: none; required artifacts exist, remained read-only and have empty reference diff.
|
||||
- environment blocker: none; configure/build/discovery completed and full CTest reproduced only the intended reference failure.
|
||||
- repeated failure: `REWORK-008` classification attempt `1`; no automatic implementation correction is safe before the upstream decision.
|
||||
- final stop: status `needs-upstream-decision`; Step 11 remains blocked, Step 12 remains pending, and Physics/Release remain ineligible.
|
||||
|
||||
## 14. REWORK-009 User-local WindowsApps PowerShell Launch Correction
|
||||
|
||||
### 14.1 Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| source failure report | `phases/nonlinear-static-newton-raphson/step11-output.json`; `docs/nonlinear-static-newton-raphson/coordination.md` dispatch `REWORK-009-user-windowsapps-pwsh-launch-filter-root-dispatch-required` |
|
||||
| source implementation plan | `docs/nonlinear-static-newton-raphson/implementation-plan.md`; `phases/nonlinear-static-newton-raphson/step11.md` |
|
||||
| status | `corrected-for-implementation-rerun` |
|
||||
| owner_agent | `correction-agent` |
|
||||
| date | `2026-08-28` |
|
||||
|
||||
`implementation-report.md`, `build-test.md`, `reference-comparison.md`는 아직 존재하지 않는다. 따라서 current `step11-output.json` SHA-256 `BF3A1CA6DD35EA8414710018D7F1644A1D2C6C2BCF87C11F74DA2A01BBEAB3AD`, Coordinator dispatch, preserved attempt-1 TDD evidence와 attempt-2 Stop evidence를 source evidence로 사용했다.
|
||||
|
||||
### 14.2 Failure Triage
|
||||
|
||||
- classification: `harness`
|
||||
- normalized classification: `harness-launch-path-filter-missed-user-windowsapps-pwsh-access-denied`
|
||||
- attempt: `2` under `STEP11-EXECUTION-003`; attempt 1은 1,800초 timeout이고 attempt 2는 아래 shell launch failure다.
|
||||
- first failed command boundary:
|
||||
|
||||
```powershell
|
||||
codex exec --json --model gpt-5.6-terra --config 'model_reasoning_effort="xhigh"' --sandbox workspace-write --dangerously-bypass-hook-trust --cd C:\git\FESADev\.worktrees\nonlinear-static-newton-raphson --disable unified_exec -
|
||||
```
|
||||
|
||||
- failed target: attempt-2 nested Codex의 첫 PowerShell tool launch.
|
||||
- evidence tail: nested Codex `0.150.1`이 `C:\Users\baram\AppData\Local\Microsoft\WindowsApps\pwsh.exe`를 선택했다. `workspace-write` runner가 `CreateProcessAsUserW failed: 5 (Access denied)`로 이를 거부해 소스 확인, RED/VERIFY 명령과 Step status update가 실행되지 않았다. Codex process 자체는 `exitCode=0`이지만 blocker agent message만 반환했으므로 Step 성공 evidence가 아니다.
|
||||
- state evidence: `HEAD=65b56b1755e4537b48b44476375b6235da732648`; Step 11 `pending`; Step 12 `pending`.
|
||||
|
||||
### 14.3 Root Cause Summary
|
||||
|
||||
이번 실패는 solver, comparator 또는 `1e-8` gate defect가 아니라 Harness child launch environment defect다.
|
||||
|
||||
1. 이전 launcher filter는 `C:\Program Files\WindowsApps\Microsoft.PowerShell_*` entry만 제거했다.
|
||||
2. 따라서 `C:\Users\baram\AppData\Local\Microsoft\WindowsApps` entry와 그 아래 `pwsh.exe` execution alias가 PATH에 남았다.
|
||||
3. Nested Codex shell resolver는 남은 user-local alias를 선택했고, Windows native `workspace-write` sandbox는 그 alias의 child process 생성을 Windows error 5로 거부했다.
|
||||
4. PATH에서 `\\WindowsApps(?:\\|$)`에 일치하는 모든 entry를 제거하면 현재 환경의 Program Files entry 세 개와 user-local entry 한 개가 함께 제거된다. 이때 `pwsh`는 resolve되지 않고 `powershell`은 `C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe`로 resolve된다.
|
||||
5. Root가 같은 Codex CLI `0.150.1`, `gpt-5.6-terra`, `xhigh`, `--disable unified_exec`, `workspace-write`, `CODEX_HOME=C:\Users\baram\.codex` envelope에서 이 filter를 적용한 nested smoke는 위 Windows PowerShell을 선택해 exact `FESA_CODEX_SHELL_SMOKE_OK`를 출력하고 exit `0`으로 끝났다. Correction audit의 독립 direct smoke도 같은 executable, exact output과 exit `0`을 확인했다.
|
||||
|
||||
따라서 repository runner나 Step 11 implementation을 고칠 필요가 없다. Rerun launch에서 PATH predicate만 전체 WindowsApps entry를 제거하도록 바로잡으면 된다.
|
||||
|
||||
### 14.4 Correction Scope
|
||||
|
||||
- changed report file: `docs/nonlinear-static-newton-raphson/corrections.md`
|
||||
- changed source/header/test/CMake/runner/phase files: none
|
||||
- excluded upstream contracts: `requirements.md`, `formulation.md`, `numerical-review.md`, `reference-model.md`, `io.md`, `implementation-plan.md`, `docs/TOLERANCE.md`
|
||||
- excluded immutable evidence: `reference/**`, stored CSVs and reference inputs
|
||||
- preserved dirty implementation: all existing Step 11 source, test, comparator, CMake and phase changes
|
||||
- prohibited actions not performed: Harness phase execution, Step 11 implementation, Step 12, full build/CTest rerun, manual Hook execution, commit, push, `danger-full-access`, reference solver or artifact mutation
|
||||
|
||||
Correction은 repository code 변경이 아니라 corrected child-launch envelope와 재실행 경계를 확정한다. Production C++ 변경이 없으므로 새 RED test는 필요하지 않다.
|
||||
|
||||
### 14.5 Verification Evidence
|
||||
|
||||
| purpose | exact command/evidence | exit/result |
|
||||
| --- | --- | --- |
|
||||
| failure artifact audit | `Get-FileHash phases/nonlinear-static-newton-raphson/step11-output.json -Algorithm SHA256`; JSON `exitCode`, `stderr`, blocker message 검사 | exit `0`; SHA-256 `BF3A1CA6DD35EA8414710018D7F1644A1D2C6C2BCF87C11F74DA2A01BBEAB3AD`; nested process path와 `CreateProcessAsUserW failed: 5` 확인 |
|
||||
| filter audit | `($env:PATH -split ';') \| Where-Object { $_ -notmatch '\\WindowsApps(?:\\|$)' }`를 child-only PATH로 적용한 뒤 `Get-Command codex,pwsh,powershell` 확인 | four WindowsApps entries removed; Codex `codex-cli 0.150.1`; `pwsh=<none>`; `powershell=C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe` |
|
||||
| independent direct smoke | filtered PATH에서 `powershell.exe -NoProfile -Command '[Console]::WriteLine($PSHOME); [Console]::WriteLine("FESA_CODEX_SHELL_SMOKE_OK")'` | exit `0`; `$PSHOME=C:\Windows\System32\WindowsPowerShell\v1.0`; exact `FESA_CODEX_SHELL_SMOKE_OK` |
|
||||
| same-envelope nested Codex smoke | Coordinator/root evidence: Codex `0.150.1`, Terra/xhigh, `--disable unified_exec`, `workspace-write`, aligned `CODEX_HOME`, all-WindowsApps filter | exit `0`; selected system Windows PowerShell and printed exact `FESA_CODEX_SHELL_SMOKE_OK` |
|
||||
| recovered attempt-1 RED | `ctest --preset windows-msvc-ninja-debug -R 'GlobalForceAndMoment' --output-on-failure` before comparator GREEN | exit `8`; preserved old `<=1e-10` rejected both `5e-9` and exact `1e-8` in `NSNR-REF-024` |
|
||||
| recovered attempt-1 GREEN | same focused GlobalForceAndMoment CTest after comparator-only shared gate became `1e-8` | exit `0`; 2/2 passed, including inclusive boundary and exact-zero-scale tests |
|
||||
| focused implementation evidence | attempt-1 focused procedure, HDF5 and global-balance runs; attempt-2 `LastTest.log` named-test audit | `NSNR-PROC-019`, `NSNR-HDF5-014`, `NSNR-REF-022`, `NSNR-REF-024`, `NSNR-REF-025` all present as passed |
|
||||
| attempt-2 Stop full CTest | `.harness/build-ninja-msvc-debug/Testing/Temporary/LastTest.log`, SHA-256 `41CA3D4E410F7BFD55E50FC7D40A79D00D26116945C468E74F0E38720E676447` | 302 `Testing` rows, 0 failure markers, final `302/302`; root/Coordinator records full `302/302` pass |
|
||||
| new full build/CTest | not run | existing evidence was sufficient and dispatch prohibited unnecessary Harness/build/CTest rerun |
|
||||
| Stop | not applicable | Correction Agent session은 Harness Step이 아니며 code/test/CMake를 변경하지 않았다. |
|
||||
| Harness Python pytest | not applicable | runner, Hook 또는 agent config를 변경하지 않았다. |
|
||||
|
||||
Attempt-1 RED/GREEN은 recovered immutable execution evidence이며 이 correction에서 재현하거나 새로 주장한 RED가 아니다. Current code를 old threshold로 되돌리지 않았고 reference artifact도 실행·수정하지 않았다.
|
||||
|
||||
### 14.6 Traceability
|
||||
|
||||
| requirement id | task id | test id | failing command | corrected file | acceptance criterion |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `FESA-REQ-NSNR-019` | Step 11 `equilibrium-projection-and-reference-gate`; REWORK-009 | `NSNR-PROC-019`, `NSNR-HDF5-014`, `NSNR-REF-022`, `NSNR-REF-024..025` | nested `codex exec` first shell launch | `corrections.md` report-only launch correction | Step 11 agent can read/run the preserved current-arm, spatial-moment and distinct global force/moment evidence under `workspace-write` |
|
||||
| `FESA-REQ-NSNR-034` | Step 11 reference gate; REWORK-009 | `NSNR-REF-020..025` | nested `codex exec` first shell launch | `corrections.md` report-only launch correction | implementation-owned reference checks can complete without changing disposition, reference artifacts or tolerance |
|
||||
| Harness Step execution contract | `STEP11-EXECUTION-003`; `REWORK-009` | `CORR-HARNESS-SHELL-002` | user-local WindowsApps `pwsh.exe` launch | `corrections.md` | all PATH entries matching `\\WindowsApps(?:\\|$)` are absent; system Windows PowerShell launches and exact smoke exits `0` |
|
||||
|
||||
### 14.7 Handoff Recommendation
|
||||
|
||||
- recommendation: return `corrected-for-implementation-rerun` to Coordinator Agent and request one bounded Implementation Agent rerun of Step 11 only.
|
||||
- exact launch correction: reuse the approved `STEP11-EXECUTION-003` Step11-only wrapper and change only the launch PATH filter to the following predicate after VsDevCmd x64/dependency environment setup and before `codex exec`:
|
||||
|
||||
```powershell
|
||||
$step11PathEntries = $env:PATH -split ';' | Where-Object {
|
||||
$_ -and $_ -notmatch '\\WindowsApps(?:\\|$)'
|
||||
}
|
||||
$env:PATH = $step11PathEntries -join ';'
|
||||
$env:CODEX_HOME = 'C:\Users\baram\.codex'
|
||||
$env:FESA_HARNESS_CODEX_SANDBOX = 'workspace-write'
|
||||
```
|
||||
|
||||
- preserve exact runtime: Codex CLI `0.150.1`; implementation-agent `gpt-5.6-terra`/`xhigh`; `--disable unified_exec`; project PreToolUse/Stop hooks; VsDevCmd x64; approved `FESA_GTEST_SOURCE_DIR`, `MKL_DIR`, `TBB_DIR`, `HDF5_DIR`.
|
||||
- preflight must resolve `powershell` to `C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe`, leave `pwsh` unresolved, and print exact `FESA_CODEX_SHELL_SMOKE_OK` with exit `0`.
|
||||
- run only Executor-selected Step 11, no `--push`; hard-stop before Step 12. Do not use `danger-full-access`, run a reference solver, mutate reference artifacts or alter runner/source/test/CMake/phase/upstream/tolerance files as part of this launch correction.
|
||||
|
||||
### 14.8 Stop Condition
|
||||
|
||||
- repeated failure: normalized classification count is already `2`; if the corrected all-WindowsApps filter still produces the same `CreateProcessAsUserW` failure, do not start another automatic retry. Return `needs-environment-fix` to Coordinator with the new output artifact.
|
||||
- environment blocker: cleared for one bounded Step 11 rerun by the same-envelope smoke; no repository-local code fix is required.
|
||||
- upstream ambiguity: none introduced by this correction; fixed `1e-8` force/moment gate and all approved contracts remain unchanged.
|
||||
- reference artifact gap: none examined or changed in this correction.
|
||||
- final stop: status `corrected-for-implementation-rerun`; Step 11 and Step 12 remain `pending` until Executor/Implementation owner action.
|
||||
|
||||
@@ -1599,7 +1599,15 @@ on any increment/recovery/output failure:
|
||||
### 14.1 Four convergence channels
|
||||
|
||||
Let free translation and rotation-coordinate subvectors carry superscripts \(u\)
|
||||
and \(\phi\). Residual channels use
|
||||
and \(\phi\). Define the matching external residual-channel scales
|
||||
|
||||
\[
|
||||
S_{ext}^u=\|\mathbf f_{ext,f}^u\|_\infty,
|
||||
\qquad
|
||||
S_{ext}^\phi=\|\mathbf f_{ext,f}^\phi\|_\infty.
|
||||
\]
|
||||
|
||||
When the matching external scale is nonzero, residual channels retain
|
||||
|
||||
\[
|
||||
\eta_R^u=
|
||||
@@ -1615,10 +1623,31 @@ and \(\phi\). Residual channels use
|
||||
\|\mathbf f_{ext,f}^\phi\|_\infty)}
|
||||
\]
|
||||
|
||||
when the matching denominator is nonzero. They pass iff
|
||||
\(\eta_R^u\le10^{-2}\) and \(\eta_R^\phi\le10^{-2}\).
|
||||
An exact-zero denominator instead passes iff the numerator is at most
|
||||
\(10^{-3}\) model-consistent force or \(10^{-3}\) model-consistent force-length.
|
||||
for \(S_{ext}^u>0\) and for \(S_{ext}^\phi>0\), respectively. Each nonzero-external-scale
|
||||
channel passes iff its ratio is \(\le10^{-2}\). An exact-zero matching external
|
||||
scale instead selects the existing typed absolute residual gate:
|
||||
|
||||
\[
|
||||
\boxed{
|
||||
S_{ext}^u=0
|
||||
\ \Longrightarrow
|
||||
\|\mathbf r_f^u\|_\infty\le10^{-3}
|
||||
\quad\text{model-consistent force},}
|
||||
\]
|
||||
|
||||
\[
|
||||
\boxed{
|
||||
S_{ext}^\phi=0
|
||||
\ \Longrightarrow
|
||||
\|\mathbf r_f^\phi\|_\infty\le10^{-3}
|
||||
\quad\text{model-consistent force-length}.}
|
||||
\]
|
||||
|
||||
The exact-zero branch selector is the matching external scale itself, not
|
||||
\(\max(\|\mathbf f_{int,f}\|_\infty,
|
||||
\|\mathbf f_{ext,f}\|_\infty)\). Therefore a nonzero internal residual does not
|
||||
select the relative branch when its matching external scale is exactly zero. When
|
||||
the external scale is nonzero, only the retained relative gate applies.
|
||||
|
||||
Let
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
> For Harness workers: this plan is an approved Stage 6 planning artifact. It authorizes planning files only. It does not authorize `scripts/execute.py`, C++ implementation, build, CTest, reference solver execution, or evidence-document creation.
|
||||
|
||||
**Goal:** `nonlinear-static-newton-raphson` 기능을 C++17/MSVC/CMake/CTest TDD 순서로 구현하고, 승인된 nonlinear MITC4 Newton-Raphson 절차, HDF5 schema v1, log lifecycle, shellNL/shell reference comparison을 검증한다.
|
||||
**Goal:** `nonlinear-static-newton-raphson` 기능을 C++17/MSVC/CMake/CTest TDD 순서로 완결하고, current-position/spatial-moment global equilibrium, accepted free residual, fine-primary/coarse-companion reference gate와 HDF5 schema v1을 검증한다.
|
||||
|
||||
**Architecture:** App layer가 argv 검증, lexical output path derivation, move-only `OutputWriteLease`, log open/close와 final HDF5 writer 호출 순서를 소유한다. 입력 parse/map은 정확히 한 번 수행하고, `StepDefinition::ProcedureKind()`로 linear와 nonlinear procedure executor를 분리한다. `LinearStaticAnalysis`의 기존 private lifecycle에는 nonlinear 조건문을 넣지 않고, 기존 linear numerical/HDF5 의미는 repository-wide output name/log lifecycle 변경만 제외하고 보존한다.
|
||||
**Architecture:** App layer가 argv 검증, lexical output path derivation, move-only `OutputWriteLease`, log open/close와 final HDF5 writer 호출 순서를 소유한다. 입력 parse/map은 정확히 한 번 수행하고, `StepDefinition::ProcedureKind()`로 linear와 nonlinear procedure executor를 분리한다. Nonlinear accepted state는 current arm과 spatial physical moment로 applied-plus-reaction balance error를 만들고 기존 `/global/equilibrium`에 저장하며, comparator는 existing schema-v1 nodal datasets에서 constrained reaction resultant와 accepted free residual을 별도로 재구성한다. `LinearStaticAnalysis`의 기존 private lifecycle에는 nonlinear 조건문을 넣지 않는다.
|
||||
|
||||
**Tech Stack:** C++17, MSVC on Windows, CMake, CTest, GoogleTest, Intel oneAPI MKL/TBB, HDF5, Abaqus `.inp` approved subset, Python 3 Harness scripts.
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| status | `approved-planning-files-materialized` |
|
||||
| status | `ready-for-implementation` |
|
||||
| owner_agent | `implementation-planning-agent` |
|
||||
| date | `2026-08-24` |
|
||||
| approval | User approved the final 13-Step draft on `2026-08-24`; Coordinator recorded `DECISION-036`. |
|
||||
| date | `2026-08-28` |
|
||||
| approval | User approved the original 13-Step draft on `2026-08-24`, USER-DECISION-003 revision, and delegated the Coordinator-audited REAPPROVAL-012 Stage 6 reapproval/materialization with both normalized factor-one global force and moment balance gates fixed at `<=1e-8` on `2026-08-28`. |
|
||||
| source_requirement | `docs/nonlinear-static-newton-raphson/requirements.md` |
|
||||
| source_research | `docs/nonlinear-static-newton-raphson/research.md` |
|
||||
| source_formulation | `docs/nonlinear-static-newton-raphson/formulation.md` |
|
||||
@@ -30,21 +30,52 @@
|
||||
|
||||
| document | SHA-256 |
|
||||
| --- | --- |
|
||||
| `requirements.md` | `910E351F3F90FFA42F07D15206B55E62C05EAE821E250424430148337506EBF2` |
|
||||
| `research.md` | `C920A6B02381230D1DB419D73FE767D611B36720D27D6410507BA88C3CA28EEE` |
|
||||
| `formulation.md` | `DFA629888041D5762FD0DF4271353464A692B325DC0C821A8D8689688C1EAFD0` |
|
||||
| `numerical-review.md` | `9517E11804C45A6F3822D18821D52EA493AE20353C8FFAD61E960F4315977D01` |
|
||||
| `reference-model.md` | `52D10B1D0C0500B295C5E48BCB3618B309D9696371B8070D4E3DCEE8D3D74CD3` |
|
||||
| `io.md` | `DBB959A68F17D67CA2B42569610B9C1B595A8BFB5502BC194B7E62B656031B28` |
|
||||
| `requirements.md` | `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E` |
|
||||
| `research.md` raw | `4F63D23E03D1A68E5F8563B678FDD6F761F9558165778EF0433133EFAD303570` |
|
||||
| `formulation.md` | `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9` |
|
||||
| `numerical-review.md` | `C00994EF4BB23A237547459E157EE5BDA96B28CAF08F712CD31A8E0ABBF62D2C` |
|
||||
| `reference-model.md` | `B2E6845AB59A32F78261B7A47506C27F7BF4B61401B34BC5DE3DAD4F03D6ADDA` |
|
||||
| `io.md` raw | `ED23274F4F15F7D1DFF886FA8158961362C75960990271D24A5FD010A8D51FD9` |
|
||||
| `io.md` LF-normalized | `53AFBB1DF27FBD9CE6C2E23EE34480882241A859D3FC1993E82DB61ACC6637EB` |
|
||||
|
||||
## Readiness Check
|
||||
|
||||
- Upstream document status: Stage 1 requirements approved, Stage 2 research passed, Stage 3 formulation ready for numerical review and approved downstream, Stage 4 numerical/reference review passed for I/O definition, Stage 5 I/O definition approved.
|
||||
- Upstream document status: Stage 1 requirements, Stage 4 numerical/reference review and Stage 5 I/O definition are complete; REAPPROVAL-012 fixes both factor-one normalized global force and moment balance gates at `<=1e-8`. Stage 3 formulation §§11.4/13.4 already supplies the accepted residual/reaction/global-resultant meaning.
|
||||
- Missing decisions: none.
|
||||
- Missing required comparison files: none for declared blocking/reference families.
|
||||
- Missing required comparison files: none. Fine primary, coarse companion and linear-control exact inputs/CSVs are present; stress files are optional inventory only.
|
||||
- Planning can proceed: yes.
|
||||
- REWORK-008의 local reaction blocking conflict는 USER-DECISION-004 option 1로 해소되었다. Local nodal RF/RM은 review-only이고 factor-one global force/moment balance와 accepted free residual이 blocking이다. `AUDIT-001` current-arm/spatial-moment implementation seam은 Step 11에서 RED-first로 닫는다.
|
||||
- Step 11에는 보존해야 할 uncommitted `NSNR-CTRL-018..021`, `NSNR-LOG-012`, `NSNR-PROC-019`,
|
||||
`NSNR-HDF5-014`, `NSNR-REF-001..023`, residual-selector GREEN과 comparator/CMake 작업이 있다.
|
||||
새 계획은 이를 reset/replay하지 않는다.
|
||||
- `implementation-report.md`, `build-test.md`, canonical `reference-comparison.md`는 아직 없고 Step 12가 actual evidence에서만 생성한다.
|
||||
- `CMakePresets.json` tracks the approved `windows-msvc-ninja-debug` contract. The ignored `.harness/config.json` selects the matching configure/build/test presets and `.harness/build-ninja-msvc-debug` binary directory.
|
||||
|
||||
## Implementation Scope
|
||||
|
||||
Included behavior:
|
||||
|
||||
- Existing schema-v1 `/global/equilibrium [6]`에 global origin `[0,0,0]`, accepted current
|
||||
position `X+u`, independently spatial-converted applied/reaction moments를 사용하는
|
||||
applied-plus-reaction balance error를 기록한다.
|
||||
- Existing schema-v1 nodal datasets와 exact constraint mask에서 accepted free residual,
|
||||
constrained reaction resultant와 global balance error를 서로 다른 evidence로 재구성한다.
|
||||
- Fine nonlinear primary, coarse nonlinear companion와 linear control을 exact read-only artifact로
|
||||
비교한다. U는 blocking, UR은 warning-only, local RF/RM은 review-only, RM3/stress는 excluded다.
|
||||
- Internal global force/moment는 dimension-separated normalized `1e-8`, accepted free residual은
|
||||
NSNR-069으로 blocking 검증하고 external families만 `docs/TOLERANCE.md`를 사용한다.
|
||||
|
||||
Excluded behavior and non-goals:
|
||||
|
||||
- New HDF5 dataset/schema version, public header/API, tolerance, reference artifact 또는 solver scope
|
||||
추가가 아니다.
|
||||
- `fesa.env`, runtime configuration, CLI option 또는 product solver acceptance behavior를 추가하지
|
||||
않는다. `1e-8`은 comparator-owned internal verification gate의 fixed value다.
|
||||
- Local nodal reaction을 global sum으로 대체하거나 Abaqus S4와 FESA MITC4 내부 정식화
|
||||
동등성을 주장하지 않는다.
|
||||
- Steps 0–10 구현/history replay, selector RED 재현, Abaqus/reference solver 실행, Physics/Release
|
||||
판정은 포함하지 않는다.
|
||||
|
||||
## Global Constraints
|
||||
|
||||
- Use `RED -> observed failure -> minimal GREEN -> focused VERIFY -> full CTest` in every implementation Step.
|
||||
@@ -54,8 +85,12 @@
|
||||
- Do not create `implementation-report.md`, `build-test.md`, or `reference-comparison.md` before Step 12 produces actual command evidence.
|
||||
- Do not run Harness from this planning approval. `scripts/execute.py` requires a separate explicit request.
|
||||
- Implementation and Harness execution remain unauthorized by this materialized plan until the user separately requests Executor execution.
|
||||
- Preserve source label/instance identity, deterministic row order, deterministic diagnostics, finite checks, and docs/TOLERANCE.md exactly.
|
||||
- Preserve `U1/U2/U3` blocking and `UR1/UR2/UR3` warning-only. For shellNL, preserve constrained `RF1/RF2`, `RF3`, physical spatial `RM1/RM2` blocking, and exclude `RM3` plus stress from numeric comparison.
|
||||
- Preserve source label/instance identity, deterministic row order, deterministic diagnostics, finite checks, and `docs/TOLERANCE.md` exactly.
|
||||
- Residual force/moment channel은 finite-first 검사 뒤 matching external scale 자체로 분기한다. Exact zero이면 denominator output exact `0`과 typed absolute `1.0e-3`; nonzero이면 retained `max(internal,external)` denominator와 dimensionless relative `1.0e-2`만 사용한다. Tolerance band, zero clamp, `max(1,...)`, absolute/relative OR는 금지한다.
|
||||
- Correction gates, four-channel logical AND, Full Newton, fixed load-factor stepping, maximum 100 iterations와 `nsnr-log-v1` 39-field label/order/TAB schema는 변경하지 않는다.
|
||||
- Preserve `U1/U2/U3` blocking and `UR1/UR2/UR3` warning-only. Fine/coarse constrained `RF1/RF2`, `RF3`, physical spatial `RM1/RM2` remain review-only with complete deterministic precheck/error reporting; exclude `RM3` and stress from numeric comparison.
|
||||
- Preserve schema version 1 and all existing HDF5 paths/shapes/components. Do not add a summary dataset or public header.
|
||||
- Keep internal global balance/free-residual gates separate from external `docs/TOLERANCE.md`; do not add a floor, `max(1,S)`, zero clamp, averaging or collapse.
|
||||
- Launch every Harness process from VsDevCmd with `-arch=x64 -host_arch=x64` and inherit `FESA_GTEST_SOURCE_DIR`, `MKL_DIR`, `TBB_DIR`, and `HDF5_DIR`. The tracked preset selects Ninja and MSVC Debug without hard-coding machine-local dependency paths.
|
||||
|
||||
## Repository Seam Map
|
||||
@@ -68,11 +103,12 @@
|
||||
| Domain | `StaticStepDefinition` in `include/fesa/model/model_types.h`; `StepDefinition` in `include/fesa/model/domain.h`. | Store procedure identity, `NLGEOM`, raw four `*STATIC` values and provenance. Do not store derived factor sequence or PRESELECT state. |
|
||||
| Parser mapping | `src/fesa/io/abaqus/domain_mapping_context.cpp`, `step_definition_mapper.cpp`. | Accept nonlinear static subset, warning no-op PRESELECT, reject unsupported procedure fail-closed. |
|
||||
| MITC4 | `include/fesa/elements/mitc4_shell.h`, `src/fesa/elements/mitc4_shell.cpp` are linear small-rotation. | Add separate nonlinear MITC4 files with `Create(...)` from four nodes, four initial frames, `ShellSection`, and `LinearElasticMaterial`; element kernels compute internal residual/tangent/recovery only. |
|
||||
| Loads/control | Current loads are assembled for linear static RHS. | Step 5 owns global-once fixed CLOAD external vector `f_ext` and exact external load tangent `K_ext`, including projected moment `J_l`/map-Hessian terms, with no incident-element multiplication. Step 5 also owns exact convergence constants: relative `1.0e-2`, zero-scale `1.0e-3` with channel-specific units. Step 10 forms `r = f_int - f_ext` and `K_T = K_int - K_ext`. |
|
||||
| Loads/control | Preserved partial Step 11 work already changes residual selection to matching external scale exact-zero/nonzero and adds `NSNR-CTRL-018..021`/`NSNR-LOG-012`. | Preserve without replay/redesign; run focused regression before the new equilibrium/reference gate. |
|
||||
| Equilibrium projection | `src/fesa/analysis/nonlinear_static_procedure.cpp` currently sums raw full residual with initial Domain coordinates and raw rotational covectors. | Apply the constraint mask before rotational conversion; use accepted `X+u`; convert applied and constrained-reaction rotational covectors independently with `InverseTransposeLeftJacobianSO3(phi)`; store applied-plus-reaction balance only. |
|
||||
| Source identity | `SourceEntityId { instance_name, source_label, source_label_text }` and `EntityIndex` exist in `include/fesa/core/source_identity.h`; nodes are stored in stable Domain order. | Step 8 baseline uses both `EntityIndex` and full `SourceEntityId`, requires one node baseline per Domain node in stable internal order, rejects label-only or mismatched identities, and preserves identity into HDF5/reference mapping. |
|
||||
| Solver | `MklPardisoSolver` uses SPD `mtype=2` and upper-triangle copy. | Preserve unchanged; add `TangentSolver` and MKL unsymmetric full CSR `mtype=11`. |
|
||||
| Results writer | `ResultsWriter` is the backend-neutral linear writer; `Hdf5ResultsWriter` writes schema-v0 single-frame linear output. | Add `NonlinearResultsWriter` backend-neutral boundary and `NonlinearHdf5ResultsWriter` schema-v1 implementation with delayed finalization after log close. |
|
||||
| Tests | `fesa_unit_tests`, `fesa_integration_tests`, `fesa_reference_tests` use executable-wide labels. | Add focused test sources and use `ctest -R` regex; do not globally relabel existing tests as nonlinear. |
|
||||
| Results writer | `NonlinearHdf5ResultsWriter` already writes schema-v1 `/global/equilibrium`, but its location attribute is `global-origin`. | Preserve dataset path/shape/components and change exact location identity to `global-balance-error`; no new dataset or public writer boundary. |
|
||||
| Tests | Existing integration/HDF5 tests and partial nonlinear comparator are registered in existing executables. | Add RED to existing sources; preserve the current CMake registration and use focused `ctest -R` regex without a new target or global relabel. |
|
||||
|
||||
## Work Breakdown
|
||||
|
||||
@@ -89,7 +125,7 @@
|
||||
| 8 | `nonlinear-state-commit-rollback` | 3-7 | Factor-zero baseline construction with `EntityIndex` plus `SourceEntityId`, trial/committed nonlinear state, accepted frames, rollback/preservation. |
|
||||
| 9 | `nonlinear-hdf5-schema-v1-writer` | 8 | Nonlinear HDF5 schema v1 writer using `std::vector<Diagnostic>`. |
|
||||
| 10 | `prepared-analysis-flow-and-full-procedure` | 0-9 | Single parse/map prepared analysis flow, separate linear/nonlinear executors, delayed writer finalization. |
|
||||
| 11 | `reference-comparison-gate` | 0-10 | shellNL nonlinear and shell linear real-input reference comparison. |
|
||||
| 11 | `equilibrium-projection-and-reference-gate` | 0-10 | Preserve partial selector/comparator work; add new current-arm/spatial-moment, HDF5 location, fine/coarse disposition/internal-gate RED tests; make minimal procedure/writer/comparator GREEN; run focused/full verification. |
|
||||
| 12 | `execution-closure-and-evidence-docs` | 0-11 | Fresh MSVC evidence, deterministic repeat/reference audit, actual-output evidence docs. |
|
||||
|
||||
## TDD Test Plan
|
||||
@@ -101,20 +137,21 @@
|
||||
| `NSNR-ROT-*` | finite rotation invariants, `J_l`, branch margin, director update. | 2 |
|
||||
| `NSNR-ELEM-KIN-*` | nonlinear MITC4 creation inputs, TL shell kinematics, fixed-size four-GP recovery rows, degeneracy fail-closed, linear limit. | 3 |
|
||||
| `NSNR-ELEM-TAN-*` | same-trial internal residual/tangent, directional derivative, objectivity, symmetry only for internal/no-external cases. | 4 |
|
||||
| `NSNR-CTRL-*` | load factor path, absolute boundary path, global-once fixed loads and load tangent, moment admissibility, typed four convergence gates with `relative`/`zero-scale` branches and non-injectable exact thresholds/units. | 5 |
|
||||
| `NSNR-CTRL-*` | Existing coverage plus preserved partial `NSNR-CTRL-018..021`: matching-external exact-zero absolute boundaries, retained nonzero relative boundaries, nonfinite-first/no-clamp selection, unchanged correction gates/four-channel AND. Do not replay/fabricate selector RED. | 5,11 |
|
||||
| `NSNR-SOLVER-*` | nonsymmetric tangent solve, 0x0, nonfinite/failure translation, SPD solver unchanged. | 6 |
|
||||
| `NSNR-LOG-*` | serializer-owned 39-field UTF-8/LF/TAB Newton log from explicit stage/failure/channel records and fail-closed write/flush/close. | 7 |
|
||||
| `NSNR-LOG-*` | Existing serializer coverage plus preserved partial `NSNR-LOG-012`: evaluator-produced zero/nonzero-external decisions retain exact denominator, branch, threshold, unit and 39 fields. | 7,11 |
|
||||
| `NSNR-STATE-*` | factor-zero baseline creation with stable node order and full source identity, trial/committed separation, accepted frame order, full schema-v1 state inventory, finite atomic commit, rollback. | 8 |
|
||||
| `NSNR-HDF5-*` | `NonlinearResultsWriter` boundary, schema v1 metadata/model/frame datasets, factor-zero metadata, atomic finalization. | 9 |
|
||||
| `NSNR-PROC-*` | full procedure orchestration, single parse/map, log close before HDF5, deterministic repeat. | 10 |
|
||||
| `NSNR-REF-*` | original artifact snapshot, temp input copy run, HDF5-to-original-CSV identity mapping, tolerance, classification, report data. | 11 |
|
||||
| `NSNR-EVID-*` | fresh evidence docs and diff/hash/warning audits from actual command outputs. | 12 |
|
||||
| `NSNR-HDF5-*` | Existing schema-v1 coverage plus `NSNR-HDF5-014` exact `/global/equilibrium` `location=global-balance-error`; path/shape/components/version unchanged. | 9,11 |
|
||||
| `NSNR-PROC-*` | Existing procedure coverage plus collision-resolved `NSNR-PROC-019` exact test `NonlinearStaticProcedure.NonzeroPrescribedMotionWritesCurrentArmSpatialAppliedPlusReactionBalance`. Approved draft label `NSNR-PROC-011` is not reused because completed Step 10 already owns it. | 10,11 |
|
||||
| `NSNR-REF-*` | Preserve `NSNR-REF-001..023`, including the current-case old-gate RED in `022`; add `024` inclusive `1e-8` force/moment boundary plus approved between-threshold regression and `025` exact-zero-scale force/moment regression before changing the comparator gate. | 11 |
|
||||
| `NSNR-EVID-*` | `001..007` freshness, disposition, fine/internal inventory, AUDIT-001, command/provenance and actual-output report checks. | 12 |
|
||||
|
||||
## CMake And CTest Plan
|
||||
|
||||
- Add C++ sources to `src/fesa/CMakeLists.txt` under existing `fesa_solver`.
|
||||
- Add unit tests to `fesa_unit_tests`, integration tests to `fesa_integration_tests`, reference tests to `fesa_reference_tests`.
|
||||
- Preserve current executable-wide labels. Use focused regex such as `ctest --preset windows-msvc-ninja-debug -R "NonlinearStaticReference|ReferenceTolerance|Mitc4Reference" --output-on-failure`.
|
||||
- Step 11 adds no target or `add_test`: procedure/HDF5 tests use existing executables and current partial `tests/CMakeLists.txt` comparator registration is preserved without unrelated edits.
|
||||
- If scoped per-test labels are introduced, the Step that introduces the mechanism must test it and avoid changing labels for unrelated discovered tests.
|
||||
- Configure/build/test commands:
|
||||
|
||||
@@ -125,6 +162,17 @@ ctest --preset windows-msvc-ninja-debug --show-only=json-v1
|
||||
ctest --preset windows-msvc-ninja-debug --output-on-failure
|
||||
```
|
||||
|
||||
## Candidate Files and Ownership
|
||||
|
||||
Candidate paths guide the Implementation Agent and do not finalize a new public API.
|
||||
|
||||
| Step | candidate files | responsibility boundary |
|
||||
| --- | --- | --- |
|
||||
| 11 RED | `tests/integration/analysis/nonlinear_static_procedure_test.cpp`; `tests/unit/io/hdf5/nonlinear_hdf5_results_writer_test.cpp`; existing partial `tests/reference/nonlinear_static_reference_{comparison.h,comparison.cpp,cases_test.cpp}` | New behavior must fail before production edits; comparator extensions remain test-private. |
|
||||
| 11 GREEN | `src/fesa/analysis/nonlinear_static_procedure.cpp`; `src/fesa/io/hdf5/nonlinear_hdf5_results_writer.cpp` | Current-arm/spatial-moment balance and exact dataset location only; no public header/state/schema expansion. |
|
||||
| 11 preserve | `src/fesa/analysis/nonlinear_static_control.cpp`; `tests/unit/analysis/nonlinear_static_control_test.cpp`; `tests/unit/analysis/newton_iteration_log_test.cpp`; `tests/CMakeLists.txt` | Preserve uncommitted selector/tests/registration and verify them; do not reset, recreate or redesign. |
|
||||
| 12 evidence | `docs/PRD.md`; `docs/ARCHITECTURE.md`; `docs/ADR.md`; feature `implementation-report.md`, `build-test.md`, `reference-comparison.md` | Directly superseded global statements and actual evidence only; no C++/test/CMake ownership. |
|
||||
|
||||
## Data Flow Contract
|
||||
|
||||
1. CLI receives `fesa.exe <model.inp>`.
|
||||
@@ -132,40 +180,55 @@ ctest --preset windows-msvc-ninja-debug --output-on-failure
|
||||
3. App derives `<stem>_results.h5` and `<stem>_log.txt` beside the lexically normalized user-addressed `.inp`.
|
||||
4. App acquires move-only `OutputWriteLease` and retains it until all log and HDF5 work ends.
|
||||
5. App opens/truncates the log, then `PrepareAnalysisInput(input_path)` parses/maps once into `Domain`.
|
||||
6. Procedure executor receives injected `ParallelFor` plus `LinearSolver` or `TangentSolver` and computes a fully validated linear or nonlinear state without opening HDF5. Nonlinear assembly forms `r = f_int - f_ext` and `K_T = K_int - K_ext` from Step 4 internal quantities and Step 5 global-once external quantities. Nonlinear state construction preserves each node's stable `EntityIndex` and full `SourceEntityId`; source label alone is never a row identity.
|
||||
6. Procedure executor receives injected `ParallelFor` plus `LinearSolver` or `TangentSolver` and computes a fully validated state without opening HDF5. Nonlinear assembly forms `r=f_int-f_ext` and `K_T=K_int-K_ext`, preserves the existing convergence decisions, then computes accepted global balance in stable node order. For each node it sets `x=X+u`, masks constrained residual components before converting reaction rotation, converts applied and reaction rotational covectors independently with `InverseTransposeLeftJacobianSO3(phi)`, and accumulates `applied+reaction` force and `x cross force + spatial moment` about `[0,0,0]`.
|
||||
7. App closes the log successfully before invoking injected `ResultsWriter` or `NonlinearResultsWriter`.
|
||||
8. HDF5 is the authoritative solver output. CSV views are comparison/debug artifacts only.
|
||||
8. HDF5 is authoritative. Existing schema-v1 `/global/equilibrium [6]` stores only the applied-plus-reaction balance error with `location=global-balance-error`; existing nodal datasets/mask reconstruct accepted free residual and constrained reaction resultant without new datasets.
|
||||
9. Comparator copies exact inputs to unique build-local directories, runs only the copies, and executes `ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT`. CSV views are comparison/debug artifacts only.
|
||||
|
||||
## Reference Inventory
|
||||
|
||||
| path | role | rows | SHA-256 |
|
||||
| --- | --- | ---: | --- |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine.inp` | primary nonlinear input | input | `40DF1CE77311C8D799564A21A60F3BDEBB8148D52CAE22B7292FDFAD32018220` |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | required blocking/warning CSV | 729 | `740819FF8AED0E279961581F7CDBFA12784CFBA3A488C35A652E80103F64433F` |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine reactions.csv` | required review-only CSV | 729 | `AEB01C98C596792B0E5F2B86A81945CAB0BEB0C6969CFC6738C6F81DF1F94363` |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine stresses.csv` | optional inventory artifact | 5,408 | `6D6213AB5DB9D6B1F5FBD641367D08BACC805967B6C5A95BCE0E1A5395377782` |
|
||||
| `reference/shellNL/shellNL.inp` | nonlinear input | input | `4BF3ECB0F7F1E8462C573E993DBC97AC5D920C91CF6F23AD4C6891D77FFBADA2` |
|
||||
| `reference/shellNL/shellNL displacements.csv` | required displacement CSV | 49 | `4E0F99CA9372B1ADF7FAF102F43BC0B887DC743FDEDA378E4342D2CF8E0C0786` |
|
||||
| `reference/shellNL/shellNL reactions.csv` | required reaction CSV | 49 | `001CB1541A9E94424E5E650509D46BC8724970DF4DE47184D9DB09C7938AB069` |
|
||||
| `reference/shellNL/shellNL stresses.csv` | nonblocking inventory artifact | 288 | `5500E5114B1C44887528E30CEC054A1EB0F68BE3F4B8CE81FA59FC74A881483F` |
|
||||
| `reference/shellNL/shellNL displacements.csv` | required blocking/warning CSV | 49 | `4E0F99CA9372B1ADF7FAF102F43BC0B887DC743FDEDA378E4342D2CF8E0C0786` |
|
||||
| `reference/shellNL/shellNL reactions.csv` | required review-only CSV | 49 | `001CB1541A9E94424E5E650509D46BC8724970DF4DE47184D9DB09C7938AB069` |
|
||||
| `reference/shellNL/shellNL stresses.csv` | optional inventory artifact | 288 | `5500E5114B1C44887528E30CEC054A1EB0F68BE3F4B8CE81FA59FC74A881483F` |
|
||||
| `reference/shell/shell.inp` | linear input | input | `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF` |
|
||||
| `reference/shell/shell displacements.csv` | required displacement CSV | 49 | `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B` |
|
||||
| `reference/shell/shell reactions.csv` | nonblocking inventory artifact | 49 | `0E34EEC27E700C3C0C744C1DAFD8A3B95EFEF34B8616FE96665876586FE82D41` |
|
||||
| `reference/shell/shell stresses.csv` | nonblocking inventory artifact | 288 | `2B75A5B0DEB045A283C9BB7E9B1153B79F7537FF487214BF4A23316B59B660A7` |
|
||||
|
||||
Blocking and warning families:
|
||||
External comparison families:
|
||||
|
||||
| family | components | rows | disposition |
|
||||
| --- | --- | ---: | --- |
|
||||
| `linear.translation` | `U1,U2,U3`, nodes `1..49` | 147 | blocking |
|
||||
| `linear.rotation` | `UR1,UR2,UR3`, nodes `1..49` | 147 | warning-only |
|
||||
| `nonlinear.translation` | `U1,U2,U3`, nodes `1..49` | 147 | blocking |
|
||||
| `nonlinear.rotation` | `UR1,UR2,UR3`, nodes `1..49` | 147 | warning-only |
|
||||
| `nonlinear.reaction_inplane_force` | `RF1,RF2`, constrained nodes | 48 | blocking |
|
||||
| `nonlinear.reaction_transverse_force` | `RF3`, constrained nodes | 24 | blocking |
|
||||
| `nonlinear.reaction_physical_moment` | `RM1,RM2`, constrained nodes | 48 | blocking |
|
||||
| `coarse.translation` | `U1,U2,U3`, nodes `1..49` | 147 | blocking |
|
||||
| `coarse.rotation` | `UR1,UR2,UR3`, nodes `1..49` | 147 | warning-only |
|
||||
| `coarse.local_reaction_inplane_force` | `RF1,RF2`, 24 constrained nodes | 48 | review-only |
|
||||
| `coarse.local_reaction_transverse_force` | `RF3`, 24 constrained nodes | 24 | review-only |
|
||||
| `coarse.local_reaction_physical_moment` | `RM1,RM2`, 24 constrained nodes | 48 | review-only |
|
||||
| `fine.translation` | `U1,U2,U3`, nodes `1..729` | 2,187 | blocking |
|
||||
| `fine.rotation` | `UR1,UR2,UR3`, nodes `1..729` | 2,187 | warning-only |
|
||||
| `fine.local_reaction_inplane_force` | `RF1,RF2`, 104 constrained nodes | 208 | review-only |
|
||||
| `fine.local_reaction_transverse_force` | `RF3`, 104 constrained nodes | 104 | review-only |
|
||||
| `fine.local_reaction_physical_moment` | `RM1,RM2`, 104 constrained nodes | 208 | review-only |
|
||||
|
||||
Constrained node labels for shellNL reactions: `1,3,4,5,6,7,8,9,14,15,16,17,22,23,24,25,26,27,28,29,30,31,32,33`.
|
||||
Internal blocking families for each fine/coarse accepted factor-one state are free force residual,
|
||||
free moment residual, global force balance and global moment balance. Global force/moment use separate
|
||||
normalized `<=1e-8` gates; free residual uses NSNR-069. Constrained reaction resultant force `[3]`
|
||||
and moment `[3]` is a distinct review-only summary.
|
||||
|
||||
Exact shellNL `Frame`: `Increment 10: Step Time = 1.000`.
|
||||
Constrained labels: coarse `1,3..9,14..17,22..33`; fine `1,3..9,34..57,82..153`.
|
||||
|
||||
Step 11 must not run original reference input paths directly. It snapshots exact original artifact inventory, copies input bytes unchanged into a unique build-local temp case directory, runs `FesaApplication` on the copied `.inp`, consumes copied-sibling `_results.h5` and `_log.txt`, compares generated HDF5 to original read-only CSVs, and then verifies original reference directory inventory, bytes, timestamps, and hashes are unchanged. HDF5 source path identity matches the copied user-addressed input; source content identity matches the approved input hash.
|
||||
Exact fine and coarse nonlinear `Frame`: `Increment 10: Step Time = 1.000`.
|
||||
|
||||
Step 11 must not run original reference input paths directly. It snapshots each exact original artifact inventory, copies input bytes unchanged into a unique build-local case directory, runs `FesaApplication` on the copy, consumes copied-sibling `_results.h5` and `_log.txt`, compares generated HDF5 to original read-only CSVs, and verifies original inventory, bytes, timestamps and hashes are unchanged. HDF5 path identity matches the copied input and source content identity matches the approved input hash.
|
||||
|
||||
## Acceptance Traceability Matrix
|
||||
|
||||
@@ -176,10 +239,10 @@ Step 11 must not run original reference input paths directly. It snapshots exact
|
||||
| `FESA-REQ-NSNR-041` | 1,3,10 | `NSNR-IO-*`, `NSNR-ELEM-KIN-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-074` | 2,8,10 | `NSNR-ROT-*`, `NSNR-STATE-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-006` | 4,6,10 | `NSNR-ELEM-TAN-*`, `NSNR-SOLVER-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-007` | 5,10 | `NSNR-CTRL-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-069` | 5,10 | `NSNR-CTRL-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-070` | 5,10 | `NSNR-CTRL-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-008` | 5,10 | `NSNR-CTRL-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-007` | 5,10,11 | `NSNR-CTRL-021`, `NSNR-PROC-*`, `NSNR-REF-019` |
|
||||
| `FESA-REQ-NSNR-069` | 5,10,11 | `NSNR-CTRL-018..020`, `NSNR-LOG-012`, `NSNR-REF-019` |
|
||||
| `FESA-REQ-NSNR-070` | 5,10,11 | `NSNR-CTRL-021`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-008` | 5,10,11 | `NSNR-CTRL-020`, `NSNR-PROC-*`, `NSNR-REF-019` |
|
||||
| `FESA-REQ-NSNR-014` | 5,10 | `NSNR-CTRL-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-046` | 5,10 | `NSNR-CTRL-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-048` | 5,10 | `NSNR-CTRL-*`, `NSNR-PROC-*` |
|
||||
@@ -187,14 +250,14 @@ Step 11 must not run original reference input paths directly. It snapshots exact
|
||||
| `FESA-REQ-NSNR-063` | 5,10 | `NSNR-CTRL-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-016` | 1,5 | `NSNR-IO-*`, `NSNR-CTRL-*` |
|
||||
| `FESA-REQ-NSNR-011` | 8,9,10 | `NSNR-STATE-*`, `NSNR-HDF5-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-019` | 4,8,10 | `NSNR-ELEM-TAN-*`, `NSNR-STATE-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-019` | 4,8,10,11 | `NSNR-ELEM-TAN-*`, `NSNR-STATE-*`, `NSNR-PROC-019`, `NSNR-HDF5-014`, `NSNR-REF-022`, `NSNR-REF-024..025` |
|
||||
| `FESA-REQ-NSNR-020` | 1 | `NSNR-IO-*` |
|
||||
| `FESA-REQ-NSNR-021` | 8,9,10 | `NSNR-STATE-*`, `NSNR-HDF5-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-024` | 7,10 | `NSNR-LOG-*`, `NSNR-PROC-*` |
|
||||
| `FESA-REQ-NSNR-021` | 8,9,10,11 | `NSNR-STATE-*`, `NSNR-HDF5-*`, `NSNR-PROC-*`, `NSNR-HDF5-014` |
|
||||
| `FESA-REQ-NSNR-024` | 7,10,11 | `NSNR-LOG-012`, `NSNR-PROC-*`, `NSNR-REF-019` |
|
||||
| `FESA-REQ-NSNR-083` | 0,10,12 | `NSNR-CLI-*`, `NSNR-PROC-*`, `NSNR-EVID-*` |
|
||||
| `FESA-REQ-NSNR-026` | 8,10,11,12 | `NSNR-STATE-*`, `NSNR-PROC-*`, `NSNR-REF-*`, `NSNR-EVID-*` |
|
||||
| `FESA-REQ-NSNR-030` | 2,3,4,5,6,7,8,9,10,11 | `NSNR-ROT-*`, `NSNR-ELEM-*`, `NSNR-CTRL-*`, `NSNR-SOLVER-*`, `NSNR-LOG-*`, `NSNR-STATE-*`, `NSNR-HDF5-*`, `NSNR-PROC-*`, `NSNR-REF-*` |
|
||||
| `FESA-REQ-NSNR-034` | 11 | `NSNR-REF-*` |
|
||||
| `FESA-REQ-NSNR-026` | 8,10,11,12 | `NSNR-STATE-*`, `NSNR-PROC-*`, `NSNR-REF-020..023`, `NSNR-EVID-*` |
|
||||
| `FESA-REQ-NSNR-030` | 2,3,4,5,6,7,8,9,10,11 | `NSNR-ROT-*`, `NSNR-ELEM-*`, `NSNR-CTRL-*`, `NSNR-SOLVER-*`, `NSNR-LOG-*`, `NSNR-STATE-*`, `NSNR-HDF5-014`, `NSNR-PROC-019`, `NSNR-REF-022`, `NSNR-REF-024..025` |
|
||||
| `FESA-REQ-NSNR-034` | 11,12 | `NSNR-REF-020..023`, `NSNR-EVID-003..007` |
|
||||
|
||||
## Numerical Review Coverage
|
||||
|
||||
@@ -208,7 +271,9 @@ Step 11 must not run original reference input paths directly. It snapshots exact
|
||||
| patch/sign recovery | 3,4 |
|
||||
| load/boundary path and `rho_M` | 5,10 |
|
||||
| Newton factor/iteration lifecycle | 5,7,10 |
|
||||
| four convergence gates | 5,7,10 |
|
||||
| four convergence gates | 5,7,10,11; preserved partial selector/control/log work is regression-verified in Step 11 |
|
||||
| global balance/current-arm/spatial moment | 11 |
|
||||
| review-only local reaction and fine/coarse reference | 11,12 |
|
||||
| commit/rollback/determinism | 8,10,11,12 |
|
||||
|
||||
## Validation Commands
|
||||
@@ -226,21 +291,51 @@ ctest --preset windows-msvc-ninja-debug --show-only=json-v1
|
||||
ctest --preset windows-msvc-ninja-debug --output-on-failure
|
||||
```
|
||||
|
||||
Focused CTest commands are written explicitly in each `stepN.md`.
|
||||
Step 11 focused commands additionally include:
|
||||
|
||||
```powershell
|
||||
ctest --preset windows-msvc-ninja-debug -R "^(NonlinearConvergence|NewtonIterationLog)\." --output-on-failure
|
||||
ctest --preset windows-msvc-ninja-debug -R "^(NonlinearStaticProcedure|NonlinearHdf5ResultsWriter)\." --output-on-failure
|
||||
ctest --preset windows-msvc-ninja-debug -R "^NonlinearStaticReference\." --output-on-failure
|
||||
ctest --preset windows-msvc-ninja-debug -R "^(NonlinearStaticReference|ReferenceTolerance|Mitc4Reference)\." --output-on-failure
|
||||
```
|
||||
|
||||
Harness Python validation is not in scope unless a Step changes Harness Python behavior, hook behavior, or agent configuration.
|
||||
|
||||
## Risks And Downstream Handoff
|
||||
|
||||
- Main implementation risk: current `LinearStaticAnalysis` owns parse/map and HDF5 write internally. Step 10 must refactor through prepared analysis flow so log close precedes HDF5 finalization for both linear and nonlinear runs.
|
||||
- Main numerical risk: nonlinear MITC4 tangent and finite rotation derivatives must pass internal derivative/objectivity tests before reference comparison can be meaningful.
|
||||
- Main backend risk: nonlinear tangent can be nonsymmetric. Preserve SPD `MklPardisoSolver` unchanged and add separate `TangentSolver`.
|
||||
- Handoff to Implementation Agent through Coordinator: execute Steps 0..12 in order, one current Step at a time, with RED observed failure evidence before GREEN implementation, then focused/full CTest. Final reference gate is Step 11; evidence-document closure is Step 12.
|
||||
- Current numerical risk: nonzero prescribed motion exposes the existing raw-residual/initial-arm
|
||||
shortcut. The minimal fix must preserve same-state, stable-order and mask-before-spatial-conversion
|
||||
semantics; passing zero-prescribed shellNL cases alone is insufficient evidence.
|
||||
- Current reference risk: fine/coarse U and internal balance/free-residual are blocking, but local RF/RM
|
||||
may still show large review-only errors. Do not convert those findings into omitted rows, relaxed
|
||||
tolerance or a blocking gate.
|
||||
- Current worktree risk: Step 11 contains partial selector/comparator/CMake edits. Preserve and continue
|
||||
those files; do not delete, reset, replay selector RED or replace the comparator design wholesale.
|
||||
- Handoff to Implementation Agent through Coordinator: after a separate explicit Harness request,
|
||||
resume only Executor-selected Step 11. Preserve existing `NSNR-PROC-019`, `NSNR-HDF5-014` and
|
||||
`NSNR-REF-020..023`; first re-observe the current-case old-gate RED, then add `NSNR-REF-024..025`
|
||||
before changing the comparator-only shared force/moment gate to `1e-8`. Verify preserved
|
||||
selector/log tests, then run focused/full preset validation.
|
||||
Step 12 remains actual-evidence closure.
|
||||
|
||||
## Harness Step Draft
|
||||
|
||||
| Step | name | one-module scope | prerequisites | stop condition |
|
||||
| ---: | --- | --- | --- | --- |
|
||||
| 11 | `equilibrium-projection-and-reference-gate` | Nonlinear accepted equilibrium projection, exact HDF5 location and test-private reference gate | Steps 0–10 completed; approved upstream hashes; partial Step 11 work preserved; VsDevCmd/preset dependency environment | Stop on unexpected RED, public API/schema/tolerance/reference change, reference mutation, or any focused/full failure. |
|
||||
| 12 | `execution-closure-and-evidence-docs` | Fresh evidence reports plus directly superseded PRD/ARCH/ADR statements | Step 11 completed with actual command/reference evidence | Stop if Step 11 is incomplete, evidence is stale/untraceable, a code/test/CMake change is needed, or any final command fails. |
|
||||
|
||||
Both Step files contain exact commands, file ownership, RED/GREEN/VERIFY order and prohibitions.
|
||||
Materialization does not select or execute either Step.
|
||||
|
||||
## Open Issues
|
||||
|
||||
None.
|
||||
None blocking planning. Revised upstream contracts and exact required artifacts are complete; actual
|
||||
RED/GREEN/build/reference outcomes remain Step 11/12 evidence and are not pre-claimed.
|
||||
|
||||
## Plan Approval Boundary
|
||||
|
||||
The user-approved plan and pending phase files do not authorize Harness execution. `scripts/execute.py nonlinear-static-newton-raphson` requires a separate explicit user request.
|
||||
The Coordinator-audited REAPPROVAL-012 revision authorizes this planning/phase materialization and
|
||||
blocked-to-pending recovery. It does not itself execute Harness; Executor invocation remains under
|
||||
the Coordinator's separately audited execution authority.
|
||||
|
||||
@@ -4,20 +4,22 @@
|
||||
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- source_requirement: `docs/nonlinear-static-newton-raphson/requirements.md`
|
||||
- source_requirement_sha256: `910E351F3F90FFA42F07D15206B55E62C05EAE821E250424430148337506EBF2`
|
||||
- source_requirement_sha256: `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`
|
||||
- source_research: `docs/nonlinear-static-newton-raphson/research.md`
|
||||
- source_research_sha256: `C920A6B02381230D1DB419D73FE767D611B36720D27D6410507BA88C3CA28EEE`
|
||||
- source_research_sha256: `4F63D23E03D1A68E5F8563B678FDD6F761F9558165778EF0433133EFAD303570`
|
||||
- source_formulation: `docs/nonlinear-static-newton-raphson/formulation.md`
|
||||
- source_formulation_sha256: `DFA629888041D5762FD0DF4271353464A692B325DC0C821A8D8689688C1EAFD0`
|
||||
- source_formulation_sha256: `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9`
|
||||
- source_numerical_review: `docs/nonlinear-static-newton-raphson/numerical-review.md`
|
||||
- source_numerical_review_sha256: `9517E11804C45A6F3822D18821D52EA493AE20353C8FFAD61E960F4315977D01`
|
||||
- source_numerical_review_sha256: `C00994EF4BB23A237547459E157EE5BDA96B28CAF08F712CD31A8E0ABBF62D2C`
|
||||
- source_reference_model: `docs/nonlinear-static-newton-raphson/reference-model.md`
|
||||
- source_reference_model_sha256: `52D10B1D0C0500B295C5E48BCB3618B309D9696371B8070D4E3DCEE8D3D74CD3`
|
||||
- source_reference_model_sha256: `B2E6845AB59A32F78261B7A47506C27F7BF4B61401B34BC5DE3DAD4F03D6ADDA`
|
||||
- decision_source: `USER-DECISION-004 option 1`
|
||||
- balance_gate_decision: user-approved factor-one global force/moment normalized gate `<=1e-8`
|
||||
- repository_policy: `AGENTS.md`, `docs/SOLVER_AGENT_DESIGN.md`, `docs/PRD.md`,
|
||||
`docs/ARCHITECTURE.md`, `docs/ADR.md`, `docs/TOLERANCE.md`
|
||||
- status: `ready-for-coordinator-review`
|
||||
- owner_agent: `io-definition-agent`
|
||||
- date: `2026-08-23`
|
||||
- date: `2026-08-28`
|
||||
- authoritative_output: input sibling `<stem>_results.h5`
|
||||
- diagnostic_log: input sibling `<stem>_log.txt`
|
||||
- hdf5_schema_version: `1`
|
||||
@@ -386,15 +388,15 @@ failure도 entered iteration이 없으면 iteration record가 없는 log file만
|
||||
| 7 | `failing_stage` | `none` for completed gate records, otherwise failing stage enum |
|
||||
| 8 | `residual_force_channel` | literal `residual_force` or `not-evaluated(reason)` |
|
||||
| 9 | `residual_force_numerator_norm` | `||r_f^u||_inf` or `not-evaluated(reason)` |
|
||||
| 10 | `residual_force_denominator_scale` | `max(||f_int,f^u||_inf,||f_ext,f^u||_inf)` or `not-evaluated(reason)` |
|
||||
| 11 | `residual_force_branch` | `relative`, `zero-scale`, or `not-evaluated(reason)` |
|
||||
| 10 | `residual_force_denominator_scale` | matching `||f_ext,f^u||_inf`가 exact zero이면 exact `0`; nonzero이면 `max(||f_int,f^u||_inf,||f_ext,f^u||_inf)`; 또는 `not-evaluated(reason)` |
|
||||
| 11 | `residual_force_branch` | matching external scale이 nonzero이면 `relative`, exact zero이면 `zero-scale`, 또는 `not-evaluated(reason)` |
|
||||
| 12 | `residual_force_threshold` | `1e-2` for `relative`, `1e-3` for `zero-scale`, or `not-evaluated(reason)` |
|
||||
| 13 | `residual_force_threshold_unit` | `1`, `force`, or `not-evaluated(reason)` |
|
||||
| 14 | `residual_force_pass` | `0`, `1`, or `not-evaluated(reason)` |
|
||||
| 15 | `residual_moment_channel` | literal `residual_moment` or `not-evaluated(reason)` |
|
||||
| 16 | `residual_moment_numerator_norm` | `||r_f^phi||_inf` or `not-evaluated(reason)` |
|
||||
| 17 | `residual_moment_denominator_scale` | `max(||f_int,f^phi||_inf,||f_ext,f^phi||_inf)` or `not-evaluated(reason)` |
|
||||
| 18 | `residual_moment_branch` | `relative`, `zero-scale`, or `not-evaluated(reason)` |
|
||||
| 17 | `residual_moment_denominator_scale` | matching `||f_ext,f^phi||_inf`가 exact zero이면 exact `0`; nonzero이면 `max(||f_int,f^phi||_inf,||f_ext,f^phi||_inf)`; 또는 `not-evaluated(reason)` |
|
||||
| 18 | `residual_moment_branch` | matching external scale이 nonzero이면 `relative`, exact zero이면 `zero-scale`, 또는 `not-evaluated(reason)` |
|
||||
| 19 | `residual_moment_threshold` | `1e-2` for `relative`, `1e-3` for `zero-scale`, or `not-evaluated(reason)` |
|
||||
| 20 | `residual_moment_threshold_unit` | `1`, `force*length`, or `not-evaluated(reason)` |
|
||||
| 21 | `residual_moment_pass` | `0`, `1`, or `not-evaluated(reason)` |
|
||||
@@ -417,13 +419,29 @@ failure도 entered iteration이 없으면 iteration record가 없는 log file만
|
||||
| 38 | `outcome` | `accepted`, `continue`, `nonconverged`, or `failed` |
|
||||
| 39 | `diagnostic_code` | `none` or approved diagnostic code |
|
||||
|
||||
Completed gate record는 `failing_stage=none`이고 네 channel의 identity, numerator/norm,
|
||||
denominator/scale, branch, typed threshold, pass를 모두 finite 또는 enum value로 노출한다.
|
||||
Denominator가 exact zero이면 branch는 `zero-scale`이고 typed threshold는 residual force
|
||||
`1e-3 force`, residual moment `1e-3 force*length`, correction translation `1e-3 length`,
|
||||
correction rotation `1e-3 dimensionless`다. Denominator가 nonzero이면 branch는 `relative`이고
|
||||
threshold는 dimensionless `1e-2`다. Empty free channel은 numerator와 denominator가 exact zero인
|
||||
`zero-scale` branch로 평가한다.
|
||||
`nsnr-log-v1`의 39개 field label, order와 TAB-separated `label=value` serialization은
|
||||
변경하지 않는다. Completed gate record는 `failing_stage=none`이고 네 channel의 identity,
|
||||
numerator/norm, denominator/scale, branch, typed threshold, pass를 모두 finite 또는 enum
|
||||
value로 노출한다.
|
||||
|
||||
Residual channel은 required residual/internal/external vector와 그 infinity norm을 모두 finite로
|
||||
확인한 뒤 matching external scale `S_ext^u=||f_ext,f^u||_inf` 또는
|
||||
`S_ext^phi=||f_ext,f^phi||_inf` 자체로 branch를 선택한다. Matching external scale이 exact
|
||||
zero이면 `residual_*_denominator_scale=0`, `residual_*_branch=zero-scale`로 직렬화하고 numerator에
|
||||
typed absolute `1e-3 force` 또는 `1e-3 force*length`를 inclusive `<=`로 직접 적용한다.
|
||||
이 exact `0`은 matching external selector를 직렬화하며 divisor 또는 internal-inclusive max가
|
||||
아니다. Selector predicate는 `S_ext==0`이고 tolerance band, zero clamp, `max(1,...)`를 쓰지 않는다.
|
||||
Internal scale 또는 residual numerator가 nonzero여도 이 branch를 `relative`로 바꾸지 않는다.
|
||||
Matching external scale이 nonzero이면 `residual_*_denominator_scale`은 retained
|
||||
`max(||f_int,f||_inf,||f_ext,f||_inf)`이고 `residual_*_branch=relative`이며, numerator/denominator
|
||||
ratio에 dimensionless `1e-2`를 inclusive `<=`로 적용한다. 이 branch에 typed absolute gate를
|
||||
OR로 추가하지 않는다.
|
||||
|
||||
Correction channel은 기존 계약 그대로 current-trial incremental-solution denominator가 exact
|
||||
zero이면 `zero-scale`과 typed `1e-3 length` 또는 `1e-3 dimensionless`를, nonzero이면
|
||||
`relative`와 dimensionless `1e-2`를 사용한다. Empty free channel은 exact-zero numerator/scale의
|
||||
typed `zero-scale` branch로 평가한다. 네 channel의 pass는 `combined_pass`에서 logical AND로만
|
||||
결합한다.
|
||||
|
||||
Early failure record는 entered iteration 하나에 대응한다. 이미 계산된 earlier fields는 실제
|
||||
finite value를 기록하고, 실패 stage 뒤의 모든 later field는 `not-evaluated(reason)`을 기록한다.
|
||||
@@ -523,19 +541,43 @@ row는 정확히 하나다. Factor zero는 이 dataset에 row를 갖지 않고 `
|
||||
| generalized internal force | `/steps/Step-1/frames/<frame>/nodal/generalized_internal_force` | `[node_count,6]` float64 | node row; `[FI1,FI2,FI3,MI_PHI1,MI_PHI2,MI_PHI3]` | `[force x3,force*length x3]`; work-conjugate to `[u,phi]`; nodal |
|
||||
| generalized external force | `/steps/Step-1/frames/<frame>/nodal/generalized_external_force` | `[node_count,6]` float64 | node row; `[FE1,FE2,FE3,ME_PHI1,ME_PHI2,ME_PHI3]` | `[force x3,force*length x3]`; work-conjugate to `[u,phi]`; approved physical moment projection 후 fixed-global dead loads; nodal |
|
||||
| generalized residual | `/steps/Step-1/frames/<frame>/nodal/generalized_residual` | `[node_count,6]` float64 | node row; `[RU1,RU2,RU3,RPHI1,RPHI2,RPHI3]` | `[force x3,force*length x3]`; nonlinear solution coordinate의 full assembled `f_int-f_ext`; nodal |
|
||||
| reaction / physical residual projection | `/steps/Step-1/frames/<frame>/nodal/reaction` | `[node_count,6]` float64 | node row; `[RF1,RF2,RF3,RM1,RM2,RM3]` | `[force x3,force*length x3]`; global; constrained entry는 physical reaction, free entry는 same-state equilibrium evidence; rotational columns는 `J_l(phi)^(-T)` spatial moment conversion |
|
||||
| reaction / spatial full-residual projection | `/steps/Step-1/frames/<frame>/nodal/reaction` | `[node_count,6]` float64 | node row; `[RF1,RF2,RF3,RM1,RM2,RM3]` | `[force x3,force*length x3]`; global; translation은 full generalized residual과 같고 rotation은 `J_l(phi)^(-T)` spatial moment conversion. Constrained reaction은 mask를 generalized residual에 먼저 적용한 뒤 변환하며 accepted free residual의 authority는 이 dataset이 아니라 `nodal/generalized_residual`이다. |
|
||||
| shell local frame | `/steps/Step-1/frames/<frame>/element/shell/local_frame` | `[element_count,4,3,3]` float64 | element row, midsurface location row `GP1..GP4`, axis row `[E1,E2,E3]`, global component column `[X,Y,Z]` | dimensionless; physical recovery용 fixed-initial shell local frame; rotating Abaqus output frame이 아님 |
|
||||
| generalized strain | `/steps/Step-1/frames/<frame>/element/shell/generalized_strain` | `[element_count,4,8]` float64 | element row, `GP1..GP4`; `[E11,E22,G12,K11,K22,K12,G13,G23]` | `[1,1,1,1/length,1/length,1/length,1,1]`; fixed-reference shell local; midsurface |
|
||||
| section resultant | `/steps/Step-1/frames/<frame>/element/shell/section_resultant` | `[element_count,4,8]` float64 | element row, `GP1..GP4`; `[N11,N22,N12,M11,M22,M12,Q13,Q23]` | `[force/length x3,force x3,force/length x2]`; fixed-reference shell local; midsurface |
|
||||
| in-plane stress | `/steps/Step-1/frames/<frame>/element/shell/stress` | `[element_count,4,3,3]` float64 | element row, `GP1..GP4`, section position `[BOTTOM,MIDDLE,TOP]`, component `[S11,S22,S12]` | `force/length^2`; fixed-reference shell local; direct bottom/middle/top evaluation |
|
||||
| physical strain energy | `/steps/Step-1/frames/<frame>/global/energy` | `[1]` float64 | `[PHYSICAL_STRAIN_ENERGY]` | `force*length`; deterministic element reduction; numerical drilling stabilization 제외 |
|
||||
| global equilibrium | `/steps/Step-1/frames/<frame>/global/equilibrium` | `[6]` float64 | `[FORCE_1,FORCE_2,FORCE_3,MOMENT_1,MOMENT_2,MOMENT_3]` | `[force x3,force*length x3]`; global Cartesian; moment about global origin `[0,0,0]`, current force arms와 spatial physical nodal moments 사용 |
|
||||
| global applied-plus-reaction balance error | `/steps/Step-1/frames/<frame>/global/equilibrium` | `[6]` float64 | `[FORCE_1,FORCE_2,FORCE_3,MOMENT_1,MOMENT_2,MOMENT_3]` | `[force x3,force*length x3]`; global Cartesian; formulation §13.4의 applied-plus-constrained-reaction balance error; moment about global origin `[0,0,0]`, current force arms와 spatial physical nodal moments 사용; `location=global-balance-error` |
|
||||
|
||||
Trial Newton state, iteration history, line search, cutback attempt, damping, automatic
|
||||
stabilization, numerical drilling stress, drilling energy ratio, `S33`, `S13`, `S23`,
|
||||
nodal stress extrapolation, element-corner stress, averaged stress, Abaqus integration-point
|
||||
number에 대한 HDF5 dataset은 만들지 않는다.
|
||||
|
||||
#### 7.5.1 Equilibrium Projection and Schema Compatibility
|
||||
|
||||
Schema version `1`과 기존 `/global/equilibrium` path/shape는 유지한다. 기존 계약이 이미
|
||||
global origin `[0,0,0]`, current force arm과 spatial physical nodal moment를 지정했으므로 이
|
||||
dataset의 authoritative meaning은 처음부터 formulation §13.4의 **global
|
||||
applied-plus-reaction balance error**다. Raw full-residual sum, initial-coordinate arm 또는 raw
|
||||
rotation-coordinate covector를 이 path에 쓰는 것은 schema-compatible implementation이 아니다.
|
||||
이 의미 명확화는 path, shape 또는 component를 바꾸지 않으므로 schema version을 올리지 않는다.
|
||||
|
||||
같은 accepted frame의 세 equilibrium quantity는 다음처럼 서로 다른 HDF5 projection으로
|
||||
재구성된다. 별도 중복 summary dataset은 만들지 않는다.
|
||||
|
||||
| logical quantity | authoritative HDF5 projection | coordinates / units | disposition |
|
||||
| --- | --- | --- | --- |
|
||||
| accepted free residual | `/model/nodal_constraint_mask==0`인 component를 `/nodal/generalized_residual`에서 선택한다. NSNR-069 scale은 같은 free component의 `/nodal/generalized_internal_force`와 `/nodal/generalized_external_force`에서 계산한다. | translation channel은 global force, rotation-coordinate channel은 generalized force-length | `blocking-internal` |
|
||||
| constrained reaction resultant | `/model/nodal_constraint_mask`를 `/nodal/generalized_residual`에 먼저 적용해 constrained generalized reaction을 만들고, rotation block만 accepted `phi`의 `J_l(phi)^(-T)`로 spatial moment로 변환한다. Current position은 `/model/nodes.coordinates + /nodal/displacement[UX,UY,UZ]`다. Stable node order로 `sum(F_react)`와 `sum(x cross F_react + M_react)`를 계산한다. | global force `[3]`, global spatial force-length moment `[3]` about `[0,0,0]` | `review-only-summary` |
|
||||
| applied-plus-reaction balance error | required dataset `/global/equilibrium`; applied contribution은 accepted `/nodal/generalized_external_force`의 translation block과 `J_l(phi)^(-T)`로 변환한 rotational block, reaction contribution은 바로 위 constrained projection을 사용한다. Stable node order로 formulation §13.4의 합을 계산한다. | global force `[3]`, global spatial force-length moment `[3]` about `[0,0,0]` | `blocking-internal` |
|
||||
|
||||
Componentwise constraint selection은 spatial moment 변환보다 먼저 수행한다. 따라서 partial
|
||||
rotational constraint나 nonzero prescribed rotation에서도 constrained reaction resultant에 free
|
||||
generalized residual이 섞이지 않는다. Local `/nodal/reaction` display나 full residual sum을 위 세
|
||||
quantity 중 다른 하나의 substitute로 사용하지 않는다. Nonzero prescribed translation에서는
|
||||
initial position이 아니라 accepted current position을 force arm으로 사용한다.
|
||||
|
||||
### 7.6 Diagnostics Dataset
|
||||
|
||||
`/diagnostics`는 mandatory이며 row가 0개일 수 있다.
|
||||
@@ -568,9 +610,13 @@ CSV는 FESA output이 아니다. HDF5에서 추출한 deterministic CSV view는
|
||||
|
||||
| case id | role | exact path | comparison disposition |
|
||||
| --- | --- | --- | --- |
|
||||
| `shellnl-s4-final` | nonlinear input | `reference/shellNL/shellNL.inp` | required source input |
|
||||
| `shellnl-s4-final` | displacement CSV | `reference/shellNL/shellNL displacements.csv` | required comparison |
|
||||
| `shellnl-s4-final` | reaction CSV | `reference/shellNL/shellNL reactions.csv` | constrained nodes/components only required comparison |
|
||||
| `shellnl-meshfine-s4-final` | primary nonlinear input | `reference/shellNL-meshfine/shellNL-meshfine.inp` | required source input |
|
||||
| `shellnl-meshfine-s4-final` | displacement CSV | `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | required blocking/warning comparison |
|
||||
| `shellnl-meshfine-s4-final` | reaction CSV | `reference/shellNL-meshfine/shellNL-meshfine reactions.csv` | constrained nodes/components only required review |
|
||||
| `shellnl-meshfine-s4-final` | stress CSV | `reference/shellNL-meshfine/shellNL-meshfine stresses.csv` | optional read-only inspection/order evidence only |
|
||||
| `shellnl-s4-final` | companion nonlinear input | `reference/shellNL/shellNL.inp` | required source input |
|
||||
| `shellnl-s4-final` | displacement CSV | `reference/shellNL/shellNL displacements.csv` | required blocking/warning comparison |
|
||||
| `shellnl-s4-final` | reaction CSV | `reference/shellNL/shellNL reactions.csv` | constrained nodes/components only required review |
|
||||
| `shellnl-s4-final` | stress CSV | `reference/shellNL/shellNL stresses.csv` | optional read-only inspection/order evidence only |
|
||||
| `shell-s4-linear-limit` | linear control input | `reference/shell/shell.inp` | existing linear MITC4 contract의 required regression input |
|
||||
| `shell-s4-linear-limit` | displacement CSV | `reference/shell/shell displacements.csv` | required regression comparison |
|
||||
@@ -578,21 +624,22 @@ CSV는 FESA output이 아니다. HDF5에서 추출한 deterministic CSV view는
|
||||
| `shell-s4-linear-limit` | stress CSV | `reference/shell/shell stresses.csv` | optional read-only inspection/order evidence only |
|
||||
|
||||
Reference artifact file은 workflow에서 rename, rewrite, normalize, zero-clamp, repair,
|
||||
regenerate하지 않는다.
|
||||
regenerate하지 않는다. Fine과 coarse nonlinear case는 각각 자기 input/CSV에 독립적으로
|
||||
비교하며 cross-mesh row mapping이나 interpolation을 만들지 않는다.
|
||||
|
||||
### 8.2 Accepted-State and Frame Mapping
|
||||
|
||||
- `shellnl-s4-final`은 accepted factor-one HDF5 frame만 비교한다. 해당 frame은
|
||||
`/steps/Step-1/accepted_frames`에서 `is_factor_one=1`이고 `load_factor=1.0`인 unique row다.
|
||||
그 `frame_index`가 `/steps/Step-1/frames/<frame>`를 선택한다.
|
||||
- Required `shellNL` CSV row는 exact `Frame` value
|
||||
`Increment 10: Step Time = 1.000`만 가져야 하며, 이는 accepted factor-one state로
|
||||
논리 매핑한다. Required row에 다른 `Frame` 값이 있으면 schema mismatch다.
|
||||
- `shellnl-meshfine-s4-final`과 `shellnl-s4-final`은 각각 accepted factor-one HDF5 frame만
|
||||
비교한다. 해당 frame은 `/steps/Step-1/accepted_frames`에서 `is_factor_one=1`이고
|
||||
`load_factor=1.0`인 unique row다. 그 `frame_index`가
|
||||
`/steps/Step-1/frames/<frame>`를 선택한다.
|
||||
- 두 nonlinear case의 required CSV row는 exact `Frame` value
|
||||
`Increment 10: Step Time = 1.000`만 가져야 하며, 이는 각 case의 accepted
|
||||
factor-one state로 논리 매핑한다. Required row에 다른 `Frame` 값이 있으면 schema mismatch다.
|
||||
- `shell-s4-linear-limit` CSV에는 `Frame` column이 없으며
|
||||
`docs/linear-static-mitc4-shell/io.md`의 existing linear MITC4 final frame
|
||||
`/steps/Step-1/frames/0`에 매핑한다.
|
||||
- Trial Newton state, iteration log line, optional stress inventory row는 reference row가
|
||||
아니다.
|
||||
- Trial Newton state, iteration log line, optional stress inventory row는 reference row가 아니다.
|
||||
|
||||
### 8.3 Nodal Displacement Projection
|
||||
|
||||
@@ -602,93 +649,141 @@ Required logical key는 다음과 같다.
|
||||
(case_id, accepted_state, canonical_instance_name, source_node_label, component)
|
||||
```
|
||||
|
||||
두 case 모두 instance `PART-1-1`에서 node label `1..49`가 정확히 한 번씩 필요하다.
|
||||
Instance matching은 case-insensitive로 수행하되 report에는 raw spelling을 보존한다.
|
||||
Instance `PART-1-1`에서 linear/coarse case는 node label `1..49`, fine case는 `1..729`를
|
||||
각각 정확히 한 번 요구한다. Instance matching은 case-insensitive로 수행하되 report에는 raw
|
||||
spelling을 보존한다. Row order는 identity가 아니다.
|
||||
|
||||
| CSV column | comparison component | nonlinear HDF5 source | linear regression HDF5 source |
|
||||
| --- | --- | --- | --- |
|
||||
| `U-U1` | `U1` | `nodal/displacement` column `UX` | `nodal/displacement` column `UX` |
|
||||
| `U-U2` | `U2` | `nodal/displacement` column `UY` | `nodal/displacement` column `UY` |
|
||||
| `U-U3` | `U3` | `nodal/displacement` column `UZ` | `nodal/displacement` column `UZ` |
|
||||
| `UR-UR1` | `UR1` | `nodal/displacement` column `URX` | `nodal/displacement` column `URX` |
|
||||
| `UR-UR2` | `UR2` | `nodal/displacement` column `URY` | `nodal/displacement` column `URY` |
|
||||
| `UR-UR3` | `UR3` | `nodal/displacement` column `URZ` | `nodal/displacement` column `URZ` |
|
||||
| `U-U1` | `U1` | factor-one `nodal/displacement` column `UX` | final `nodal/displacement` column `UX` |
|
||||
| `U-U2` | `U2` | factor-one `nodal/displacement` column `UY` | final `nodal/displacement` column `UY` |
|
||||
| `U-U3` | `U3` | factor-one `nodal/displacement` column `UZ` | final `nodal/displacement` column `UZ` |
|
||||
| `UR-UR1` | `UR1` | factor-one `nodal/displacement` column `URX` | final `nodal/displacement` column `URX` |
|
||||
| `UR-UR2` | `UR2` | factor-one `nodal/displacement` column `URY` | final `nodal/displacement` column `URY` |
|
||||
| `UR-UR3` | `UR3` | factor-one `nodal/displacement` column `URZ` | final `nodal/displacement` column `URZ` |
|
||||
|
||||
`U1/U2/U3`는 blocking이다. `UR1/UR2/UR3`는 두 case 모두 warning-only다. UR warning
|
||||
`U1/U2/U3`는 blocking이다. `UR1/UR2/UR3`는 모든 case에서 warning-only다. UR warning
|
||||
exceedance는 blocking verdict를 바꾸지 않는다.
|
||||
|
||||
### 8.4 Nonlinear Constrained Reaction Projection
|
||||
### 8.4 Nonlinear Local Reaction Review Projection
|
||||
|
||||
Reaction comparison은 `shellnl-s4-final`에만 적용하며 input boundary mask의 constrained node
|
||||
중 아래 24개 node에만 적용한다.
|
||||
Reaction review row는 input boundary 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 `shellnl-s4-final`: `1,3..9,14..17,22..33` — 24 nodes;
|
||||
- fine `shellnl-meshfine-s4-final`: `1,3..9,34..57,82..153` — 104 nodes.
|
||||
|
||||
승인 input에서 이 24개 node는 여섯 global DOF가 모두 constrained다. Comparator는 required
|
||||
HDF5 reaction row eligibility를 CSV zero value가 아니라 `/model/nodal_constraint_mask`와
|
||||
source node identity에서 도출한다.
|
||||
승인 input에서 위 node들은 여섯 global DOF가 모두 constrained다. Comparator는 row
|
||||
eligibility를 CSV zero value나 row position이 아니라 `/model/nodal_constraint_mask`와 source
|
||||
node identity에서 도출한다. Translation reaction은 factor-one
|
||||
`nodal/generalized_residual`의 constrained `RU1..RU3`이고, rotational reaction은 constrained
|
||||
`RPHI1..RPHI3`를 먼저 선택한 뒤 accepted `phi`의 `J_l(phi)^(-T)`로 변환한 spatial physical
|
||||
moment다. Stored all-six-constrained rows에서는 factor-one `/nodal/reaction`의 대응 column과
|
||||
동일해야 한다.
|
||||
|
||||
| CSV columns | logical family | HDF5 source | disposition |
|
||||
| CSV columns | coarse family | fine family | disposition |
|
||||
| --- | --- | --- | --- |
|
||||
| `RF-RF1`, `RF-RF2` | `nonlinear.reaction_inplane_force` | factor-one `/nodal/reaction` columns `RF1,RF2` | blocking |
|
||||
| `RF-RF3` | `nonlinear.reaction_transverse_force` | factor-one `/nodal/reaction` column `RF3` | blocking |
|
||||
| `RM-RM1`, `RM-RM2` | `nonlinear.reaction_physical_moment` | factor-one `/nodal/reaction` columns `RM1,RM2`; `J_l(phi)^(-T)` 변환 뒤 spatial physical moment | blocking |
|
||||
| `RM-RM3` | excluded | comparison projection 없음 | blocking 및 warning-only family에서 제외 |
|
||||
| `RF-RF1`, `RF-RF2` | `coarse.local_reaction_inplane_force` | `fine.local_reaction_inplane_force` | `review-only` |
|
||||
| `RF-RF3` | `coarse.local_reaction_transverse_force` | `fine.local_reaction_transverse_force` | `review-only` |
|
||||
| `RM-RM1`, `RM-RM2` | `coarse.local_reaction_physical_moment` | `fine.local_reaction_physical_moment` | `review-only` |
|
||||
| `RM-RM3` | comparison projection 없음 | comparison projection 없음 | `excluded` |
|
||||
|
||||
Raw generalized rotation-coordinate residual column은 Abaqus `RM` CSV column과 직접 비교하지
|
||||
않는다.
|
||||
Raw generalized rotation-coordinate residual은 Abaqus `RM` CSV column과 직접 비교하지 않는다.
|
||||
Review-only family도 source key, schema, inventory, finite value와 모든 row/common-policy error를
|
||||
보고한다. 그 precheck 또는 numerical finding은 blocking verdict를 바꾸지 않는다.
|
||||
|
||||
### 8.5 Comparison Families
|
||||
### 8.5 Internal Factor-One Equilibrium Projection
|
||||
|
||||
Internal equilibrium은 Abaqus CSV comparison이 아니다. Fine primary와 coarse companion의
|
||||
각 accepted factor-one HDF5 frame에서 Section 7.5.1의 projection을 사용한다.
|
||||
|
||||
| family id | exact HDF5 rows/components | gate |
|
||||
| --- | --- | --- |
|
||||
| `coarse.accepted_free_force_residual` | 75 free `RU1/RU2/RU3` rows와 같은 rows의 internal/external force | NSNR-069 force channel |
|
||||
| `coarse.accepted_free_moment_residual` | 75 free `RPHI1/RPHI2/RPHI3` rows와 같은 rows의 internal/external generalized moment | NSNR-069 moment channel |
|
||||
| `coarse.global_force_balance` | factor-one `/global/equilibrium` `FORCE_1..3` | normalized `<=1e-8` |
|
||||
| `coarse.global_moment_balance` | factor-one `/global/equilibrium` `MOMENT_1..3` | normalized `<=1e-8` |
|
||||
| `fine.accepted_free_force_residual` | 1,875 free `RU1/RU2/RU3` rows와 같은 rows의 internal/external force | NSNR-069 force channel |
|
||||
| `fine.accepted_free_moment_residual` | 1,875 free `RPHI1/RPHI2/RPHI3` rows와 같은 rows의 internal/external generalized moment | NSNR-069 moment channel |
|
||||
| `fine.global_force_balance` | factor-one `/global/equilibrium` `FORCE_1..3` | normalized `<=1e-8` |
|
||||
| `fine.global_moment_balance` | factor-one `/global/equilibrium` `MOMENT_1..3` | normalized `<=1e-8` |
|
||||
|
||||
Global balance의 force scale은 applied/reaction nodal force contribution의 2-norm 합 중 큰
|
||||
값, moment scale은 current-arm force moment와 spatial physical nodal moment contribution의
|
||||
2-norm 합 중 큰 값이다. Force와 moment를 분리해 `norm(balance_error)/scale<=1e-8`을
|
||||
적용한다. Scale이 exact zero이면 balance error도 exact zero일 때만 pass한다. Absolute floor,
|
||||
`max(1,S)` 또는 zero clamp는 없다. Accepted free residual은 NSNR-069의 external-channel exact-zero/
|
||||
nonzero branch를 그대로 재현한다. 이 internal gate에는 `docs/TOLERANCE.md`, Abaqus value 또는
|
||||
local reaction error를 적용하지 않는다.
|
||||
|
||||
Constrained reaction resultant force `[3]`와 moment `[3]`는 Section 7.5.1의 distinct
|
||||
`review-only-summary`로 함께 계산·보고한다. `/global/equilibrium`, constrained reaction
|
||||
resultant와 accepted free residual 중 어느 하나를 다른 quantity의 대체 dataset으로 쓰지 않는다.
|
||||
|
||||
### 8.6 External Comparison Families
|
||||
|
||||
External tolerance source는 정확히 `docs/TOLERANCE.md`다. 별도 absolute floor, `max(1,S)`
|
||||
clamp, row averaging, source-order matching, component calibration, zero clamp는 허용하지
|
||||
clamp, row averaging, source-order matching, component calibration 또는 zero clamp는 허용하지
|
||||
않는다.
|
||||
|
||||
| family id | case | components | required row count | units / coordinates | disposition |
|
||||
| --- | --- | --- | ---: | --- | --- |
|
||||
| `linear.translation` | `shell-s4-linear-limit` | `U1,U2,U3` on nodes `1..49` | 147 | length / global | blocking regression |
|
||||
| `linear.rotation` | `shell-s4-linear-limit` | `UR1,UR2,UR3` on nodes `1..49` | 147 | dimensionless / fixed-initial global | warning-only |
|
||||
| `nonlinear.translation` | `shellnl-s4-final` | `U1,U2,U3` on nodes `1..49` | 147 | length / global | blocking |
|
||||
| `nonlinear.rotation` | `shellnl-s4-final` | `UR1,UR2,UR3` on nodes `1..49` | 147 | dimensionless / fixed-initial global | warning-only |
|
||||
| `nonlinear.reaction_inplane_force` | `shellnl-s4-final` | `RF1,RF2` on constrained nodes | 48 | force / fixed-initial global plane | blocking |
|
||||
| `nonlinear.reaction_transverse_force` | `shellnl-s4-final` | `RF3` on constrained nodes | 24 | force / fixed-initial global transverse | blocking |
|
||||
| `nonlinear.reaction_physical_moment` | `shellnl-s4-final` | `RM1,RM2` on constrained nodes | 48 | force*length / global spatial | blocking |
|
||||
| `coarse.translation` | `shellnl-s4-final` | `U1,U2,U3` on nodes `1..49` | 147 | length / global | blocking |
|
||||
| `coarse.rotation` | `shellnl-s4-final` | `UR1,UR2,UR3` on nodes `1..49` | 147 | dimensionless / fixed-initial global | warning-only |
|
||||
| `coarse.local_reaction_inplane_force` | `shellnl-s4-final` | `RF1,RF2` on constrained nodes | 48 | force / global shell plane | review-only |
|
||||
| `coarse.local_reaction_transverse_force` | `shellnl-s4-final` | `RF3` on constrained nodes | 24 | force / global transverse | review-only |
|
||||
| `coarse.local_reaction_physical_moment` | `shellnl-s4-final` | `RM1,RM2` on constrained nodes | 48 | force*length / global spatial | review-only |
|
||||
| `fine.translation` | `shellnl-meshfine-s4-final` | `U1,U2,U3` on nodes `1..729` | 2,187 | length / global | blocking |
|
||||
| `fine.rotation` | `shellnl-meshfine-s4-final` | `UR1,UR2,UR3` on nodes `1..729` | 2,187 | dimensionless / fixed-initial global | warning-only |
|
||||
| `fine.local_reaction_inplane_force` | `shellnl-meshfine-s4-final` | `RF1,RF2` on constrained nodes | 208 | force / global shell plane | review-only |
|
||||
| `fine.local_reaction_transverse_force` | `shellnl-meshfine-s4-final` | `RF3` on constrained nodes | 104 | force / global transverse | review-only |
|
||||
| `fine.local_reaction_physical_moment` | `shellnl-meshfine-s4-final` | `RM1,RM2` on constrained nodes | 208 | force*length / global spatial | review-only |
|
||||
|
||||
Reference-model read-only scale audit value는 다음과 같다.
|
||||
Reference-model read-only scale audit value는 다음과 같다. 이 값은 calibration 상수가 아니다.
|
||||
|
||||
| family id | `S=max(abs(reference))` | `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` |
|
||||
| `coarse.translation` | `2.37408203e-5` | `2.37408203e-7` |
|
||||
| `coarse.rotation` | `7.60725743e-6` | `7.60725743e-8` |
|
||||
| `coarse.local_reaction_inplane_force` | `1.91663182` | `1.91663182e-2` |
|
||||
| `coarse.local_reaction_transverse_force` | `1.17769805e4` | `1.17769805e2` |
|
||||
| `coarse.local_reaction_physical_moment` | `1.95418418e4` | `1.95418418e2` |
|
||||
| `fine.translation` | `2.57957054e-5` | `2.57957054e-7` |
|
||||
| `fine.rotation` | `6.58704994e-6` | `6.58704994e-8` |
|
||||
| `fine.local_reaction_inplane_force` | `5.38827419e-1` | `5.38827419e-3` |
|
||||
| `fine.local_reaction_transverse_force` | `2.78506128e3` | `2.78506128e1` |
|
||||
| `fine.local_reaction_physical_moment` | `4.71557520e3` | `4.71557520e1` |
|
||||
|
||||
### 8.6 Row Prechecks
|
||||
### 8.7 Row Prechecks
|
||||
|
||||
아래 조건 중 하나라도 거짓이면 comparator는 tolerance 계산 전에 실패한다.
|
||||
Tolerance 또는 internal metric 전에 다음을 검사한다.
|
||||
|
||||
1. Exact declared input path와 required CSV path가 존재하고 readable이다.
|
||||
1. 각 case의 exact declared input과 해당 disposition에 필요한 CSV가 존재하고 readable이다.
|
||||
2. Reference CSV header는 surrounding whitespace trim 뒤 필요한 column을 가진다.
|
||||
3. `shellnl-s4-final` required row는 exact approved `Frame` value만 포함한다.
|
||||
3. 두 nonlinear case required row는 exact approved `Frame` value만 포함한다.
|
||||
4. HDF5 metadata, model rows, accepted-frame table, factor-one frame, required result dataset이
|
||||
문서화된 shape, component name, finite value를 가진다.
|
||||
5. Wide CSV row는 이 문서의 component mapping으로 component row로 expand한다.
|
||||
6. Required source wide key와 expanded component key는 unique하다. Duplicate reference 또는
|
||||
HDF5 key는 실패다.
|
||||
7. 각 declared family에서 FESA와 reference projected key set은 정확히 같아야 한다. Missing row와
|
||||
extra row는 모두 실패다.
|
||||
8. 모든 required numeric value는 finite다. Nonfinite HDF5 또는 CSV value는 tolerance 전 실패다.
|
||||
9. `shellNL` reaction row는 constrained mask와 exact 24-node list에서 선택한다. Free-node CSV
|
||||
row는 inventory only이며 zero reaction target으로 해석하지 않는다.
|
||||
10. Required row를 omit, synthesize, average, substitute identity로 sort, normalize, zero-clamp,
|
||||
repair하지 않는다.
|
||||
문서화된 shape, component name, attributes와 finite value를 가진다.
|
||||
5. Wide CSV row는 이 문서의 component mapping으로 component row로 deterministically expand한다.
|
||||
6. Source wide key와 expanded component key는 unique하다. Duplicate reference 또는 HDF5 key는
|
||||
affected family를 tolerance 전에 fail한다.
|
||||
7. Input node inventory와 source constraint mask로 expected key set을 만든다. CSV zero value나 row
|
||||
position으로 reaction identity를 추론하지 않는다.
|
||||
8. 각 declared external family에서 FESA와 reference projected key set은 exact equal해야 한다.
|
||||
Missing row와 extra row를 모두 fail한다.
|
||||
9. Required HDF5/CSV value, derived scale, norm과 metric은 모두 finite여야 한다.
|
||||
10. Internal free residual은 exact free mask와 force/moment channel을 보존한다. Global balance는 모든
|
||||
applied source와 constrained reaction을 stable source order로 정확히 한 번 사용한다.
|
||||
11. Local review row를 global resultant로 collapse하거나 대체하지 않는다. Review-only precheck/error는
|
||||
deterministic review failure로 기록하지만 blocking verdict를 변경하지 않는다.
|
||||
12. Warning-only precheck/tolerance failure는 deterministic warning을 만들고 blocking verdict를
|
||||
변경하지 않는다. Blocking precheck failure만 전체 external comparison을 fail한다.
|
||||
13. Row omission/synthesis, averaging, source-order matching, clamp, normalization 또는 artifact repair를
|
||||
허용하지 않는다.
|
||||
|
||||
### 8.7 Stress CSV Disposition
|
||||
### 8.8 Stress CSV Disposition
|
||||
|
||||
Optional stress CSV identity는 다음과 같다.
|
||||
|
||||
@@ -697,13 +792,16 @@ Optional stress CSV identity는 다음과 같다.
|
||||
element_corner_node_label, section_surface, component)
|
||||
```
|
||||
|
||||
현재 stress CSV는 element-corner node row와 `SPOS/SNEG` section surface에서 `S-S11`,
|
||||
`S-S22`, `S-S33`, `S-S12`를 포함하며, 저장된 ascending element-label block `1..36` 순서를
|
||||
갖는다. FESA HDF5는 `GP1..GP4`와 `BOTTOM/MIDDLE/TOP`에서 direct `[S11,S22,S12]`만 emit한다.
|
||||
Stored stress CSV는 element-corner node row와 `SPOS/SNEG` section surface에서 `S-S11`,
|
||||
`S-S22`, `S-S33`, `S-S12`를 포함한다. `reference/shell/shell stresses.csv`는 사용자가
|
||||
변경한 ascending element-label block `1..36` 순서를 갖지만 row order는 identity가 아니다.
|
||||
Fine stress CSV의 element `1`, `SNEG`, `Node Label=ss` 한 행은 optional excluded artifact
|
||||
finding으로만 기록한다. Artifact를 수정하지 않는다.
|
||||
|
||||
따라서 두 case의 stress CSV는 optional read-only inspection 및 order evidence only다. HDF5
|
||||
comparison projection, `S33` synthesis, nodal extrapolation, corner averaging, Gauss-to-corner
|
||||
matching, element-label-order identity는 없다.
|
||||
FESA HDF5는 `GP1..GP4`와 `BOTTOM/MIDDLE/TOP`에서 direct `[S11,S22,S12]`만 emit한다.
|
||||
따라서 모든 stored stress CSV는 optional read-only inspection/order evidence only다. HDF5
|
||||
numerical-comparison projection, `S33` synthesis, nodal extrapolation, corner averaging,
|
||||
Gauss-to-corner matching 또는 element-label-order matching은 없다.
|
||||
|
||||
## 9. Validation Rules
|
||||
|
||||
@@ -723,13 +821,14 @@ matching, element-label-order identity는 없다.
|
||||
| aggregate moment | exact-zero case 또는 preprocessing 및 모든 entered trial에서 `rho_M<=1e-12` | model/solver, exit `4` 또는 `5` |
|
||||
| nonlinear static data | 네 positive finite values, endpoint `1.0`, fixed increment sequence with final exact factor one | input, exit `3` |
|
||||
| Newton iteration | iteration identity `1..100`; iteration `100` acceptance 가능; iteration `101` 없음; line search/cutback/retry/fallback 없음 | solver, exit `5` |
|
||||
| convergence channels | residual force, residual moment, correction translation, correction rotation이 모두 inclusive `<=` rule 또는 typed zero-scale threshold 통과 | solver, exit `5` |
|
||||
| convergence channels | finite-first 평가 뒤 residual force/moment는 matching external scale exact-zero이면 typed absolute `1e-3`, nonzero이면 retained `max(internal,external)` relative `1e-2`; correction translation/rotation은 기존 denominator branch; 네 channel 모두 inclusive `<=`이고 logical AND | solver, exit `5` |
|
||||
| nonfinite data | required residual, tangent, correction, state, load, recovery, output value가 acceptance 전 finite | solver/output, exit `5` 또는 `6` |
|
||||
| commit/rollback | complete converged candidate만 commit; failure는 prior committed state와 prior authoritative final HDF5 보존 | solver/output, exit `5` 또는 `6` |
|
||||
| HDF5 schema | exact paths, shapes, attributes, schema version, row identities, finite values, accepted-frame table, diagnostics; final replace는 log close success 뒤에만 허용 | output, exit `6` |
|
||||
| HDF5 schema | exact paths, shapes, attributes, schema version, row identities, finite values, accepted-frame table, diagnostics; `/global/equilibrium`은 applied-plus-reaction balance error이고 accepted free residual/constrained reaction resultant와 분리됨; final replace는 log close success 뒤에만 허용 | output, exit `6` |
|
||||
| equilibrium projection | accepted free rows는 generalized residual과 exact free mask, constrained reaction은 mask-before-spatial-conversion, global balance는 applied plus constrained reaction/current arm/origin `[0,0,0]`; factor-one global force와 moment는 각각 dimension-separated normalized `<=1e-8`; 세 quantity가 같은 accepted state를 공유하되 서로 대체되지 않음 | solver/output/reference internal gate |
|
||||
| log | UTF-8 no BOM, LF, TAB-separated fixed `label=value` schema; entered Newton iteration마다 record 하나; no per-iteration stderr duplication; no-Newton procedure는 zero-byte empty log; open/write/flush/close fail-closed | output, exit `6` |
|
||||
| reference rows | exact required artifacts, headers, row keys, component keys, finite values, factor-one frame mapping | reference precheck |
|
||||
| tolerance | exact `docs/TOLERANCE.md` family-scale row/RMS policy; blocking/warning disposition 보존 | reference verification |
|
||||
| reference rows | fine primary/coarse companion/linear-control exact artifacts, headers, row keys, component keys, finite values, factor-one frame mapping과 disposition별 precheck | reference precheck |
|
||||
| tolerance | external family에만 exact `docs/TOLERANCE.md` row/RMS policy 적용; U blocking, UR warning-only, local RF/RM review-only 보존; internal global balance/free residual gate와 혼합 금지 | reference/internal verification |
|
||||
|
||||
Downstream test가 다뤄야 하는 approved diagnostic code는 다음을 포함한다.
|
||||
|
||||
@@ -785,21 +884,34 @@ Downstream handoff to Implementation Planning Agent through Coordinator:
|
||||
MITC4 contract의 regression으로 남는지 test한다.
|
||||
- HDF5 schema version `1`을 위 accepted-frame schema 그대로 구현한다. Factor-zero non-frame
|
||||
handling, unique factor-one frame selection, triad/director projection, no
|
||||
compression/chunking, no trial-state HDF5 history를 포함한다.
|
||||
compression/chunking, no trial-state HDF5 history를 포함한다. `/global/equilibrium` path/shape는
|
||||
유지하되 authoritative meaning을 applied-plus-reaction balance error로 검증한다.
|
||||
- `AUDIT-001`을 별도 test로 닫는다. Accepted free residual은 generalized residual/internal/external
|
||||
force와 exact free mask, constrained reaction resultant는 mask-before-`J_l(phi)^(-T)`와 accepted
|
||||
current arm, global balance는 applied plus constrained reaction을 사용한다. Nonzero prescribed
|
||||
translation/rotation case에서도 initial arm, raw rotational covector 또는 raw full-residual sum을
|
||||
세 quantity의 공통 substitute로 쓰지 않는다.
|
||||
- 비대칭 lifecycle을 보존한다. Log는 usage validation, lexical path derivation, single-writer
|
||||
lock 뒤 live current-run audit이고, log create/open/truncate는 Analysis 전 abort, write/flush는
|
||||
즉시 abort, close failure는 HDF5 commit을 block한다. HDF5 final은 log close와 candidate
|
||||
self-check 성공 뒤에만 replace하며 failure는 prior valid final과 current log를 손상하지 않는다.
|
||||
- Newton log parser/schema test는 UTF-8 no BOM, LF, physical TAB-separated fixed
|
||||
`label=value` field order, finite round-trip numerics, escaping, completed-gate four-channel
|
||||
metrics, early-failure `not-evaluated(reason)`, no-Newton zero-byte log, zero per-iteration
|
||||
stderr duplication, flush-before-next/return을 포함한다.
|
||||
- Exact CSV paths, trimmed headers, exact `shellNL` `Frame` value, source node/component
|
||||
identity, constrained reaction mask, missing/extra/duplicate rows, nonfinite values를
|
||||
tolerance 전에 precheck한다.
|
||||
- Declared family에는 `docs/TOLERANCE.md`만 적용한다. `U`는 blocking, `UR`은 warning-only,
|
||||
`RF1/RF2`, `RF3`, physical spatial `RM1/RM2`는 blocking으로 유지하고 `RM3`와 모든 stress
|
||||
CSV value는 제외한다.
|
||||
`label=value` 39-field order, finite round-trip numerics, escaping, completed-gate four-channel
|
||||
metrics, residual matching-external-scale exact-zero/nonzero branch와 retained nonzero-scale
|
||||
denominator, typed thresholds, four-channel AND, early-failure `not-evaluated(reason)`, no-Newton
|
||||
zero-byte log, zero per-iteration stderr duplication, flush-before-next/return을 포함한다.
|
||||
- Fine primary, coarse companion과 linear control의 exact CSV path, trimmed header, 두 nonlinear
|
||||
case의 exact factor-one `Frame`, source node/component identity, constrained reaction mask,
|
||||
missing/extra/duplicate row와 nonfinite value를 tolerance 전에 precheck한다. Row order를 identity로
|
||||
쓰지 않는다.
|
||||
- External declared family에는 `docs/TOLERANCE.md`만 적용한다. `U1/U2/U3`는 blocking,
|
||||
`UR1/UR2/UR3`는 warning-only, local `RF1/RF2/RF3`와 spatial physical `RM1/RM2`는
|
||||
review-only다. Local `RM3`와 모든 stress CSV value는 제외한다. Review-only row의
|
||||
schema/inventory/error report를 생략하거나 blocking으로 되돌리지 않는다.
|
||||
- Fine/coarse factor-one global force/moment balance는 dimension-separated normalized `<=1e-8`,
|
||||
accepted free force/moment residual은 NSNR-069으로 blocking 검증한다. 이 internal gate에
|
||||
Abaqus CSV나 `docs/TOLERANCE.md` scale을 사용하지 않는다. Constrained reaction resultant는
|
||||
distinct review-only summary로 보고한다.
|
||||
- Optional stress CSV는 read-only inventory/order evidence only로 유지한다. Nodal stress
|
||||
extrapolation, corner averaging, `S33` synthesis, element-label-order matching을 추가하지
|
||||
않는다.
|
||||
|
||||
@@ -1,188 +1,233 @@
|
||||
# Nonlinear Static Newton-Raphson 수치 검토
|
||||
|
||||
## 1. Metadata and source formulation
|
||||
## 1. Metadata
|
||||
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- source_formulation: `docs/nonlinear-static-newton-raphson/formulation.md`
|
||||
- source_formulation_status: `ready-for-numerical-review`
|
||||
- source_formulation_sha256: `DFA629888041D5762FD0DF4271353464A692B325DC0C821A8D8689688C1EAFD0`
|
||||
- source_formulation_sha256: `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9`
|
||||
- source_requirements: `docs/nonlinear-static-newton-raphson/requirements.md`
|
||||
- source_requirements_sha256: `910E351F3F90FFA42F07D15206B55E62C05EAE821E250424430148337506EBF2`
|
||||
- source_requirements_sha256: `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`
|
||||
- source_research: `docs/nonlinear-static-newton-raphson/research.md`
|
||||
- source_research_sha256: `C920A6B02381230D1DB419D73FE767D611B36720D27D6410507BA88C3CA28EEE`
|
||||
- source_research_sha256: `4F63D23E03D1A68E5F8563B678FDD6F761F9558165778EF0433133EFAD303570`
|
||||
- repository_policy: `AGENTS.md`, `docs/SOLVER_AGENT_DESIGN.md`, `docs/TOLERANCE.md`
|
||||
- related_linear_contracts: `docs/linear-static-mitc4-shell/numerical-review.md`,
|
||||
`docs/linear-static-mitc4-shell/reference-model.md`
|
||||
- decision_source: `USER-DECISION-004 option 1`
|
||||
- balance_gate_decision: user-approved factor-one global force/moment normalized gate `<=1e-8`
|
||||
- diagnostic_evidence: `docs/nonlinear-static-newton-raphson/corrections.md` §13,
|
||||
`docs/nonlinear-static-newton-raphson/translation-displacement-comparison.md`
|
||||
- status: `pass-for-io-definition`
|
||||
- owner_agent: `numerical-review-agent`
|
||||
- date: `2026-08-23`
|
||||
- date: `2026-08-28`
|
||||
|
||||
이 검토는 정식화를 수학 및 수치 알고리즘 계약으로만 검토했다. C++ API, HDF5 schema,
|
||||
implementation plan, reference solver 실행, reference artifact 생성/수정은 수행하지 않았다.
|
||||
이 검토는 정식화를 수학·수치 알고리즘 계약으로 검토하고 기존 reference artifact를
|
||||
읽기 전용으로 조사했다. C++ API, 최종 HDF5 dataset path, implementation plan 또는
|
||||
reference artifact를 설계·실행·생성·수정하지 않았다.
|
||||
|
||||
## 2. Review Verdict
|
||||
|
||||
- verdict: `pass-for-io-definition`
|
||||
- reason: 승인 정식화는 fixed-initial-reference Total Lagrangian MITC4, finite rotation
|
||||
state, nonlinear `24 -> 20` map, objective drilling, fixed-global load work,
|
||||
same-trial residual/tangent, Full Newton convergence, recovery와 state commit/rollback
|
||||
의미를 구현 가능한 수치 계약으로 닫고 있다. 차원, 부호, DOF 순서, 적분, reaction
|
||||
의미 또는 reference identity와 충돌하는 blocking defect는 확인되지 않았다.
|
||||
- reference readiness: `reference/shellNL` 및 `reference/shell`의 선언 파일과 CSV는
|
||||
읽을 수 있고 row identity/precheck/tolerance 계약을 정의할 수 있다.
|
||||
- boundary: 이 verdict는 I/O Definition 진입 허가이며 implementation, reference comparison
|
||||
pass, physics evaluation 또는 release readiness 승인이 아니다.
|
||||
|
||||
`reference/shellNL`은 `nlgeom=YES`와 factor-one final frame을 갖는 저장 reference로 사용할 수
|
||||
있지만, 주요 `U3`와 stress 값은 선형 `reference/shell`과 거의 같다. 관찰된 nonlinear 신호는
|
||||
주로 약한 in-plane coupling이다(`RF1/RF2` 최대 약 `1.9166`, `U1/U2` 최대 약
|
||||
`1.29e-11`). 따라서 이 CSV 세트만으로 finite-rotation objectivity, exact tangent,
|
||||
rollback 또는 큰 변위 benchmark를 통과했다고 판단하지 않는다. 해당 항목은 아래의
|
||||
blocking internal tests로 분리한다.
|
||||
- reason: 승인 정식화는 fixed-initial-reference Total Lagrangian MITC4, finite rotation,
|
||||
nonlinear `24 -> 20` map, objective drilling, same-trial residual/tangent, reaction의
|
||||
spatial-moment 변환과 current-arm global balance를 구현 가능한 수치 계약으로 정의한다.
|
||||
Revised requirements와 충돌하는 formulation defect는 없다.
|
||||
- reaction disposition: local nodal `RF1/RF2/RF3`와 physical spatial `RM1/RM2`는 exact
|
||||
source-key/schema/inventory/finite/error evidence를 유지하는 `review-only`다. 이 값은
|
||||
formulation-sensitive nodal redistribution이므로 blocking verdict를 결정하지 않는다.
|
||||
Local `RM3`는 계속 제외한다.
|
||||
- blocking equilibrium: 각 nonlinear case의 factor-one accepted state에서 `(a)` global
|
||||
applied-plus-reaction force balance, `(b)` global applied-plus-reaction moment balance,
|
||||
`(c)` accepted free-DOF force/moment residual evidence가 blocking이다. `(d)` constrained
|
||||
reaction resultant는 별도 quantity로 보존하지만 balance error를 대신하지 않는다.
|
||||
- reference readiness: `reference/shell`, `reference/shellNL`와
|
||||
`reference/shellNL-meshfine`의 선언 input 및 필요한 displacement/reaction CSV가 존재하고
|
||||
읽을 수 있다. Fine case는 사용자가 요청한 mesh-refined nonlinear evidence이며 coarse
|
||||
case와 서로의 reference에 독립적으로 비교한다.
|
||||
- boundary: `pass-for-io-definition`은 I/O 계약을 다시 정의할 수 있다는 뜻이며 reference
|
||||
comparison pass, implementation completion, physics 또는 release 승인이 아니다.
|
||||
|
||||
## 3. Critical Findings
|
||||
|
||||
### Confirmed defects
|
||||
### 3.1 Confirmed defects
|
||||
|
||||
없음. Formulation Agent 또는 Research Agent로 즉시 되돌릴 confirmed numerical defect는 없다.
|
||||
Formulation Agent 또는 Research Agent로 반환할 confirmed defect는 없다. Formulation
|
||||
§11.4는 constrained generalized reaction과 spatial physical moment를 구분하고, §13.4는
|
||||
global origin `[0,0,0]`, current nodal position과 physical spatial moment를 사용하는
|
||||
applied-plus-reaction balance를 명시한다.
|
||||
|
||||
### Numerical risks requiring downstream evidence
|
||||
### 3.2 Required downstream correction: `AUDIT-001`
|
||||
|
||||
- `shellNL`의 stored reference는 geometric nonlinearity가 켜진 최종 상태 비교에는 충분하지만
|
||||
response amplitude가 작아 finite-rotation/tangent/objectivity 검증을 대신하지 못한다.
|
||||
- Abaqus stress CSV는 `(instance, element label, element-corner node label,
|
||||
section point, component)` identity로 완전하지만 FESA의 approved Gauss-location direct
|
||||
bottom/middle/top recovery와 location이 다르다. Current stored order는 element label
|
||||
`1..36` ascending block이며 이를 바꾸지 않는다. Nodal extrapolation/averaging을 만들지
|
||||
않고 stress CSV는 comparison family에서 제외한다.
|
||||
- External `UR` comparison은 기존 MITC4 정책에 따라 `warning-only`다. Rotation/director
|
||||
correctness는 `Q`, `d`, branch, objectivity invariant tests에서 blocking으로 확인해야 한다.
|
||||
Stage 5/6은 같은 accepted state에서 다음 세 quantity를 서로 바꿔 쓰지 않아야 한다.
|
||||
|
||||
### Open questions
|
||||
1. **Global applied-plus-reaction balance error**: applied와 constrained reaction을 더한
|
||||
force `[3]`와 moment `[3]`; blocking.
|
||||
2. **Constrained reaction resultant**: constrained reaction만 합한 force `[3]`와 current-arm
|
||||
moment `[3]`; distinct nonblocking reaction summary.
|
||||
3. **Accepted free residual**: stable free-DOF source/component rows와 force/moment channel gate;
|
||||
blocking.
|
||||
|
||||
현재 I/O Definition 진입을 막는 open question은 없다. Large-response public benchmark,
|
||||
MMS, broader locking/distortion characterization은 유용하지만 승인된 Stage 4 pass 조건은 아니다.
|
||||
현재 nonlinear implementation helper는 full residual을 합하고 initial Domain coordinates와
|
||||
raw rotational generalized residual을 사용한다. 현재 `shellNL`/`shellNL-meshfine` support는
|
||||
prescribed `u=phi=0`이므로 initial/current support arm과 generalized/spatial support moment가
|
||||
일치하고, 이 helper는 작은 free residual을 제외하면 constrained reaction resultant에
|
||||
가깝다. 그러나 applied load를 더한 balance error는 아니며 세 quantity 중 어느 것도
|
||||
일반적으로 대체하지 못한다. 지원 범위의 nonzero prescribed translation/rotation에서는
|
||||
반드시 current position과 `J_l(phi)^(-T)` spatial-moment conversion을 적용해야 한다.
|
||||
|
||||
### 3.3 Numerical risks and nonblocking artifact issue
|
||||
|
||||
- Fine stress CSV에는 element `1`, `SNEG`의 `Node Label=ss` 한 행이 있다. Stress는 승인된
|
||||
FESA Gauss direct recovery와 위치가 다르고 수치 comparison에서 제외되므로 이 optional
|
||||
inspection artifact의 malformed identity는 I/O 진입 blocker가 아니다. Artifact를 repair,
|
||||
normalize 또는 rewrite하지 않는다.
|
||||
- Coarse/fine Abaqus `S4`와 FESA MITC4가 동일한 local support reaction distribution을
|
||||
만들어야 한다는 formulation evidence는 없다. Global balance와 free residual로 blocking
|
||||
physics를 검증하고 local rows는 오차를 숨기지 않은 채 review-only로 남긴다.
|
||||
- Stored cases의 response는 weak geometric-nonlinear regime다. Reference displacement pass가
|
||||
tangent, objectivity, finite-rotation 또는 rollback 검증을 대신하지 않는다.
|
||||
|
||||
### 3.4 Open questions
|
||||
|
||||
I/O Definition 진입을 막는 open question은 없다. Public large-response benchmark, shell MMS와
|
||||
broader locking/distortion portfolio는 useful future evidence지만 이번 gate의 추가 조건이 아니다.
|
||||
|
||||
## 4. Numerical Risk Assessment
|
||||
|
||||
| risk label | assessment | required control / downstream evidence |
|
||||
| --- | --- | --- |
|
||||
| `rigid_body_modes` | 물리/internal/drill energy가 finite rigid motion에서 objective해야 하며 pure drill만 regularized 되어야 한다. | finite rigid translation/rotation superposition에서 strain, stress, physical energy, drill gamma, residual을 blocking invariant로 확인한다. |
|
||||
| `patch_test` | Green-Lagrange direct strain과 MITC tied shear가 같은 trial geometry와 같은 first/second variation을 써야 한다. | membrane, bending, twist, transverse-shear patch를 linear limit와 finite valid trial perturbation에서 각각 확인한다. |
|
||||
| `symmetry` | applied nodal moment가 없으면 physical/drill tangent는 exact arithmetic에서 symmetric이다. Fixed-spatial moment work tangent는 일반적으로 nonsymmetric이다. | no-moment case만 scaled symmetry check 대상으로 두고, moment case를 임의 symmetrization하지 않는다. |
|
||||
| `positive_definiteness` | nonlinear tangent는 load state, compression, near-buckling에서 indefinite일 수 있다. Positive definiteness는 일반 gate가 아니다. | stress-free constrained linear limit의 nonsingular solve와 singular negative case를 분리하고, factorization failure를 숨기지 않는다. |
|
||||
| `hourglass` | S4/S4R 모두 `2 x 2 x 2` full integration이므로 one-point reduced hourglass path는 승인 범위 밖이다. | source type으로 reduced/selective integration 또는 hourglass stabilization을 선택하지 않는 unit/integration test가 필요하다. |
|
||||
| `shear_locking` | MITC shear tying은 transverse-shear locking을 완화하지만 모든 thin-shell mesh에서 locking-free를 보장하지 않는다. | patch/reference evidence를 blocking으로 두고 broader thin/thick convergence는 nonblocking characterization으로 둔다. |
|
||||
| `volumetric_locking` | approved plane-stress shell, St. Venant-Kirchhoff-type material restriction에서는 `N/A`다. | 3-D incompressible material 또는 `nu >= 0.5` 의미로 확장하지 않는다. |
|
||||
| `membrane_locking` | original-style MITC4는 curved/distorted nonlinear meshes에서 membrane locking 위험이 남는다. | known limitation으로 기록한다. MITC4+ 성능 또는 Abaqus S4/S4R internal equivalence를 주장하지 않는다. |
|
||||
| `distortion` | positive Jacobian이라도 severe distortion/warpage는 conditioning과 stress accuracy를 악화할 수 있다. | 모든 Gauss/tying/center/recovery location의 finite, positive predicate를 fail-closed로 적용한다. 추가 quality cutoff는 요구하지 않는다. |
|
||||
| `singular_jacobian` | `J0 <= 0`, `j <= 0`, invalid reciprocal basis, invalid polar stretch는 residual/tangent를 무효화한다. | failed location을 omit/average/clamp/repair하지 않고 model/trial failure로 처리한다. |
|
||||
| `conditioning` | thin shells, small fixed drill scale, near-mechanism constraints는 Kff conditioning을 악화시킬 수 있다. | scaled matrix diagnostics만 사용하고 solver regularization/fallback으로 singularity를 숨기지 않는다. |
|
||||
| `convergence` | Full Newton은 same-trial consistent tangent에 의존한다. No line search/cutback이므로 difficult step은 deterministic nonconvergence가 될 수 있다. | NSNR-069/070 four-channel gates, iteration `1..100`, nonfinite rejection, no hidden retry를 integration tests로 고정한다. |
|
||||
| `rigid_body_modes` | Physical/internal/drill energy는 finite rigid motion에서 objective하고 pure drill만 regularized 되어야 한다. | finite rigid superposition에서 strain, stress, physical energy, drill gamma/energy와 residual covariance를 blocking invariant로 확인한다. |
|
||||
| `patch_test` | Green-Lagrange direct strain과 MITC tied shear는 같은 trial 및 first/second variation을 써야 한다. | membrane, bending, twist, transverse-shear patch와 linear limit을 확인한다. |
|
||||
| `symmetry` | Applied nodal moment가 없으면 physical/drill tangent는 exact arithmetic에서 symmetric이다. Fixed-spatial moment work tangent는 일반적으로 nonsymmetric다. | no-moment case만 scaled symmetry gate를 적용하고 moment case는 derivative consistency로 검증한다. |
|
||||
| `positive_definiteness` | Nonlinear tangent는 compression/near-buckling에서 indefinite일 수 있다. | positive definiteness를 global gate로 만들지 않고 singular/malformed tangent와 물리적 indefiniteness를 구분한다. |
|
||||
| `hourglass` | S4/S4R 모두 `2 x 2 x 2` full integration이며 reduced/hourglass path는 범위 밖이다. | source label로 integration 또는 stabilization을 바꾸지 않는 test가 필요하다. |
|
||||
| `shear_locking` | MITC shear tying은 transverse-shear locking을 완화하지만 general locking-free를 보장하지 않는다. | patch/reference evidence를 blocking으로, broader thin/thick study를 characterization으로 둔다. |
|
||||
| `volumetric_locking` | approved plane-stress shell과 `nu < 0.5` 범위에서는 `N/A`다. | 3-D incompressible behavior claim으로 확장하지 않는다. |
|
||||
| `membrane_locking` | original-style MITC4는 curved/distorted nonlinear mesh에서 membrane locking 위험이 남는다. | known limitation으로 보존하고 MITC4+ 또는 Abaqus 내부 성능을 상속한다고 주장하지 않는다. |
|
||||
| `distortion` | positive Jacobian만으로 accuracy는 보장되지 않지만 별도 calibrated quality cutoff는 승인되지 않았다. | 모든 Gauss/tying/center/recovery location을 fail-closed 검사한다. |
|
||||
| `singular_jacobian` | `J0<=0`, `j<=0`, invalid reciprocal basis/polar stretch는 residual/tangent를 무효화한다. | failed point를 omit, average, clamp 또는 repair하지 않는다. |
|
||||
| `conditioning` | thin geometry, small fixed drill scale와 near mechanism은 conditioning을 악화시킨다. | scale-aware diagnostics를 쓰고 hidden regularization/fallback을 금지한다. |
|
||||
| `convergence` | Full Newton은 same-trial consistent tangent에 의존하고 line search/cutback이 없다. | NSNR-069/070, four-channel AND, iteration `1..100`, finite-first와 no retry를 고정한다. |
|
||||
| `reaction_distribution` | local nodal support distribution은 element formulation/mesh/stabilization에 민감하다. | exact local error report는 유지하되 global balance/free residual만 blocking한다. |
|
||||
|
||||
## 5. Consistency Checks
|
||||
|
||||
| check | result | evidence |
|
||||
| --- | --- | --- |
|
||||
| units and dimensions | `pass` | Translation/force, rotation/moment, stress/resultant dimensions are separated. Convergence channels keep force, force-length, length and dimensionless rotation separate. |
|
||||
| signs and residual convention | `pass` | Global residual is `f_int - f_ext`; constrained full residual is reaction and free residual is equilibrium evidence. Fixed-global dead force has no configuration derivative. |
|
||||
| DOF ordering and free/constrained assumptions | `pass` | Per-node global order is `[UX, UY, UZ, URX, URY, URZ]`; Newton solve uses stable free coordinates with `Delta q_c = 0`. Valid `0 x 0` free system is trivial success. |
|
||||
| coordinate transforms | `pass` | `Q=Exp(phi^)Q0`, left-spatial update, `J_l` variation, physical swing map and spatial reaction moment conversion are explicitly defined. |
|
||||
| kinematic operator / B matrix | `pass` | Green-Lagrange strain, MITC shear projection and both first/second variations use the same trial identity. |
|
||||
| constitutive contract | `pass` | Constant symmetric `C5` maps engineering Green-Lagrange strain to second Piola-Kirchhoff stress; no material history is introduced. |
|
||||
| Jacobian rules | `pass` | Fixed reference `J0` is integration measure; current `j` and `det F_c` are validity checks. Failed locations are not skipped. |
|
||||
| integration policy | `pass` | S4 and S4R share four midsurface Gauss points times two thickness points; reduced/selective integration is prohibited. |
|
||||
| residual/tangent consistency | `pass` | Complete tangent includes material, geometric, map-Hessian, objective drill Hessian and fixed-spatial moment work derivative terms. |
|
||||
| tangent symmetry expectation | `pass` | Symmetric only for conservative no-applied-moment case; generally nonsymmetric moment tangent must remain unsymmetrized. |
|
||||
| output locations | `pass-with-handoff` | Nodal U/UR/RF/RM and shell stress/resultant logical quantities are defined; exact HDF5 projection remains I/O-owned. Current nodal SPOS/SNEG stress CSV는 Gauss direct recovery와 일대일 대응하지 않으므로 external numerical comparison은 N/A다. |
|
||||
| units and dimensions | `pass` | Translation residual/reaction은 force, rotation residual/reaction moment는 force-length다. Force와 moment family 및 norm scale을 혼합하지 않는다. |
|
||||
| signs | `pass` | `r=f_int-f_ext`; constrained entry는 reaction, free entry는 equilibrium evidence다. Balance는 `applied+reaction`이고 reaction resultant는 reaction만 합한다. |
|
||||
| DOF ordering | `pass` | Global node order `[UX,UY,UZ,URX,URY,URZ]`; stable free/constrained partition과 `Delta q_c=0`을 보존한다. |
|
||||
| coordinates and moment conversion | `pass-with-handoff` | Global origin `[0,0,0]`, current arm `X+u`, spatial moment `J_l(phi)^(-T) r_phi`가 승인 의미다. `AUDIT-001` 구현 projection audit가 남는다. |
|
||||
| kinematic operator | `pass` | Green-Lagrange strain, MITC shear projection 및 first/second variation은 same-trial identity다. |
|
||||
| constitutive contract | `pass` | Constant symmetric `C5`가 fixed-reference engineering strain을 second Piola-Kirchhoff stress로 매핑하며 material history가 없다. |
|
||||
| Jacobian rules | `pass` | Fixed `J0`가 integration measure, current `j`와 `det(Fc)`가 validity predicate다. |
|
||||
| integration | `pass` | S4/S4R 공통 four midsurface by two thickness points; reduced/selective integration은 금지한다. |
|
||||
| residual/tangent | `pass` | Material/geometric/map-Hessian/drill/moment-work derivative가 complete same-trial tangent를 이룬다. |
|
||||
| recovery locations | `pass-with-handoff` | Nodal U/UR/reaction 및 Gauss direct shell recovery logical meaning은 정의되었다. Final dataset projection은 I/O-owned다. |
|
||||
| reference identity | `pass` | Case/state/instance/source label/component로 match하고 row order를 identity로 쓰지 않는다. |
|
||||
|
||||
## 6. Verification Readiness
|
||||
|
||||
### Blocking internal numerical tests
|
||||
### 6.1 Blocking internal numerical tests
|
||||
|
||||
Implementation Planning shall carry these as feature-required tests before any reference-comparison success claim:
|
||||
기존 승인 수치 portfolio를 유지한다.
|
||||
|
||||
Mixed translation/rotation 검사는 fixed-reference characteristic length
|
||||
`L=max(||X_I-X_J||)`와 node block `Dq=diag(L I3,I3)`를 사용한다. Tangent test direction은
|
||||
`||p_hat||inf=1`, perturbation은 `q +/- h Dq p_hat`으로 두고
|
||||
`h={1e-3,3e-4,1e-4,3e-5,1e-5,3e-6,1e-6,3e-7}` 전부를 검사한다. Roundoff plateau 전
|
||||
최소 두 interval에서 centered-difference observed order `>=1.5`이고 한 interior point가
|
||||
scaled error `<=1e-6`여야 한다. Single-`h` 우연 통과는 허용하지 않는다.
|
||||
1. Stress-free `q=0` linear MITC4 residual/tangent/recovery와 physical/drill split.
|
||||
2. `||Q^TQ-I||_F<=1e-12`, `|det(Q)-1|<=1e-12`, `d=Qe3` 및 branch margin.
|
||||
3. Mixed translation/rotation scaled tangent directional derivative schedule와 interior scaled
|
||||
error `<=1e-6`; zero analytical direction `<=1e-10`.
|
||||
4. No-applied-moment scaled tangent symmetry `<=1e-12`; applied moment는 derivative
|
||||
consistency만 검사한다.
|
||||
5. Finite rigid objectivity의 scaled physical strain/stress/energy/drill/residual `<=1e-10`.
|
||||
6. Membrane/bending/twist/shear patch, component order와 bottom/top stress sign.
|
||||
7. Fixed-global force/moment identity, `rho_M<=1e-12`, absolute prescribed path와 zero
|
||||
constrained Newton correction.
|
||||
8. Exact fixed-factor sequence, factor one, iterations `1..100`, pass at 100, no 101/cutback/retry.
|
||||
9. NSNR-069/070의 finite-first exact-zero/nonzero branches, inclusive thresholds와 four-channel AND.
|
||||
10. Trial/recovery/solve/output failure rollback과 deterministic assembly/frame/row/diagnostic order.
|
||||
|
||||
1. Linear limit: at stress-free `q=0`, nonlinear element residual/tangent/recovery reduce to approved linear MITC4 signs, `2 x 2 x 2` integration and physical/drill split.
|
||||
2. Rotation state invariants: every committed/trial `Q` satisfies `||Q^T Q-I||_F <= 1e-12`,
|
||||
`|det(Q)-1| <= 1e-12`, and `d=Q e3`. Global/swing/twist `pi` branch angular margin은
|
||||
`sqrt(epsilon_double)`, 약 `1.4901161193847656e-8` rad보다 커야 한다.
|
||||
3. Tangent directional derivative: compare `Dq^T K_T Dq p_hat` with the central
|
||||
residual derivative under the schedule above in separated force and moment channels.
|
||||
Zero analytical directions require exact-zero construction and scaled absolute error
|
||||
`<=1e-10`; nonfinite metric은 허용하지 않는다.
|
||||
4. No-moment tangent symmetry: after work-conjugate congruence `Dq^T K_T Dq`, no-applied-moment
|
||||
tangent scaled Frobenius symmetry error `<=1e-12`; applied fixed-spatial moment cases are checked for
|
||||
exact derivative consistency, not symmetry.
|
||||
5. Finite rigid objectivity: superposed finite rigid motion leaves physical strain/stress,
|
||||
physical energy, drill gamma/energy and internal residual at scaled `<=1e-10` levels.
|
||||
6. Patch/sign recovery: membrane, bending, twist and transverse shear patch states preserve
|
||||
component order and bottom/top stress signs.
|
||||
Analytical strain/resultant/stress error is relative `<=1e-9`.
|
||||
7. Load and boundary path: fixed-global force/moment source identity, `rho_M <= 1e-12`
|
||||
rejection/projection, absolute factor-one boundary path and zero constrained Newton
|
||||
correction are tested independently.
|
||||
8. Newton lifecycle: factor identities use ordinal `j*h` values strictly below one,
|
||||
followed by one exact assigned `1.0`; cumulative `lambda += h`와 tolerance-based duplicate
|
||||
endpoint는 금지한다. For `shellNL` the expected intended factors are `0.1, 0.2, ...,
|
||||
1.0`. Iterations are `1..100`, pass at `100` is allowed, iteration `101` is forbidden.
|
||||
9. Convergence gates: NSNR-069/070 four-channel inclusive `<=` rules, typed zero-scale
|
||||
`1e-3` thresholds and nonfinite rejection are tested without adding energy or line-search gates.
|
||||
10. Commit/rollback and determinism: failed trial, recovery, solve or output does not mutate
|
||||
the prior committed state or prior authoritative final result; row/diagnostic order is stable.
|
||||
### 6.2 Factor-one blocking equilibrium contract
|
||||
|
||||
### Downstream reference comparisons
|
||||
각 nonlinear case의 accepted factor-one state에 대해
|
||||
|
||||
The required stored-reference cases and logical quantities are defined in
|
||||
`docs/nonlinear-static-newton-raphson/reference-model.md`.
|
||||
\[
|
||||
\mathbf a_{F,I}=\mathbf F_I^{appl},\qquad
|
||||
\mathbf c_{F,I}=\mathbf F_I^{react},
|
||||
\]
|
||||
|
||||
- `shellnl-s4-final` is the primary nonlinear external reference at accepted factor one.
|
||||
- `shell-s4-linear-limit` is the read-only linear-limit/reference-identity regression for the
|
||||
same S4 mesh. Current stress element-label ordering is inventoried without becoming a
|
||||
comparison quantity.
|
||||
\[
|
||||
\mathbf a_{M,I}=(\mathbf x_I-\mathbf 0)\times\mathbf F_I^{appl}
|
||||
+\mathbf M_I^{appl},\qquad
|
||||
\mathbf c_{M,I}=(\mathbf x_I-\mathbf 0)\times\mathbf F_I^{react}
|
||||
+\mathbf M_I^{react}
|
||||
\]
|
||||
|
||||
External comparison uses only accepted-state quantities and `docs/TOLERANCE.md`. Missing,
|
||||
extra, duplicate or nonfinite required rows fail before tolerance. The comparison result itself
|
||||
is Implementation Agent ownership.
|
||||
를 stable source-node order로 계산한다. `x=X+u`이고 applied physical moment는 formulation
|
||||
§13.4의 effective physical-work moment다. Define
|
||||
|
||||
\[
|
||||
\mathbf e_F=\sum_I(\mathbf a_{F,I}+\mathbf c_{F,I}),\quad
|
||||
S_F=\max\left(\sum_I\|\mathbf a_{F,I}\|_2,
|
||||
\sum_I\|\mathbf c_{F,I}\|_2\right),
|
||||
\]
|
||||
|
||||
\[
|
||||
\mathbf e_M=\sum_I(\mathbf a_{M,I}+\mathbf c_{M,I}),\quad
|
||||
S_M=\max\left(\sum_I\|\mathbf a_{M,I}\|_2,
|
||||
\sum_I\|\mathbf c_{M,I}\|_2\right).
|
||||
\]
|
||||
|
||||
Force와 moment는 각각 `rho_F=||e_F||2/S_F`, `rho_M=||e_M||2/S_M`로 검사하고 둘 다
|
||||
`<=1e-8`이어야 한다. 이 threshold는 승인된 nonlinear acceptance value이며,
|
||||
unclamped sum-of-contribution scale과 dimension-separated form은 승인된 linear MITC4
|
||||
global-equilibrium convention을 유지한다. `S=0`이면 balance도
|
||||
exact zero일 때만 `0`, 아니면 fail하며 absolute floor, `max(1,S)` 또는 zero clamp를 두지 않는다.
|
||||
|
||||
Accepted free residual은 cross-unit combined norm을 만들지 않는다. Factor-one accepted trial의
|
||||
free translation-force와 free rotation-moment rows가 각각 NSNR-069의 exact gate를 다시
|
||||
재현해야 한다: matching external scale이 nonzero이면 approved infinity-norm relative gate
|
||||
`<=1e-2`, exact zero이면 typed absolute `<=1e-3` force 또는 force-length다. 두 channel 모두
|
||||
finite-first로 통과해야 한다.
|
||||
|
||||
### 6.3 Downstream reference comparisons
|
||||
|
||||
- `shellnl-meshfine-s4-final`: 사용자가 요청한 mesh-refined primary nonlinear case.
|
||||
- `shellnl-s4-final`: coarse nonlinear companion regression.
|
||||
- `shell-s4-linear-limit`: existing linear-limit/source-identity regression.
|
||||
|
||||
각 case의 `U1/U2/U3`는 blocking이고 `UR1/UR2/UR3`는 warning-only다. Coarse/fine은 각자의
|
||||
input/CSV와 독립 family로 비교하며 cross-mesh interpolation, row collapse 또는 observed-order
|
||||
claim을 만들지 않는다. Local RF/RM family는 common external tolerance로 오차를 전부
|
||||
기록하지만 review-only다. `RM3`와 stress는 수치 comparison에서 제외한다.
|
||||
|
||||
## 7. Required Revisions
|
||||
|
||||
### Formulation Agent
|
||||
|
||||
None before I/O Definition. The current formulation is numerically sufficient for the I/O
|
||||
contract. Current source element/node SPOS/SNEG stress CSV에 맞추기 위한 extrapolation,
|
||||
averaging 또는 새 recovery 의미는 추가하지 않는다.
|
||||
없음. §11.4/§13.4의 reaction, spatial moment와 global balance 의미는 revised requirements를
|
||||
충족한다.
|
||||
|
||||
### Research Agent
|
||||
|
||||
None before I/O Definition. Public large-response benchmarks and shell MMS remain useful future
|
||||
evidence, but the current Stage 4 gate does not require another research pass.
|
||||
없음. Stored fine-mesh case와 internal invariant portfolio가 이번 I/O gate에 충분하다.
|
||||
|
||||
### I/O Definition Agent
|
||||
|
||||
Define parser/semantic/HDF5/log projection for the logical quantities and row identities in
|
||||
`reference-model.md`. Preserve the split between blocking internal nonlinear tests and external
|
||||
stored reference comparison; do not claim Abaqus internal equivalence.
|
||||
`reference-model.md`의 logical quantities와 source identity를 최종 projection으로 연결한다.
|
||||
`AUDIT-001`의 balance error, constrained reaction resultant, accepted free residual을 별도
|
||||
quantity로 유지한다. Current-arm/spatial-moment semantics와 factor-one identity를 보존하고
|
||||
local RF/RM review-only disposition을 blocking으로 되돌리지 않는다.
|
||||
|
||||
## 8. Downstream Handoff
|
||||
|
||||
For I/O Definition Agent through Coordinator:
|
||||
Coordinator를 통해 I/O Definition Agent에 전달한다.
|
||||
|
||||
- Use accepted factor-one frames only for external reference comparison; trial Newton states are
|
||||
not reference quantities.
|
||||
- Preserve required source identity: case, accepted state, instance, node label and component.
|
||||
Stress artifact의 element/node/section identity와 stored element-label order는 read-only
|
||||
inventory로 보존하되 FESA comparison row로 합성하지 않는다.
|
||||
- Keep `U1/U2/U3` blocking and `UR1/UR2/UR3` warning-only. For `shellNL`, compare
|
||||
constrained `RF1/RF2`, `RF3`, and spatial physical `RM1/RM2` in the separate blocking
|
||||
families from `reference-model.md`. `RM3`와 stress는 comparison에서 제외한다.
|
||||
- Apply `docs/TOLERANCE.md` exactly; do not add an independent absolute floor, row averaging,
|
||||
source-order matching, or calibration gate.
|
||||
- Treat `shellNL` as weak but valid nonlinear final-state reference evidence; require the
|
||||
blocking internal tests above for tangent/objectivity/rollback/finite-rotation correctness.
|
||||
- `pass-for-io-definition`; blockers: 없음.
|
||||
- External families는 `docs/TOLERANCE.md`를 그대로 사용한다. Independent absolute floor,
|
||||
averaging, collapse, source-order matching, clamp 또는 calibration gate를 추가하지 않는다.
|
||||
- Internal factor-one global force/moment balance는 Section 6.2의 dimension-separated normalized
|
||||
`1e-8` gate, accepted free residual은 NSNR-069 force/moment gate를 사용한다.
|
||||
- Fine primary와 coarse companion nonlinear cases 모두 U blocking/UR warning-only를 유지한다.
|
||||
- Local RF1/RF2, RF3, spatial RM1/RM2는 separate review-only families이며 error/precheck를
|
||||
생략하지 않는다. RM3/stress는 excluded다.
|
||||
- Fine optional stress identity anomaly는 그대로 기록하고 artifact를 수정하지 않는다.
|
||||
- Abaqus S4와 FESA MITC4의 formulation, integration, stabilization 또는 내부 알고리즘
|
||||
동등성을 주장하지 않는다.
|
||||
|
||||
@@ -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 또는 수정하지 않았다.
|
||||
|
||||
@@ -3,11 +3,11 @@
|
||||
## 1. Metadata
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- title: `Nonlinear Static Analysis Using Newton–Raphson`
|
||||
- status: `approved`
|
||||
- status: `draft`
|
||||
- owner_agent: `requirement-agent`
|
||||
- date: `2026-08-22`
|
||||
- approved_by: user
|
||||
- approval_date: `2026-08-23`
|
||||
- date: `2026-08-27`
|
||||
- approved_by: pending user re-approval
|
||||
- approval_date: pending
|
||||
- authoritative_scope: materially linear, geometrically nonlinear `S4/S4R -> FESA-MITC4`
|
||||
- independence: FESA는 독립 solver이며 Abaqus 또는 Midas의 내부 알고리즘 동등성을 주장하지 않는다.
|
||||
- unit_policy: `.inp` 단위계를 추론하거나 변환하지 않고 사용자가 일관되게 제공한 단위계를 보존한다.
|
||||
@@ -26,7 +26,7 @@ FESA는 하나의 지원 nonlinear static step을 scalar load factor로 증가
|
||||
- factor-1 absolute prescribed `*BOUNDARY` targets와 four-value nonlinear `*STATIC`
|
||||
- four-channel residual/correction convergence, maximum 100 iterations, no line search
|
||||
- separate trial state, atomic commit/rollback, accepted-frame HDF5와 per-iteration text log
|
||||
- deterministic assembly, iteration, frame, result, diagnostic order와 stored-reference verification
|
||||
- deterministic assembly, iteration, frame, result, diagnostic order와 factor-one global reaction/equilibrium 및 stored-reference verification
|
||||
|
||||
## 4. Out Of Scope
|
||||
- material nonlinearity, nonlinear material history, combined material/geometric nonlinearity
|
||||
@@ -138,16 +138,16 @@ Exact Total Lagrangian shell equations, strain/stress measures, rotation map det
|
||||
trace_to: {parent_need: "NEED-NSNR-002", downstream_agents: ["Numerical Review Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-069
|
||||
statement: "The FESA solver shall evaluate translational-force and rotational-moment free-residual convergence with channel-separated infinity-norm gates."
|
||||
statement: "The FESA solver shall evaluate translational-force and rotational-moment free-residual convergence with channel-separated infinity-norm gates selected by each matching external residual-channel scale."
|
||||
category: numerical
|
||||
rationale: "Force and moment dimensions require separate scales."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "For a nonzero matching-channel denominator max(||internal||inf, ||external||inf), the same-trial residual ratio passes iff <=1e-2; an exact-zero denominator instead passes iff its numerator is <=1e-3 model-consistent force or <=1e-3 model-consistent force-length, respectively."
|
||||
tolerance: "Relative 1e-2 dimensionless; zero-scale absolute 1e-3 force and 1e-3 force-length."
|
||||
acceptance_criteria: "For each residual channel, a nonzero matching external-channel scale retains denominator max(||internal||inf, ||external||inf), and the same-trial residual ratio passes iff <=1e-2; an exact-zero matching external-channel scale instead applies the typed absolute gate, which passes iff its numerator is <=1e-3 model-consistent force or <=1e-3 model-consistent force-length, respectively."
|
||||
tolerance: "Relative 1e-2 dimensionless for nonzero matching external-channel scale; exact-zero matching external-channel absolute 1e-3 force and 1e-3 force-length."
|
||||
trace_to: {parent_need: "NEED-NSNR-002", downstream_agents: ["Numerical Review Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
status: draft
|
||||
- id: FESA-REQ-NSNR-070
|
||||
statement: "The FESA solver shall evaluate translational and rotational free-correction convergence with channel-separated infinity-norm gates."
|
||||
category: numerical
|
||||
@@ -248,14 +248,14 @@ Exact Total Lagrangian shell equations, strain/stress measures, rotation map det
|
||||
trace_to: {parent_need: "NEED-NSNR-003", downstream_agents: ["Formulation Agent", "Numerical Review Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-019
|
||||
statement: "The FESA solver shall preserve stable source identity and stable assembly order and shall derive free residual and constrained reaction from the complete assembled equilibrium at the same state."
|
||||
statement: "The FESA solver shall preserve stable source identity and stable assembly order and shall keep the accepted free residual, constrained reaction resultant, and global applied-plus-reaction balance error as distinct equilibrium quantities derived at the same accepted state."
|
||||
category: physics
|
||||
rationale: "Equilibrium evidence must remain traceable to source entities and DOFs."
|
||||
rationale: "Reaction and equilibrium evidence must remain traceable without treating physically distinct projections as interchangeable."
|
||||
source: docs
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "Input instance/label/component maps deterministically through assembly, state, diagnostic, result, and comparison; full residual at a trial or accepted state yields free-equilibrium evidence and constrained reactions."
|
||||
tolerance: "Source/component identity and discrete order exact; equilibrium uses approved numerical tolerances."
|
||||
acceptance_criteria: "Input instance/label/component maps deterministically through assembly, state, diagnostic, result, and comparison; accepted free entries remain free-equilibrium evidence, constrained entries form physical reactions, and the constrained-reaction resultant remains distinct from the global applied-plus-reaction balance error. Blocking factor-one equilibrium quantities are global applied-plus-reaction force [3] and moment [3] balance errors plus accepted free residual. Every global moment is about global origin [0,0,0] and uses current force arms plus spatial physical nodal moments."
|
||||
tolerance: "Source/component, quantity identity, origin, and discrete order exact; equilibrium and reference values use their separately approved numerical tolerances."
|
||||
trace_to: {parent_need: "NEED-NSNR-002, NEED-NSNR-004", downstream_agents: ["Formulation Agent", "Numerical Review Agent", "I/O Definition Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-020
|
||||
@@ -314,25 +314,25 @@ Exact Total Lagrangian shell equations, strain/stress measures, rotation map det
|
||||
trace_to: {parent_need: "NEED-NSNR-003, NEED-NSNR-004", downstream_agents: ["Numerical Review Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-030
|
||||
statement: "The FESA solver shall pass an approved verification portfolio covering the materially linear small-displacement limit, tangent consistency, equilibrium/reaction, symmetry or objectivity, and commit/rollback behavior."
|
||||
statement: "The FESA solver shall pass an approved verification portfolio covering the materially linear small-displacement limit, tangent consistency, factor-one global applied-plus-reaction balance and accepted free residual, symmetry or objectivity, and commit/rollback behavior."
|
||||
category: verification
|
||||
rationale: "Convergence alone does not establish nonlinear solver correctness."
|
||||
source: docs
|
||||
priority: must
|
||||
verification_method: analysis
|
||||
acceptance_criteria: "Numerical Review defines blocking cases and quantities for every listed category, and implementation passes each approved analytical, invariant, physics, or comparison gate."
|
||||
tolerance: "Case-specific tolerances are owned by Numerical Review; existing linear-limit tolerance remains unchanged."
|
||||
acceptance_criteria: "Numerical Review defines blocking cases and quantities for every listed category, and implementation passes each approved analytical, invariant, physics, or comparison gate. Reaction/equilibrium acceptance separately blocks on factor-one global applied-plus-reaction force [3] and moment [3] balance errors and accepted free-DOF residual evidence; constrained-reaction resultants retain a distinct identity, and local nodal reaction distribution does not decide the blocking verdict."
|
||||
tolerance: "Case-specific invariant tolerances are owned by Numerical Review; external comparisons use docs/TOLERANCE.md; existing linear-limit tolerance remains unchanged."
|
||||
trace_to: {parent_need: "NEED-NSNR-004", downstream_agents: ["Research Agent", "Formulation Agent", "Numerical Review Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-034
|
||||
statement: "The FESA solver shall compare only approved accepted-state quantities against stored reference artifacts using stable source/component matching and the common docs/TOLERANCE.md policy."
|
||||
statement: "The FESA solver shall compare only approved accepted-state quantities against stored reference artifacts using stable source/component matching, the approved blocking/warning/review disposition, and the common docs/TOLERANCE.md policy."
|
||||
category: verification
|
||||
rationale: "Reference acceptance must be deterministic and independent of solver execution."
|
||||
source: docs
|
||||
priority: must
|
||||
verification_method: reference-comparison
|
||||
acceptance_criteria: "Numerical Review selects the exact existing input and required CSV quantities; precheck rejects missing, extra, duplicate, or nonfinite required rows before blocking/warning family comparison, without averaging or row-order matching."
|
||||
tolerance: "docs/TOLERANCE.md family-scale policy; exact artifacts and families are a Numerical Review-owned readiness gap."
|
||||
acceptance_criteria: "Numerical Review selects the exact existing input and required CSV quantities; precheck rejects missing, extra, duplicate, or nonfinite required rows before numerical comparison, without averaging, collapse, row-order matching, zero clamp, or reference repair. U1/U2/U3 remain blocking and UR1/UR2/UR3 remain warning-only. Local nodal RF1/RF2/RF3 and physical spatial RM1/RM2 retain deterministic source-key/schema/finite/inventory/error reporting but are review-only and never change the blocking verdict; local RM3 and stress remain excluded from numerical comparison."
|
||||
tolerance: "docs/TOLERANCE.md family-scale policy for external blocking, warning-only, and review-only error reporting; exact artifact roles, local review projection, family membership, and row schema are a Numerical Review-owned readiness gap."
|
||||
trace_to: {parent_need: "NEED-NSNR-004", downstream_agents: ["Numerical Review Agent", "I/O Definition Agent"]}
|
||||
status: approved
|
||||
```
|
||||
@@ -341,7 +341,10 @@ Exact Total Lagrangian shell equations, strain/stress measures, rotation map det
|
||||
| quantity | dimension / coordinates | role |
|
||||
| --- | --- | --- |
|
||||
| nodal displacement and committed rotation/director state | length and dimensionless rotation; global | accepted-state kinematics and rollback |
|
||||
| full residual and constrained reaction | force or force-length; global DOF | equilibrium and reaction evidence |
|
||||
| accepted free-DOF residual | force or force-length; global DOF | blocking accepted-state equilibrium evidence |
|
||||
| local nodal `RF1/RF2/RF3`, physical spatial `RM1/RM2` | force or force-length; global | deterministic review-only/nonblocking distribution evidence; `RM3` excluded |
|
||||
| constrained-reaction resultant force `[3]` and moment `[3]` | force and force-length; global; moment about `[0,0,0]` with current arms and spatial physical moments | distinct reaction summary; not interchangeable with global balance error |
|
||||
| applied-plus-reaction balance error force `[3]` and moment `[3]` | force and force-length; global; same origin/arm/moment convention | blocking factor-one reaction/equilibrium evidence |
|
||||
| MITC4 internal force, stress and strain | model-consistent dimensions; approved element frame/configuration | formulation, physics and reference verification |
|
||||
| scalar load factor and accepted frame identity | dimensionless | path, commit and output ordering |
|
||||
| four convergence channels | typed as NSNR-069/070 | internal iteration acceptance only |
|
||||
@@ -349,13 +352,14 @@ Exact Total Lagrangian shell equations, strain/stress measures, rotation map det
|
||||
|
||||
## 10. Tolerance Policy
|
||||
- `.inp` values remain in the user's consistent unit system; FESA performs no unit inference or conversion.
|
||||
- Only nonzero-scale convergence ratios are dimensionless and pass with `<=1e-2`.
|
||||
- Exact-zero residual thresholds are `1e-3` force and `1e-3` force-length; correction thresholds are `1e-3` length and `1e-3` dimensionless rotation. Equal literals do not merge their dimensions.
|
||||
- External comparisons use `docs/TOLERANCE.md`; internal invariant, tangent, endpoint-arithmetic and physics tolerances are fixed by Numerical Review before implementation.
|
||||
- Residual ratios with nonzero matching external-channel scale and correction ratios with nonzero current-trial incremental-solution denominator are dimensionless and pass with `<=1e-2`.
|
||||
- Exact-zero matching external-channel residual thresholds are `1e-3` force and `1e-3` force-length; exact-zero correction-denominator thresholds are `1e-3` length and `1e-3` dimensionless rotation. Equal literals do not merge their dimensions.
|
||||
- External blocking, warning-only, and review-only error reporting use `docs/TOLERANCE.md` without changing their verdict disposition; internal invariant, tangent, endpoint-arithmetic, free-residual and global-balance tolerances are fixed by Numerical Review before implementation.
|
||||
|
||||
## 11. Reference Case Requirements
|
||||
- The current Stage-1 gap is selection of exact stored nonlinear input and only the CSV quantities required for acceptance.
|
||||
- Numerical Review owns artifact readiness, blocking/warning families, source/component identity and HDF5 projection; this gap does not require another Stage-1 user question.
|
||||
- Stored nonlinear candidates use exact read-only input/displacement pairs `reference/shellNL/shellNL.inp` with `reference/shellNL/shellNL displacements.csv`, and `reference/shellNL-meshfine/shellNL-meshfine.inp` with `reference/shellNL-meshfine/shellNL-meshfine displacements.csv`. Exact local-reaction review artifacts are `reference/shellNL/shellNL reactions.csv` and `reference/shellNL-meshfine/shellNL-meshfine reactions.csv`; they are not missing-required blocking artifacts. The existing linear-limit pair is `reference/shell/shell.inp` and `reference/shell/shell displacements.csv`.
|
||||
- Numerical Review shall fix which exact nonlinear candidate case or cases are blocking versus diagnostic, the factor-one HDF5 projection, required source rows/components and comparison families, and the internal tolerances for global balance/free-residual gates. `U1/U2/U3` are blocking, `UR1/UR2/UR3` are warning-only, local nodal RF/RM rows are review-only, and `RM3` and stress have no numerical comparison projection.
|
||||
- All selected local review rows retain deterministic identity, schema, finite-value, inventory, and error reporting even though they cannot fail the blocking verdict. A physical global resultant sum is not a substitute identity for those local rows, and no row is averaged, collapsed, omitted, zero-clamped, or repaired.
|
||||
- Agents do not run Abaqus, Nastran or another reference solver and do not create, rename, repair or normalize stored reference artifacts.
|
||||
|
||||
## 12. Requirement Verification Matrix
|
||||
@@ -367,7 +371,7 @@ Exact Total Lagrangian shell equations, strain/stress measures, rotation map det
|
||||
| `NSNR-074` | physics | user | must | analysis | finite committed/trial triad/director state and rollback | invariant tolerance downstream | Formulation; Numerical Review | approved |
|
||||
| `NSNR-006` | numerical | user | must | test | same-trial residual/tangent and fresh factorization/solve | identity/order exact | Formulation; Numerical Review; Planning | approved |
|
||||
| `NSNR-007` | numerical | user | must | test | all four free-DOF gates pass; constrained residual is reaction | NSNR-069/070 | Numerical Review; Planning | approved |
|
||||
| `NSNR-069` | numerical | user | must | test | force/moment residual relative or typed zero-scale gates | `1e-2`; typed `1e-3` | Numerical Review; Planning | approved |
|
||||
| `NSNR-069` | numerical | user | must | test | force/moment residual relative gate for nonzero external scale; typed absolute gate for exact-zero external scale | `1e-2`; typed `1e-3` | Numerical Review; Planning | draft |
|
||||
| `NSNR-070` | numerical | user | must | test | translation/rotation correction relative or typed zero-scale gates | `1e-2`; typed `1e-3` | Numerical Review; Planning | approved |
|
||||
| `NSNR-008` | numerical | user | must | test | finite data, iterations 1..100, pass at 100 allowed | predicates/count exact | Numerical Review; Planning | approved |
|
||||
| `NSNR-014` | constraint | user | must | test | unchanged full correction; no line search/fallback/energy gate | identity exact | Numerical Review; Planning | approved |
|
||||
@@ -377,21 +381,21 @@ Exact Total Lagrangian shell equations, strain/stress measures, rotation map det
|
||||
| `NSNR-063` | physics | user | must | test | absolute factor-one BC target and separate correction | path/source exact | Formulation; Numerical Review | approved |
|
||||
| `NSNR-016` | input | user | must | test | four-value STATIC mapping and validation | endpoint exact | I/O; Planning | approved |
|
||||
| `NSNR-011` | functional | user | must | test | separate trial, atomic commit, prior-state preservation | state exact | Formulation; Numerical Review; Planning | approved |
|
||||
| `NSNR-019` | physics | docs | must | test | stable source/assembly and full-equilibrium residual/reaction | identity/order exact | Formulation; Numerical Review; I/O | approved |
|
||||
| `NSNR-019` | physics | docs | must | test | distinct free residual, constrained-reaction resultants and applied+reaction balance; current-arm/spatial-moment semantics | quantity/origin/identity/order exact | Formulation; Numerical Review; I/O | approved |
|
||||
| `NSNR-020` | input | docs | must | test | unsupported meaning fails closed | inventory exact | I/O; Planning | approved |
|
||||
| `NSNR-021` | output | user | must | test | accepted commit/frame bijection and failure-safe HDF5 final | identity exact | Numerical Review; I/O; Planning | approved |
|
||||
| `NSNR-024` | output | user | must | test | one ordered diagnostic summary per entered iteration and persistent live log | semantic identity exact | I/O; Planning | approved |
|
||||
| `NSNR-083` | output | user | must | test | repository names; every literal --output form unrecognized with pre-input/pre-Analysis/pre-output exit 2 and no alias/deprecation; asymmetric lifecycle; linear regression | public identity/precedence exact | I/O; Planning; Numerical Review | approved |
|
||||
| `NSNR-026` | constraint | docs | must | test | deterministic factor/iteration/assembly/frame/result/log order | discrete order exact | Numerical Review; Planning | approved |
|
||||
| `NSNR-030` | verification | docs | must | analysis | blocking small-limit/tangent/physics/rollback portfolio | case-specific downstream | Research; Formulation; Numerical Review | approved |
|
||||
| `NSNR-034` | verification | docs | must | reference-comparison | stored artifacts, deterministic matching and precheck | docs/TOLERANCE.md | Numerical Review; I/O | approved |
|
||||
| `NSNR-030` | verification | docs | must | analysis | blocking small-limit/tangent/global applied+reaction balance/free-residual/physics/rollback portfolio | case-specific downstream; external policy unchanged | Research; Formulation; Numerical Review | approved |
|
||||
| `NSNR-034` | verification | docs | must | reference-comparison | U blocking, UR warning-only, local RF/RM review-only, exact matching/precheck | docs/TOLERANCE.md | Numerical Review; I/O | approved |
|
||||
|
||||
## 13. Open Questions
|
||||
없음. Specialist gaps are owned by downstream stages and are escalated only if they would change approved scope, physics, tolerance, authoritative output or public compatibility.
|
||||
|
||||
## 14. Downstream Handoff
|
||||
- Research/Formulation: exact Total Lagrangian MITC4 equations, strain/stress measures, rotation map/side/frame, drilling and consistent derivatives.
|
||||
- Numerical Review: endpoint arithmetic, tangent/objectivity/state-invariant checks, benchmark portfolio, performance adequacy and exact reference artifacts/quantities.
|
||||
- I/O Definition: HDF5 schema/projection/chunking/factor-0 handling, log representation/failure presentation and path/collision conventions.
|
||||
- Implementation Planning: backend adapters, output ownership primitive, candidate filename, performance targets and requirement-traced TDD plan.
|
||||
- Research/Formulation: exact Total Lagrangian MITC4 equations, strain/stress measures, rotation map/side/frame, drilling and consistent derivatives; Formulation propagates NSNR-069's exact-zero matching external-channel typed absolute branch and retained nonzero external-scale relative denominator.
|
||||
- Numerical Review: verify the revised NSNR-069 branch and unchanged thresholds/four-channel AND, endpoint arithmetic, tangent/objectivity/state-invariant checks, benchmark portfolio and performance adequacy. Fix exact coarse/fine reference roles, local review projection/families, and factor-one global balance/free-residual tolerances while preserving local RF/RM review-only, `RM3` exclusion, displacement/rotation disposition, exact prechecks, immutable artifacts and common external tolerance.
|
||||
- I/O Definition: HDF5 schema/projection/chunking/factor-0 handling, log representation/failure presentation and path/collision conventions. Audit and keep separately identifiable `(a)` global applied-plus-reaction balance error, `(b)` constrained-reaction resultant and `(c)` accepted free residual; global moments use current positions and spatial physical nodal moments about `[0,0,0]`, including supported nonzero prescribed translation/rotation cases.
|
||||
- Implementation Planning: backend adapters, output ownership primitive, candidate filename, performance targets and requirement-traced TDD plan. Stage 6 must test the three equilibrium identities separately and must not reuse one implementation dataset as another without proving its approved projection semantics.
|
||||
- Coordinator: escalate only a downstream proposal that changes the approved scope, physics, convergence tolerance, authoritative-result meaning or public output contract; do not advance the workflow on this document alone.
|
||||
|
||||
@@ -0,0 +1,186 @@
|
||||
# Translation Displacement Comparison Report
|
||||
|
||||
## 1. Metadata and scope
|
||||
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- report_id: `TRANSLATION-REPORT-001`
|
||||
- date: `2026-08-26`
|
||||
- owner_agent: `implementation-agent` (bounded diagnostic dispatch)
|
||||
- dispatch coordination SHA-256: `D7CE6264EE3FD20FB6CD74CF1FC28E05EEEEFA67B25AF737D2DF989059A72D6F`
|
||||
- status: `translation-diagnostic-pass-not-a-gate`
|
||||
- tolerance source: `docs/TOLERANCE.md`
|
||||
|
||||
This focused report recomputes only global translational displacement components
|
||||
`U1/U2/U3` for the existing coarse `reference/shellNL` case and the added fine
|
||||
`reference/shellNL-meshfine` case. It is diagnostic evidence for the observed
|
||||
mesh sensitivity; it does not create or replace the canonical Stage 6
|
||||
`reference-comparison.md`. In particular, it is not Step 12 implementation
|
||||
evidence and does not change any workflow gate.
|
||||
|
||||
The two meshes are compared separately to their own read-only Abaqus CSV
|
||||
artifacts. No coarse-to-fine node interpolation, row pairing, averaging, or
|
||||
direct FESA-to-FESA error was used.
|
||||
|
||||
## 2. Artifact inventory and accepted-frame identity
|
||||
|
||||
All paths below are relative to the feature worktree. SHA-256 and byte counts
|
||||
were recomputed before comparison.
|
||||
|
||||
| mesh | artifact | path | bytes | SHA-256 |
|
||||
| --- | --- | --- | ---: | --- |
|
||||
| coarse | input | `reference/shellNL/shellNL.inp` | 4,778 | `4BF3ECB0F7F1E8462C573E993DBC97AC5D920C91CF6F23AD4C6891D77FFBADA2` |
|
||||
| coarse | translation CSV | `reference/shellNL/shellNL displacements.csv` | 7,542 | `4E0F99CA9372B1ADF7FAF102F43BC0B887DC743FDEDA378E4342D2CF8E0C0786` |
|
||||
| coarse | FESA HDF5 | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shellNL/shellnl-s4-final-441600152250700-0/shellNL_results.h5` | 934,602 | `9744814BEBF33486F526F821EDC7D96F072F34E988D70A00AC7AA063570FFA40` |
|
||||
| fine | input | `reference/shellNL-meshfine/shellNL-meshfine.inp` | 56,516 | `40DF1CE77311C8D799564A21A60F3BDEBB8148D52CAE22B7292FDFAD32018220` |
|
||||
| fine | translation CSV | `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | 111,184 | `740819FF8AED0E279961581F7CDBFA12784CFBA3A488C35A652E80103F64433F` |
|
||||
| fine | FESA HDF5 | `.harness/build-ninja-msvc-debug/reference/meshfine-diagnostic/run-1787669003801/shellNL-meshfine_results.h5` | 10,547,651 | `81A3C431E2977D2482D212877C3C306FFBB19CD1F0C47FBF1C936AE06CC93ACA` |
|
||||
|
||||
For both HDF5 artifacts, `/steps/Step-1/accepted_frames` has ten accepted rows.
|
||||
The unique row satisfying `is_factor_one=1` and `load_factor=1.0` is
|
||||
`frame_index=9`, `increment_index=10`, and `iteration_count=2`. Translation
|
||||
values were projected only from
|
||||
`/steps/Step-1/frames/9/nodal/displacement`, columns `[UX, UY, UZ]`:
|
||||
|
||||
| mesh | HDF5 node rows | displacement shape | CSV wide rows | exact CSV Frame |
|
||||
| --- | ---: | --- | ---: | --- |
|
||||
| coarse | 49 | `[49, 6]` | 49 | `Increment 10: Step Time = 1.000` |
|
||||
| fine | 729 | `[729, 6]` | 729 | `Increment 10: Step Time = 1.000` |
|
||||
|
||||
## 3. Source identity and prechecks
|
||||
|
||||
The comparison key is
|
||||
|
||||
```text
|
||||
(accepted_state=factor-one, canonical_instance_name, source_node_label, component)
|
||||
```
|
||||
|
||||
`canonical_instance_name` is matched case-insensitively; the CSV/HDF5 source
|
||||
spelling itself is not rewritten. CSV columns were selected after trimming only
|
||||
surrounding header whitespace. The `U-U1/U-U2/U-U3` columns map respectively to
|
||||
HDF5 `UX/UY/UZ`. Row order is not part of the identity and was not used for
|
||||
matching.
|
||||
|
||||
| mesh | component rows | duplicate CSV wide/component/HDF5 keys | nonfinite CSV/HDF5 values | missing HDF5 keys | extra HDF5 keys | precheck |
|
||||
| --- | ---: | --- | --- | ---: | ---: | --- |
|
||||
| coarse | 147 | `0 / 0 / 0` | `0 / 0` | 0 | 0 | pass |
|
||||
| fine | 2,187 | `0 / 0 / 0` | `0 / 0` | 0 | 0 | pass |
|
||||
|
||||
Each CSV contains only the exact factor-one `Frame` value shown above. Thus the
|
||||
row prechecks required before numerical tolerance evaluation pass for the
|
||||
translation projection in each mesh.
|
||||
|
||||
## 4. Applied tolerance policy
|
||||
|
||||
`U1/U2/U3` remain one global-length, blocking translation family within each
|
||||
case. The component rows in Section 6 are diagnostics only: they use the same
|
||||
case-family scale and near-zero band below and do not introduce a component
|
||||
scale, component-specific tolerance, or a new approved family.
|
||||
|
||||
For the reference values `r_i` and FESA values `f_i`, `docs/TOLERANCE.md` is
|
||||
applied exactly:
|
||||
|
||||
\[
|
||||
S=\max_i|r_i|,\qquad B=0.01S,\qquad e_i=|f_i-r_i|.
|
||||
\]
|
||||
|
||||
- If `|r_i| <= B`, the row passes iff `e_i <= B`.
|
||||
- Otherwise, the row passes iff `e_i / |r_i| <= 0.05`.
|
||||
- The whole family also requires `RMS(e_i) / S <= 0.01`.
|
||||
- There is no independent absolute-error gate, `max(1,S)` floor, zero clamp,
|
||||
row omission, or averaging. A zero-scale family would require exact FESA
|
||||
zero; neither translation family has zero reference scale.
|
||||
|
||||
## 5. Translation-family results
|
||||
|
||||
| mesh | rows | `S` | `B=0.01S` | near-zero / significant rows | row failures | max absolute error | max significant-row relative error | RMS error | `L2(error)` | relative RMS | verdict |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- |
|
||||
| coarse | 147 | `2.3740820300000001e-05` | `2.3740820300000003e-07` | 122 / 25 | 0 | `1.9037855439354404e-07` | `8.5711169439298945e-03` | `2.4530813178127803e-08` | `2.9742030342848264e-07` | `1.0332757195473908e-03` | pass |
|
||||
| fine | 2,187 | `2.5795705400000001e-05` | `2.5795705400000002e-07` | 1,626 / 561 | 0 | `1.6193812501096337e-07` | `6.2777164841928829e-03` | `5.8615647876386634e-09` | `2.7411825664926473e-07` | `2.2723025777921402e-04` | pass |
|
||||
|
||||
Both sets have zero row failures and relative RMS values below the common
|
||||
`0.01` threshold. This is a translation-only diagnostic pass; it is not a
|
||||
full external-reference verdict for the nonlinear-static feature.
|
||||
|
||||
## 6. Component diagnostics under the unchanged family scale
|
||||
|
||||
The `near-zero/significant` counts and every row decision below use the Section 5
|
||||
family band `B`, not a component-derived scale. A dash for maximum relative
|
||||
error means all rows of that component were near-zero and were therefore judged
|
||||
only by the approved absolute-band rule.
|
||||
|
||||
### 6.1 Coarse mesh
|
||||
|
||||
| component | rows | near-zero / significant | row failures | max absolute error | max significant-row relative error | RMS error | `L2(error)` | worst row `(node; fesa; reference; abs error)` |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- |
|
||||
| U1 | 49 | 49 / 0 | 0 | `5.9371608358817413e-12` | — | `1.7563955953584068e-12` | `1.2294769167508847e-11` | `12; -8.7994083858817417e-12; -2.8622475500000000e-12; 5.9371608358817413e-12` |
|
||||
| U2 | 49 | 49 / 0 | 0 | `5.9379769034414602e-12` | — | `1.7566506185832881e-12` | `1.2296554330083018e-11` | `19; 8.7996068934414599e-12; 2.8616299900000001e-12; 5.9379769034414602e-12` |
|
||||
| U3 | 49 | 24 / 25 | 0 | `1.9037855439354404e-07` | `8.5711169439298945e-03` | `4.2488614702881049e-08` | `2.9742030292016737e-07` | `2; -2.3550441745606457e-05; -2.3740820300000001e-05; 1.9037855439354404e-07` |
|
||||
|
||||
### 6.2 Fine mesh
|
||||
|
||||
| component | rows | near-zero / significant | row failures | max absolute error | max significant-row relative error | RMS error | `L2(error)` | worst row `(node; fesa; reference; abs error)` |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- |
|
||||
| U1 | 729 | 729 / 0 | 0 | `5.6550975712048108e-12` | — | `1.5513648050863109e-12` | `4.1886849737330394e-11` | `27; -1.1143569120481096e-13; 5.5436618799999999e-12; 5.6550975712048108e-12` |
|
||||
| U2 | 729 | 729 / 0 | 0 | `5.6547834814404039e-12` | — | `1.5512360377367428e-12` | `4.1883373018892053e-11` | `16; -1.1132282144040392e-13; 5.5434606599999999e-12; 5.6547834814404039e-12` |
|
||||
| U3 | 729 | 168 / 561 | 0 | `1.6193812501096337e-07` | `6.2777164841928829e-03` | `1.0152527787009038e-08` | `2.7411825024924402e-07` | `2; -2.5633767274989038e-05; -2.5795705400000001e-05; 1.6193812501096337e-07` |
|
||||
|
||||
## 7. Deterministically ordered largest absolute-error rows
|
||||
|
||||
Rows are listed by descending absolute error, then source node label and
|
||||
component for a deterministic display. `part-1-1` below is the canonical
|
||||
case-insensitive instance identity.
|
||||
|
||||
| mesh | rank | key `(instance, node, component)` | FESA | reference | absolute error | applied rule and metric |
|
||||
| --- | ---: | --- | ---: | ---: | ---: | --- |
|
||||
| coarse | 1 | `(part-1-1, 2, U3)` | `-2.3550441745606457e-05` | `-2.3740820300000001e-05` | `1.9037855439354404e-07` | relative; `8.0190386005130586e-03` |
|
||||
| coarse | 2 | `(part-1-1, 35, U3)` | `-1.2104431681576916e-05` | `-1.2190867900000000e-05` | `8.6436218423083233e-08` | relative; `7.0902432158323394e-03` |
|
||||
| coarse | 3 | `(part-1-1, 39, U3)` | `-1.2104431681576916e-05` | `-1.2190867900000000e-05` | `8.6436218423083233e-08` | relative; `7.0902432158323394e-03` |
|
||||
| fine | 1 | `(part-1-1, 2, U3)` | `-2.5633767274989038e-05` | `-2.5795705400000001e-05` | `1.6193812501096337e-07` | relative; `6.2777164841928829e-03` |
|
||||
| fine | 2 | `(part-1-1, 21, U3)` | `-2.3863834908375246e-05` | `-2.3782464300000001e-05` | `8.1370608375244783e-08` | relative; `3.4214540322150206e-03` |
|
||||
| fine | 3 | `(part-1-1, 69, U3)` | `-2.3863834908375246e-05` | `-2.3782464300000001e-05` | `8.1370608375244783e-08` | relative; `3.4214540322150206e-03` |
|
||||
|
||||
## 8. Mesh trend interpretation
|
||||
|
||||
The fine-mesh translation relative RMS divided by the coarse-mesh translation
|
||||
relative RMS is
|
||||
|
||||
\[
|
||||
\frac{2.2723025777921402\times10^{-4}}
|
||||
{1.0332757195473908\times10^{-3}}
|
||||
=0.21991251074664606.
|
||||
\]
|
||||
|
||||
This is a `78.008748925335397%` reduction in the separately measured
|
||||
reference-normalized translation RMS. It is consistent with the hypothesis
|
||||
that the coarse-case discrepancy is mesh-sensitive, and the fine case also
|
||||
passes the same row/RMS policy.
|
||||
|
||||
It is not an observed order of convergence, a proof of monotonic convergence,
|
||||
or a solution-accuracy claim outside these translation rows: the two models have
|
||||
different meshes and distinct external-reference outputs, and no common-mesh
|
||||
interpolation or mesh-size-rate study was performed.
|
||||
|
||||
## 9. Explicit exclusions and no-change assertion
|
||||
|
||||
This report deliberately excludes:
|
||||
|
||||
- all reaction quantities;
|
||||
- `UR1/UR2/UR3` rotations;
|
||||
- all stress quantities, including the user-noted `reference/shell` element-label
|
||||
ordering change;
|
||||
- Newton convergence lifecycle and iteration-log acceptance beyond identifying
|
||||
the accepted factor-one HDF5 frame;
|
||||
- `USER-DECISION-004` disposition;
|
||||
- Step 11 and Step 12 status, Physics Evaluation, and Release readiness.
|
||||
|
||||
No source, test, CMake, comparator, tolerance policy, phase file, canonical
|
||||
reference-comparison report, declared input, or reference artifact was modified
|
||||
for this report. The report also does not create `implementation-report.md`,
|
||||
`build-test.md`, or `reference-comparison.md`.
|
||||
|
||||
## 10. Handoff
|
||||
|
||||
Within this narrow scope there is no artifact, identity, finite-value, or
|
||||
translation-tolerance blocker. The report is handed to the Coordinator as
|
||||
translation-only diagnostic evidence; gate ownership and all excluded work remain
|
||||
unchanged.
|
||||
Reference in New Issue
Block a user