modify documents
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
# Shell 표면 압력
|
||||
|
||||
## 목적과 현재 범위
|
||||
|
||||
SURFACE의 SPOS/SNEG와 DSLOAD의 P를 사용하는 압력의 방향·면적·follower tangent 및 선형/비선형 조립를 구현한 기능이다. 역사적 기능 검증과 현재 통합 회귀의 범위를 구분한다.
|
||||
최근 dev 통합 회귀는 [전체 현황](../tracking/status.md)에 연결하며, 과거 release 판정은
|
||||
[release.md](release.md)에 남긴다. 문서 정리는 새 기능 검증이나 재승인을 뜻하지 않는다.
|
||||
|
||||
## 계약과 재사용 Handoff
|
||||
|
||||
- [요구사항·acceptance](requirements.md): 지원·제외와 기존 요구사항 ID.
|
||||
- [정식화](formulation.md): 수식·가정·부호·좌표계·복구 위치.
|
||||
- [I/O](io.md): 입력 subset·진단·source identity·결과 schema.
|
||||
- [Reference 모델](reference-model.md): 원본과 비교량·행 identity·적용 범위.
|
||||
- [독립 수치 검토](numerical-review.md): 검산·위험·반례와 수정 확인.
|
||||
- [검증·물리 결과](verification.md): 실제 실행한 명령·수치·실패·미실행·한계.
|
||||
- [연구 근거](research.md): 정식화에 필요한 출처와 적용 경계.
|
||||
|
||||
공통 소유권은 [ARCHITECTURE](../ARCHITECTURE.md)를 따른다. Element는 local 계산,
|
||||
Assembly는 결정적 reduction, Procedure는 trial/commit, Recovery는 물리 의미,
|
||||
Writer는 직렬화를 담당한다. 새 기능에서 기존 stage/phase 실행 계획을 재사용하지 않는다.
|
||||
현재 공개 API는 `include/fesa/`, 실제 구현은 `src/fesa/`와 대응 검사를 확인한다.
|
||||
|
||||
## 사용법
|
||||
|
||||
환경 준비·build·CTest·CLI 기본 사용은 [operations](../operations.md), 입력과 결과의
|
||||
공통 계약은 [contracts](../contracts.md)를 따른다. 이 기능의 keyword·option 허용 범위는
|
||||
위 I/O 계약을 확인한다. 과거 보고서의 machine 경로·임시 command를 현재 기본값으로 쓰지 않는다.
|
||||
|
||||
## 개발 과정과 주의사항
|
||||
|
||||
기존 단계별 계획·coordination은 완료된 실행 운영 기록이어서 제거했다. 승인된 요구사항·
|
||||
수식·검토·실제 검증 결과는 위 문서에 보존한다. Git `858e87b`의 이전 경로는 당시 원문을
|
||||
조회하는 용도로만 사용하며 현행 작업 지침이 아니다.
|
||||
|
||||
- 실패한 trial·candidate는 기존 accepted state와 최종 결과를 변경하지 않아야 한다.
|
||||
- 같은 trial의 기하·내력·하중·접선을 사용하고 generalized rotation moment와 spatial moment를 구분한다.
|
||||
- [수정·실패 기록](lessons.md)에 원인과 검증 결과를 보존한다.
|
||||
@@ -1,95 +0,0 @@
|
||||
# Shell Surface Pressure Load — 빌드·테스트 보고서
|
||||
|
||||
## 메타데이터
|
||||
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- owner_agent: `implementation-agent`
|
||||
- 상태: agent 소유 focused 검증 통과
|
||||
- `.harness/config.json`은 없었으므로 Step 7이 지정한 direct CMake 명령을 사용했다.
|
||||
- 선택 환경: root CMake project, Visual Studio 18 2026 generator, x64, Debug,
|
||||
C++17, MSVC 19.51.36252.0 (tool path 14.51.36231), MSBuild 18.8.2.
|
||||
- 의존성: GoogleTest `C:/git/googletest`, MKL 2026.1, TBB 2023.1, HDF5 2.1.1.
|
||||
|
||||
## RED 사전검사와 이전 TDD 증거
|
||||
|
||||
시작 시 `implementation-report.md`, `build-test.md`,
|
||||
`reference-comparison.md`가 모두 없었다. 이는 Step 7이 요구한
|
||||
evidence-state RED다. Steps 1–6의 실행 기록을 감사하여 각 production/test/CMake
|
||||
변경마다 expected RED와 GREEN/focused VERIFY가 있음을 확인했다. Step 1/2의
|
||||
outer Harness timeout은 `corrections.md`가 기록한 full CTest와 Stop의 중복 실행이며,
|
||||
제품 실패나 RED 누락이 아니다. `evidence-gap`은 없다.
|
||||
|
||||
## Agent 소유 명령 기록
|
||||
|
||||
duration은 command runner가 관측한 wall-clock 시간이다. Agent는 targetless
|
||||
whole-project build 또는 unfiltered full CTest를 실행하지 않았다.
|
||||
|
||||
| ID | 명령 | exit | duration | 결과 / 의미 있는 tail |
|
||||
| --- | --- | ---: | ---: | --- |
|
||||
| `V-CONFIG` | `cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -A x64 "-DFESA_GTEST_SOURCE_DIR=C:/git/googletest" "-DMKL_DIR=C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl" "-DTBB_DIR=C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb" "-DHDF5_DIR=C:/Program Files/HDF_Group/HDF5/2.1.1/cmake"` | 0 | 7.5 s | `CXX compiler identification is MSVC 19.51.36252.0`; configure/generate 완료. |
|
||||
| `V-BUILD` | `cmake --build .harness/build --config Debug --target fesa_unit_tests fesa_integration_tests fesa_reference_tests` | 0 | 5.9 s | 세 test executable이 `.harness/build/tests/Debug`에 link됨. |
|
||||
| `V-SHOW` | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | 0 | 1.7 s | 유효한 `ctestInfo` JSON; 후속 audit에서 362 tests 확인. |
|
||||
| `V-FOCUSED` | `ctest --test-dir .harness/build -C Debug --output-on-failure -R "^(InpSyntax|ShellSurfacePressureInput|ShellSurfacePressureDomain|ShellSurfacePressureKernel|SurfacePressureAssembly|LinearShellSurfacePressure|NonlinearShellSurfacePressure|ShellSurfacePressureApplication|ShellSurfacePressureReference)\."` | 0 | 15.8 s | `100% tests passed`, 64/64; unit 37, integration 18, reference 9. |
|
||||
| `V-REFERENCE` (사전) | `ctest --test-dir .harness/build -C Debug --output-on-failure -R "^ShellSurfacePressureReference\."` | 0 | 2.9 s | 9/9 통과. |
|
||||
| `V-CLI-BUILD` | `cmake --build .harness/build --config Debug --target fesa_cli` | 0 | 2.7 s | `.harness/build/src/fesa/Debug/fesa.exe` link 완료. |
|
||||
| `V-CLI-RUN` | `fesa.exe .harness/build/reference/shell-surface-pressure-load/shellNL-meshfine-pressure.inp` | 0 | 약 10 m 56 s | FESA만 실행. factor-one increment 10이 accepted되고 schema-1 HDF5/log가 atomic publish됨. 마지막 log는 `combined_pass=1`, `transition=accepted`. |
|
||||
| `V-REFERENCE` (생성 결과) | 같은 `^ShellSurfacePressureReference\.` 명령 | 0 | 2.7 s | 새 root execution-directory HDF5를 선택하여 9/9 통과. |
|
||||
| inventory | CTest JSON suite/count 및 staged DLL audit | 0 | 1.9 s | 362 discovered, 모든 named suite nonzero, runtime closure 확인. |
|
||||
|
||||
## 발견·focused 결과
|
||||
|
||||
| suite | 발견 수 | 결과 |
|
||||
| --- | ---: | --- |
|
||||
| `InpSyntax` | 5 | 통과 |
|
||||
| `ShellSurfacePressureInput` | 15 | 통과 |
|
||||
| `ShellSurfacePressureDomain` | 3 | 통과 |
|
||||
| `ShellSurfacePressureKernel` | 11 | 통과 |
|
||||
| `SurfacePressureAssembly` | 3 | 통과 |
|
||||
| `LinearShellSurfacePressure` | 5 | 통과 |
|
||||
| `NonlinearShellSurfacePressure` | 10 | 통과 |
|
||||
| `ShellSurfacePressureApplication` | 3 | 통과 |
|
||||
| `ShellSurfacePressureReference` | 9 | 통과 |
|
||||
| 선택 합계 | 64 | 64 passed, 0 failed |
|
||||
|
||||
선택된 test 중 skip, zero-discovery, failure는 없다.
|
||||
|
||||
## 경고와 runtime closure
|
||||
|
||||
configure/build 출력에는 compiler/linker warning이 없다. `CMAKE_HAVE_LIBC_PTHREAD`
|
||||
probe의 실패 표시는 Windows configure probe 결과일 뿐 `/W4 /WX` warning이 아니다.
|
||||
|
||||
| 실행 파일 directory | staged DLL |
|
||||
| --- | --- |
|
||||
| `.harness/build/src/fesa/Debug` | `hdf5.dll`, `libiomp5md.dll`, `libmmd.dll`, `mkl_core.3.dll`, `mkl_def.3.dll`, `mkl_intel_thread.3.dll`, `tbb12_debug.dll` |
|
||||
| `.harness/build/tests/Debug` | `hdf5.dll`, `libiomp5md.dll`, `libmmd.dll`, `mkl_core.3.dll`, `mkl_def.3.dll`, `mkl_intel_thread.3.dll`, `tbb12_debug.dll` |
|
||||
|
||||
test discovery/execution뿐 아니라 copied nonlinear input을 CLI로 실제 완료했으므로,
|
||||
MKL/TBB/HDF5 runtime staging도 실행으로 확인됐다.
|
||||
|
||||
## Stop 소유권, 분류, 변경 없음
|
||||
|
||||
`.codex/hooks.json`의 Stop은 `scripts/hooks/stop_validation.py`에 연결되어 있다.
|
||||
이 훅이 agent turn 종료 시 단 한 번의 targetless whole-project MSVC x64 Debug build와
|
||||
unfiltered CTest를 소유한다. 이 Step은 hook entry point를 수동 호출하거나 중복 full
|
||||
verification을 실행하지 않았다.
|
||||
|
||||
- agent-owned classification: `passed`
|
||||
- 실패 classification: 없음 (`configure`, `compile`, `link`, `test`,
|
||||
`reference-comparison`, `artifact`, `environment`, `regression` 모두 없음)
|
||||
- automatic Stop disposition: Harness phase completed locally at
|
||||
`2026-09-01 17:43:57`. The single automatic Stop whole-project MSVC x64
|
||||
Debug build passed. It ran `cmake --build .harness/build --config Debug`,
|
||||
then `ctest --test-dir .harness/build -C Debug --show-only=json-v1` with
|
||||
nonzero discovery, and `ctest --test-dir .harness/build -C Debug
|
||||
--output-on-failure`; the final full CTest result was `362/362 PASS`,
|
||||
`0 failed`.
|
||||
- automatic Stop evidence sources:
|
||||
`phases/shell-surface-pressure-load/step7-output.json`,
|
||||
`.harness/build/Testing/Temporary/LastTest.log`, and phase/commit metadata
|
||||
`2c91462`, `bf2339c`, `c4d1e2a`. Classification: `pass`; failed tests:
|
||||
none. Duration: not separately preserved in committed report; completion
|
||||
timestamp and LastTest log are authoritative.
|
||||
- Step 7은 source/header/test/CMake/Harness/tolerance/upstream contract/reference artifact를
|
||||
변경하지 않았고, 세 Gate 6 보고서 및 허용된 Step 7 status/summary만 변경한다.
|
||||
|
||||
physics evaluation과 release readiness는 이 보고서 범위 밖이다.
|
||||
@@ -1,297 +0,0 @@
|
||||
# Shell Surface Pressure Load Coordination Record
|
||||
|
||||
## 1. Metadata and Feature Scope
|
||||
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- workflow_state: `completed`
|
||||
- owner_agent: `coordinator-agent`
|
||||
- request_date: `2026-08-30`
|
||||
- last_updated: `2026-09-01`
|
||||
- process_classification: `architectural`
|
||||
- current_goal: Gates 1–8 owner evidence와 `ready-for-release` recommendation을 기록하고 내부 feature workflow를 closure한다.
|
||||
- approved_scope: Abaqus subset `*SURFACE, TYPE=ELEMENT`와 `*DSLOAD`의 uniform `P`를 S4/S4R `SPOS|SNEG` surface에 적용한다. Linear static은 reference configuration load를, nonlinear static은 current-configuration follower load와 external tangent를 사용한다.
|
||||
- scope_boundaries: Unsupported surface/load variants는 fail-closed로 거부하고 stable source identity와 deterministic load/reduction order를 보존한다. 기존 authoritative HDF5 output을 우선 유지하되 Stage 5 I/O gate가 evidence로 최종 확정한다.
|
||||
- reference_case: `reference/shellNL-meshfine-pressure/`의 existing `.inp`와 CSV를 exact path/name 그대로 read-only 사용한다.
|
||||
- user_approval: `2026-08-30` approved Abaqus-aligned design; `2026-09-01` approved the 7-Step implementation plan, phase materialization, Harness execution without push, and isolated recovery worktree with per-run `FESA_HARNESS_CODEX_SANDBOX=danger-full-access` fallback.
|
||||
- active_workspace: `C:/git/FESADev/.worktrees/shell-surface-pressure-load-recovery` on `feat-shell-surface-pressure-load`; recovery baseline commit `2d07106`
|
||||
- protected_backup_workspace: original `C:/git/FESADev` dirty feature workspace; do not read, modify, clean, stash, commit, reset, or execute there during recovery
|
||||
|
||||
## 2. Eight-Stage Worklist
|
||||
|
||||
| stage | owner | status | output paths | acceptance gate | evidence summary | blockers | attempt count |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| 1. Requirements | `requirement-agent` | `passed` | `docs/shell-surface-pressure-load/requirements.md` | 지원/제외 범위, verifiable acceptance criteria, verification quantities, tolerance baseline과 requirement verification matrix가 승인 설계를 손실 없이 고정함 | `FESA-REQ-SHELL-PRESSURE-001`–`024`; normative 24/matrix 24; orphan 0; exact reference input/displacement paths와 blocking/warning/excluded disposition; owner `passed`; Coordinator audit 통과 | 없음 | 1 |
|
||||
| 2. Research | `research-agent` | `passed` | `docs/shell-surface-pressure-load/research.md` | 이론, benchmark, primary evidence와 applicability limit가 충분함 | Source 15개(Project/Stored 3, Tier 1 official 8, Tier 2 3, Tier 3 navigation 1), key claims 15개, benchmark 8개, normative trace gap 0; owner `passed`; Coordinator audit 통과 | 없음 | 1 |
|
||||
| 3. Formulation | `formulation-agent` | `passed` | `docs/shell-surface-pressure-load/formulation.md` | Pressure virtual work, equivalent nodal load, follower linearization과 numerical integration 계약이 구현 가능함 | `ready-for-numerical-review`; force/residual/tangent sign, common `2x2` rule, `24x1`/`24x24` dimensions, dimensionless geometry contract, deterministic assembly, requirement trace 24/24; owner `passed`; Coordinator audit 통과 | 없음 | 1 |
|
||||
| 4. Numerical/reference review | `numerical-review-agent` | `passed` | `docs/shell-surface-pressure-load/numerical-review.md`; `docs/shell-surface-pressure-load/reference-model.md` | Numerical review와 exact reference contract가 함께 `pass-for-io-definition`임 | Aligned `pass-for-io-definition`; `tau_J=1e-12`, analytical/objectivity `1e-12`, FD `h=1e-5`/error `1e-8`, global balance `1e-8`; exact 729-row reference inventory, U/UR 2,187 logical rows each; owner evidence와 Coordinator audit 통과 | 없음 | 1 |
|
||||
| 5. I/O definition | `io-definition-agent` | `passed` | `docs/shell-surface-pressure-load/io.md` | Abaqus subset, semantic mapping, diagnostics, HDF5 projection과 reference rows가 명확함 | `ready-for-implementation-planning`; exact assembly `SURFACE`/step `DSLOAD P`, Domain/Step/AnalysisModel mapping, ordered fail-closed validation, unchanged schema `0/1`, exact HDF5/reference projection, trace 24/24; owner `passed`; Coordinator audit 통과 | 없음 | 1 |
|
||||
| 6. Implementation | `implementation-planning-agent`; `implementation-agent` | `passed` | `docs/shell-surface-pressure-load/implementation-plan.md`; `docs/shell-surface-pressure-load/implementation-report.md`; `docs/shell-surface-pressure-load/build-test.md`; `docs/shell-surface-pressure-load/reference-comparison.md`; `docs/shell-surface-pressure-load/corrections.md` | 승인 계획, TDD evidence, MSVC/x64/Debug build/CTest와 blocking reference comparison이 모두 통과함 | Harness Steps 1–7 completed; focused `64/64`, pressure reference `9/9`, final automatic Stop build PASS/full `362/362 PASS`, 0 failed; requirements trace `24/24`; post-hook reports는 historical evidence와 `pass-for-physics-evaluation`을 기록함 | 없음 | 2 |
|
||||
| 7. Physics evaluation | `physics-evaluation-agent` | `passed` | `docs/shell-surface-pressure-load/physics-evaluation.md` | Direction, symmetry, resultant, reaction과 equilibrium 검토가 `pass-for-release-agent`임 | Owner `pass-for-release-agent`; documented pressure direction/sign, current-area resultant/moment, reactions/equilibrium, symmetry/zero behavior, follower objectivity, residual/nonfinite sanity와 declared model coverage 통과; normalized force/moment balance `6.76e-14`/`3.72e-14 <= 1e-8`; Coordinator output/status/no-change audit 통과 | 없음 | 1 |
|
||||
| 8. Release readiness | `release-agent` | `passed` | `docs/shell-surface-pressure-load/release.md` | Acceptance traceability와 limitation을 포함한 verdict가 `ready-for-release`임 | Owner `ready-for-release`; Gates 1–7 consistent, must requirements `24/24` traced, full `362/362`, focused `64/64`, reference `9/9`, U/UR `2187/2187`, physics force/moment balance evidence와 11개 known limitations/release notes 포함; Coordinator output/status/no-change audit 통과 | 없음 | 1 |
|
||||
|
||||
## 3. Active Dispatch Package and Latest Sub-Agent Return
|
||||
|
||||
### Completed Dispatch Package
|
||||
|
||||
- dispatch_id: `GATE1-REQ-001`
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- target_sub_agent: `requirement-agent`
|
||||
- required_inputs:
|
||||
- `AGENTS.md`
|
||||
- `docs/PRD.md`
|
||||
- `docs/ARCHITECTURE.md`
|
||||
- `docs/ADR.md`
|
||||
- `docs/TOLERANCE.md`
|
||||
- `docs/SOLVER_AGENT_DESIGN.md`
|
||||
- approved design recorded in this file
|
||||
- `reference/shellNL-meshfine-pressure/` read-only inventory
|
||||
- expected_outputs: `docs/shell-surface-pressure-load/requirements.md`
|
||||
- acceptance_gate: Verifiable shall requirements, explicit scope/exclusions, input/output semantics, failure behavior, deterministic identity/order, reference quantities/dispositions, common tolerance baseline and complete requirement verification matrix preserve the approved design without downstream formulation or I/O invention.
|
||||
- stop_condition: `requirements.md`와 return evidence를 제출한 뒤 중지한다. Peer dispatch, Gate 2 work, source/tests/CMake/reference/tolerance 변경은 금지한다.
|
||||
- missing_evidence: 없음
|
||||
|
||||
### Completed Dispatch Package — Gate 2
|
||||
|
||||
- dispatch_id: `GATE2-RES-001`
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- target_sub_agent: `research-agent`
|
||||
- required_inputs:
|
||||
- `AGENTS.md`
|
||||
- `docs/SOLVER_AGENT_DESIGN.md`
|
||||
- `docs/shell-surface-pressure-load/requirements.md` binding baseline
|
||||
- `docs/PRD.md`, `docs/ARCHITECTURE.md`, `docs/ADR.md`, `docs/TOLERANCE.md`
|
||||
- exact read-only inventory under `reference/shellNL-meshfine-pressure/`
|
||||
- `fesa-research-evidence`; 필요 시 `fem-theory-query`
|
||||
- expected_outputs: `docs/shell-surface-pressure-load/research.md`
|
||||
- acceptance_gate: Key claims마다 source/reliability tier 또는 inference label이 있고, Abaqus observable input/load semantics와 FESA-owned theory가 분리된다. Pressure virtual work, current-surface follower force, external tangent, S4/S4R applicability와 verification candidates가 target quantity, 한계, exact artifact와 requirement trace를 갖는다.
|
||||
- stop_condition: `research.md`와 return evidence 제출 후 중지한다. Formulation 확정, peer dispatch, Gate 3, source/tests/CMake/reference/tolerance 변경은 금지한다.
|
||||
- missing_evidence: 없음
|
||||
|
||||
### Completed Dispatch Package — Gate 3
|
||||
|
||||
- dispatch_id: `GATE3-FORM-001`
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- target_sub_agent: `formulation-agent`
|
||||
- required_inputs:
|
||||
- `AGENTS.md`
|
||||
- `docs/SOLVER_AGENT_DESIGN.md`
|
||||
- binding `docs/shell-surface-pressure-load/requirements.md`
|
||||
- approved `docs/shell-surface-pressure-load/research.md`
|
||||
- applicable project architecture/ADR contracts
|
||||
- `fesa-formulation-spec`; 필요 시 supporting `fem-theory-query`
|
||||
- expected_outputs: `docs/shell-surface-pressure-load/formulation.md`
|
||||
- acceptance_gate: Strong/weak form, S4/S4R interpolation, side/sign map, reference/current geometry, quadrature/Jacobian validity, consistent pressure force, residual sign, exact external tangent, full-space deterministic assembly, units/failures, verification identities와 requirement trace가 implementation-ready이며 Abaqus internal equivalence를 주장하지 않음.
|
||||
- stop_condition: `formulation.md`와 return evidence 제출 후 중지한다. Parser/API/source/test/reference 변경, peer dispatch, Numerical Review/Gate 4 수행은 금지한다.
|
||||
- missing_evidence: 없음
|
||||
|
||||
### Completed Dispatch Package — Gate 4
|
||||
|
||||
- dispatch_id: `GATE4-NR-001`
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- target_sub_agent: `numerical-review-agent`
|
||||
- required_inputs:
|
||||
- `AGENTS.md`, `docs/SOLVER_AGENT_DESIGN.md`
|
||||
- binding `requirements.md`, approved `research.md`, `formulation.md`
|
||||
- `docs/TOLERANCE.md`와 applicable architecture/ADR contracts
|
||||
- exact read-only `reference/shellNL-meshfine-pressure/` artifacts
|
||||
- `fesa-numerical-review`
|
||||
- expected_outputs: `docs/shell-surface-pressure-load/numerical-review.md`; `docs/shell-surface-pressure-load/reference-model.md`
|
||||
- acceptance_gate: 독립 sign/force/tangent/residual/integration/geometry/objectivity/equilibrium/determinism review가 blocking flaw 없이 통과하고, `tau_J`와 internal test thresholds가 scale-aware하게 확정된다. Exact input/required CSV identity, component/blocking classification, row prechecks와 unchanged `docs/TOLERANCE.md` policy가 I/O 정의에 충분해야 한다.
|
||||
- stop_condition: 두 report와 owner verdict/return evidence 제출 후 중지한다. Upstream flaw는 문서를 조용히 수정하지 않고 precise rework로 반환한다. Source/tests/CMake/reference/tolerance 변경, peer dispatch, Gate 5 수행은 금지한다.
|
||||
- missing_evidence: 없음
|
||||
|
||||
### Completed Dispatch Package — Gate 5
|
||||
|
||||
- dispatch_id: `GATE5-IO-001`
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- target_sub_agent: `io-definition-agent`
|
||||
- required_inputs:
|
||||
- `AGENTS.md`, `docs/SOLVER_AGENT_DESIGN.md`
|
||||
- approved feature `requirements.md`, `research.md`, `formulation.md`, `numerical-review.md`, `reference-model.md`
|
||||
- applicable PRD/architecture/ADR/CODINGSTYLE/TOLERANCE contracts
|
||||
- exact read-only `reference/shellNL-meshfine-pressure/` artifacts
|
||||
- `fesa-io-contract`
|
||||
- expected_outputs: `docs/shell-surface-pressure-load/io.md`
|
||||
- acceptance_gate: Approved `*SURFACE TYPE=ELEMENT`/`*DSLOAD P` grammar, model/history mapping, deterministic target resolution/diagnostics, Domain/Step/AnalysisModel semantic ownership, existing authoritative HDF5 field projection, exact reference CSV identity/prechecks/common tolerance와 compatibility boundary가 구현 계획에 충분하고 upstream contract와 일치함.
|
||||
- stop_condition: `io.md`와 owner return evidence 제출 후 중지한다. Parser/API implementation, source/tests/CMake/phases/reference/tolerance 변경, peer dispatch와 Gate 6 수행은 금지한다.
|
||||
- missing_evidence: 없음
|
||||
|
||||
### Completed Dispatch Package — Gate 6 Planning
|
||||
|
||||
- dispatch_id: `GATE6-PLAN-001`
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- target_sub_agent: `implementation-planning-agent`
|
||||
- required_inputs:
|
||||
- `AGENTS.md`, `docs/SOLVER_AGENT_DESIGN.md`, `docs/HARNESS.md`, `docs/HARNESS_WORKFLOW.md`
|
||||
- approved feature `requirements.md`, `research.md`, `formulation.md`, `numerical-review.md`, `reference-model.md`, `io.md`
|
||||
- current source/tests/CMake/`.harness/config.json`/hooks/phase inventory read-only
|
||||
- `fesa-cpp-msvc-tdd`, project-local `harness`, compatible `superpowers:writing-plans`
|
||||
- expected_outputs: `docs/shell-surface-pressure-load/implementation-plan.md`; concise user-approval Step draft in owner return
|
||||
- acceptance_gate: Multiple self-contained Steps가 각자 `RED -> observed failure -> minimal GREEN -> focused/full VERIFY`를 포함하고 exact files/signatures/tests/commands/dependencies/traceability를 지정한다. Parser/model, force/tangent, linear/nonlinear assembly, deterministic failure, HDF5/reference comparison와 final MSVC x64 Debug CTest evidence를 모두 다루며 reference immutability/atomicity를 보존한다.
|
||||
- stop_condition: Plan draft와 return evidence 제출 후 사용자 승인을 기다린다. `phases/index.json`, `phases/<task>/`, source/tests/CMake/reference 수정, Harness execution, Implementation Agent dispatch는 승인 전 금지한다.
|
||||
- missing_evidence: 사용자 plan approval
|
||||
|
||||
### Completed Dispatch Package — Gate 6 Phase Materialization
|
||||
|
||||
- dispatch_id: `GATE6-PHASE-001`
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- target_sub_agent: `implementation-planning-agent` (`GATE6-PLAN-001`과 동일 owner instance)
|
||||
- required_inputs:
|
||||
- approved `docs/shell-surface-pressure-load/implementation-plan.md`
|
||||
- `AGENTS.md`, `docs/HARNESS.md`, `docs/HARNESS_WORKFLOW.md`, project-local `harness`
|
||||
- existing `phases/index.json`과 existing task directories
|
||||
- expected_outputs: `phases/index.json`; `phases/shell-surface-pressure-load/index.json`; `phases/shell-surface-pressure-load/step1.md`–`step7.md`
|
||||
- acceptance_gate: Top-level task entry와 task index의 7 pending Steps가 승인 slug/order와 정확히 일치한다. 각 Step은 독립 실행에 필요한 upstream docs, exact files/signatures, RED expected failure, minimal GREEN, focused/full MSVC x64 Debug CMake/CTest commands, dependencies, status ownership, forbidden scope와 reference immutability를 대화 참조 없이 포함한다.
|
||||
- stop_condition: Planning files만 materialize하고 실행·Step selection·status advancement·timestamp·commit·push를 하지 않는다. Source/tests/CMake/docs/reference/tolerance는 변경하지 않는다.
|
||||
- missing_evidence: 없음
|
||||
|
||||
### Paused Dispatch — Gate 6 Implementation Recovery
|
||||
|
||||
- dispatch_id: `GATE6-IMPL-RECOVERY-001`
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- target_sub_agent: `implementation-agent`
|
||||
- required_inputs:
|
||||
- `AGENTS.md`, `.codex/hooks.json`, `.agents/skills/harness/SKILL.md`, `docs/HARNESS.md`, `docs/HARNESS_WORKFLOW.md`
|
||||
- approved feature bundle `requirements.md`, `research.md`, `formulation.md`, `numerical-review.md`, `reference-model.md`, `io.md`, `implementation-plan.md`
|
||||
- materialized `phases/index.json`, `phases/shell-surface-pressure-load/index.json`, `step1.md`–`step7.md`
|
||||
- `fesa-cpp-msvc-tdd`; user authorization for `python scripts/execute.py shell-surface-pressure-load` without `--push`
|
||||
- clean recovery worktree `C:/git/FESADev/.worktrees/shell-surface-pressure-load-recovery`, baseline `2d07106`, branch `feat-shell-surface-pressure-load-recovery`
|
||||
- per-process-only `FESA_HARNESS_CODEX_SANDBOX=danger-full-access`; remove environment variable immediately after Executor returns
|
||||
- root baseline evidence: approved dependency paths, MSVC x64 Debug configure/build pass, nonzero discovery, full CTest `302/302 PASS`
|
||||
- expected_outputs: completed phase Step records; feature production/tests/CMake/comparator changes; `docs/shell-surface-pressure-load/implementation-report.md`; `build-test.md`; `reference-comparison.md`; actual RED/GREEN/VERIFY logs and unchanged reference hashes
|
||||
- acceptance_gate: Step 1–7 executes in order with expected RED before each production behavior, minimal GREEN, focused and full MSVC x64 Debug build/CTest. Final comparison uses exact stored artifacts, deterministic identity/prechecks/common tolerance and records U blocking/UR warning-only while preserving hashes. All Gate 6 reports must support `pass-for-physics-evaluation` with no unresolved blocking failure.
|
||||
- stop_condition: Execute only in the recovery worktree. Do not touch the original backup workspace, push, run Abaqus/reference solvers, change upstream contracts/tolerance/reference artifacts, advance Gate 7, or revert other agents' docs/coordination changes. Scope `danger-full-access` only to the single Executor process and remove it afterward. Repeated/unclear implementation failure returns to Coordinator for bounded correction routing.
|
||||
- missing_evidence: completed Steps 1–7, three Gate 6 reports, owner return, Coordinator evidence audit
|
||||
|
||||
### Completed Dispatch — Gate 6 Correction
|
||||
|
||||
- dispatch_id: `GATE6-CORR-001`
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- target_sub_agent: `correction-agent`
|
||||
- required_inputs:
|
||||
- Step 1/2 commits `ca3e4bc`, `d5fc316`, `c3b671d`, `adebfae` and ignored `step1-output.json`, `step2-output.json`
|
||||
- observed process evidence: Step 2 agent full CTest PID `21572` at `12:44:03`; Stop hook PIDs `21496/20712` at `12:45:41`; Stop full CTest PID `8816` at `12:46:01`; final test PID `21964`; parallel overlap while Harness waited for pipe EOF
|
||||
- approved `implementation-plan.md`, `step3.md`–`step7.md`, `fesa-cpp-msvc-tdd`, project Harness and Stop-hook ownership contracts
|
||||
- current phase index with stale pending Step 3 `started_at=2026-09-01T13:11:27+0900`
|
||||
- expected_outputs: `docs/shell-surface-pressure-load/corrections.md`; minimally corrected `phases/shell-surface-pressure-load/step3.md`–`step7.md`; normalized Step 3 pending index entry if required
|
||||
- acceptance_gate: Root cause/evidence, Step 1/2 RED/focused/full evidence and timeout classification are auditable. Pending Steps require agent-owned RED+focused verification only and preserve Stop hook as the single whole-project full verification owner. Acceptance/tolerance/reference strength and final Gate 6 report evidence remain unchanged; diff has no code/test/reference/upstream-contract edits.
|
||||
- stop_condition: Do not commit, execute Harness/build/test, modify Step 1/2, source/tests/CMake/reference/tolerance/upstream docs, advance phase/Gate 7, or revert other agents' changes. Return exact rerun/commit recommendation to Coordinator.
|
||||
- missing_evidence: 없음
|
||||
|
||||
### Completed Dispatch — Gate 6 Post-Hook Evidence Amendment
|
||||
|
||||
- dispatch_id: `GATE6-EVIDENCE-001`
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- target_sub_agent: same `implementation-agent`
|
||||
- required_inputs: completed phase index/commits, Step 7 output, `.harness/build/Testing/Temporary/LastTest.log`, authoritative final automatic Stop full CTest `362/362 PASS`, 0 failed
|
||||
- expected_outputs: amended `docs/shell-surface-pressure-load/build-test.md`; `implementation-report.md` only if needed for consistency
|
||||
- acceptance_gate: Exact Stop configure/build/discovery/full-test command/result, exit status, `362/362`, zero failures, duration/tail and single-owner classification are historical fact rather than future tense; no source/test/CMake/reference/phase changes and no test rerun.
|
||||
- stop_condition: Evidence-only docs amendment; do not run build/CTest/Harness, change implementation/reference/upstream contracts, commit/push, dispatch peers, or advance Gate 7.
|
||||
- missing_evidence: 없음
|
||||
|
||||
### Completed Dispatch — Gate 7 Physics Evaluation
|
||||
|
||||
- dispatch_id: `GATE7-PHYS-001`
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- target_sub_agent: `physics-evaluation-agent`
|
||||
- required_inputs: approved feature bundle `requirements.md`, `research.md`, `formulation.md`, `numerical-review.md`, `reference-model.md`, `io.md`; passing `implementation-report.md`, `build-test.md`, `reference-comparison.md`; exact read-only reference artifacts; `fesa-physics-sanity`
|
||||
- expected_outputs: `docs/shell-surface-pressure-load/physics-evaluation.md`
|
||||
- acceptance_gate: Passing reference rows와 implementation evidence를 바탕으로 pressure 방향/부호, resultant와 moment, reactions/equilibrium, symmetry/zero behavior, nonlinear follower objectivity/current-area behavior, nonfinite/residual sanity와 stored-case model coverage를 독립 평가하고 verdict가 `pass-for-release-agent`임.
|
||||
- stop_condition: Physics report와 owner return evidence 제출 후 중지한다. Source/tests/CMake/reference/tolerance/upstream contracts를 수정하거나 Abaqus를 실행하거나 Gate 8을 수행하지 않는다.
|
||||
- missing_evidence: 없음
|
||||
|
||||
### Completed Dispatch — Gate 8 Release Readiness
|
||||
|
||||
- dispatch_id: `GATE8-REL-001`
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- target_sub_agent: `release-agent`
|
||||
- required_inputs: Gates 1–7 approved feature bundle과 owner reports: `requirements.md`, `research.md`, `formulation.md`, `numerical-review.md`, `reference-model.md`, `io.md`, `implementation-plan.md`, `implementation-report.md`, `build-test.md`, `reference-comparison.md`, `corrections.md`, `physics-evaluation.md`; `fesa-release-readiness`
|
||||
- expected_outputs: `docs/shell-surface-pressure-load/release.md`
|
||||
- acceptance_gate: Required reports가 같은 feature/status로 일치하고 full `362/362` validation, `pass-for-physics-evaluation`, `pass-for-release-agent`가 확인되며 각 `must` requirement가 acceptance/test/reference/release scope와 추적되고 known limitations 및 release notes draft를 포함한 verdict가 `ready-for-release`임.
|
||||
- stop_condition: Release report와 owner return evidence 제출 후 중지한다. Source/tests/CMake/reference/tolerance/upstream contracts를 수정하거나 build/test/Harness/reference solver를 실행하거나 publish/deploy/package/tag/commit/push하지 않는다.
|
||||
- missing_evidence: 없음
|
||||
|
||||
### Latest Sub-Agent Return
|
||||
|
||||
- target_sub_agent: `release-agent`
|
||||
- output_paths: `docs/shell-surface-pressure-load/release.md`
|
||||
- status: `ready-for-release`
|
||||
- evidence_summary: Gates 1–7 status/evidence consistency, must requirements `24/24` acceptance/test/reference/release trace, full `362/362`, focused `64/64`, reference `9/9`, U/UR `2187/2187`, physics force/moment balance와 exact artifact immutability를 감사함. Known limitations 11개와 release notes draft를 포함하고 내부 closure를 권고함.
|
||||
- blockers: 없음
|
||||
- open_evidence_gaps: 없음
|
||||
- critical_user_question: 없음
|
||||
- forbidden_area_assertion: `release.md`만 생성; source, tests, CMake, phases, upstream reports, generated evidence, `docs/TOLERANCE.md`, reference artifact 변경 없음; build/test/reference solver 재실행 없음
|
||||
|
||||
## 4. Gate Decision Log and Workflow State
|
||||
|
||||
| date | dispatch | gate decision | owner evidence | workflow state |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 2026-08-30 | `GATE1-REQ-001` | `passed` | Owner `passed`; `requirements.md` 24 normative IDs/24 matrix rows, complete traceability, approved design/reference boundary, blocker 없음. Coordinator 독립 구조 감사에서 orphan 0, matrix-only 0 및 필수 contract field 누락 0 확인 | `needs-research` |
|
||||
| 2026-08-30 | `GATE2-RES-001` | `passed` | Owner `passed`; source 15/key claims 15/benchmark 8/trace gap 0. Coordinator audit에서 undeclared cited source 0, Abaqus observable/FESA formulation 분리, limitation과 nonblocking gap 확인 | `needs-formulation` |
|
||||
| 2026-08-30 | `GATE3-FORM-001` | `passed` | Owner `passed`, document `ready-for-numerical-review`; Coordinator audit에서 required formulation sections 완비, requirement rows 24/24, upstream scope/sign/output 일치와 explicit Numerical Review handoff 확인 | `needs-numerical-review` |
|
||||
| 2026-08-30 | `GATE4-NR-001` | `passed` | Owner reports aligned `pass-for-io-definition`; Coordinator audit에서 두 verdict/required sections, quantitative gates, exact artifact/row/component classification, precheck/common tolerance/immutability와 no final HDF5 projection 확인 | `needs-io-definition` |
|
||||
| 2026-08-31 | `GATE5-IO-001` | `passed` | Owner `passed`, document `ready-for-implementation-planning`; Coordinator audit에서 required sections/grammar/ownership/validation/schema/reference projection 완비, trace 24/24, no new dataset/version와 no critical issue 확인 | `needs-implementation-plan` |
|
||||
| 2026-08-31 | `GATE6-PLAN-001` | `passed` | Owner `passed`, document `draft-awaiting-user-approval`; Coordinator audit에서 7 Steps, TDD/commands/dependencies/24-of-24 trace, no phase/code mutation 확인. Initial `upstream-io-contract-mismatch`는 same-owner follow-up으로 multi-explicit-instance 지원과 committed source identity를 교정함. 이는 planning subgate 판정이며 Stage 6 implementation gate는 미통과 | `needs-user-decision` |
|
||||
| 2026-09-01 | `GATE6-PLAN-APPROVAL` | `passed` | User explicitly approved the 7-Step draft, phase materialization, and implementation/verification execution; `--push` 금지 | `needs-implementation-plan` |
|
||||
| 2026-09-01 | `GATE6-PHASE-001` | `pending` | 동일 Implementation Planning Agent의 phase materialization과 Coordinator audit 대기 | `needs-implementation-plan` |
|
||||
| 2026-09-01 | `GATE6-PHASE-001` | `passed` | Owner `passed`; Coordinator audit에서 existing top index preservation, exact 7 pending slugs/files, Executor-readable paths, self-contained RED/GREEN/VERIFY와 exact reference immutability 확인 | `ready-for-implementation` |
|
||||
| 2026-09-01 | `GATE6-IMPL-001` | `pending` | Exactly one Implementation Agent execution/evidence 대기 | `needs-implementation` |
|
||||
| 2026-09-01 | `GATE6-IMPL-001` | `blocked` | Original shared-workspace Step 1의 공식 CMake compiler identification이 MSBuild FileTracker `0x80070005`로 차단됨. 첫 `environment/sandbox-msvc-filetracker-access-denied`; correction-agent 비대상. Dirty workspace를 backup으로 보존 | `needs-user-decision` |
|
||||
| 2026-09-01 | `GATE6-RECOVERY-APPROVAL` | `passed` | User approved isolated linked recovery worktree와 per-run `danger-full-access`; root created clean baseline `2d07106` and independently verified MSVC x64 Debug configure/build, nonzero discovery, full CTest `302/302 PASS` | `ready-for-implementation` |
|
||||
| 2026-09-01 | `GATE6-IMPL-RECOVERY-001` | `pending` | Same Implementation Agent controller recovery execution/evidence 대기 | `needs-implementation` |
|
||||
| 2026-09-01 | `GATE6-IMPL-RECOVERY-001` | `needs-rework` | Step 1/2 commits completed, but agent full CTest and Stop-hook full CTest overlapped in parallel and caused repeated 1800-second timeout/slowdown. Harness safe-stopped after Step 2 commits; Step 3 source edit 없음 | `needs-correction` |
|
||||
| 2026-09-01 | `GATE6-CORR-001` | `pending` | Exactly one Correction Agent root-cause audit/minimal verification-ownership correction 대기 | `needs-correction` |
|
||||
| 2026-09-01 | `GATE6-CORR-001` | `passed` | Owner `corrected-for-implementation-rerun`; Coordinator audit에서 correction scope가 `corrections.md`, Step 3–7 wording와 stale pending Step 3 timestamp 제거에 한정되고 source/tests/CMake/hooks/reference/upstream contract no-change, focused/reference strength와 single Stop full gate 유지 확인 | `needs-implementation` |
|
||||
| 2026-09-01 | `GATE6-EVIDENCE-001` | `pending` | Harness Step 7 completed, final Stop `362/362 PASS`; reports의 post-hook historical evidence amendment 대기 | `needs-implementation` |
|
||||
| 2026-09-01 | `GATE6-EVIDENCE-001` | `passed` | Same Implementation Agent가 `build-test.md`와 `implementation-report.md`에 phase completion, automatic Stop build PASS, nonzero discovery, full `362/362 PASS`, 0 failed와 evidence provenance를 기록함. Coordinator cross-report audit에서 focused `64/64`, pressure reference `9/9`, requirements `24/24`, exact reference immutability와 `pass-for-physics-evaluation` 일치 확인 | `needs-physics-evaluation` |
|
||||
| 2026-09-01 | `GATE7-PHYS-001` | `pending` | Exactly one Physics Evaluation Agent의 independent physical plausibility evidence 대기 | `needs-physics-evaluation` |
|
||||
| 2026-09-01 | `GATE7-PHYS-001` | `passed` | Owner `pass-for-release-agent`; `physics-evaluation.md`가 documented pressure direction/sign, resultant/moment, reaction/equilibrium, symmetry/zero, follower objectivity/current-area, residual/nonfinite와 declared model coverage를 통과로 판정함. Coordinator audit에서 required sections, input handoff, `6.76e-14`/`3.72e-14 <= 1e-8`, blocker 없음과 physics-only no-change 확인 | `needs-release` |
|
||||
| 2026-09-01 | `GATE8-REL-001` | `pending` | Exactly one Release Agent의 gate inventory, acceptance traceability, limitations와 closure recommendation 대기 | `needs-release` |
|
||||
| 2026-09-01 | `GATE8-REL-001` | `passed` | Owner `ready-for-release`; `release.md`가 11 required sections, Gates 1–7 consistent, must trace `24/24`, full/focused/reference/physics passing evidence, known limitations와 release notes를 포함함. Coordinator audit에서 required output/status/blocker/no-change 및 internal-only release boundary 확인 | `completed` |
|
||||
|
||||
## 5. Risk, Blocker, and User-Decision Register
|
||||
|
||||
- active_blockers: 없음
|
||||
- critical_user_questions: 없음
|
||||
- USER-DECISION-001: `resolved 2026-09-01`; 7-Step draft, phase materialization, Harness implementation/verification execution 승인. `--push`는 승인되지 않음.
|
||||
- USER-DECISION-002: `resolved 2026-09-01`; isolated linked recovery worktree와 해당 Executor process에 한정한 `danger-full-access` 승인. Original dirty workspace는 immutable backup으로 보존.
|
||||
- RISK-008: Recovery Executor/commands의 workdir을 `C:/git/FESADev/.worktrees/shell-surface-pressure-load-recovery`로 고정하고 environment fallback을 process 종료 직후 제거한다.
|
||||
- RISK-009: Pending Step agent가 full CTest를 실행하는 동안 Stop hook이 별도 full CTest를 시작하면 process overlap, timeout과 false failure가 발생한다. Agent는 RED+focused VERIFY, Stop hook은 single whole-project full VERIFY를 소유하도록 경계를 명시한다.
|
||||
- RISK-001: Element-based `*DLOAD` pressure와 surface-based `*DSLOAD` pressure의 sign/target 의미를 혼합하지 않는다.
|
||||
- RISK-002: Nonlinear follower pressure의 current-surface force와 external tangent를 fixed-global `*CLOAD`와 혼합하지 않는다.
|
||||
- RISK-003: Reference artifact 또는 공통 tolerance를 기능 통과를 위해 수정하지 않는다.
|
||||
- RISK-004: Directly applicable public S4/S4R follower-pressure target 부재는 analytical/tangent/equilibrium suite와 exact stored case를 함께 사용해 보완하며, target을 발명하지 않는다.
|
||||
- RISK-005: External pressure tangent는 generally nonsymmetric이므로 symmetrize하지 않으며 Numerical Review가 global special-case evidence와 `tau_J`/FD acceptance를 확정한다.
|
||||
- RISK-006: Stored case의 S4/SPOS/positive `P` coverage 한계는 S4R, side/sign, objectivity와 tangent blocking internal tests로 보완한다.
|
||||
- RISK-007: Input compatibility는 assembly-level direct/explicit-instance ELSET surface와 parameterless `DSLOAD P` exact subset뿐이며 part-level/implicit qualification/`DLOAD`를 추정 지원하지 않는다.
|
||||
- adopted_default: 승인 범위 내 secondary detail은 Abaqus surface-pressure behavior와 repository convention을 evidence-backed default로 사용한다.
|
||||
|
||||
## 6. Rework-Loop Control and Stop Condition
|
||||
|
||||
- normalized_failure_attempts: `upstream-io-contract-mismatch` 1회 교정 완료; `environment/sandbox-msvc-filetracker-access-denied` 1회 recovery routing 완료; `harness-parallel-duplicate-full-verification-timeout` 2회 관측, first Correction Agent response explicitly dispatched
|
||||
- automatic_rework_limit: 동일 normalized failure classification `2`회
|
||||
- current_attempt: Gate 7 attempt 1 완료; Gate 8 attempt 1 완료; `post-hook-evidence-amendment` 1회 완료; implementation Steps 1–7 완료; correction 1회 완료; `implementation-planning` 1회 완료; phase materialization 1회 완료; Gates 1–8 완료
|
||||
- stop_condition: 동일 classification이 2회이면 자동 재작업을 중단하고 `needs-user-decision` 또는 `blocked`로 전환한다.
|
||||
|
||||
## 7. Final Workflow Closure
|
||||
|
||||
- closure_status: `completed`
|
||||
- required_evidence: Gates 1–8 owner evidence와 `release.md`의 `ready-for-release` recommendation
|
||||
- closure_evidence: Gates 1–8 `passed`; `release.md` status `ready-for-release`; must trace `24/24`; blocker 및 open evidence gap 없음.
|
||||
- current_boundary: Internal feature workflow closed. Publish, deploy, package, tag, merge, push 또는 external release는 별도 명시 권한 없이는 수행하지 않는다.
|
||||
|
||||
## 8. No-Change Assertion
|
||||
|
||||
- source_code: Gate 6 approved implementation에서 변경됨; Coordinator와 post-hook evidence amendment는 변경하지 않음
|
||||
- tests: Gate 6 approved TDD implementation에서 변경됨; Coordinator와 post-hook evidence amendment는 변경하지 않음
|
||||
- CMake: Gate 6 approved implementation에서 test registration 변경됨; Coordinator와 post-hook evidence amendment는 변경하지 않음
|
||||
- reference_artifacts: 변경 없음
|
||||
- tolerance_policies: 변경 없음
|
||||
- phase_planning: `phases/index.json`에 pending entry append; `phases/shell-surface-pressure-load/index.json`과 `step1.md`–`step7.md` 생성
|
||||
- recovery_baseline: Root가 isolated recovery worktree/branch와 baseline commit `2d07106`을 준비하고 MSVC x64 Debug full baseline `302/302 PASS`를 확인함
|
||||
- correction_change: `corrections.md` 생성, Step 3–7 verification ownership 문구 최소 교정, pending Step 3 stale `started_at` 제거; source/tests/CMake/hooks/scripts/reference/tolerance/upstream docs 변경 없음
|
||||
- coordinator_change: `docs/shell-surface-pressure-load/coordination.md` 생성 및 Gates 1–5와 Gate 6 planning evidence 기록
|
||||
- specialist_change: Requirement Agent가 `requirements.md`, Research Agent가 `research.md`, Formulation Agent가 `formulation.md`, Numerical Review Agent가 `numerical-review.md`와 `reference-model.md`, I/O Definition Agent가 `io.md`, Implementation Planning Agent가 `implementation-plan.md`를 각각 생성함
|
||||
- gate6_evidence_change: Implementation Agent가 `implementation-report.md`, `build-test.md`, `reference-comparison.md`를 완성하고 post-hook final Stop evidence를 report-only amendment로 반영함; reference/tolerance 변경 없음
|
||||
- gate7_evidence_change: Physics Evaluation Agent가 `physics-evaluation.md`만 생성하고 existing HDF5/log/reference evidence를 read-only 감사함; source/tests/CMake/contracts/reference/tolerance/generated evidence 변경 없음
|
||||
- gate8_evidence_change: Release Agent가 `release.md`만 생성하고 Gates 1–7과 acceptance traceability를 감사함; source/tests/CMake/upstream reports/reference/tolerance/generated evidence 변경 및 build/test/reference solver 재실행 없음
|
||||
@@ -1,76 +0,0 @@
|
||||
# Shell Surface Pressure Load Correction Report
|
||||
|
||||
## 1. Metadata
|
||||
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- source failure report: `phases/shell-surface-pressure-load/step1-output.json`, `phases/shell-surface-pressure-load/step2-output.json`, `.harness/build/Testing/Temporary/LastTest.log`
|
||||
- source implementation plan: `docs/shell-surface-pressure-load/implementation-plan.md`
|
||||
- status: `corrected-for-implementation-rerun`
|
||||
- owner_agent: `correction-agent`
|
||||
- date: `2026-09-01`
|
||||
- normalized failure: `harness-parallel-duplicate-full-verification-timeout`
|
||||
- attempt count: `2`
|
||||
|
||||
## 2. Failure Triage
|
||||
|
||||
- classification: `harness`
|
||||
- first failed command: `python scripts/execute.py shell-surface-pressure-load`
|
||||
- failed target or test: 제품 test 실패가 아니라 Implementation Agent가 실행한 unfiltered full CTest와 automatic Stop whole-project CTest의 중복 실행으로 인한 Harness outer timeout
|
||||
- evidence tail: Step 2 agent full CTest PID `21572`가 `12:44:03`에 시작되었고, agent command가 `12:45:41`에 반환되기 전에 Codex Stop-hook `stop_validation.py` PIDs `21496`/`20712`가 시작되었다. 별도 Stop full CTest PID `8816`은 `12:46:01`에 시작되었으며 최종 test PID `21964`가 실행되는 동안 Harness는 pipe EOF를 기다렸다. 같은 형태의 overlap이 두 번의 1800초 timeout/slowdown을 만들었다.
|
||||
|
||||
## 3. Root Cause Summary
|
||||
|
||||
Root cause는 implementation defect, test defect 또는 CMake registration issue가 아니다. Pending Step 문서가 Implementation Agent에게 whole-project `cmake --build`와 unfiltered full CTest를 직접 실행하도록 요구하면서 `.codex/hooks.json`의 automatic Stop도 동일한 whole-project 검증을 수행했다. 장시간 reference tests가 병렬로 중복 실행되어 Executor가 Codex process와 pipe 종료를 기다리다 timeout됐다. 따라서 Step 2 output의 `exitCode: 124`는 product test failure가 아니라 Harness orchestration timeout이다.
|
||||
|
||||
## 4. Correction Scope
|
||||
|
||||
변경 범위는 pending Step의 실행 지시를 단일 검증 소유권으로 정규화하는 문구뿐이다.
|
||||
|
||||
- changed documentation: `phases/shell-surface-pressure-load/step3.md`–`step7.md`
|
||||
- new report: `docs/shell-surface-pressure-load/corrections.md`
|
||||
- retained agent-owned checks: test-first RED, targeted MSVC x64 Debug build, focused feature/regression CTest, nonzero discovery, warning/contract checks
|
||||
- retained Stop-owned check: exactly one automatic whole-project MSVC x64 Debug build and unfiltered full CTest
|
||||
- retained final gate: literal `ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT`, exact artifact hashes/immutability, approved matching/tolerance and report completeness
|
||||
- excluded unchanged files: source, public/private headers, tests, CMake, hooks, scripts, `.harness/config.json`, `requirements.md`, `research.md`, `formulation.md`, `numerical-review.md`, `reference-model.md`, `io.md`, `implementation-plan.md`, `coordination.md`, `docs/TOLERANCE.md`, reference artifacts
|
||||
|
||||
`phases/shell-surface-pressure-load/index.json`의 pending Step 3 stale `started_at` 정규화는 Coordinator-owned 작업으로 남겼으며 이 correction에서는 index를 수정하지 않았다.
|
||||
|
||||
## 5. Verification Evidence
|
||||
|
||||
### Step 1/2 evidence audit
|
||||
|
||||
| Step | RED evidence | focused evidence | whole-project evidence | audit decision |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| Step 1 | 신규 surface/DSLOAD semantic mapping 부재로 targeted RED가 실제 관찰됨 | parser/domain focused tests `36/36 passed` | MSVC Debug build passed, full CTest `310/310 passed` in `954.19 sec`; feature commit `ca3e4bc`, output commit `d5fc316` 존재 | feature/test evidence는 신뢰 가능하며 outer 1800초 timeout은 Harness overlap으로 분리 |
|
||||
| Step 2 | invalid pressure input/diagnostic negative-contract assertions의 expected RED가 실제 관찰됨 | Step 2 targeted/focused verification passed | `.harness/build/Testing/Temporary/LastTest.log` LastWrite `2026-09-01 13:11:27`, `Test Passed.` 321, `Test Failed.` 0, CTest error marker 0; feature commit `c3b671d`, output commit `adebfae` 존재 | `exitCode: 124`는 test failure가 아니라 overlapping agent/Stop full CTest timeout |
|
||||
|
||||
### Correction verification
|
||||
|
||||
- targeted reproducer: 실행하지 않음. 요구된 correction은 기존 두 overlap의 PID/timestamp 및 output/log evidence를 감사하는 문서/phase-instruction 교정이며 Harness/build/test 실행은 명시적으로 금지되었다.
|
||||
- config-resolved full MSVC build/test: 이번 correction에서 실행하지 않음. 다음 Implementation Agent는 focused commands까지만 수행하고 automatic Stop이 exactly one whole-project validation을 소유한다.
|
||||
- Stop result: 이번 correction turn에서는 Stop/Harness를 실행하지 않음.
|
||||
- Harness Python pytest: hook/script/config를 변경하지 않았으므로 해당 없음.
|
||||
- static verification: pending Step 3–7에서 agent-owned unfiltered full CTest와 target 없는 whole-project build가 제거되고, focused/reference commands와 automatic Stop 책임이 남는지 `rg` 및 `git diff --check`로 확인한다.
|
||||
|
||||
## 6. Traceability
|
||||
|
||||
| requirement id | task id | test id/evidence | failing command | corrected file | acceptance criterion |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `FESA-REQ-SHELL-PRESSURE-005`–`021` | Steps 3–5 | 각 Step의 named kernel/assembly/linear/nonlinear focused suites | agent-owned whole-project build/full CTest followed by automatic Stop | `step3.md`–`step5.md` | RED와 focused regression은 agent가 수행하고 Stop이 단 한 번 full MSVC/CTest를 수행 |
|
||||
| `FESA-REQ-SHELL-PRESSURE-017`–`024` | Step 6 | `ShellSurfacePressureReference.*` 및 reference regressions | agent-owned whole-project build/full CTest followed by automatic Stop | `step6.md` | exact artifacts, projection, prechecks, common tolerance와 reference classification 유지 |
|
||||
| `FESA-REQ-SHELL-PRESSURE-001`–`024` | Step 7 | feature suites, nonzero discovery, final reports and Stop evidence | duplicate full verification | `step7.md` | focused gates 뒤 `ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT`; automatic Stop single full gate; 24/24 report coverage |
|
||||
|
||||
## 7. Handoff Recommendation
|
||||
|
||||
Coordinator는 **같은 Implementation Agent**에 아래 rerun을 요청한다.
|
||||
|
||||
1. `phases/shell-surface-pressure-load/index.json`에서 pending Step 3의 stale `started_at`만 Executor 계약에 맞게 제거하고 Step 1/2 completed fields와 모든 status를 보존한다.
|
||||
2. 별도 승인된 기존 명령 `python scripts/execute.py shell-surface-pressure-load`로 Step 3부터 재개한다.
|
||||
3. 각 Step에서 planned test-first RED와 targeted build/focused feature/regression CTest 및 nonzero discovery를 기록한 뒤 status/summary를 갱신하고 agent turn을 종료한다.
|
||||
4. agent가 target 없는 whole-project build나 unfiltered full CTest를 시작하지 않도록 하며 automatic Stop이 exactly one whole-project MSVC x64 Debug build/test를 소유하게 한다.
|
||||
5. Step 7은 reference artifact를 변경하지 않고 literal `ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT`를 완료하며, Stop/Executor evidence를 포함해 Gate 6 보고서를 완결한다.
|
||||
6. 성공 후 Executor가 feature/output metadata commit을 생성하도록 하고 commit/push는 Executor 계약과 사용자 승인 범위에 따른다.
|
||||
|
||||
## 8. Stop Condition
|
||||
|
||||
동일 normalized classification `harness-parallel-duplicate-full-verification-timeout`이 이미 두 번 발생했으므로 automatic rework는 여기서 중단한다. 수정된 단일-owner 검증 지시로 같은 Implementation Agent rerun을 한 번 요청한다. 같은 overlap이 다시 발생하면 코드 우회 없이 `blocked`로 Coordinator에 반환한다. Upstream contract, tolerance, reference artifact 또는 formulation 변경이 필요해지는 경우에는 `needs-upstream-decision`; MSVC/path/permission 자체가 막히면 `needs-environment-fix`로 반환한다.
|
||||
@@ -1,818 +0,0 @@
|
||||
# Shell Surface Pressure Load 구현 계획
|
||||
|
||||
## 1. Metadata
|
||||
|
||||
- `feature_id`: `shell-surface-pressure-load`
|
||||
- `status`: `draft-awaiting-user-approval`
|
||||
- `owner_agent`: `implementation-planning-agent`
|
||||
- `date`: `2026-08-31`
|
||||
- `source_requirement`: `docs/shell-surface-pressure-load/requirements.md`
|
||||
- `source_research`: `docs/shell-surface-pressure-load/research.md`
|
||||
- `source_formulation`: `docs/shell-surface-pressure-load/formulation.md`
|
||||
- `source_numerical_review`: `docs/shell-surface-pressure-load/numerical-review.md`
|
||||
- `source_io_definition`: `docs/shell-surface-pressure-load/io.md`
|
||||
- `source_reference_models`: `docs/shell-surface-pressure-load/reference-model.md`
|
||||
- `source_coordination_gate`: `docs/shell-surface-pressure-load/coordination.md`
|
||||
- `proposed_phase_slug`: `shell-surface-pressure-load`
|
||||
- `proposed_task_name`: `shell-surface-pressure-load`
|
||||
- `authoritative_output`: input lexical sibling `<stem>_results.h5`
|
||||
- `approval_hard_stop`: 이 문서는 승인용 Step 초안이다. 사용자 승인 전에는 `phases/index.json`, `phases/shell-surface-pressure-load/index.json`, `phases/shell-surface-pressure-load/stepN.md`를 생성하거나 수정하지 않는다.
|
||||
- `execution_hard_stop`: Step 초안 또는 향후 phase 파일 승인은 Harness 실행 권한이 아니다. `scripts/execute.py`는 별도의 명시적 사용자 실행 요청이 있을 때만 Harness Executor가 실행한다.
|
||||
- `executor_policy`: 승인 후에도 Step 선택, branch/commit, 상태·시각 기록, Stop 검증과 실행 report는 Harness Executor 소유다. 이 계획은 수동 `git commit`, 일반 sub-agent 실행 또는 대체 executor를 제안하지 않는다.
|
||||
|
||||
## 2. Goal, Architecture, Tech Stack, Spec
|
||||
|
||||
### Goal
|
||||
|
||||
승인된 Abaqus `.inp` subset의 assembly-level `*SURFACE, TYPE=ELEMENT`와 single-static-step `*DSLOAD P`를 Domain semantic model, MITC4 pressure evaluator, 선형/비선형 full-space assembly, 기존 HDF5 결과 경로와 read-only reference comparison까지 끊김 없이 연결한다. 구현은 각 Step에서 반드시 테스트를 먼저 작성하고 실제 실패를 관찰한 뒤 최소 구현과 집중/전체 검증을 수행한다.
|
||||
|
||||
### Architecture
|
||||
|
||||
- `AbaqusInputReader`는 byte-level lexical contract와 `KeywordBlock`/`DataLine` source location을 소유한다.
|
||||
- `DomainMappingContext`, `TopologyMapper`, 새 candidate `SurfaceDefinitionMapper`, `StepDefinitionMapper`, `DomainBuilder`가 raw input을 완전한 semantic candidate로 만든 뒤 한 번만 `Domain::Create`에 commit한다.
|
||||
- `Domain`은 immutable ordered surface/facet inventory를, `StepDefinition`은 additive pressure records를 소유한다. `AnalysisModel`은 이를 복사하지 않는 active-step view만 제공하고 Domain이 더 오래 살아야 한다.
|
||||
- 새 pressure evaluator는 parser, analysis procedure, HDF5, MKL/TBB에 의존하지 않는 solver-core 함수다. element-local `24 x 1` force와 `24 x 24` external tangent candidate를 반환한다.
|
||||
- 새 surface-pressure assembler는 immutable Domain identity, `DofManager`, trial generalized coordinates와 `ParallelFor`를 받아 element-local candidate를 stable source order로 reduction한다. worker는 global vector/CSR을 직접 갱신하지 않는다.
|
||||
- 선형 procedure는 reference-configuration pressure를 기존 CLOAD와 합쳐 full-space external load에 한 번만 반영하고, nonlinear procedure는 current-configuration follower force와 generally nonsymmetric external tangent를 같은 trial에서 평가한다.
|
||||
- `Hdf5ResultsWriter` schema `0`과 `NonlinearHdf5ResultsWriter` schema `1`은 변경하지 않는다. 새 pressure dataset, schema/version/CLI option을 추가하지 않는다.
|
||||
- reference utility는 FESA가 생성한 schema-1 factor-one HDF5와 exact stored displacement CSV만 비교한다. Abaqus를 실행하지 않으며 stored input/CSV를 수정하지 않는다.
|
||||
|
||||
### Tech Stack
|
||||
|
||||
- C++17, MSVC x64 Debug, CMake, CTest, GoogleTest
|
||||
- Intel oneAPI MKL PARDISO: linear SPD path는 기존 `MklPardisoSolver`, nonlinear full-CSR unsymmetric path는 기존 `MklPardisoTangentSolver`와 `mtype=11`
|
||||
- Intel oneAPI TBB behind `ParallelFor`
|
||||
- HDF5 behind existing writers/self-check/atomic-finalization boundaries
|
||||
- Python Harness는 phase orchestration용이며 이 기능이 Harness/Python 코드를 변경하지 않으므로 Python test 추가는 없다.
|
||||
|
||||
### Binding Spec
|
||||
|
||||
- 입력·진단·internal model·HDF5·comparison mapping은 `io.md` §§2–10이 우선한다.
|
||||
- force/tangent, sign, configuration, integration, geometry validity와 deterministic assembly는 `formulation.md` §§6, 9–11, 13–14가 우선한다.
|
||||
- analytical, finite-difference, objectivity, equilibrium, reference acceptance threshold는 `numerical-review.md` §6과 `docs/TOLERANCE.md`가 우선한다.
|
||||
- exact reference paths와 dispositions는 `reference-model.md` §§3–8이 우선한다.
|
||||
- 다른 solver 내부 알고리즘과의 동등성을 주장하지 않는다. Abaqus 결과는 승인된 외부 수치 reference일 뿐이다.
|
||||
|
||||
## 3. Readiness Check
|
||||
|
||||
| input | upstream status / gate evidence | planning disposition |
|
||||
| --- | --- | --- |
|
||||
| `requirements.md` | 문서 자체는 `draft-for-coordinator-gate-review`; Coordinator가 Gate 1을 통과시켰고 normative must IDs `001`–`024`가 완결 | binding |
|
||||
| `research.md` | 문서 자체는 `draft-for-coordinator-gate-review`; Coordinator gate 통과 | binding evidence |
|
||||
| `formulation.md` | `ready-for-numerical-review` | binding math handoff |
|
||||
| `numerical-review.md` | `pass-for-io-definition` | binding numerical/reference readiness |
|
||||
| `reference-model.md` | `pass-for-io-definition` | binding artifact contract |
|
||||
| `io.md` | `ready-for-implementation-planning` | binding parser/model/HDF5/comparator contract |
|
||||
| `coordination.md` | Gate 5 `passed`; document `ready-for-implementation-planning` | planning authorized |
|
||||
|
||||
필수 comparison artifacts는 존재하며 경로·hash·cardinality가 upstream에서 고정되었다. 필수 파일은 `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure.inp`와 `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure displacements.csv` 두 개다. reaction CSV는 존재 여부와 값이 verdict를 바꾸지 않는 review-only inventory이고 stress CSV는 비교 대상에서 제외된다.
|
||||
|
||||
`C:\git\FESADev\.harness\config.json`은 현재 없고 `.harness/config.example.json`만 존재한다. 따라서 Harness Stop의 repository default는 `.harness/build`, CMake/MSVC/CTest다. 현재 `.harness/build/CMakeCache.txt`는 `Visual Studio 18 2026`, `x64`, GoogleTest `C:/git/googletest`, MKL `2026.1`, TBB `2023.1`, HDF5 `2.1.1`로 구성되어 있다. 계획 작성 중 configure/build/test는 실행하지 않았다.
|
||||
|
||||
결론: 구현 계획은 진행 가능하다. blocker는 없으며 유일한 현재 사용자 결정은 아래 7-Step 초안의 승인 또는 수정 요청이다.
|
||||
|
||||
## 4. Implementation Scope
|
||||
|
||||
### Included
|
||||
|
||||
- assembly-level element surface의 direct `instance.element-label` 및 explicit-instance assembly ELSET facet resolution. 하나의 surface가 여러 data line에서 서로 다른 explicit instance의 direct/ELSET member를 함께 포함할 수 있다.
|
||||
- S4/S4R, SPOS/SNEG, one static step의 additive uniform `DSLOAD P`
|
||||
- case/ASCII whitespace/numeric/cardinality/keyword continuation/source provenance contract
|
||||
- exact duplicate normalization warning과 conflicting side를 포함한 deterministic fail-closed diagnostics
|
||||
- bilinear `2 x 2` pressure force와 exact follower external tangent
|
||||
- linear reference configuration, nonlinear current configuration, exact-once load-factor scaling
|
||||
- full-space force/tangent assembly, reaction/free residual/global resultant/moment, deterministic serial/parallel reduction
|
||||
- 기존 schema 0/1 HDF5 및 CLI/atomic finalization 회귀
|
||||
- exact pressure reference input/CSV에 대한 schema-1 factor-one HDF5 comparison과 common tolerance report
|
||||
|
||||
### Excluded
|
||||
|
||||
- `*DLOAD`, `TRVEC`, `PNU`, nonuniform/distribution pressure, nodal surface, part-level surface
|
||||
- implicit-instance ELSET, 하나의 ELSET 자체가 여러 instance를 섞는 mixed-instance set, part ELSET lookup fallback. 서로 다른 explicit instance에 결속된 여러 member/ELSET를 하나의 surface에 두는 것은 포함 범위다.
|
||||
- edges, other face labels, solids/beams, shells other than S4/S4R
|
||||
- multi-step, amplitude, transient, eigen, contact, material/geometric extensions unrelated to pressure
|
||||
- pressure-specific HDF5 dataset, schema bump, CLI option, result filter, CSV product output
|
||||
- Abaqus execution, Abaqus CSV creation/repair/rename, reference input/CSV mutation
|
||||
- reaction or stress external acceptance expansion
|
||||
|
||||
### Non-goals
|
||||
|
||||
- Abaqus internal formulation, integration, stabilization, state or result-generation equivalence
|
||||
- speculative load hierarchy refactor, generalized distributed-load framework, new vendor abstraction
|
||||
- unrelated parser cleanup, element refactor, tolerance policy change, documentation portfolio expansion
|
||||
|
||||
## 5. Candidate Interface and Data Contracts
|
||||
|
||||
아래 이름과 파일은 implementation handoff를 위한 candidate다. public compatibility와 upstream 의미를 고정하지만 최종 API/저장 배치는 Implementation Agent가 기존 style과 compile evidence에 맞춰 최소 범위에서 확정한다.
|
||||
|
||||
### Semantic model candidate
|
||||
|
||||
`include/fesa/model/model_types.h`에 다음 의미를 갖는 value types를 추가한다.
|
||||
|
||||
```cpp
|
||||
enum class ShellSurfaceSide { kSpos, kSneg };
|
||||
enum class SurfaceMemberKind { kDirect, kElset };
|
||||
|
||||
struct ElementSurfaceFacetDefinition {
|
||||
EntityIndex element_index;
|
||||
std::size_t facet_ordinal;
|
||||
std::string part_name_raw;
|
||||
std::string part_name_canonical;
|
||||
std::string instance_name_raw;
|
||||
std::string instance_name_canonical;
|
||||
std::int64_t source_element_label;
|
||||
std::string source_element_label_raw;
|
||||
std::string source_element_type;
|
||||
ShellSurfaceSide side;
|
||||
SourceLocation first_member_location;
|
||||
std::size_t first_member_ordinal;
|
||||
SurfaceMemberKind member_kind;
|
||||
std::string elset_name_raw;
|
||||
std::string elset_name_canonical;
|
||||
};
|
||||
|
||||
struct ElementSurfaceDefinition {
|
||||
std::string surface_name_raw;
|
||||
std::string surface_name_canonical;
|
||||
std::vector<ElementSurfaceFacetDefinition> facets;
|
||||
SourceLocation declaration_location;
|
||||
std::size_t declaration_ordinal;
|
||||
};
|
||||
|
||||
struct SurfacePressureLoadDefinition {
|
||||
std::string step_name_raw;
|
||||
std::string step_name_canonical;
|
||||
EntityIndex surface_index;
|
||||
std::string surface_name_raw;
|
||||
std::string surface_name_canonical;
|
||||
std::string load_type;
|
||||
double magnitude;
|
||||
std::string magnitude_raw;
|
||||
SourceLocation keyword_location;
|
||||
SourceLocation data_location;
|
||||
std::size_t data_ordinal;
|
||||
std::size_t load_ordinal;
|
||||
};
|
||||
```
|
||||
|
||||
`ModelDefinition`은 `std::vector<ElementSurfaceDefinition> element_surfaces`를 소유하고 `StaticStepDefinition`은 `std::vector<SurfacePressureLoadDefinition> surface_pressure_loads`를 소유한다. `ElementSurfaceDefinition`의 scope 의미는 exact `assembly`다. Committed facet은 internal lookup/scatter용 `element_index`와 별도로 part/instance raw+canonical identity, source element numeric label+raw token, exact canonical `S4|S4R` source type, side, `facet_ordinal`, 최초 contributing surface member의 file/line/member ordinal, `direct|elset` kind와 ELSET raw+canonical provenance를 계속 소유한다. 따라서 stable source identity가 internal element/equation index로 대체되지 않는다.
|
||||
|
||||
Committed `SurfacePressureLoadDefinition`은 surface lookup용 `surface_index`만 남기는 record가 아니다. sole step과 referenced surface의 raw+canonical identity, exact canonical `load_type="P"`, unscaled signed finite `magnitude`와 `magnitude_raw`, keyword/data `SourceLocation`, DSLOAD block 안의 `data_ordinal`, 전체 step load data에서의 `load_ordinal`을 보존한다. 동일해 보이는 pressure rows도 distinct records이며 `(load_ordinal, facet_ordinal)` Cartesian product가 active contribution identity다.
|
||||
|
||||
`Domain`/`StepDefinition`/`AnalysisModel` candidate query는 다음 의미를 갖는다.
|
||||
|
||||
```cpp
|
||||
const std::vector<ElementSurfaceDefinition>& Domain::ElementSurfaces() const noexcept;
|
||||
const std::vector<SurfacePressureLoadDefinition>&
|
||||
StepDefinition::SurfacePressureLoads() const noexcept;
|
||||
bool StepDefinition::UsesNonlinearGeometry() const noexcept;
|
||||
const std::vector<SurfacePressureLoadDefinition>&
|
||||
AnalysisModel::ActiveSurfacePressureLoads() const noexcept;
|
||||
```
|
||||
|
||||
모든 반환값은 non-owning immutable reference다. `AnalysisModel`은 surface/facet/load를 복사하지 않고 backing `Domain`이 더 오래 살아야 한다. pressure records는 기존 nodal `Load::ComputeContributions`에 억지로 넣지 않는다. 그 interface는 configuration-independent nodal contributions 전용이고 follower tangent를 표현하지 못하기 때문이다.
|
||||
|
||||
### Local evaluator candidate
|
||||
|
||||
새 `include/fesa/loads/shell_surface_pressure.h`와 `src/fesa/loads/shell_surface_pressure.cpp`는 다음 backend-neutral contract를 제공한다.
|
||||
|
||||
```cpp
|
||||
enum class SurfacePressureConfiguration { kReference, kCurrent };
|
||||
|
||||
struct ShellSurfacePressureInput {
|
||||
std::array<Vector3, 4> reference_coordinates;
|
||||
std::array<Vector3, 4> translational_displacements;
|
||||
ShellSurfaceSide side;
|
||||
double pressure_magnitude;
|
||||
double load_factor;
|
||||
SurfacePressureConfiguration configuration;
|
||||
SourceLocation location;
|
||||
std::string entity_identity;
|
||||
};
|
||||
|
||||
struct ShellSurfacePressureContribution {
|
||||
std::array<double, 24> force;
|
||||
std::array<double, 24 * 24> external_tangent;
|
||||
};
|
||||
|
||||
Result<ShellSurfacePressureContribution> EvaluateShellSurfacePressure(
|
||||
const ShellSurfacePressureInput& input);
|
||||
```
|
||||
|
||||
함수는 fixed node/source order의 row-major tangent를 반환한다. force의 rotational entries와 tangent의 rotational rows/columns는 exact zero다. reference configuration은 `u`를 사용하지 않고 tangent가 exact zero이며, current configuration은 승인된 exact derivative를 반환한다. geometric validation은 pressure 또는 factor가 zero여도 생략하지 않는다.
|
||||
|
||||
### Full-space assembler candidate
|
||||
|
||||
새 `include/fesa/assembly/surface_pressure_assembler.h`와 `src/fesa/assembly/surface_pressure_assembler.cpp`는 다음 contract를 제공한다.
|
||||
|
||||
```cpp
|
||||
struct SurfacePressureAssemblyCandidate {
|
||||
Vector full_external_force;
|
||||
SparseMatrix full_external_tangent;
|
||||
std::vector<Diagnostic> diagnostics;
|
||||
};
|
||||
|
||||
Result<SurfacePressureAssemblyCandidate> AssembleSurfacePressure(
|
||||
const AnalysisModel& model,
|
||||
const DofManager& dofs,
|
||||
const Vector& full_generalized_coordinates,
|
||||
double load_factor,
|
||||
SurfacePressureConfiguration configuration,
|
||||
const ParallelFor& parallel_for);
|
||||
```
|
||||
|
||||
입력 vector는 stable full-DOF `[u1,u2,u3,phi1,phi2,phi3]` order다. assembler는 pressure record source order, 각 surface의 canonical facet order, fixed Gauss order로 local candidates를 만든 뒤 동일 순서로 serial reduction한다. 실패 시 output candidate를 반환하지 않으며 caller-owned `AnalysisState`/`NonlinearTrialState`는 갱신하지 않는다.
|
||||
|
||||
### Procedure composition candidate
|
||||
|
||||
- Linear: `LoadAssembler::AssembleFullNodalLoad(...)` 결과와 `AssembleSurfacePressure(..., 1.0, kReference, ...)`의 full force를 checked finite addition하여 `AnalysisState::ExternalForce()`에 한 번만 assign한다. existing stiffness factorization-before-load order와 `EffectiveFreeRhs(F, Kfc, dc, dofs)`를 보존한다.
|
||||
- Nonlinear: 같은 trial에서 `AssembleInternal(...)`, existing `AssembleGlobalFixedLoadContribution(...)`, `AssembleSurfacePressure(..., increment.load_factor, kCurrent, ...)`를 평가한다. `f_ext=f_fixed+f_pressure`, `K_ext=K_fixed+K_pressure`, `r=f_int-f_ext`, `K=K_int-K_ext` 순서로 candidate를 완성한 뒤 factorization/solve/validation/commit한다. `MklPardisoTangentSolver`의 existing full-CSR unsymmetric path를 유지하며 tangent를 symmetrize하지 않는다.
|
||||
|
||||
## 6. Candidate Files and Ownership
|
||||
|
||||
### Existing files to modify
|
||||
|
||||
| path | responsibility |
|
||||
| --- | --- |
|
||||
| `include/fesa/io/abaqus/input_syntax.h` | continued keyword/source-line representation에 필요한 최소 lexical provenance |
|
||||
| `src/fesa/io/abaqus/input_reader.cpp` | ASCII, 256-byte logical keyword, keyword-only continuation, comma/whitespace contract |
|
||||
| `src/fesa/io/abaqus/domain_mapping_context.h` | raw surface/facet/DSLOAD records와 provenance |
|
||||
| `src/fesa/io/abaqus/domain_mapping_context.cpp` | assembly `SURFACE`, assembly `ELSET INTERNAL`, step `DSLOAD` parsing 및 scope/cardinality diagnostics |
|
||||
| `src/fesa/io/abaqus/domain_mapper.cpp` | surface resolution stage를 topology finalize와 step definition 사이에 호출 |
|
||||
| `src/fesa/io/abaqus/step_definition_mapper.cpp` | DSLOAD target를 resolved surface index에 bind하고 procedure rules 검증 |
|
||||
| `src/fesa/io/abaqus/domain_builder.cpp` | 완전 검증된 surface/load candidate를 ModelDefinition에 commit |
|
||||
| `include/fesa/model/model_types.h` | immutable surface/facet와 Step pressure value definitions |
|
||||
| `include/fesa/model/domain.h`, `src/fesa/model/domain.cpp` | Domain/Step ownership과 immutable views |
|
||||
| `include/fesa/analysis/analysis_model.h`, `src/fesa/analysis/analysis_model.cpp` | active pressure non-owning view |
|
||||
| `src/fesa/analysis/linear_static_procedure.cpp` | reference pressure full-space external force composition |
|
||||
| `include/fesa/analysis/nonlinear_static_control.h`, `src/fesa/analysis/nonlinear_static_control.cpp` | pressure-independent fixed-load contract를 유지하면서 checked external contribution composition helper가 필요할 때만 최소 확장 |
|
||||
| `src/fesa/analysis/nonlinear_static_procedure.cpp` | current follower force/tangent, residual/tangent sign, rollback/commit integration |
|
||||
| `src/fesa/CMakeLists.txt` | 새 production `.cpp` 두 쌍 등록 |
|
||||
| `tests/CMakeLists.txt` | 새 unit/integration/reference test sources를 기존 targets에 등록; raw `add_test` 추가 없음 |
|
||||
| `tests/unit/io/abaqus/input_reader_test.cpp` | ASCII/continuation/length/comma lexical tests |
|
||||
| `tests/unit/io/abaqus/domain_mapper_test.cpp` | 기존 `DLOAD` rejection 및 no-pressure regression 유지/구체화 |
|
||||
| `tests/unit/io/abaqus/domain_mapping_components_test.cpp` | mapper stage atomicity와 surface resolution component tests |
|
||||
| `tests/unit/io/hdf5/hdf5_results_writer_test.cpp` | schema 0 inventory/no-pressure-dataset/atomic final regression |
|
||||
| `tests/unit/io/hdf5/nonlinear_hdf5_results_writer_test.cpp` | schema 1 force/residual/reaction/equilibrium projection/no-new-dataset regression |
|
||||
| `tests/reference/nonlinear_static_reference_comparison.h`, `tests/reference/nonlinear_static_reference_comparison.cpp` | pressure case contract, optional review artifacts, factor-one projection/prechecks/report |
|
||||
|
||||
### New files to create during implementation
|
||||
|
||||
| path | responsibility / first owning Step |
|
||||
| --- | --- |
|
||||
| `src/fesa/io/abaqus/surface_definition_mapper.h` | raw-to-resolved assembly surface mapper internal interface / Step 1 |
|
||||
| `src/fesa/io/abaqus/surface_definition_mapper.cpp` | direct/ELSET resolution, canonical sort/duplicate policy / Step 1 |
|
||||
| `tests/unit/io/abaqus/shell_surface_pressure_domain_test.cpp` | feature-focused valid and fail-closed semantic mapping / Step 1 |
|
||||
| `include/fesa/loads/shell_surface_pressure.h` | local evaluator input/result contract / Step 3 |
|
||||
| `src/fesa/loads/shell_surface_pressure.cpp` | bilinear integration, geometry checks, force/external tangent / Step 3 |
|
||||
| `tests/unit/loads/shell_surface_pressure_test.cpp` | analytical, objectivity, FD, geometry evaluator tests / Step 3 |
|
||||
| `include/fesa/assembly/surface_pressure_assembler.h` | full-space deterministic assembly candidate / Step 4 |
|
||||
| `src/fesa/assembly/surface_pressure_assembler.cpp` | local scatter and stable reduction / Step 4 |
|
||||
| `tests/unit/assembly/surface_pressure_assembler_test.cpp` | source/facet/load order, additive/exact-once, serial/parallel tests / Step 4 |
|
||||
| `tests/integration/analysis/shell_surface_pressure_linear_test.cpp` | linear procedure/reaction/residual/resultant/HDF5 schema 0 / Step 4 |
|
||||
| `tests/integration/analysis/shell_surface_pressure_nonlinear_test.cpp` | follower Newton/tangent/rollback/balance/HDF5 schema 1 / Step 5 |
|
||||
| `tests/integration/app/shell_surface_pressure_application_test.cpp` | CLI exact input syntax, existing output naming/schema/atomic/no-pressure regression / Step 4 then Step 5 additions |
|
||||
| `tests/reference/shell_surface_pressure_reference_test.cpp` | exact artifact and end-to-end comparison gate / Step 6 |
|
||||
| `docs/shell-surface-pressure-load/implementation-report.md` | implementation/task/test/change summary, future Step 7 |
|
||||
| `docs/shell-surface-pressure-load/build-test.md` | command/exit/duration/tail/warning/runtime evidence, future Step 7 |
|
||||
| `docs/shell-surface-pressure-load/reference-comparison.md` | artifact snapshots, comparison metrics/classification, future Step 7 |
|
||||
|
||||
`src/fesa/app/fesa_application.cpp`, HDF5 production writers, PARDISO adapters와 existing tolerance policy는 read-first verification targets이며 원칙적으로 수정하지 않는다. 새 tests가 승인된 contract 결함을 실제로 증명할 때만 해당 Step의 bounded scope 안에서 최소 수정하고 report에 이유를 남긴다.
|
||||
|
||||
## 7. Work Breakdown and Harness Step Draft
|
||||
|
||||
모든 Step은 이전 Step이 green인 상태에서 시작하고 단일 reviewer-rejectable responsibility를 완결한다. 각 Step은 `RED -> observed expected failure -> minimal GREEN -> focused VERIFY -> full/Stop VERIFY`를 같은 세션 안에서 끝낸다. 아래 phase 파일들은 제안일 뿐 아직 materialize하지 않는다.
|
||||
|
||||
### Step 1 — `map-pressure-input-contract`
|
||||
|
||||
**Bounded responsibility:** valid assembly `SURFACE`와 step `DSLOAD P`를 immutable Domain/Step/AnalysisModel contract로 map한다.
|
||||
|
||||
**Dependencies:** 없음.
|
||||
|
||||
**Prerequisites/read first:** `input_syntax.h`, `input_reader.cpp`, `domain_mapping_context.h/.cpp`, `topology_mapper.h/.cpp`, `step_definition_mapper.h/.cpp`, `domain_builder.h/.cpp`, `domain_mapper.cpp`, `model_types.h`, `domain.h/.cpp`, `analysis_model.h/.cpp`, upstream `requirements.md` §§6–8, `io.md` §§2–6, `formulation.md` §3.
|
||||
|
||||
**Exact files:** 위 Candidate Files의 parser/model existing files, 새 `surface_definition_mapper.h/.cpp`, 새 `shell_surface_pressure_domain_test.cpp`, `tests/CMakeLists.txt`, `src/fesa/CMakeLists.txt`.
|
||||
|
||||
**RED:** 먼저 다음 named tests를 작성한다.
|
||||
|
||||
- `InpSyntax.AcceptsAsciiKeywordContinuationAndPreservesPhysicalSourceLines`
|
||||
- `ShellSurfacePressureInput.MapsDirectInstanceFacetsForS4AndS4rCaseInsensitively`
|
||||
- `ShellSurfacePressureInput.MapsExplicitInstanceElsetAndResultNeutralInternalParameter`
|
||||
- `ShellSurfacePressureInput.MapsMixedDirectAndElsetMembersAcrossTwoExplicitInstancesWithStableDataMemberAndElsetOrder`
|
||||
- `ShellSurfacePressureInput.PreservesSposSnegMagnitudeTextLocationsAndSourceOrder`
|
||||
- `ShellSurfacePressureDomain.OwnsCanonicalFacetsAndStepOwnedAdditivePressureRecords`
|
||||
- `ShellSurfacePressureDomain.AnalysisModelBorrowsActivePressureWithoutCopyingDomain`
|
||||
- `ShellSurfacePressureInput.AcceptsWhitespaceSignedZeroAndFiniteScientificNotation`
|
||||
|
||||
`MapsMixedDirectAndElsetMembersAcrossTwoExplicitInstancesWithStableDataMemberAndElsetOrder`의 RED fixture는 declaration order가 다른 `Instance-A`와 `Instance-B`, 서로 다른 casing으로 참조한 direct member와 각 instance에 explicit `INSTANCE=`로 결속된 flat assembly ELSET member를 하나의 surface data inventory에 교차 배치한다. Test는 case-insensitive resolution, raw data/member ordinal과 ELSET expansion provenance, canonical facet order, 두 instance에서 numeric label이 같아도 분리되는 part/instance/source label/source type/side identity, 각 unique facet의 first-member provenance를 exact 비교한다. Implicit-instance ELSET을 같은 test의 valid branch로 허용하지 않는다.
|
||||
|
||||
실행:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure -R "^(InpSyntax|ShellSurfacePressureInput|ShellSurfacePressureDomain)\."
|
||||
```
|
||||
|
||||
**Observed expected failure:** 새 mapper/header 또는 semantic accessors가 없어 compile이 실패하거나, 현재 `SURFACE`/`DSLOAD`가 unsupported input diagnostic으로 거부되어 assertions가 실패해야 한다. Multi-instance RED fixture는 한 surface의 두 explicit instance와 mixed direct/ELSET를 resolve하지 못하거나 committed identity/provenance fields가 없어 exact assertions가 실패해야 한다. unrelated failure면 Step을 중지하고 `regression`으로 분류한다.
|
||||
|
||||
**Minimal GREEN:** 위 candidate semantic signatures를 최소 구현한다. reader는 keyword-only `**,` comment-aware continuation만 결합하며 logical keyword 256 bytes, ASCII, comma/cardinality와 physical source line을 보존한다. surface mapper는 topology finalize 뒤 direct `<instance>.<positive-label>` 또는 assembly ELSET의 explicit `INSTANCE`를 case-insensitive하게 resolve한다. 하나의 surface 안에서 direct와 ELSET member를 섞고 서로 다른 두 개 이상의 explicit instance를 참조할 수 있으며, raw data/member order와 flat ELSET expansion provenance를 보존한 뒤 unique facets를 canonical stable order로 만든다. implicit-instance syntax, 하나의 mixed-instance ELSET, part-scope fallback은 허용하지 않는다. step mapper는 parameterless `DSLOAD`, exactly three fields, `P`, finite C-locale scalar를 surface index에 bind하면서 §5 candidate provenance 전부를 보존한다. DomainBuilder는 모든 validation 이후에만 moved ModelDefinition을 commit한다. legacy `StaticStepDefinition` constructors는 empty pressure vector로 delegating하여 existing callers를 깨지 않는다.
|
||||
|
||||
**Focused VERIFY:** 위 RED 명령이 exit `0`이고 모든 named tests가 pass한다. 이어 parser/domain existing suites를 실행한다.
|
||||
|
||||
```powershell
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure -R "^(InpDomainMapping|DomainMappingComponents|InpSyntax)\."
|
||||
```
|
||||
|
||||
**Full/Stop VERIFY:** 공통 `V-BUILD`, `V-SHOW`, `V-FULL` 명령을 실행한다.
|
||||
|
||||
**Invariants:** 한 surface 안의 mixed direct/ELSET 및 여러 explicit instance는 지원한다. raw surface data/member ordinal과 각 flat ELSET expansion provenance를 stable하게 보존하되 committed unique facet sort는 `(instance declaration ordinal, numeric element label, SPOS before SNEG)`다. S4/S4R part/instance/source label/type/side와 최초 member provenance를 internal index와 함께 보존한다. DSLOAD rows는 raw+canonical step/surface identity, canonical `P`, signed magnitude/raw token, keyword/data location, data/load ordinal을 가진 distinct/additive records다. lookup은 case-insensitive이고 raw spelling은 보존하며 Domain lifetime > AnalysisModel이다.
|
||||
|
||||
**Failure/atomicity:** parse/map failure는 Domain을 반환하지 않으며 partial surface/load가 visible하지 않다. diagnostics는 backend-independent SourceLocation을 가진다.
|
||||
|
||||
**Forbidden scope:** physics evaluator/assembly, `DLOAD`, general surface framework, HDF5/schema, reference artifacts.
|
||||
|
||||
**Trace:** requirements `001`–`004`, `010`, `013`; `IO §§2–6`; `FORM §3`; numerical-review input readiness.
|
||||
|
||||
**Evidence/report:** exact commands, exit codes, expected RED diagnostic/compile reason, mapped facet/load dumps from tests, modified/new paths, warning count. Handoff은 immutable semantic queries와 stable ordering contract다.
|
||||
|
||||
### Step 2 — `reject-invalid-pressure-input`
|
||||
|
||||
**Bounded responsibility:** pressure input/mapping negative semantics와 deterministic diagnostics를 fail-closed/atomic하게 완결한다.
|
||||
|
||||
**Dependencies:** Step 1 green semantic output.
|
||||
|
||||
**Prerequisites/read first:** Step 1 changed files/tests, `core/ascii.h`, `core/diagnostic.h`, `source_target_resolver.h/.cpp`, `io.md` §§2.5–3.4, 5.2, 9, `requirements.md` `014`–`017` acceptance, `formulation.md` §11.
|
||||
|
||||
**Exact files:** `input_reader.cpp`, `domain_mapping_context.h/.cpp`, `surface_definition_mapper.h/.cpp`, `step_definition_mapper.cpp`, `domain_builder.cpp`, `shell_surface_pressure_domain_test.cpp`, existing `domain_mapper_test.cpp` and `domain_mapping_components_test.cpp`. 새 production type은 만들지 않는다.
|
||||
|
||||
**RED named tests:**
|
||||
|
||||
- `ShellSurfacePressureInput.RejectsNonAsciiOverlengthOrIllegalContinuationAtStableLocation`
|
||||
- `ShellSurfacePressureInput.RejectsUnsupportedSurfaceParametersTypesSidesAndTargetKinds`
|
||||
- `ShellSurfacePressureInput.RejectsDsloadParametersLabelsDistributionsAndCardinality`
|
||||
- `ShellSurfacePressureInput.RejectsEmptyMissingAmbiguousAndCrossScopeSurfaceTargets`
|
||||
- `ShellSurfacePressureInput.RejectsImplicitInstanceNestedCyclicAndMalformedElsets`
|
||||
- `ShellSurfacePressureInput.NormalizesExactSameSideDuplicatesWithOneStableWarning`
|
||||
- `ShellSurfacePressureInput.RejectsConflictingSidesForOneElement`
|
||||
- `ShellSurfacePressureInput.RejectsNonfiniteDExponentAndLocaleDependentMagnitudes`
|
||||
- `ShellSurfacePressureInput.PreservesAdditiveRepeatedPressureRowsWithoutDeduplication`
|
||||
- `ShellSurfacePressureDomain.MappingFailureCommitsNoPartialSemanticCandidate`
|
||||
- `ShellSurfacePressureInput.EmitsDiagnosticsInStableSourceOrderAcrossRepeatedRuns`
|
||||
|
||||
RED/focused command:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure -R "^(ShellSurfacePressureInput|ShellSurfacePressureDomain)\."
|
||||
```
|
||||
|
||||
**Observed expected failure:** Step 1의 happy-path mapper가 unsupported fields를 허용하거나 첫 발견/container order로 진단을 내고, duplicate/conflicting normalization을 구분하지 못해 assertions가 실패해야 한다.
|
||||
|
||||
**Minimal GREEN:** allowed parameter/label/cardinality tables를 exact하게 적용한다. recursive/nested/cyclic ELSET expansion을 금지하고 part/implicit scope fallback을 하지 않는다. exact same-side duplicate는 한 facet으로 normalize하고 한 warning을 stable location/order로 emit하며 conflicting side는 error다. 모든 오류를 candidate validation 단계에서 모으고 `SortDiagnostics` contract로 정렬한 뒤 Domain commit 전에 반환한다. silent skip, guess, average, partial commit은 금지한다.
|
||||
|
||||
**Focused VERIFY:** named negative tests와 모든 `InpDomainMapping` tests exit `0`; golden diagnostic fields `(severity,code,file,line,keyword,entity_identity,message)`와 repeated-run order가 exact하다.
|
||||
|
||||
**Full/Stop VERIFY:** `V-BUILD`, `V-SHOW`, `V-FULL`.
|
||||
|
||||
**Invariants:** exact duplicate warning과 incompatible duplicate error 분리; missing/extra/ambiguous/cyclic/cross-scope/nonfinite 모두 tolerance 이전 차단; legacy input without pressure unchanged.
|
||||
|
||||
**Failure/atomicity:** failed candidate는 Domain/AnalysisState/HDF5로 이동하지 않는다. 실패한 input으로 기존 final output을 건드리지 않는 CLI proof는 Step 4/5에서 추가한다.
|
||||
|
||||
**Forbidden scope:** evaluator, tolerance 완화, artifact rewrite, parser-wide refactor.
|
||||
|
||||
**Trace:** requirements `002`–`004`, `013`–`017`; `IO §§2–6,9`; `FORM §11`; `NR §6` invalid-input rows.
|
||||
|
||||
**Evidence/report:** 각 test의 expected code/location/entity, warning normalization count, repeated diagnostic sequence, RED/GREEN exits. Handoff은 fail-closed semantic model이다.
|
||||
|
||||
### Step 3 — `evaluate-shell-pressure-kernel`
|
||||
|
||||
**Bounded responsibility:** one four-node shell facet의 reference/current pressure force와 exact external tangent를 승인된 geometry policy로 계산한다.
|
||||
|
||||
**Dependencies:** Step 1–2 semantic side/magnitude/source identity.
|
||||
|
||||
**Prerequisites/read first:** `mitc4_shell.h/.cpp`, `nonlinear_mitc4_shell.h/.cpp`, `shell_geometry.h/.cpp`, `vector3.h`, `matrix.h`, existing MITC4 unit/tangent tests, `formulation.md` §§6, 9–10, 13–14, `numerical-review.md` §§3–6.
|
||||
|
||||
**Exact files:** 새 `shell_surface_pressure.h/.cpp`, 새 `shell_surface_pressure_test.cpp`, `src/fesa/CMakeLists.txt`, `tests/CMakeLists.txt`.
|
||||
|
||||
**RED named tests:**
|
||||
|
||||
- `ShellSurfacePressureKernel.PartitionsUnityAndIntegratesPlanarResultantAndMoment`
|
||||
- `ShellSurfacePressureKernel.ReversesExactlyForSposSnegAndNegativeMagnitude`
|
||||
- `ShellSurfacePressureKernel.UsesReferenceGeometryWithExactZeroLinearTangent`
|
||||
- `ShellSurfacePressureKernel.UsesCurrentAreaAndNormalForFollowerForce`
|
||||
- `ShellSurfacePressureKernel.HasExactZeroRotationalForceRowsAndTangentBlocks`
|
||||
- `ShellSurfacePressureKernel.IsTranslationAndRigidRotationObjective`
|
||||
- `ShellSurfacePressureKernel.IsCovariantUnderCyclicNodeRelabeling`
|
||||
- `ShellSurfacePressureKernel.MatchesCenteredFiniteDifferenceForForceAndResidualSigns`
|
||||
- `ShellSurfacePressureKernel.PreservesGenerallyNonsymmetricFollowerTangent`
|
||||
- `ShellSurfacePressureKernel.RejectsNonfiniteCollapsedFoldedAndInvertedGeometryAtEveryRequiredPoint`
|
||||
- `ShellSurfacePressureKernel.ValidatesGeometryEvenForZeroPressureOrFactor`
|
||||
|
||||
RED/focused command:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure -R "^ShellSurfacePressureKernel\."
|
||||
```
|
||||
|
||||
**Observed expected failure:** new evaluator declaration/definition이 없어 compile/link fail해야 한다. 기존 MITC4 internal-force code를 pressure처럼 재사용하여 GREEN으로 만들지 않는다.
|
||||
|
||||
**Minimal GREEN:** fixed Gauss order `(-1/sqrt(3),-1/sqrt(3))`, `(+,−)`, `(+,+)`, `(−,+)`의 common `2 x 2` rule, bilinear `N_i`, `s=+1/-1`, `f_i=-lambda*p*s*sum(w*N_i*a)`와 approved exact derivative를 직접 구현한다. current coordinates는 `X+u` translation만 사용한다. `tau_J=1e-12`와 mean/corner/Gauss chord-scaled checks, finite/fold/inversion rules를 그대로 적용한다. `max(1,...)`, absolute floor, clamp, connectivity reorder, normal flip, tangent symmetrization은 금지한다.
|
||||
|
||||
**Focused VERIFY acceptance:** shape sum error `<=1e-14`; normalized resultant/moment/sign/objectivity/covariance `<=1e-12`; centered FD `h=1e-5`, normalized tangent error `<=1e-8`; zero rotational blocks exact zero; antisymmetric tangent evidence nonzero; invalid cases exact failure.
|
||||
|
||||
**Full/Stop VERIFY:** focused test 뒤 existing `Mitc4Shell`, `NonlinearMitc4Shell`, `NonlinearMitc4ShellTangent` suites와 `V-BUILD`, `V-SHOW`, `V-FULL`.
|
||||
|
||||
**Invariants:** force/tangent same geometry/Gauss evaluation; sign consistency for both `f_ext` and residual derivative; no state mutation; deterministic fixed loops.
|
||||
|
||||
**Failure/atomicity:** function returns no contribution on any nonfinite/geometry failure; caller arrays/state remain unchanged.
|
||||
|
||||
**Forbidden scope:** element internal stiffness/constitutive changes, pressure stress recovery, integration configurability, vendor dependency.
|
||||
|
||||
**Trace:** requirements `005`–`009`, `016`, `020`–`021`; `FORM §§6,9–10,13–14`; `NR §6` kernel/objectivity/tangent/geometry rows.
|
||||
|
||||
**Evidence/report:** normalized metrics, FD numerator/denominator/h, antisymmetric entries, exact-zero checks, diagnostic identity/location and command exits. Handoff은 pure local evaluator contract다.
|
||||
|
||||
### Step 4 — `integrate-linear-shell-pressure`
|
||||
|
||||
**Bounded responsibility:** reference-configuration pressure를 deterministic full-space linear load path, reaction/free residual/global balance와 existing schema-0 CLI output에 연결한다.
|
||||
|
||||
**Dependencies:** Step 1–3 green.
|
||||
|
||||
**Prerequisites/read first:** Step 3 evaluator, `load_assembler.h/.cpp`, `sparse_assembler.h/.cpp`, `parallel_for.h/.cpp`, `dof_manager.h/.cpp`, `linear_static_procedure.cpp`, `analysis_state.h/.cpp`, `result_recovery.h/.cpp`, `global_equilibrium_recovery.h/.cpp`, HDF5 schema-0 writer/self-check/tests, `fesa_application.cpp`, `io.md` §§7.1, 7.3, 10, `formulation.md` §§9,11–13.
|
||||
|
||||
**Exact files:** 새 `surface_pressure_assembler.h/.cpp`, unit assembler test, new linear integration/app tests, `linear_static_procedure.cpp`, `src/fesa/CMakeLists.txt`, `tests/CMakeLists.txt`, schema-0 writer test only for contract assertions. HDF5 production writer는 expected no-change.
|
||||
|
||||
**RED named tests:**
|
||||
|
||||
- `SurfacePressureAssembly.AssemblesFullDofsInPressureFacetAndRecordOrder`
|
||||
- `SurfacePressureAssembly.AddsRepeatedRecordsAndAppliesUnitFactorExactlyOnce`
|
||||
- `SurfacePressureAssembly.IsBitwiseStableForSerialAndParallelLocalEvaluation`
|
||||
- `LinearShellSurfacePressure.UsesReferenceNormalAndAreaAfterPrescribedDisplacement`
|
||||
- `LinearShellSurfacePressure.AssemblesBeforeProjectionAndIncludesConstrainedReaction`
|
||||
- `LinearShellSurfacePressure.SatisfiesFreeResidualGlobalResultantAndMoment`
|
||||
- `LinearShellSurfacePressure.PreservesS4S4rMeshAndCyclicOrderInvariance`
|
||||
- `LinearShellSurfacePressure.WritesSchemaZeroWithoutPressureDataset`
|
||||
- `ShellSurfacePressureApplication.LinearFailurePreservesExistingFinalAndNoCandidate`
|
||||
- `ShellSurfacePressureApplication.InputWithoutPressureRetainsExistingLinearBehavior`
|
||||
|
||||
RED/focused commands:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests fesa_integration_tests
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure -R "^(SurfacePressureAssembly|LinearShellSurfacePressure|ShellSurfacePressureApplication)\."
|
||||
```
|
||||
|
||||
**Observed expected failure:** assembler header/definition이 없거나 linear procedure가 nodal CLOAD만 assembly하여 pressure resultant/reaction가 zero이고 pressure CLI case가 acceptance를 충족하지 못해야 한다.
|
||||
|
||||
**Minimal GREEN:** local pressure candidates를 source/facet/Gauss stable order로 생성하고 worker-local buffers에서 full DOF/scatter COO를 만들며 fixed serial reduction한다. linear procedure는 stiffness partition/factorization 후 existing CLOAD와 reference pressure full force를 checked add하고, projection 전 `state.ExternalForce()`에 한 번만 commit한다. evaluator에는 load factor `1.0`을 정확히 한 번 전달한다. existing `Kff/Kfc`, 0x0 free system, `K*d-F` recovery와 output finalization order는 보존한다.
|
||||
|
||||
**Focused VERIFY acceptance:** analytical normalized force/moment/reaction/mesh/order errors `<=1e-12`; global force/moment balance `<=1e-8`; free residual uses approved existing scale gates; repeated serial/parallel output and diagnostics exact; schema version `0`, existing mandatory datasets만 존재하고 pressure-specific path는 없다; failed candidate가 prior final bytes를 보존한다.
|
||||
|
||||
**Full/Stop VERIFY:** existing `LoadAssembly`, `SparseAssembly`, `LinearStaticCli`, `Mitc4ShellCli`, `Hdf5ResultsWriter` suites와 `V-BUILD`, `V-SHOW`, `V-FULL`.
|
||||
|
||||
**Invariants:** factorization-before-load; full-space before free/constrained projection; linear tangent exact zero; pressure load factor exact once; worker global CSR write 금지; source/internal/equation IDs 분리.
|
||||
|
||||
**Failure/atomicity:** any local/nonfinite/assembly/recovery failure returns before state/result publication; HDF5 existing final preserved by current atomic writer.
|
||||
|
||||
**Forbidden scope:** nonlinear follower path, schema change, linear solver backend change, output dataset addition.
|
||||
|
||||
**Trace:** requirements `005`–`007`, `010`–`013`, `016`–`020`; `IO §§6–7,9–10`; `FORM §§9,11–14`; `NR §6` linear/resultant/balance rows.
|
||||
|
||||
**Evidence/report:** stable contribution order, external vector/reaction/residual/resultants, schema inventory, final-file snapshots, RED/GREEN exits. Handoff은 validated linear pressure path와 reusable full-space assembler다.
|
||||
|
||||
### Step 5 — `integrate-nonlinear-follower-pressure`
|
||||
|
||||
**Bounded responsibility:** current-configuration follower pressure force와 generally nonsymmetric external tangent를 nonlinear full-Newton trial/commit lifecycle 및 schema-1 output에 연결한다.
|
||||
|
||||
**Dependencies:** Step 1–4 green.
|
||||
|
||||
**Prerequisites/read first:** Step 3–4 evaluator/assembler, `nonlinear_static_control.h/.cpp`, `nonlinear_static_procedure.h/.cpp`, `nonlinear_analysis_state.h/.cpp`, `nonlinear_mitc4_shell.h/.cpp`, `tangent_solver.h`, `mkl_pardiso_tangent_solver.h/.cpp`, nonlinear HDF5 writer/self-check/tests, `prepared_analysis.h/.cpp`, `fesa_application.cpp`, `formulation.md` §§9.2–9.4, 11–13, `numerical-review.md` §6 nonlinear suite, `io.md` §§7.2, 7.4.
|
||||
|
||||
**Exact files:** `nonlinear_static_control.h/.cpp` only if checked contribution composition needs a helper, `nonlinear_static_procedure.cpp`, new nonlinear integration/app tests, nonlinear HDF5 writer test. Existing PARDISO/HDF5/app production files are no-change verification targets unless a test exposes a contract gap.
|
||||
|
||||
**RED named tests:**
|
||||
|
||||
- `NonlinearShellSurfacePressure.AssemblesFollowerForceFromCurrentTrialGeometry`
|
||||
- `NonlinearShellSurfacePressure.FormsResidualAndTangentWithApprovedExternalSigns`
|
||||
- `NonlinearShellSurfacePressure.AppliesIncrementFactorExactlyOnce`
|
||||
- `NonlinearShellSurfacePressure.UsesFullUnsymmetricTangentSolverPath`
|
||||
- `NonlinearShellSurfacePressure.ConvergesOpenPatchAndPreservesAntisymmetricEvidence`
|
||||
- `NonlinearShellSurfacePressure.SatisfiesAcceptedFreeResidualAndFactorOneGlobalBalance`
|
||||
- `NonlinearShellSurfacePressure.IsObjectiveUnderRigidMotionAndTracksCurrentArea`
|
||||
- `NonlinearShellSurfacePressure.ReducesSerialAndParallelContributionsDeterministically`
|
||||
- `NonlinearShellSurfacePressure.InvalidTrialRollsBackCommittedFrameAndFinalOutput`
|
||||
- `NonlinearShellSurfacePressure.WritesSchemaOneExternalInternalResidualReactionAndEquilibrium`
|
||||
- `ShellSurfacePressureApplication.InputWithoutPressureRetainsExistingNonlinearBehavior`
|
||||
|
||||
RED/focused commands:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests fesa_integration_tests
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure -R "^(NonlinearShellSurfacePressure|ShellSurfacePressureApplication)\."
|
||||
```
|
||||
|
||||
**Observed expected failure:** nonlinear procedure가 existing fixed-global CLOAD만 `f_ext`에 포함하고 pressure force/tangent를 누락하여 follower/objectivity/sign/balance assertions 또는 pressure nonlinear case가 실패해야 한다.
|
||||
|
||||
**Minimal GREEN:** each Newton trial에서 current pressure candidate를 평가하고 fixed/pressure external contributions를 stable checked add한다. internal과 external은 같은 trial이다. `r=f_int-f_ext`, `K=K_int-K_ext`를 full space에서 만든 후 constrained/free extraction한다. existing `FactorizeFresh` full-CSR `mtype=11` path를 사용하고 external tangent를 symmetrize하지 않는다. convergence가 검증된 candidate만 `CommitAcceptedFrame`에 전달하며 invalid geometry/nonfinite/factorization/solve failure는 committed frame/final HDF5를 보존한다.
|
||||
|
||||
**Focused VERIFY acceptance:** local FD `<=1e-8`; objectivity/current-area normalized `<=1e-12`; factor-one global force/moment balance `<=1e-8`; force/moment free residual은 existing nonzero scale relative `<=1e-2`, zero scale absolute `<=1e-3`; exact zero-scale rules 유지; schema version `1`의 unique factor-one accepted frame에 existing generalized external/internal/residual/reaction/equilibrium datasets가 일치한다; serial/parallel report order exact.
|
||||
|
||||
**Full/Stop VERIFY:** existing `NonlinearStaticProcedure`, `NonlinearStaticControl`, `TangentSolver`, `NonlinearHdf5ResultsWriter`, nonlinear reference regression suites와 `V-BUILD`, `V-SHOW`, `V-FULL`.
|
||||
|
||||
**Invariants:** translations only affect pressure kinematics; rotation force/tangent blocks zero; load factor exact once; generally nonsymmetric tangent retained; candidate-before-commit; stable reduction.
|
||||
|
||||
**Failure/atomicity:** failure does not append an accepted frame, does not replace existing final HDF5 and records last completed Newton stage/pressure source identity deterministically.
|
||||
|
||||
**Forbidden scope:** line search/arc length/new procedure, convergence threshold change, PARDISO adapter redesign, new HDF5 fields.
|
||||
|
||||
**Trace:** requirements `008`–`013`, `016`–`019`, `021`; `IO §§6–7,9–10`; `FORM §§9–14`; `NR §6` follower/tangent/objectivity/open-patch/balance rows.
|
||||
|
||||
**Evidence/report:** trial factor, force/tangent signs, nonsymmetry entries, solver spy events, iteration counts, free residual/balance metrics, HDF5 datasets, rollback snapshots, exits/durations/tails.
|
||||
|
||||
### Step 6 — `compare-pressure-reference`
|
||||
|
||||
**Bounded responsibility:** exact stored pressure artifacts와 FESA schema-1 factor-one HDF5의 deterministic displacement comparison을 기존 common tolerance policy에 연결한다.
|
||||
|
||||
**Dependencies:** Step 1–5 green; exact reference files read-only.
|
||||
|
||||
**Prerequisites/read first:** `reference-model.md` 전체, `io.md` §8, `numerical-review.md` §§6.2–6.3, `docs/TOLERANCE.md`, `reference_tolerance_policy.h/.cpp`, nonlinear reference comparison header/source/cases, `tests/CMakeLists.txt`, exact input/CSV. Artifact bytes는 inspection만 하고 수정하지 않는다.
|
||||
|
||||
**Exact files:** `nonlinear_static_reference_comparison.h/.cpp`, new `shell_surface_pressure_reference_test.cpp`, `tests/CMakeLists.txt`. tolerance policy source와 stored reference files는 no-change.
|
||||
|
||||
**RED named tests:**
|
||||
|
||||
- `ShellSurfacePressureReference.AuditsExactRequiredArtifactsAndIgnoresOptionalReviewArtifacts`
|
||||
- `ShellSurfacePressureReference.SelectsUniqueSchemaOneFactorOneAcceptedFrame`
|
||||
- `ShellSurfacePressureReference.Projects729WideRowsTo2187LogicalRowsPerFamily`
|
||||
- `ShellSurfacePressureReference.MatchesByInstanceNodeLabelAndComponentNotRowOrder`
|
||||
- `ShellSurfacePressureReference.RejectsSchemaIdentityCardinalityMissingExtraDuplicateAndNonfiniteBeforeTolerance`
|
||||
- `ShellSurfacePressureReference.ClassifiesTranslationBlockingAndRotationWarningOnly`
|
||||
- `ShellSurfacePressureReference.ExcludesReactionAndStressFamiliesFromVerdict`
|
||||
- `ShellSurfacePressureReference.UsesUnchangedCommonScaleNearZeroRelativeAndRmsPolicy`
|
||||
- `ShellSurfacePressureReference.WritesDeterministicComparisonReport`
|
||||
|
||||
RED/focused commands:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_reference_tests
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure -R "^ShellSurfacePressureReference\."
|
||||
```
|
||||
|
||||
**Observed expected failure:** current nonlinear case registry requires coarse/fine legacy artifact portfolios and has no pressure case identity/disposition, so exact two-file pressure contract 또는 729/2187 cardinality가 지원되지 않아 test가 fail해야 한다.
|
||||
|
||||
**Minimal GREEN:** `NonlinearReferenceCase`에 pressure case의 required/optional/excluded artifact disposition을 explicit value fields로 표현한다. exact path/hash snapshot 뒤 input을 build-tree execution directory에 byte-for-byte copy하고 FESA application만 실행한다. HDF5에서 schema `1`, Step-1, unique accepted `load_factor==1`, `/model/nodes`, nodal displacement를 읽어 `(Part-1-1,node label,component)` key로 project한다. wide CSV 729 rows를 translation 2,187 + rotation 2,187 logical rows로 expand한다. all prechecks 후 기존 `EvaluateReferenceTolerance`만 호출한다. U family blocking, UR warning-only이며 reaction은 comparator family를 만들지 않고 review-only inventory, stress는 excluded다.
|
||||
|
||||
**Focused VERIFY acceptance:** input and displacement CSV exact hash/byte size unchanged; 729 unique node keys; each U/UR family 2,187 rows; missing/extra/duplicate/nonfinite/schema/frame/identity failures precede tolerance; common policy `S=max(abs(reference))`, near-zero band `0.01*S`, relative `0.05`, RMS/S `0.01`, zero-scale exact; report rows/warnings/metrics stable.
|
||||
|
||||
**Full/Stop VERIFY:** all `ShellSurfacePressureReference`, `NonlinearStaticReference`, `ReferenceTolerancePolicy`, `Mitc4Reference` suites와 `V-BUILD`, `V-SHOW`, `V-FULL`.
|
||||
|
||||
**Invariants:** stored input/CSV immutable; Abaqus never run; FESA CSV is not product output; reference row order ignored but source keys exact; tolerance unchanged.
|
||||
|
||||
**Failure/atomicity:** any artifact/precheck failure produces failed classification without tolerance result or artifact mutation. copied execution files and generated HDF5/log remain under build tree only.
|
||||
|
||||
**Forbidden scope:** reference CSV generation/edit, new tolerance, reaction/stress promotion, legacy artifact rename/metadata requirement.
|
||||
|
||||
**Trace:** requirements `017`–`019`, `021`–`024`; `IO §8`; reference-model §§3–8; numerical-review external acceptance.
|
||||
|
||||
**Evidence/report:** before/after snapshots, copied input hash, generated HDF5 path, selected frame identity, family cardinality/scale/row/RMS/worst row, warnings, classification, exits/durations/tails.
|
||||
|
||||
### Step 7 — `verify-and-report-pressure-feature`
|
||||
|
||||
**Bounded responsibility:** all implementation artifacts를 inspect하고 full MSVC/CTest 및 exact pressure reference gate를 실행해 implementation-owned reports를 완결한다. 코드 수정은 이 Step의 기본 scope가 아니다.
|
||||
|
||||
**Dependencies:** Step 1–6 green; clean or isolated executor worktree; no stored reference mutation.
|
||||
|
||||
**Prerequisites/read first:** all prior Step outputs, `AGENTS.md`, `docs/HARNESS.md`, `docs/HARNESS_WORKFLOW.md`, `.codex/hooks.json`, `.harness/config.json` if it exists at execution time, current CMake files, all upstream docs, exact reference bundle.
|
||||
|
||||
**Exact files:** future new `implementation-report.md`, `build-test.md`, `reference-comparison.md`. Test/production/CMake files are read-only in this Step unless a verification failure is classified `implementation` and Coordinator authorizes returning to the owning earlier Step; no silent repair here.
|
||||
|
||||
**RED:** report preflight must first prove the three implementation-owned reports are absent/incomplete and that no final passing classification has been recorded. This is the expected evidence-state failure, not permission to fabricate results. If any source/test/CMake change lacks a first-failing test record, classify `evidence-gap` and stop.
|
||||
|
||||
**Minimal GREEN sequence:** literally execute `ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT` after build/test gates:
|
||||
|
||||
1. **ARTIFACT CHECK:** record exact stored input/displacement CSV path, sha256, size, timestamp before run; reaction review-only and stress excluded disposition; verify source phase never invokes Abaqus.
|
||||
2. **COMPARE:** run FESA on a copied exact `.inp`, locate generated schema-1 `<stem>_results.h5`, execute `ShellSurfacePressureReference` comparison, record 2,187 U and 2,187 UR rows and common tolerance metrics.
|
||||
3. **CLASSIFY:** fail on U/precheck/internal equilibrium; preserve UR-only difference as warning-only; reaction/stress cannot change verdict. Distinguish `implementation`, `test`, `infrastructure`, `environment`, `artifact`, `regression`, `evidence-gap`.
|
||||
4. **REPORT:** write commands, exit codes, durations, meaningful output tails, warning inventory, changed files, requirement coverage and artifact post-check to all three reports.
|
||||
|
||||
**Exact commands:** execute `V-CONFIG`, `V-BUILD`, `V-SHOW`, `V-FOCUSED`, `V-FULL`, `V-REFERENCE` from §12. No Harness Python command because no Harness/Python file changes are planned. If an executor later changes `scripts/` or Harness Python behavior under separate authority, it must additionally run `uv run --with pytest python -m pytest -v -rs` and record why.
|
||||
|
||||
**Observed expected failure:** any configure/build/test/reference nonzero exit, zero discovered tests, new `/W4 /WX` warning, runtime DLL staging failure, artifact mutation, cardinality mismatch or U blocking failure keeps reports non-passing and stops closure.
|
||||
|
||||
**Focused/Full/Stop VERIFY:** every command exit `0`, `ctest --show-only=json-v1` reports nonzero tests including all named feature tests, full CTest passes, no new warnings, runtime execution succeeds, artifacts unchanged, reports internally consistent.
|
||||
|
||||
**Invariants:** evidence before success claims; no release approval; no physics Gate 7 claim; no commit/task selection/manual status/timestamp ownership transfer from Harness Executor.
|
||||
|
||||
**Failure/atomicity:** a failed gate leaves status non-passing, retains outputs for diagnosis, does not alter upstream/tolerance/reference artifacts and returns to Coordinator with precise classification.
|
||||
|
||||
**Forbidden scope:** source fixes, reference generation, tolerance adjustment, phase execution expansion, release readiness.
|
||||
|
||||
**Trace:** all requirements `001`–`024`; all upstream contracts; Harness Stop contract.
|
||||
|
||||
**Evidence/report:** complete three-document handoff with task order, tests first, files, commands, comparison, assumptions, acceptance and open constraints.
|
||||
|
||||
## 8. TDD Test Plan
|
||||
|
||||
| order | test id | layer / named suite | RED cause | GREEN evidence |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 1 | `T-INPUT-VALID` | `InpSyntax`, `ShellSurfacePressureInput`, `ShellSurfacePressureDomain` valid tests | unsupported SURFACE/DSLOAD or missing semantic API | exact valid mapping/provenance/ownership |
|
||||
| 2 | `T-INPUT-NEG` | pressure input negative tests | unsupported forms accepted or unstable/partial failure | fail-closed deterministic diagnostics and no Domain |
|
||||
| 3 | `T-KERNEL-FORCE` | `ShellSurfacePressureKernel` analytical/sign/resultant/objectivity | evaluator absent | approved force integration and exact zero rotations |
|
||||
| 4 | `T-KERNEL-TANGENT` | kernel FD/nonsymmetry/geometry | external derivative absent | `h=1e-5`, normalized `<=1e-8`, geometry gate exact |
|
||||
| 5 | `T-ASSEMBLY` | `SurfacePressureAssembly` | full-space assembler absent | stable additive exact-once serial/parallel reduction |
|
||||
| 6 | `T-LINEAR` | `LinearShellSurfacePressure` | linear procedure omits pressure | reference force/reaction/residual/resultant and schema 0 |
|
||||
| 7 | `T-NONLINEAR` | `NonlinearShellSurfacePressure` | nonlinear external force/tangent omit pressure | current follower Newton convergence, rollback and schema 1 |
|
||||
| 8 | `T-CLI-HDF5` | `ShellSurfacePressureApplication` plus writer tests | pressure route/output regression not covered | existing naming/schema/projection/atomic/no-pressure behavior |
|
||||
| 9 | `T-REF-PRECHECK` | pressure reference precheck tests | registry/schema/cardinality unsupported | deterministic prechecks before tolerance |
|
||||
| 10 | `T-REF-COMPARE` | pressure reference end-to-end tests | pressure disposition/comparison unsupported | exact U blocking/UR warning-only report |
|
||||
| 11 | `E-FINAL` | full build/test/reference evidence | reports incomplete | verified commands and immutable artifact snapshots |
|
||||
|
||||
모든 production change는 같은 Step에서 먼저 생성/수정되는 관련 C++ test와 연결한다. `src/fesa/CMakeLists.txt` production 등록은 corresponding unit test RED와 함께 들어가며, `tests/CMakeLists.txt` 등록은 test source를 생성한 같은 Step에서 한다.
|
||||
|
||||
## 9. CMake/CTest Plan
|
||||
|
||||
- `src/fesa/CMakeLists.txt`: `surface_definition_mapper.cpp`, `shell_surface_pressure.cpp`, `surface_pressure_assembler.cpp`를 existing `fesa_solver` source inventory에 추가한다. public headers는 existing include tree를 통해 노출하고 별도 library/target을 만들지 않는다.
|
||||
- `tests/CMakeLists.txt`: 새 unit sources는 `fesa_unit_tests`, integration/app sources는 `fesa_integration_tests`, reference source는 `fesa_reference_tests`에 추가한다.
|
||||
- existing `gtest_discover_tests`가 개별 `Suite.Test` CTest entries를 만든다. 새 raw `add_test`는 필요하지 않다.
|
||||
- feature-specific selection은 exact suite-name regex로 한다. existing target-wide legacy labels를 전면 재분류하지 않는다. 필요하면 각 `gtest_discover_tests(... PROPERTIES LABELS ...)`의 existing labels에 `shell-surface-pressure-load`를 append하되 기존 labels를 삭제하지 않는다.
|
||||
- `.harness/config.json`이 execution 전에 생기면 그 설정이 아래 cache-derived command보다 우선한다. 현재는 없으므로 `.harness/build` default와 현재 MSVC x64 Debug cache를 사용한다.
|
||||
- `ctest --show-only=json-v1`에서 discovered test count가 zero면 success로 인정하지 않는다.
|
||||
- runtime staging은 existing `fesa_cli`, integration/reference target의 MKL/TBB/HDF5 DLL copy rules를 그대로 사용하며 새 manual PATH hack을 만들지 않는다.
|
||||
|
||||
## 10. Data Flow Contract
|
||||
|
||||
```text
|
||||
exact/approved Abaqus .inp
|
||||
-> AbaqusInputReader KeywordBlock/DataLine + physical SourceLocation
|
||||
-> DomainMappingContext raw SURFACE/DSLOAD candidate
|
||||
-> topology finalize -> SurfaceDefinitionMapper -> StepDefinitionMapper
|
||||
-> Domain-owned ordered ElementSurfaceDefinition
|
||||
+ Step-owned ordered SurfacePressureLoadDefinition
|
||||
-> AnalysisModel non-owning active view (Domain outlives view)
|
||||
-> ShellSurfacePressureEvaluator local force/tangent candidates
|
||||
-> SurfacePressureAssembler stable full-space reduction
|
||||
-> linear: Fext(ref), Kext=0
|
||||
nonlinear: Fext(current), Kext(current)
|
||||
-> residual/reaction/equilibrium recovery
|
||||
-> existing atomic HDF5 writer
|
||||
-> authoritative <stem>_results.h5
|
||||
-> schema-1 factor-one HDF5 projection keyed by
|
||||
(Step-1, factor=1, Part-1-1, source node label, component)
|
||||
-> exact read-only displacement CSV projection
|
||||
-> prechecks -> unchanged common tolerance -> deterministic report
|
||||
```
|
||||
|
||||
Exact reference flow:
|
||||
|
||||
- Input: `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure.inp`
|
||||
- Required CSV: `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure displacements.csv`
|
||||
- FESA run: input copy under `.harness/build/reference/shell-surface-pressure-load/`; never Abaqus
|
||||
- HDF5: schema `1`, `Step-1`, unique accepted factor-one frame, `/model/nodes`, existing nodal displacement/generalized force/residual/reaction/equilibrium paths
|
||||
- CSV: 729 wide node rows; U1/U2/U3 = 2,187 blocking logical rows; UR1/UR2/UR3 = 2,187 warning-only logical rows
|
||||
- Reaction CSV: optional review-only inventory, no comparison family/verdict effect
|
||||
- Stress CSV: excluded, no comparison family
|
||||
- Prechecks: missing/extra/duplicate/nonfinite/schema/frame/source-id/component/cardinality before tolerance
|
||||
- Tolerance: family-specific Abaqus-only `S=max(abs(reference))`; `abs(ref)<=0.01*S`이면 absolute row error `<=0.01*S`, otherwise relative error `<=0.05`; `RMS(error)/S<=0.01`; zero-scale는 FESA exact zero only.
|
||||
|
||||
## 11. Acceptance Traceability Matrix
|
||||
|
||||
| requirement | Step | task/test evidence | acceptance criterion |
|
||||
| --- | --- | --- | --- |
|
||||
| `FESA-REQ-SHELL-PRESSURE-001` | 1, 7 | `T-INPUT-VALID`; valid direct/ELSET S4/S4R tests | approved SURFACE + DSLOAD sequence exact |
|
||||
| `FESA-REQ-SHELL-PRESSURE-002` | 1, 2 | finite scalar/raw text, nonfinite/D-exponent tests | one uniform finite force/area scalar per row |
|
||||
| `FESA-REQ-SHELL-PRESSURE-003` | 1, 2, 4 | canonical facet/order tests; assembler order | unique deterministic instance/label/side list |
|
||||
| `FESA-REQ-SHELL-PRESSURE-004` | 1, 2 | S4/S4R/SPOS/SNEG valid and unsupported inventory | only approved shell types/sides; source type/label preserved |
|
||||
| `FESA-REQ-SHELL-PRESSURE-005` | 3, 4 | sign reversal and linear analytical tests | positive opposite selected normal; negative reverses |
|
||||
| `FESA-REQ-SHELL-PRESSURE-006` | 3, 4 | connectivity/SPOS/SNEG reversal | SPOS connectivity normal, SNEG inverse exact |
|
||||
| `FESA-REQ-SHELL-PRESSURE-007` | 3, 4 | reference geometry and prescribed-displacement invariant | linear pressure fixed to reference geometry |
|
||||
| `FESA-REQ-SHELL-PRESSURE-008` | 3, 5 | current area/normal/objectivity tests | nonlinear follower uses `X+u` |
|
||||
| `FESA-REQ-SHELL-PRESSURE-009` | 3, 5 | centered FD and Newton tangent sign tests | exact external derivative included |
|
||||
| `FESA-REQ-SHELL-PRESSURE-010` | 1, 4, 5 | additive records/unit factor/increment factor tests | pressure magnitude scaled exactly once |
|
||||
| `FESA-REQ-SHELL-PRESSURE-011` | 4, 5 | full-DOF scatter before projection tests | all pressure assembled full-space first |
|
||||
| `FESA-REQ-SHELL-PRESSURE-012` | 4, 5, 7 | reaction/free residual/global balance | `K*d-F` or `f_int-f_ext` includes pressure |
|
||||
| `FESA-REQ-SHELL-PRESSURE-013` | 1, 2, 4, 5, 6 | repeated serial/parallel/order/report tests | deterministic facets, reductions, rows, diagnostics |
|
||||
| `FESA-REQ-SHELL-PRESSURE-014` | 2 | unsupported params/labels/distribution/type/side tests | fail closed exact |
|
||||
| `FESA-REQ-SHELL-PRESSURE-015` | 2 | missing/empty/ambiguous/cyclic/scope/duplicate tests | fail closed, no guessing/averaging |
|
||||
| `FESA-REQ-SHELL-PRESSURE-016` | 2, 3, 4, 5 | invalid procedure/nonfinite/geometry/rollback | no clamp/fallback/partial result |
|
||||
| `FESA-REQ-SHELL-PRESSURE-017` | 2, 4, 5, 6, 7 | stable diagnostics, no Domain, final snapshots | failed candidate never published |
|
||||
| `FESA-REQ-SHELL-PRESSURE-018` | 4, 5, 7 | schema 0/1 inventory tests | existing HDF5 sole authority; no pressure dataset/version |
|
||||
| `FESA-REQ-SHELL-PRESSURE-019` | 4, 5, 6 | displacement/reaction/residual/equilibrium projections | existing units/coordinates/source IDs finite and observable |
|
||||
| `FESA-REQ-SHELL-PRESSURE-020` | 3, 4 | analytical sign/resultant/reaction/mesh/order suite | normalized analytical checks at approved thresholds |
|
||||
| `FESA-REQ-SHELL-PRESSURE-021` | 3, 5, 7 | objectivity/current-area/FD/residual/balance/open-patch | FD `<=1e-8`, balance `<=1e-8`, other approved gates |
|
||||
| `FESA-REQ-SHELL-PRESSURE-022` | 6, 7 | exact artifact audit and immutable snapshots | exact required input/displacement CSV only |
|
||||
| `FESA-REQ-SHELL-PRESSURE-023` | 6, 7 | 729/2187 key mapping, U/UR disposition, tolerance report | U blocking; UR warning; deterministic factor-one comparison |
|
||||
| `FESA-REQ-SHELL-PRESSURE-024` | 6, 7 | absent reaction/stress families and classification tests | reaction review-only, stress excluded; internal gates retained |
|
||||
|
||||
Coverage: normative IDs `24`, mapped IDs `24`, orphan IDs `0`. Every must requirement has at least one implementation/verification Step and one named test/evidence item.
|
||||
|
||||
## 12. Validation Commands
|
||||
|
||||
현재 execution context는 `.harness/config.json` 부재, existing `.harness/build` cache 존재다. 실행 시 config가 생겼으면 Harness가 그 값을 먼저 resolve하고 reports에 실제 command를 기록한다.
|
||||
|
||||
### `V-CONFIG` — clean/config-resolved MSVC x64 Debug configure
|
||||
|
||||
```powershell
|
||||
cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -A x64 `
|
||||
"-DFESA_GTEST_SOURCE_DIR=C:/git/googletest" `
|
||||
"-DMKL_DIR=C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl" `
|
||||
"-DTBB_DIR=C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb" `
|
||||
"-DHDF5_DIR=C:/Program Files/HDF_Group/HDF5/2.1.1/cmake"
|
||||
```
|
||||
|
||||
### `V-BUILD`
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug
|
||||
```
|
||||
|
||||
Acceptance: exit `0`; new MSVC warning `0`; `/W4 /WX` 유지; `fesa_solver`, `fesa_cli`, `fesa_unit_tests`, `fesa_integration_tests`, `fesa_reference_tests` all build; runtime staging errors 없음.
|
||||
|
||||
### `V-SHOW`
|
||||
|
||||
```powershell
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
```
|
||||
|
||||
Acceptance: exit `0`, discovered count `>0`, 모든 새 named suite가 inventory에 존재.
|
||||
|
||||
### `V-FOCUSED`
|
||||
|
||||
```powershell
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure -R "^(InpSyntax|ShellSurfacePressureInput|ShellSurfacePressureDomain|ShellSurfacePressureKernel|SurfacePressureAssembly|LinearShellSurfacePressure|NonlinearShellSurfacePressure|ShellSurfacePressureApplication|ShellSurfacePressureReference)\."
|
||||
```
|
||||
|
||||
Acceptance: exit `0`, selected count `>0`, failed `0`.
|
||||
|
||||
### `V-FULL`
|
||||
|
||||
```powershell
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
```
|
||||
|
||||
Acceptance: exit `0`, failed `0`, existing no-pressure/beam/shell/nonlinear/reference regressions pass.
|
||||
|
||||
### `V-REFERENCE`
|
||||
|
||||
```powershell
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure -R "^ShellSurfacePressureReference\."
|
||||
```
|
||||
|
||||
Acceptance: exit `0`; exact artifact post-snapshots equal pre-snapshots; U blocking pass; any UR deviations warning-only; internal balance pass; 729 wide/2,187 logical rows per family exact; reaction/stress verdict exclusion exact.
|
||||
|
||||
Harness Python behavior/file은 범위 밖이므로 이 plan에는 Python test 실행을 넣지 않는다. 별도 승인된 Harness/Python 변경이 발생하는 경우에만 다음을 추가한다.
|
||||
|
||||
```powershell
|
||||
uv run --with pytest python -m pytest -v -rs
|
||||
```
|
||||
|
||||
## 13. Risks and Downstream Handoff
|
||||
|
||||
| risk | mitigation / stop condition |
|
||||
| --- | --- |
|
||||
| existing `Load` abstraction에 follower tangent를 강제로 넣어 ownership 왜곡 | 별도 evaluator/assembler candidate 유지; public nodal load contract를 변경하지 않음 |
|
||||
| surface parser와 topology resolution order 혼동 | topology finalize 후 surface, surface 후 step binding 순서 고정 |
|
||||
| duplicate normalization이 additive DSLOAD와 혼동 | facet exact duplicate만 normalize; DSLOAD records는 항상 distinct/additive |
|
||||
| nonlinear sign 또는 factor double application | force and residual FD 두 부호 모두 test; factor at assembler boundary once |
|
||||
| tangent symmetrization 또는 SPD solver 경로 | antisymmetric evidence test; existing `MklPardisoTangentSolver` `mtype=11` spy/adapter tests |
|
||||
| invalid geometry가 zero load에서 bypass | evaluator zero pressure/factor geometry rejection test |
|
||||
| parallel nondeterminism | worker-local candidates + fixed source/facet/Gauss serial reduction; repeated byte/metric order tests |
|
||||
| HDF5 schema creep | no-new-path inventory and version `0`/`1` exact tests |
|
||||
| reference utility가 legacy four-file portfolio를 강요 | per-case required/optional/excluded disposition을 explicit하게 추가; exact pressure two-file gate |
|
||||
| reference comparison으로 implementation bug 은폐 | artifact/row prechecks first, tolerance unchanged, U blocking, internal balance retained |
|
||||
| build environment drift | execution-time `.harness/config.json` precedence; actual commands/cache/toolchain recorded |
|
||||
|
||||
Coordinator를 통한 Implementation Agent 단일 handoff:
|
||||
|
||||
- task order: Step 1 → 7, 각 Step 안의 RED/GREEN/VERIFY 순서
|
||||
- first tests: §7 named tests와 §8 test IDs
|
||||
- candidate files/signatures: §§5–6
|
||||
- validation commands: §12
|
||||
- HDF5/reference mapping: §10
|
||||
- tolerance/identity assumptions: common policy unchanged, factor-one, `(instance,node label,component)`, U blocking/UR warning-only
|
||||
- acceptance criteria: §11 전 24 requirements + each Step metrics
|
||||
- open constraints: phase files는 사용자 승인 이후 Planning Agent가 materialize; Executor는 별도 explicit request 이후만 실행; reference artifacts와 tolerance read-only
|
||||
|
||||
## 14. Open Issues
|
||||
|
||||
Implementation readiness를 막는 requirements/formulation/I/O/tolerance/reference/architecture gap은 없다. 다음은 blocker가 아닌 execution-time checks다.
|
||||
|
||||
- Step execution 직전 `.harness/config.json` 생성 여부를 다시 확인해 config precedence를 적용한다.
|
||||
- current build cache paths가 execution host에서 유효한지 `V-CONFIG`/`V-BUILD` 결과로 증명한다.
|
||||
- 새 feature suite가 `ctest --show-only=json-v1`에 실제 발견되는지 확인한다.
|
||||
- exact reference artifact pre/post snapshot을 같은 run에서 기록한다.
|
||||
|
||||
현재 critical user decision은 이 7-Step draft의 `approve` 또는 구체적인 revision 요청이다. 승인만으로 phase 파일을 실행하거나 `scripts/execute.py`를 호출하지 않는다.
|
||||
|
||||
## 15. Plan Self-Review
|
||||
|
||||
- 실제 존재가 확인된 existing paths만 modify/read 대상으로 기재했다.
|
||||
- 새 paths는 §6의 new-file table에서 first owning Step과 함께 명시했다.
|
||||
- semantic/evaluator/assembler signatures와 linear/nonlinear caller contract를 Steps 사이에 동일하게 유지했다.
|
||||
- requirements `001`–`024` 모두 Step과 named test/evidence에 연결했고 orphan이 없다.
|
||||
- exact reference input/CSV, schema-1 factor-one, 729/2,187 cardinality, dispositions와 tolerance mapping을 포함했다.
|
||||
- 모든 구현 Step에 test-first RED, expected failure, minimal GREEN, focused/full verification, invariants, atomicity, forbidden scope, trace, handoff evidence를 포함했다.
|
||||
- final Step은 `ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT` 순서를 literal하게 보존하고 세 implementation-owned reports를 소유한다.
|
||||
- manual commit, task selection, executor-owned timestamp/status 기록을 계획하지 않았다.
|
||||
- `phases/`, source, tests, CMake, config/hooks, upstream docs, tolerance, reference artifacts는 이 planning turn에서 변경하지 않았다.
|
||||
- `phases/index.json`와 phase task files는 사용자 승인 전 materialize하지 않았으며 Harness Executor 실행도 요청하지 않았다.
|
||||
@@ -1,121 +0,0 @@
|
||||
# Shell Surface Pressure Load — 구현 보고서
|
||||
|
||||
## 메타데이터와 판정
|
||||
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- implementation gate: Gate 6
|
||||
- owner: `implementation-agent` (Step 7 evidence/report)
|
||||
- 판정: `pass-for-physics-evaluation` 권고
|
||||
|
||||
이 Step은 Steps 1–6에서 구현된 surface pressure 기능을 수정하지 않고, 그
|
||||
TDD 이력과 fresh MSVC focused 검증 및 FESA-only reference comparison을 감사해
|
||||
Gate 6 산출물을 완성했다. Physics Gate 7과 release readiness는 판정하지 않는다.
|
||||
|
||||
## Step 7 RED 사전검사
|
||||
|
||||
시작 시 `implementation-report.md`, `build-test.md`,
|
||||
`reference-comparison.md`에 이번 Gate의 fresh passing evidence가 없었다. 이는
|
||||
요구된 evidence-state RED다. 이어서 Steps 1–6의 phase summary, 실행 기록 및
|
||||
`corrections.md`를 읽어 production/test/CMake 변경마다 아래의 test-first RED와
|
||||
후속 GREEN 증거가 있음을 확인했다. 증거 누락(`evidence-gap`)은 없다.
|
||||
|
||||
| Step | test-first RED 또는 관측 실패 | 최소 GREEN / VERIFY 증거 |
|
||||
| --- | --- | --- |
|
||||
| 1 | pressure semantic mapping 부재를 겨냥한 parser/domain RED | parser/domain focused 36/36, full CTest 310/310 |
|
||||
| 2 | invalid pressure input 18 tests 중 7 expected failures | hardened input GREEN 18/18, legacy 24/24, full CTest 321/321 |
|
||||
| 3 | `surface_pressure_evaluator.h` 누락 C1083 | kernel 11/11, MITC4 regression 7/7 |
|
||||
| 4 | surface pressure assembler header/API 부재 | pressure assembly 10/10, regression 43/43, discovery 342 |
|
||||
| 5 | pressure가 외력에 반영되지 않는 assertion RED | nonlinear/HDF5/tangent/reference focused 23/23 |
|
||||
| 6 | pressure reference registry/contract 부재 | pressure comparison 9/9, reference suite 14/14, discovery 362 |
|
||||
|
||||
Step 1/2의 outer Harness timeout은 `corrections.md`가 기록한 Stop/full CTest
|
||||
중복 실행의 환경적 시간 초과이며, product RED/GREEN 증거 누락으로 분류하지
|
||||
않았다.
|
||||
|
||||
## 구현 범위와 변경 인터페이스
|
||||
|
||||
Steps 1–6에서 이미 완료된 기능은 다음의 하나의 입력-해석-결과 경로다.
|
||||
|
||||
1. `*SURFACE, TYPE=ELEMENT`와 additive `*DSLOAD, P`를 immutable Domain/Step
|
||||
pressure facet으로 map하고 stable facet identity와 source order를 보존한다.
|
||||
2. target, face, pressure, duplicate/conflict, finite 값과 shell surface 방향을
|
||||
fail-closed diagnostic으로 검증한다.
|
||||
3. 4-node MITC4 facet의 reference/current configuration pressure force를 평가하며,
|
||||
follower external tangent를 exact contribution으로 제공한다.
|
||||
4. linear path에서는 reference-configuration pressure force만 deterministic full-space
|
||||
load assembly에 더하고, nonlinear full Newton path에서는 current configuration
|
||||
force와 external tangent를 trial assembly에 포함한다.
|
||||
5. schema-0/1, no-pressure behaviour, CLI lexical-sibling output 및 existing B33/MITC4
|
||||
contracts를 확장하거나 변경하지 않는다.
|
||||
|
||||
Step 7은 production/header/test/CMake/Harness/tolerance/reference artifact를 변경하지
|
||||
않았다. 이 Step의 허용된 변경은 세 Gate 6 보고서와 phase index의 Step 7
|
||||
`status`/one-line `summary`뿐이다.
|
||||
|
||||
## 요구조건 커버리지
|
||||
|
||||
아래 매핑은 승인 requirements의 24개 ID 전체가 orphan 없이 Steps 1–6의 구현과
|
||||
passing evidence에 연결됨을 보인다. 상세 command, count 및 artifact evidence는
|
||||
`build-test.md`와 `reference-comparison.md`에 있다.
|
||||
|
||||
| 요구조건 | 구현 Step | 검증 증거 |
|
||||
| --- | --- | --- |
|
||||
| `FESA-REQ-SHELL-PRESSURE-001` | 1 | `ShellSurfacePressureInput` |
|
||||
| `FESA-REQ-SHELL-PRESSURE-002` | 1 | `ShellSurfacePressureDomain` |
|
||||
| `FESA-REQ-SHELL-PRESSURE-003` | 1, 4 | `ShellSurfacePressureInput`, `SurfacePressureAssembly` |
|
||||
| `FESA-REQ-SHELL-PRESSURE-004` | 2 | `ShellSurfacePressureInput` invalid-target cases |
|
||||
| `FESA-REQ-SHELL-PRESSURE-005` | 2 | duplicate/conflict input cases |
|
||||
| `FESA-REQ-SHELL-PRESSURE-006` | 3 | `ShellSurfacePressureKernel` |
|
||||
| `FESA-REQ-SHELL-PRESSURE-007` | 3 | reference/current pressure force cases |
|
||||
| `FESA-REQ-SHELL-PRESSURE-008` | 3, 5 | follower tangent kernel/nonlinear cases |
|
||||
| `FESA-REQ-SHELL-PRESSURE-009` | 4 | `SurfacePressureAssembly` deterministic order |
|
||||
| `FESA-REQ-SHELL-PRESSURE-010` | 4 | `LinearShellSurfacePressure` |
|
||||
| `FESA-REQ-SHELL-PRESSURE-011` | 4 | linear reaction/schema preservation |
|
||||
| `FESA-REQ-SHELL-PRESSURE-012` | 5 | `NonlinearShellSurfacePressure` |
|
||||
| `FESA-REQ-SHELL-PRESSURE-013` | 5 | exact external tangent/full Newton cases |
|
||||
| `FESA-REQ-SHELL-PRESSURE-014` | 5 | accepted free residual/global balance test |
|
||||
| `FESA-REQ-SHELL-PRESSURE-015` | 1–5 | parser-to-analysis integration suites |
|
||||
| `FESA-REQ-SHELL-PRESSURE-016` | 4, 5 | no-pressure schema-0/1 regression |
|
||||
| `FESA-REQ-SHELL-PRESSURE-017` | 5 | schema-1 accepted-frame/HDF5 cases |
|
||||
| `FESA-REQ-SHELL-PRESSURE-018` | 2, 5 | diagnostics and failure-atomicity cases |
|
||||
| `FESA-REQ-SHELL-PRESSURE-019` | 6, 7 | `ShellSurfacePressureReference` 9/9 |
|
||||
| `FESA-REQ-SHELL-PRESSURE-020` | 6, 7 | exact artifact SHA/size and precheck evidence |
|
||||
| `FESA-REQ-SHELL-PRESSURE-021` | 6, 7 | U blocking / UR warning-only projection |
|
||||
| `FESA-REQ-SHELL-PRESSURE-022` | 6, 7 | common family-scale row/RMS comparison |
|
||||
| `FESA-REQ-SHELL-PRESSURE-023` | 4–7 | schema/CLI/no-pressure regression suites |
|
||||
| `FESA-REQ-SHELL-PRESSURE-024` | 1–7 | recorded RED/GREEN, fresh MSVC focused gates |
|
||||
|
||||
커버된 요구조건: 24/24. Orphan count: 0.
|
||||
|
||||
## Step 7 GREEN 및 VERIFY
|
||||
|
||||
`.harness/config.json`이 없었으므로 approved direct CMake command를 사용했다.
|
||||
Visual Studio 18 2026, x64, Debug, MSVC 19.51.36252.0에서 test target을 build했고,
|
||||
feature focused CTest는 64/64, generated schema-1 HDF5를 다시 소비한 pressure
|
||||
reference suite는 9/9로 통과했다. Configure/build에 새 `/W4 /WX` warning이 없고,
|
||||
CLI 및 test directory에 HDF5/MKL/TBB runtime DLL closure도 존재했다.
|
||||
|
||||
Required input의 byte-identical build copy에 FESA CLI만 실행했다. 결과는 unique
|
||||
factor-one accepted frame을 가진 schema-1 HDF5이며, U 2,187 blocking rows와 UR
|
||||
2,187 warning-only rows 모두 common tolerance row/RMS gate를 통과했다. Input/CSV
|
||||
artifact의 pre/post SHA-256, size 및 timestamp는 동일했다.
|
||||
|
||||
Agent는 targetless whole-project build나 unfiltered full CTest를 실행하지 않았다.
|
||||
그 검증은 `.codex/hooks.json`에 등록된 automatic Stop의 단 한 번의 authoritative
|
||||
MSVC x64 Debug validation 소유권이다. The Harness phase completed locally at
|
||||
`2026-09-01 17:43:57`; that automatic Stop build passed, discovery was
|
||||
nonzero, and its full CTest was `362/362 PASS`, `0 failed`. The historical
|
||||
command/evidence detail is recorded in `build-test.md` from
|
||||
`step7-output.json`, `LastTest.log`, and metadata `2c91462`, `bf2339c`,
|
||||
`c4d1e2a`.
|
||||
|
||||
## 한계와 handoff
|
||||
|
||||
- FESA가 Abaqus 내부 formulation, integration, stabilization 또는 result recovery와
|
||||
동등하다는 주장은 하지 않는다.
|
||||
- reaction CSV는 review-only, stress CSV는 external pressure reference comparison에서
|
||||
제외된다. 이는 internal equilibrium/free-residual evidence의 대체물이 아니다.
|
||||
- UR은 contract상 warning-only이며 이번 실행에서는 numerical warning도 발생하지 않았다.
|
||||
- Step 7은 Gate 6 evidence만 완료한다. Coordinator는 이를 근거로
|
||||
`pass-for-physics-evaluation` handoff만 수행할 수 있으며, physics/release decision은
|
||||
후속 owner의 범위다.
|
||||
@@ -0,0 +1,52 @@
|
||||
# Shell 표면 압력 수정과 시행착오
|
||||
|
||||
아래는 당시 실패 재현·원인·수정·검증 기록이다. 임시 shell/Hook/phase 복구 명령은 현재 실행 절차가 아니다.
|
||||
|
||||
<a id="corrections"></a>
|
||||
|
||||
<a id="corrections--shell-surface-pressure-load-correction-report"></a>
|
||||
## Shell Surface Pressure Load Correction Report
|
||||
|
||||
<a id="corrections--1-metadata"></a>
|
||||
### 1. Metadata
|
||||
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- source failure report: `phases/shell-surface-pressure-load/step1-output.json`, `phases/shell-surface-pressure-load/step2-output.json`, `.harness/build/Testing/Temporary/LastTest.log`
|
||||
- source implementation plan: `docs/shell-surface-pressure-load/README.md`
|
||||
- status: `corrected-for-implementation-rerun`
|
||||
- date: `2026-09-01`
|
||||
- normalized failure: `harness-parallel-duplicate-full-verification-timeout`
|
||||
- attempt count: `2`
|
||||
|
||||
<a id="corrections--2-failure-triage"></a>
|
||||
### 2. Failure Triage
|
||||
|
||||
- classification: `harness`
|
||||
- first failed command: `python scripts/execute.py shell-surface-pressure-load`
|
||||
- failed target or test: 제품 test 실패가 아니라 Implementation Agent가 실행한 unfiltered full CTest와 automatic Stop whole-project CTest의 중복 실행으로 인한 Harness outer timeout
|
||||
- evidence tail: Step 2 agent full CTest PID `21572`가 `12:44:03`에 시작되었고, agent command가 `12:45:41`에 반환되기 전에 Codex Stop-hook `stop_validation.py` PIDs `21496`/`20712`가 시작되었다. 별도 Stop full CTest PID `8816`은 `12:46:01`에 시작되었으며 최종 test PID `21964`가 실행되는 동안 Harness는 pipe EOF를 기다렸다. 같은 형태의 overlap이 두 번의 1800초 timeout/slowdown을 만들었다.
|
||||
|
||||
<a id="corrections--3-root-cause-summary"></a>
|
||||
### 3. Root Cause Summary
|
||||
|
||||
Root cause는 implementation defect, test defect 또는 CMake registration issue가 아니다. Pending Step 문서가 Implementation Agent에게 whole-project `cmake --build`와 unfiltered full CTest를 직접 실행하도록 요구하면서 `.codex/hooks.json`의 automatic Stop도 동일한 whole-project 검증을 수행했다. 장시간 reference tests가 병렬로 중복 실행되어 Executor가 Codex process와 pipe 종료를 기다리다 timeout됐다. 따라서 Step 2 output의 `exitCode: 124`는 product test failure가 아니라 Harness orchestration timeout이다.
|
||||
|
||||
<a id="corrections--5-verification-evidence"></a>
|
||||
### 5. Verification Evidence
|
||||
|
||||
<a id="corrections--step-12-evidence-audit"></a>
|
||||
#### Step 1/2 evidence audit
|
||||
|
||||
| Step | RED evidence | focused evidence | whole-project evidence | audit decision |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| Step 1 | 신규 surface/DSLOAD semantic mapping 부재로 targeted RED가 실제 관찰됨 | parser/domain focused tests `36/36 passed` | MSVC Debug build passed, full CTest `310/310 passed` in `954.19 sec`; feature commit `ca3e4bc`, output commit `d5fc316` 존재 | feature/test evidence는 신뢰 가능하며 outer 1800초 timeout은 Harness overlap으로 분리 |
|
||||
| Step 2 | invalid pressure input/diagnostic negative-contract assertions의 expected RED가 실제 관찰됨 | Step 2 targeted/focused verification passed | `.harness/build/Testing/Temporary/LastTest.log` LastWrite `2026-09-01 13:11:27`, `Test Passed.` 321, `Test Failed.` 0, CTest error marker 0; feature commit `c3b671d`, output commit `adebfae` 존재 | `exitCode: 124`는 test failure가 아니라 overlapping agent/Stop full CTest timeout |
|
||||
|
||||
<a id="corrections--correction-verification"></a>
|
||||
#### Correction verification
|
||||
|
||||
- targeted reproducer: 실행하지 않음. 요구된 correction은 기존 두 overlap의 PID/timestamp 및 output/log evidence를 감사하는 문서/phase-instruction 교정이며 Harness/build/test 실행은 명시적으로 금지되었다.
|
||||
- config-resolved full MSVC build/test: 이번 correction에서 실행하지 않음. 다음 Implementation Agent는 focused commands까지만 수행하고 automatic Stop이 exactly one whole-project validation을 소유한다.
|
||||
- Stop result: 이번 correction turn에서는 Stop/Harness를 실행하지 않음.
|
||||
- Harness Python pytest: hook/script/config를 변경하지 않았으므로 해당 없음.
|
||||
- static verification: pending Step 3–7에서 agent-owned unfiltered full CTest와 target 없는 whole-project build가 제거되고, focused/reference commands와 automatic Stop 책임이 남는지 `rg` 및 `git diff --check`로 확인한다.
|
||||
@@ -1,103 +0,0 @@
|
||||
# Shell Surface Pressure Load 물리 평가
|
||||
|
||||
## 1. Metadata
|
||||
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- source reference comparison report: `docs/shell-surface-pressure-load/reference-comparison.md`
|
||||
- source reference model: `docs/shell-surface-pressure-load/reference-model.md`
|
||||
- status: `pass-for-release-agent`
|
||||
- owner_agent: `physics-evaluation-agent`
|
||||
- date: `2026-09-01`
|
||||
- evaluated commit: `1eb4dce885175b78b8229b095f14cac102ea93df`
|
||||
|
||||
이 판정은 승인된 물리 기대와 기존 Gate 6 evidence에 한정한다. Abaqus 내부 formulation,
|
||||
integration, stabilization 또는 result recovery와의 동등성을 주장하지 않으며 release
|
||||
readiness를 승인하지 않는다.
|
||||
|
||||
## 2. Input Evidence
|
||||
|
||||
### 2.1 Gate와 artifact
|
||||
|
||||
`reference-comparison.md`는 명시적으로 `pass-for-physics-evaluation` handoff를 권고하고,
|
||||
blocking `U1/U2/U3` 2,187/2,187 rows와 warning-only `UR1/UR2/UR3` 2,187/2,187 rows가
|
||||
모두 통과했음을 기록한다. Physics Gate는 그 tolerance 판정을 재승인하지 않고, 통과한
|
||||
비교 결과를 물리 plausibility의 선행 조건으로만 사용했다.
|
||||
|
||||
| evidence | exact path / identity | read-only 확인 |
|
||||
| --- | --- | --- |
|
||||
| solver HDF5 | `.harness/build/reference/shell-surface-pressure-load/shellNL-meshfine-pressure_results.h5` | schema `1`, 10 accepted frames, unique factor-one frame `9` / increment `10`; SHA-256 `74f35e3e59edd05460733b1d6367994c7f4a1e847b366f2efad6fbecc03796f3` |
|
||||
| nonlinear log | `.harness/build/reference/shell-surface-pressure-load/shellNL-meshfine-pressure_log.txt` | factor-one iteration `3`: `combined_pass=1`, `transition=accepted`; SHA-256 `8555ff365dcf1f066813d0cce6440c3d56c9840baf8246696daa7b2e7b0061a1` |
|
||||
| required input | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure.inp` | 56,665 bytes, SHA-256 `53718ccc9b41c23fcc1b509a51d66f1347e87aca43a74f1d6cec4d2085f4b90e` |
|
||||
| required Abaqus CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure displacements.csv` | 729 finite wide rows; SHA-256 `2fe53f98eac9f04779100721c3edf8049eb1dbfe733ebcbd819aeeed03b81198` |
|
||||
| optional Abaqus CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure reactions.csv` | `review-only`; SHA-256 `a2347f4e88e4b73c75abe7c23e96bcc696c16c1975e2440b3ad9bf7ecda5f2b6` |
|
||||
| excluded Abaqus CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure stresses.csv` | `excluded`; SHA-256 `bc06f3324cc5d6655ded2939b3e1cb9d55a0359fa0d272a6958399464218a128` |
|
||||
| test record | `.harness/build/Testing/Temporary/LastTest.log` | existing automatic Stop evidence에서 full CTest `362/362 PASS`; 관련 physics test의 개별 pass 기록 확인 |
|
||||
| optional FESA debug CSV views | 없음 | 요구되거나 생성된 debug CSV가 없으며 official output으로 사용하지 않음 |
|
||||
|
||||
확인한 authoritative quantities는 factor-one global nodal displacement, generalized external/
|
||||
internal force, generalized residual, constrained reaction, global equilibrium, physical strain
|
||||
energy, 기존 MITC4 generalized strain/section resultant/stress다. Model purpose는 729-node,
|
||||
676-element `S4` square shell의 `SPOS`, positive `P=1e6`, `NLGEOM=YES` current-surface follower
|
||||
pressure response를 end-to-end로 확인하고, stored case가 직접 포함하지 않는 sign, S4R,
|
||||
linear, objectivity와 tangent 경계를 승인 internal tests로 보완하는 것이다.
|
||||
|
||||
## 3. Physics Checks
|
||||
|
||||
| physics check | status | evidence와 판정 |
|
||||
| --- | --- | --- |
|
||||
| global equilibrium | `pass` | Factor-one applied force sum은 `[8.626e-12, -7.311e-12, -1.0000000000000016e8]`이고 constrained reaction force sum은 `[-5.047e-6, -3.331e-6, 9.999999999999714e7]`이다. HDF5 stored balance를 approved current-arm scales로 다시 normalize하면 force `6.758e-14`, moment `3.725e-14`로 둘 다 `<=1e-8`이다. |
|
||||
| reaction consistency | `pass` | Constrained DOF에서 `/nodal/reaction`과 `generalized_residual`은 exact 일치했다. Pressure resultant의 `-Z` `1.0e8`에 대해 masked constrained reaction은 `+Z` `9.999999999999714e7`이며, tiny `X/Y`와 moment remainder는 위 global balance gate 안이다. |
|
||||
| displacement direction | `pass` | Reference connectivity의 `SPOS` vector area는 `+Z`, positive pressure resultant는 `-Z`다. Factor-one HDF5의 729개 `UZ`는 모두 nonpositive이며 625개 free nodes는 negative, 104개 constrained boundary nodes는 exact zero다. Center node의 `UZ=-5.514459701328648e-3`로 load 방향과 deformation mode가 일치한다. |
|
||||
| pressure sign, resultant, and moment | `pass` | Current configuration의 quadrature vector-area oracle은 expected force `[-1.723e-12, 2.450e-11, -1.0000000000000025e8]`를 주며 HDF5 applied resultant와의 normalized error는 `8.94e-16`이다. Current-arm applied moment oracle error는 승인 `M_Sigma` 기준 `1.32e-16`이다. Existing `ShellSurfacePressureKernel.PartitionsUnityAndIntegratesPlanarResultantAndMoment`와 `ReversesExactlyForSposSnegAndNegativeMagnitude`도 full CTest 기록에서 pass했다. |
|
||||
| symmetry and expected zero | `pass` | Feature-blocking exact-zero contract인 pressure generalized external rotational entries는 factor-one HDF5에서 exact zero다. Zero pressure/factor geometry validation test도 pass했다. Stored square patch의 mirror symmetry는 보조 sanity로만 확인했으며 `UX/UY/UZ` mirror mismatch의 최대 절대값은 `1.63e-16`, `1.09e-16`, `8.89e-17` 이하다. 별도 외부 symmetry tolerance를 만들지 않았다. |
|
||||
| nonlinear follower objectivity and current-area behavior | `pass` | HDF5 resultant는 factor-one current `X+u` vector-area oracle과 위 roundoff 수준으로 일치했다. Current scalar area/reference scalar area ratio는 `1.0000006316335197`로 finite하다. Stored symmetric case만으로 reference/current path를 분리하지 않고, existing tests `UsesCurrentAreaAndNormalForFollowerForce`, `IsTranslationAndRigidRotationObjective`, `IsObjectiveUnderRigidMotionAndTracksCurrentArea`, `MatchesCenteredFiniteDifferenceForForceAndResidualSigns`의 pass evidence로 rigid rotation covariance, `gamma=1.25` area/resultant scaling, follower direction과 external tangent sign을 보완했다. |
|
||||
| element force balance | `not-separately-applicable` | 이 feature는 pressure-only element force row나 element end-action balance contract를 정의하지 않는다. 대신 HDF5에서 `generalized_internal_force - generalized_external_force - generalized_residual`은 element assembly 이후 nodal full space에서 exact zero이고 global resultant/moment gate가 pass했다. Existing MITC4 section resultants는 finite이며 별도 pressure comparator를 만들지 않았다. |
|
||||
| stress/strain | `pass-sanity-only` | Factor-one `generalized_strain`, `section_resultant`, `stress`의 component names, units, `shell-local` coordinate system과 `midsurface`/`section-position` location은 `io.md`와 일치하고 모든 값이 finite다. 관측 range는 strain `[-9.842e-4, 1.801e-3]`, section resultant `[-4.595e6, 8.646e6]`, stress `[-1.036e8, 1.039e8]`이다. Feature-specific stress sign/reference expectation은 없고 stress CSV는 `excluded`이므로 그 이상의 pass를 주장하지 않는다. |
|
||||
| rigid body mode | `pass-no-symptom` | Stored case는 104 boundary nodes의 DOF 1–6을 구속하고 625 interior nodes가 자유다. 모든 accepted frame이 finite하게 수렴했고 factor-one maximum translation은 `5.514e-3`로 10-unit span 대비 `5.514e-4`이며 unbounded translation, near-zero-stiffness 또는 impossible displacement 증상이 없다. Pressure가 support를 제공한다는 주장은 하지 않는다. |
|
||||
| energy/residual | `pass` | 모든 HDF5 numeric dataset과 required U/UR rows는 finite다. Factor-one free translation residual은 `9.06582420157065e-6 / 1.47929199940215e5 = 6.12849e-11 <=1e-2`; zero-external-scale rotation residual은 `1.3758908607997e-6 <=1e-3`이다. Existing `PHYSICAL_STRAIN_ENERGY=86418.04713575779`는 finite positive 보조 evidence이며 pressure-only energy gate로 사용하지 않았다. HDF5 diagnostics는 result-neutral ignored-keyword warning 4개뿐이고 error/nonfinite diagnostic은 없다. |
|
||||
| model coverage | `pass` | Stored case의 declared inventory `729 nodes / 676 S4 / SPOS / positive P / NLGEOM=YES`와 unique factor-one frame이 모두 확인됐다. Stored case가 직접 다루지 않는 `S4R`, `SNEG`, negative/zero magnitude, linear reference configuration, exact resultant/moment, current-area objectivity와 tangent는 Numerical Review가 지정한 internal portfolio에서 해당 named tests가 pass했다. 승인 범위 밖의 추가 reference portfolio는 요구하지 않는다. |
|
||||
|
||||
## 4. Failure Classification
|
||||
|
||||
- failure classification: `none`
|
||||
- 다음 분류는 발생하지 않았다: `equilibrium-failure`, `reaction-inconsistency`,
|
||||
`displacement-direction-failure`, `symmetry-failure`, `stress-location-failure`,
|
||||
`element-force-inconsistency`, `rigid-body-mode-suspected`, `nonfinite-result`,
|
||||
`model-coverage-gap`, `upstream-contract`, `environment`.
|
||||
|
||||
`element force balance`의 `not-separately-applicable`과 stress의 `pass-sanity-only`는 upstream
|
||||
contract가 의도적으로 pressure-only element/stress acceptance family를 만들지 않은 데 따른
|
||||
범위 표시이며 failure 또는 evidence gap이 아니다.
|
||||
|
||||
## 5. Evaluation Verdict
|
||||
|
||||
**Verdict: `pass-for-release-agent`.**
|
||||
|
||||
문서화된 pressure 방향/부호, resultant/moment, reaction/equilibrium, exact-zero와 보조 symmetry,
|
||||
nonlinear follower objectivity/current-area, residual/nonfinite 및 declared model coverage가 모두
|
||||
물리적으로 일관된다. Release Agent가 release readiness를 별도로 audit할 수 있다. 이 verdict는
|
||||
release approval, publish 권한 또는 reference tolerance의 재승인이 아니다.
|
||||
|
||||
## 6. Handoff Recommendation
|
||||
|
||||
- handoff target: `Release Agent`
|
||||
- route: 항상 `Coordinator Agent`를 통해 전달
|
||||
- recommendation: Gate 8은 requirements-to-physics traceability, known limitations와 release
|
||||
evidence를 독립 audit한다. Physics Evaluation Agent는 Gate 8을 시작하거나 승인하지 않는다.
|
||||
|
||||
## 7. No-Change Assertion
|
||||
|
||||
이 평가에서 source, header, test, CMake, Harness, phase files, `coordination.md`, upstream feature
|
||||
contracts, implementation reports, reference input/CSV artifacts, `results.h5`, nonlinear log,
|
||||
`docs/TOLERANCE.md`와 tolerance policy를 수정하지 않았다. 생성한 파일은
|
||||
`docs/shell-surface-pressure-load/physics-evaluation.md` 하나뿐이다.
|
||||
|
||||
## 8. Open Issues
|
||||
|
||||
- missing physical expectations: 없음.
|
||||
- incomplete model coverage: 없음. Stored-case 한계는 승인 internal tests로 보완되며 추가
|
||||
reference case는 계약상 요구되지 않는다.
|
||||
- contradictory sign conventions: 없음.
|
||||
- unavailable energy/residual evidence: 없음. Existing energy와 residual HDF5/log evidence를
|
||||
사용했으며 새 pressure-only energy quantity는 요구되지 않는다.
|
||||
- blockers: 없음.
|
||||
@@ -1,122 +0,0 @@
|
||||
# Shell Surface Pressure Load — Reference Comparison 보고서
|
||||
|
||||
## 메타데이터와 Gate 6 판정
|
||||
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- case_id: `shellnl-meshfine-pressure-s4-follower`
|
||||
- owner_agent: `implementation-agent`
|
||||
- FESA authoritative output: schema-1
|
||||
`.harness/build/reference/shell-surface-pressure-load/shellNL-meshfine-pressure_results.h5`
|
||||
- 실행 모드: 요구 input의 byte-identical copy에 대한 FESA-only 실행
|
||||
- tolerance authority: 변경하지 않은 `docs/TOLERANCE.md`
|
||||
- deterministic classification: `passed`
|
||||
- blocking verdict: pass
|
||||
- warning-only verdict: pass (UR warning 없음)
|
||||
|
||||
이 문서는 Coordinator에 `pass-for-physics-evaluation`만 권고한다. Abaqus 내부 알고리즘
|
||||
동등성, Physics Gate 7 또는 release readiness를 주장하지 않는다.
|
||||
|
||||
## ARTIFACT CHECK와 불변성
|
||||
|
||||
아래 source artifact는 FESA-only 실행 전후에 size, SHA-256 및 기록 timestamp가 모두
|
||||
동일했다. Reference artifact의 rename, rewrite, 보정 또는 생성은 없었다.
|
||||
|
||||
| 용도 | 정확한 source path | bytes | SHA-256 |
|
||||
| --- | --- | ---: | --- |
|
||||
| required input | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure.inp` | 56,665 | `53718ccc9b41c23fcc1b509a51d66f1347e87aca43a74f1d6cec4d2085f4b90e` |
|
||||
| required displacement CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure displacements.csv` | 111,182 | `2fe53f98eac9f04779100721c3edf8049eb1dbfe733ebcbd819aeeed03b81198` |
|
||||
| review-only reaction CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure reactions.csv` | 108,923 | `a2347f4e88e4b73c75abe7c23e96bcc696c16c1975e2440b3ad9bf7ecda5f2b6` |
|
||||
| excluded stress CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure stresses.csv` | 1,036,876 | `bc06f3324cc5d6655ded2939b3e1cb9d55a0359fa0d272a6958399464218a128` |
|
||||
|
||||
유일하게 copy한 source artifact는 다음 exact input이다.
|
||||
|
||||
```text
|
||||
.harness/build/reference/shell-surface-pressure-load/
|
||||
shellNL-meshfine-pressure.inp
|
||||
```
|
||||
|
||||
copy의 size/SHA-256은 required input과 정확히 일치한다. Source history와 실행 command를
|
||||
감사했으며 `abaqus.exe`, `abaqus.bat`, Nastran 또는 다른 reference solver invocation은
|
||||
없었다. source/path text의 `abaqus` parser 명칭은 실행 증거가 아니다.
|
||||
|
||||
## FESA 생성물과 frame 선택
|
||||
|
||||
| 생성물 | bytes | SHA-256 | 검증 증거 |
|
||||
| --- | ---: | --- | --- |
|
||||
| copied input | 56,665 | `53718ccc9b41c23fcc1b509a51d66f1347e87aca43a74f1d6cec4d2085f4b90e` | source와 exact match |
|
||||
| `shellNL-meshfine-pressure_results.h5` | 10,547,430 | `74f35e3e59edd05460733b1d6367994c7f4a1e847b366f2efad6fbecc03796f3` | atomic publish된 schema-1 HDF5 |
|
||||
| `shellNL-meshfine-pressure_log.txt` | 40,786 | `8555ff365dcf1f066813d0cce6440c3d56c9840baf8246696daa7b2e7b0061a1` | factor-one increment accepted |
|
||||
|
||||
`Step-1`에는 load factor 0.1부터 1.0까지 accepted frame 10개가 있다. factor-one
|
||||
entry는 frame index 9, increment 10, `load_factor=1.0`, `is_factor_one=1`의 정확히
|
||||
하나이며, selected dataset은
|
||||
`/steps/Step-1/frames/9/nodal/displacement`다.
|
||||
|
||||
## COMPARE 사전검사와 row projection
|
||||
|
||||
비교기는 `/model/nodes`와 factor-one final nodal displacement를 사용한다. Key는 row
|
||||
position 또는 internal index가 아니라 `(Step-1 factor-one accepted frame, instance,
|
||||
source node label, component)`다.
|
||||
|
||||
| 사전검사 | 결과 |
|
||||
| --- | --- |
|
||||
| exact source artifact를 읽을 수 있음 | pass |
|
||||
| schema / Step / accepted factor-one frame | pass: schema 1, `Step-1`, factor-one 1개 |
|
||||
| HDF5 `/model/nodes` inventory | pass: finite/unique `(Part-1-1, label)` 729개 |
|
||||
| displacement CSV wide-row inventory | pass: finite/unique `(PART-1-1, label)` 729개 |
|
||||
| identity normalization | pass: comparison key에서만 instance ASCII case normalize; stored identity 보존 |
|
||||
| component projection | pass: U1/U2/U3 -> UX/UY/UZ, UR1/UR2/UR3 -> URX/URY/URZ |
|
||||
| U logical rows | pass: 정확히 2,187 |
|
||||
| UR logical rows | pass: 정확히 2,187 |
|
||||
| missing / extra / duplicate / nonfinite | 없음; tolerance 전에 fail-closed precheck |
|
||||
| reaction/stress disposition | reaction review-only, stress excluded; comparison family를 생성하지 않음 |
|
||||
|
||||
생성 HDF5가 존재한 뒤 `ShellSurfacePressureReference`를 다시 실행하여 9/9가 통과했다.
|
||||
이는 exact artifact audit, schema/frame selection, cardinality, identity match,
|
||||
precheck-before-tolerance, family policy와 deterministic repeat comparison을 확인한다.
|
||||
|
||||
## 공통 tolerance와 per-family 결정
|
||||
|
||||
Reference만으로 family scale과 near-zero band를 계산했다.
|
||||
|
||||
\[
|
||||
S=\max |r_i|,\qquad B=0.01S.
|
||||
\]
|
||||
|
||||
`abs(reference) <= B`이면 `abs(fesa-reference) <= B`, 나머지는 relative error
|
||||
`<= 0.05`를 적용하고 family relative RMS도 `<= 0.01`이어야 한다. 별도의 absolute
|
||||
gate, `max(1,S)`, clamp, average, row omission은 사용하지 않았다.
|
||||
|
||||
| family | 영향 | components | rows | S | B | near-zero pass | relative pass | max abs. error / row | max applicable relative error / row | relative RMS | verdict |
|
||||
| --- | --- | --- | ---: | ---: | ---: | ---: | ---: | --- | --- | ---: | --- |
|
||||
| `pressure_nodal_translation_blocking` | blocking | U1, U2, U3 | 2,187 | `5.51545573e-3` | `5.51545573e-5` | 1,582/1,582 | 605/605 | `9.96028671352255e-7`, `(Part-1-1, 2, U3)` | `3.12464512172274e-3`, `(Part-1-1, 419, U3)` | `5.18831997081359e-5` | pass |
|
||||
| `pressure_nodal_rotation_warning` | warning-only | UR1, UR2, UR3 | 2,187 | `1.64645887e-3` | `1.64645887e-5` | 995/995 | 1,192/1,192 | `3.29623883250936e-6`, `(Part-1-1, 250, UR2)` | `3.81566175195545e-2`, `(Part-1-1, 286, UR2)` | `3.10406152731217e-4` | pass |
|
||||
|
||||
결정적인 4,374개의 모든 row decision이 통과했다. max absolute-error row와 max
|
||||
applicable-relative-error row는 별도로 기록하며 서로 다른 source row일 수 있다.
|
||||
두 family RMS도 모두 `0.01` 미만이다. U는 blocking으로 pass했고, UR은 warning-only
|
||||
contract를 유지하며 이번 결과는 pass여서 deterministic warning도 없다.
|
||||
|
||||
## 내부 blocking evidence
|
||||
|
||||
최종 nonlinear log는 factor-one increment 10 / iteration 3에서
|
||||
`combined_pass=1`, `transition=accepted`를 기록했다. 이 internal evidence는 external
|
||||
CSV tolerance와 독립적이며 reaction CSV로 대체하지 않는다.
|
||||
|
||||
| internal family | rows | numerator / stored evidence | scale 또는 branch | metric / gate | 결과 |
|
||||
| --- | ---: | --- | --- | --- | --- |
|
||||
| accepted free translation-force residual | free DOF 1,875 | infinity norm `9.06582420157065e-6` | external/internal scale `1.47929199940215e5` | `6.12848863188238e-11 <= 1e-2` | pass |
|
||||
| accepted free rotation-moment residual | free DOF 1,875 | infinity norm `1.3758908607997e-6` | exact-zero external-scale branch | `1.3758908607997e-6 <= 1e-3` | pass |
|
||||
| global force balance | 3 | `[-5.04652281563267e-6, -3.33100482574622e-6, -3.02493572235107e-6]` | applied + masked constrained reaction, current arm | approved normalized gate `<=1e-8`, focused nonlinear test가 실행 | pass |
|
||||
| global moment balance | 3 | `[1.21226185001433e-6, 7.79749825596809e-7, -1.57924777074714e-5]` | spatial physical moment, current arm | approved normalized gate `<=1e-8`, 같은 focused test가 실행 | pass |
|
||||
|
||||
## 분류, no-change assertion, open issues
|
||||
|
||||
- final classification: `passed`; `implementation`, `test`, `configure`, `compile`,
|
||||
`link`, `reference-comparison`, `infrastructure`, `environment`, `artifact`,
|
||||
`regression`, `evidence-gap`, `upstream-contract` failure가 없다.
|
||||
- source artifact/CSV value/name, tolerance policy, upstream feature docs,
|
||||
source/test/CMake code를 이 Step에서 변경하지 않았다.
|
||||
- generated input/HDF5/log는 `.harness/build/` 아래에만 존재한다.
|
||||
- Gate 6 blocking open issue는 없다. physics plausibility와 release readiness는
|
||||
의도적으로 이 Step의 판정 범위 밖이다.
|
||||
@@ -1,10 +1,13 @@
|
||||
# Shell Surface Pressure Load 릴리스 준비 보고서
|
||||
|
||||
본 문서는 당시 revision의 검증·판정 기록이다. 본문에 남긴 원본 보고서 이름과 SHA-256은
|
||||
통합 전 자료의 식별자이며 정리된 현재 파일의 byte hash를 뜻하지 않는다. 원문은 Git
|
||||
`858e87b`의 해당 기능 폴더에서 확인할 수 있다. 현재 진입점과 대응 기록은 [README](README.md)를 따른다.
|
||||
|
||||
## 1. Metadata
|
||||
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- status: `ready-for-release`
|
||||
- owner_agent: `release-agent`
|
||||
- date: `2026-09-01`
|
||||
- audited_head: `e5e8ccc8ff84a97e64ab2bc1889b5ab7aaae1c77`
|
||||
- physics_evaluated_commit: `1eb4dce885175b78b8229b095f14cac102ea93df`
|
||||
@@ -17,123 +20,6 @@
|
||||
본 판정은 FESA 기능 전달 workflow의 내부 release readiness에 한정한다. Publish, deploy,
|
||||
package, tag, merge, commit, push 또는 외부 배포 권한을 부여하지 않는다.
|
||||
|
||||
## 2. Release Scope
|
||||
|
||||
| 구분 | 포함 범위 |
|
||||
| --- | --- |
|
||||
| 기능 | Assembly-level `*SURFACE, TYPE=ELEMENT, NAME=<name>`의 `SPOS|SNEG` member에 step-level `*DSLOAD`의 uniform finite scalar `P`를 적용 |
|
||||
| analysis type | 단일 linear static의 reference-configuration pressure, 단일 `NLGEOM=YES` full-Newton nonlinear static의 current-configuration follower pressure와 external tangent |
|
||||
| elements | Source type과 label을 보존하는 four-node `S4`, `S4R`; 기존 FESA MITC4 선택 |
|
||||
| materials/sections | 기존 linear isotropic elastic MITC4 shell material/section; 이 기능은 material 범위를 확장하지 않음 |
|
||||
| load semantics | Positive `P`는 selected surface normal 반대 방향, negative `P`는 방향 반전, load factor는 정확히 한 번 적용 |
|
||||
| assembly/physics | Stable full-DOF external load/tangent assembly, free/constrained projection, reaction/free residual, current-arm global force/moment equilibrium, deterministic ordering |
|
||||
| input subset | Direct `<instance>.<element-label>` member와 explicit `INSTANCE=`에 결속된 flat assembly ELSET member; case-insensitive lookup과 stable raw/source identity |
|
||||
| result scope | 기존 schema `0`/`1` HDF5의 displacement, generalized force/residual, reaction, global equilibrium 및 기존 MITC4 result chain; 새 pressure-only dataset 없음 |
|
||||
| reference scope | Exact stored nonlinear S4/SPOS/positive-`P` case의 factor-one nodal `U1/U2/U3` blocking, `UR1/UR2/UR3` warning-only comparison |
|
||||
| artifact scope | Runtime authoritative artifact는 `<stem>_results.h5`; CSV는 external reference/debug evidence이며 FESA product output이 아님 |
|
||||
|
||||
Release 범위에서 제외되는 핵심 항목은 `*DLOAD`, nonuniform/field/user pressure,
|
||||
node/edge/double-sided/contact surface, S4/S4R 이외 element, material nonlinearity, dynamics,
|
||||
thermal/contact/buckling, multiple-step propagation, surface offset/thickness-side correction,
|
||||
pressure-only result quantity 및 다른 solver 내부 알고리즘과의 동등성 주장이다.
|
||||
|
||||
## 3. Gate Evidence Inventory
|
||||
|
||||
| Gate evidence | feature/status 감사 결과 | release disposition |
|
||||
| --- | --- | --- |
|
||||
| `requirements.md` | 동일 feature, must `001`–`024`; 초기 `draft-for-coordinator-gate-review` label을 유지하지만 Coordinator Gate 1 통과 및 이후 전 단계의 binding baseline으로 사용됨 | pass |
|
||||
| `research.md` | 동일 feature; 초기 gate-review label을 유지하며 formulation/reference 범위와 non-equivalence 경계가 후속 문서에 반영됨 | pass |
|
||||
| `formulation.md` | `ready-for-numerical-review`; force/tangent/sign/configuration/assembly 계약이 `numerical-review.md`에서 독립 승인됨 | pass |
|
||||
| `numerical-review.md` | `pass-for-io-definition`; `tau_J=1.0e-12`, analytical/objectivity/tangent/equilibrium gate 확정 | pass |
|
||||
| `reference-model.md` | `pass-for-io-definition`; exact required input/CSV, row identity, U/UR disposition과 immutable artifact contract 확정 | pass |
|
||||
| `io.md` | `ready-for-implementation-planning`; input subset, semantic identity, diagnostics, schema `0`/`1`, HDF5-to-CSV projection 확정 | pass |
|
||||
| `implementation-plan.md` | archival pre-execution label은 `draft-awaiting-user-approval`; 승인 후 materialized Steps 1–7 실행 및 Gate 6 보고서로 plan 이행이 입증됨 | pass |
|
||||
| `implementation-report.md` | `pass-for-physics-evaluation` 권고; TDD Steps 1–6와 final evidence audit 완료 | pass |
|
||||
| `build-test.md` | focused `64/64`, pressure reference `9/9`, automatic Stop full MSVC/CTest `362/362`, `0 failed`, 새 `/W4 /WX` warning 없음 | pass |
|
||||
| `reference-comparison.md` | explicit `pass-for-physics-evaluation`; precheck 통과, U blocking `2187/2187`, UR warning-only `2187/2187`, 두 family row/RMS 모두 pass | pass |
|
||||
| `corrections.md` | 중복 full-verification Harness timeout을 implementation defect와 분리하고 단일 Stop owner로 교정; 이후 full `362/362`로 해소됨 | resolved/pass |
|
||||
| `physics-evaluation.md` | `pass-for-release-agent`; force/moment normalized balance `6.758e-14`/`3.725e-14 <= 1e-8`, blocker 없음 | pass |
|
||||
|
||||
Staleness 감사에서 Physics Agent가 평가한 `1eb4dce`는 현재 HEAD의 ancestor이며, 그 이후
|
||||
변경은 `coordination.md`와 `physics-evaluation.md`뿐이다. 평가 후 source, test, CMake,
|
||||
reference artifact 또는 tolerance 변경은 없다. 초기 문서의 archival status label과
|
||||
`implementation-report.md`의 compact requirement/evidence shorthand는 Coordinator 승인,
|
||||
`implementation-plan.md` §11, 실제 named-suite inventory, reference 및 physics evidence로
|
||||
교차 확인했다. Release acceptance를 바꾸는 미해결 상태·범위·수치 모순은 없다.
|
||||
|
||||
### Release Checklist
|
||||
|
||||
- [x] 필수 Gate 1–7 문서가 모두 존재하고 `feature_id`가 일치한다.
|
||||
- [x] Full MSVC x64 Debug build/CTest evidence가 `362/362 PASS`, `0 failed`다.
|
||||
- [x] `reference-comparison.md`가 `pass-for-physics-evaluation`이고 required comparison file이 모두 존재한다.
|
||||
- [x] `physics-evaluation.md`가 `pass-for-release-agent`다.
|
||||
- [x] Must requirement `24/24`가 acceptance, test/internal model, required external reference 및 release disposition에 연결된다.
|
||||
- [x] Exact input/CSV hash와 path가 구현 전후 동일하다.
|
||||
- [x] Blocking U family, warning-only UR family 및 internal equilibrium evidence가 모두 pass했다.
|
||||
- [x] Unsupported/deferred 범위와 accepted limitations를 사용자-facing하게 기록했다.
|
||||
- [x] Unresolved implementation defect, missing declared comparison file, tolerance 변경 또는 upstream decision이 없다.
|
||||
- [x] 이 판정이 외부 release 권한이 아님을 명시했다.
|
||||
|
||||
## 4. Acceptance Traceability
|
||||
|
||||
`test id`는 `implementation-plan.md`의 TDD ID와 실제 passing named suite를 함께 나타낸다.
|
||||
`BM-*`는 `research.md`의 bounded verification model이며, external case가 필요한 항목에는
|
||||
`shellnl-meshfine-pressure-s4-follower`를 명시한다.
|
||||
|
||||
| requirement id | compact acceptance criterion | test id / passing evidence | reference model id | verification report | release disposition |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `FESA-REQ-SHELL-PRESSURE-001` | Approved SURFACE+DSLOAD S4/S4R mapping과 identity 보존 | `T-INPUT-VALID`; `InpSyntax`, `ShellSurfacePressureInput` | `BM-07` + internal valid fixtures | `build-test.md` | included/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-002` | Positive/zero/negative finite scalar exact-once, nonfinite reject | `T-INPUT-VALID`, `T-INPUT-NEG`; `ShellSurfacePressureDomain` | `BM-01`, `BM-08` | `build-test.md` | included/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-003` | Unique deterministic instance/element/side inventory와 order | `T-INPUT-VALID`, `T-ASSEMBLY`; `SurfacePressureAssembly` | `BM-03` | `build-test.md` | included/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-004` | Only S4/S4R and SPOS/SNEG; source type/label 보존 | `T-INPUT-VALID`, `T-INPUT-NEG`; target rejection cases | `BM-01`, `BM-08` | `build-test.md` | constraint/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-005` | Positive pressure는 selected normal 반대, negative는 정확히 반전 | `T-KERNEL-FORCE`; `ReversesExactlyForSposSnegAndNegativeMagnitude` | `BM-01` | `build-test.md`, `physics-evaluation.md` | physics/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-006` | Connectivity-derived SPOS normal과 SNEG inverse | `T-KERNEL-FORCE`; sign/connectivity kernel cases | `BM-01`, `BM-02` | `build-test.md`, `physics-evaluation.md` | physics/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-007` | Linear pressure는 reference area/normal에서 displacement-independent | `T-KERNEL-FORCE`, `T-LINEAR`; `LinearShellSurfacePressure` | `BM-01`, `BM-02` | `build-test.md` | included/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-008` | NLGEOM pressure는 current `X+u` follower load | `T-KERNEL-FORCE`, `T-NONLINEAR`; current-area/objectivity cases | `BM-04`, `BM-07` | `build-test.md`, `physics-evaluation.md` | physics/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-009` | External follower-force derivative가 Newton tangent에 포함 | `T-KERNEL-TANGENT`, `T-NONLINEAR`; centered FD/sign cases | `BM-05`, `BM-06` | `build-test.md`, `physics-evaluation.md` | numerical/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-010` | Step load factor `0/0.5/1`을 정확히 한 번 적용 | `T-ASSEMBLY`, `T-LINEAR`, `T-NONLINEAR`; factor cases | `BM-03`, `BM-06` | `build-test.md` | numerical/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-011` | Stable full-DOF external load/tangent 후 projection | `T-ASSEMBLY`, `T-LINEAR`; full-space/order cases | `BM-03` | `build-test.md` | included/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-012` | Pressure가 constrained reaction과 free residual에 포함 | `T-LINEAR`, `T-NONLINEAR`; reaction/residual/balance cases | `BM-01`, `BM-06`, `BM-07` | `reference-comparison.md`, `physics-evaluation.md` | physics/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-013` | Resolution/reduction/result/diagnostic/comparison order 결정적 | `T-INPUT-VALID`, `T-ASSEMBLY`, `T-NONLINEAR`, `T-REF-COMPARE` | `BM-03`, `BM-07` | `build-test.md`, `reference-comparison.md` | constraint/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-014` | Unsupported SURFACE/DSLOAD variant fail-closed | `T-INPUT-NEG`; `ShellSurfacePressureInput` negative matrix | `BM-08` | `build-test.md` | constraint/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-015` | Missing/empty/ambiguous/conflicting/scope target fail-closed | `T-INPUT-NEG`; mapping failure/no-partial-candidate cases | `BM-08` | `build-test.md` | constraint/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-016` | Unsupported procedure, nonfinite, invalid geometry fail-closed | `T-INPUT-NEG`, `T-KERNEL-TANGENT`, `T-NONLINEAR`; rollback cases | `BM-04`, `BM-05`, `BM-08` | `build-test.md` | constraint/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-017` | Stable diagnostics와 failed candidate/output atomicity | `T-INPUT-NEG`, `T-CLI-HDF5`, `T-NONLINEAR`; final preservation cases | `BM-08` | `build-test.md` | output/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-018` | 기존 schema `0/1` HDF5만 authoritative; 새 pressure dataset 없음 | `T-CLI-HDF5`; schema/no-new-path writer regressions | `BM-07` | `implementation-report.md`, `build-test.md` | output/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-019` | Existing displacement/reaction/residual/equilibrium/result chain finite | `T-LINEAR`, `T-NONLINEAR`, `T-REF-COMPARE` | `BM-06`, `BM-07` | `reference-comparison.md`, `physics-evaluation.md` | output/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-020` | Linear S4/S4R sign/resultant/reaction/mesh-order suite 통과 | `T-KERNEL-FORCE`, `T-LINEAR`; analytical suites | `BM-01`–`BM-03` | `build-test.md`, `physics-evaluation.md` | verification/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-021` | Objectivity/current-area/tangent/residual/global balance 통과 | `T-KERNEL-TANGENT`, `T-NONLINEAR`; force/moment `<=1e-8` | `BM-04`–`BM-06`, `BM-07` | `reference-comparison.md`, `physics-evaluation.md` | verification/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-022` | Exact required input/CSV를 current path에서 read-only 사용 | `T-REF-PRECHECK`, `E-FINAL`; hash/size pre/post match | `shellnl-meshfine-pressure-s4-follower` | `reference-comparison.md` | verification/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-023` | Factor-one source-key mapping, U blocking/UR warning, precheck first | `T-REF-PRECHECK`, `T-REF-COMPARE`, `E-FINAL`; `2187+2187` | `shellnl-meshfine-pressure-s4-follower` | `reference-comparison.md` | verification/pass |
|
||||
| `FESA-REQ-SHELL-PRESSURE-024` | Reaction CSV review-only, stress CSV excluded, internal balance 유지 | `T-REF-COMPARE`; no reaction/stress verdict family | `shellnl-meshfine-pressure-s4-follower` | `reference-comparison.md`, `physics-evaluation.md` | constraint/pass |
|
||||
|
||||
Trace result: must requirements `24`, release-scoped rows `24`, orphan `0`, deferred must `0`,
|
||||
missing feature-required comparison files `0`.
|
||||
|
||||
## 5. Validation Evidence
|
||||
|
||||
| evidence | command / source | result |
|
||||
| --- | --- | --- |
|
||||
| Configure | `cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -A x64 ...` | exit `0`; MSVC 19.51.36252.0 |
|
||||
| Focused build | `cmake --build .harness/build --config Debug --target fesa_unit_tests fesa_integration_tests fesa_reference_tests` | exit `0`; new warning `0` |
|
||||
| Discovery | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | `362` discovered, feature suites nonzero |
|
||||
| Focused CTest | `ctest --test-dir .harness/build -C Debug --output-on-failure -R "^(InpSyntax|ShellSurfacePressureInput|ShellSurfacePressureDomain|ShellSurfacePressureKernel|SurfacePressureAssembly|LinearShellSurfacePressure|NonlinearShellSurfacePressure|ShellSurfacePressureApplication|ShellSurfacePressureReference)\."` | `64/64 PASS` |
|
||||
| FESA reference execution | `fesa.exe .harness/build/reference/shell-surface-pressure-load/shellNL-meshfine-pressure.inp` | exit `0`; factor-one increment accepted; schema-1 HDF5 atomic publish |
|
||||
| Pressure comparison | `ctest --test-dir .harness/build -C Debug --output-on-failure -R "^ShellSurfacePressureReference\."` | `9/9 PASS` before and after generated HDF5 |
|
||||
| Automatic Stop build | `cmake --build .harness/build --config Debug` | PASS |
|
||||
| Automatic Stop full CTest | `ctest --test-dir .harness/build -C Debug --output-on-failure` | `362/362 PASS`, `0 failed` |
|
||||
| Harness Python pytest | N/A | Harness/Python behavior 및 file 변경이 없어 upstream plan/report에서 적용 대상이 아님 |
|
||||
|
||||
Reference artifact pre/post evidence:
|
||||
|
||||
- Required input: SHA-256 `53718ccc9b41c23fcc1b509a51d66f1347e87aca43a74f1d6cec4d2085f4b90e`, `56,665` bytes, unchanged.
|
||||
- Required displacement CSV: SHA-256 `2fe53f98eac9f04779100721c3edf8049eb1dbfe733ebcbd819aeeed03b81198`, `111,182` bytes, unchanged.
|
||||
- `pressure_nodal_translation_blocking`: `2187/2187` rows pass, relative RMS `5.18831997081359e-5 <= 0.01`.
|
||||
- `pressure_nodal_rotation_warning`: `2187/2187` rows pass, relative RMS `3.10406152731217e-4 <= 0.01`; warning `0`.
|
||||
- Accepted free translation residual: `6.12848863188238e-11 <= 1e-2`.
|
||||
- Accepted free rotation residual: zero-external-scale branch `1.3758908607997e-6 <= 1e-3`.
|
||||
- Physics re-evaluation: normalized force balance `6.758e-14`, moment balance `3.725e-14`, each `<=1e-8`.
|
||||
|
||||
## 6. Known Limitations
|
||||
|
||||
1. 입력은 assembly-level `TYPE=ELEMENT` surface와 uniform `DSLOAD P`의 승인 subset뿐이다.
|
||||
@@ -166,42 +52,6 @@ Reference artifact pre/post evidence:
|
||||
|
||||
Deferred must requirement, unresolved defect, accepted blocking risk 또는 release-blocking open item은 없다.
|
||||
|
||||
## 7. Release Notes Draft
|
||||
|
||||
### 사용자-facing 요약
|
||||
|
||||
FESA는 이제 승인된 Abaqus `.inp` subset에서 assembly named element surface의 `S4`/`S4R`
|
||||
`SPOS` 또는 `SNEG` 면에 uniform `*DSLOAD P`를 적용할 수 있다. Linear static에서는 reference
|
||||
surface를, `NLGEOM=YES` nonlinear static에서는 current surface follower force와 consistent
|
||||
external tangent를 사용한다. Pressure는 기존 full-space load, reaction/free residual,
|
||||
global equilibrium 및 HDF5 result lifecycle에 통합된다.
|
||||
|
||||
### 검증 범위
|
||||
|
||||
- MSVC x64 Debug full CTest `362/362 PASS`, focused feature tests `64/64 PASS`.
|
||||
- Exact stored nonlinear case에서 factor-one U blocking `2187/2187`, UR warning-only
|
||||
`2187/2187` rows pass.
|
||||
- Factor-one normalized global force/moment balance는 각각 `6.758e-14`, `3.725e-14`로
|
||||
승인 gate `1e-8`을 통과했다.
|
||||
- S4R, side/sign reversal, linear reference pressure, current-area objectivity, external tangent와
|
||||
invalid geometry는 독립 internal analytical/FD/fail-closed tests로 검증했다.
|
||||
|
||||
### 주요 제한 및 사용 주의
|
||||
|
||||
이 release는 single-step linear 또는 approved nonlinear static, four-node S4/S4R, existing
|
||||
linear-isotropic MITC4 section과 uniform single-sided pressure만 지원한다. `*DLOAD`, nonuniform
|
||||
pressure, amplitude, node/edge/contact/double-sided surface, 다른 element/procedure/material 및
|
||||
surface offset/thickness correction은 지원하지 않는다. Model-consistent unit system을 사용해야
|
||||
하며 invalid current surface geometry는 fail-closed한다. UR은 warning-only이고 reaction/stress
|
||||
CSV는 external verdict 대상이 아니다. Abaqus 내부 동등성이나 실험 validation은 주장하지 않는다.
|
||||
|
||||
### Artifact paths
|
||||
|
||||
- Runtime authoritative output: input lexical sibling `<stem>_results.h5`
|
||||
- Required reference input: `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure.inp`
|
||||
- Required comparison CSV: `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure displacements.csv`
|
||||
- Release record: `docs/shell-surface-pressure-load/release.md`
|
||||
|
||||
## 8. Release Verdict
|
||||
|
||||
**Verdict: `ready-for-release`.**
|
||||
@@ -222,14 +72,6 @@ Coordinator Agent는 Gate 8을 `passed`로 기록하고 `shell-surface-pressure-
|
||||
또는 upstream decision return은 필요하지 않다. Publish, deploy, package, tag, merge, commit,
|
||||
push 또는 external release는 별도 명시적 권한 없이는 수행하지 않는다.
|
||||
|
||||
## 10. No-Change Assertion
|
||||
|
||||
Release Agent는 이 감사에서 `docs/shell-surface-pressure-load/release.md`만 생성했다. Source,
|
||||
public/private header, test, CMake, build/Harness configuration, phase files, upstream feature
|
||||
documents/reports, `coordination.md`, reference input/CSV, generated HDF5/log,
|
||||
`docs/TOLERANCE.md` 및 tolerance policy는 수정하지 않았다. Abaqus, Nastran 또는 다른
|
||||
reference solver를 실행하지 않았고 build, CTest, Harness 또는 FESA CLI를 재실행하지 않았다.
|
||||
|
||||
## 11. Open Issues
|
||||
|
||||
- Missing evidence: 없음.
|
||||
@@ -240,3 +82,5 @@ reference solver를 실행하지 않았고 build, CTest, Harness 또는 FESA CLI
|
||||
- Missing declared comparison files or mappings: 없음.
|
||||
- Release documentation gap: 없음.
|
||||
- Blockers: 없음.
|
||||
|
||||
현재 build·reference·물리 실행 기록은 [검증 보고서](verification.md)에 통합했다. 과거 readiness와 현재 재검증 필요를 구분하며 이 정리는 새로운 release 감사가 아니다.
|
||||
|
||||
@@ -0,0 +1,339 @@
|
||||
# Shell 표면 압력 검증과 한계
|
||||
|
||||
본 문서는 당시 revision의 검증·판정 기록이다. 본문에 남긴 원본 보고서 이름과 SHA-256은
|
||||
통합 전 자료의 식별자이며 정리된 현재 파일의 byte hash를 뜻하지 않는다. 원문은 Git
|
||||
`858e87b`의 해당 기능 폴더에서 확인할 수 있다. 현재 진입점과 대응 기록은 [README](README.md)를 따른다.
|
||||
|
||||
아래 날짜·revision·명령·수치는 당시 실제 실행 기록이다. 문서 정리에서 solver를 다시 실행하지 않았다.
|
||||
현재 계약은 [요구사항](requirements.md), [정식화](formulation.md), [I/O](io.md), [공통 tolerance](../TOLERANCE.md)를 따른다. [과거 release 판정](release.md)의 재검증 경계도 유지한다.
|
||||
|
||||
<a id="build-test"></a>
|
||||
|
||||
<a id="build-test--shell-surface-pressure-load--빌드테스트-보고서"></a>
|
||||
## Shell Surface Pressure Load — 빌드·테스트 보고서
|
||||
|
||||
<a id="build-test--메타데이터"></a>
|
||||
### 메타데이터
|
||||
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- 상태: agent 소유 focused 검증 통과
|
||||
- `.harness/config.json`은 없었으므로 Step 7이 지정한 direct CMake 명령을 사용했다.
|
||||
- 선택 환경: root CMake project, Visual Studio 18 2026 generator, x64, Debug,
|
||||
C++17, MSVC 19.51.36252.0 (tool path 14.51.36231), MSBuild 18.8.2.
|
||||
- 의존성: GoogleTest `C:/git/googletest`, MKL 2026.1, TBB 2023.1, HDF5 2.1.1.
|
||||
|
||||
<a id="build-test--red-사전검사와-이전-tdd-증거"></a>
|
||||
### RED 사전검사와 이전 TDD 증거
|
||||
|
||||
시작 시 `implementation-report.md`, `build-test.md`,
|
||||
`reference-comparison.md`가 모두 없었다. 이는 Step 7이 요구한
|
||||
evidence-state RED다. Steps 1–6의 실행 기록을 감사하여 각 production/test/CMake
|
||||
변경마다 expected RED와 GREEN/focused VERIFY가 있음을 확인했다. Step 1/2의
|
||||
outer Harness timeout은 `corrections.md`가 기록한 full CTest와 Stop의 중복 실행이며,
|
||||
제품 실패나 RED 누락이 아니다. `evidence-gap`은 없다.
|
||||
|
||||
<a id="build-test--agent-소유-명령-기록"></a>
|
||||
### Agent 소유 명령 기록
|
||||
|
||||
duration은 command runner가 관측한 wall-clock 시간이다. Agent는 targetless
|
||||
whole-project build 또는 unfiltered full CTest를 실행하지 않았다.
|
||||
|
||||
| ID | 명령 | exit | duration | 결과 / 의미 있는 tail |
|
||||
| --- | --- | ---: | ---: | --- |
|
||||
| `V-CONFIG` | `cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -A x64 "-DFESA_GTEST_SOURCE_DIR=C:/git/googletest" "-DMKL_DIR=C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl" "-DTBB_DIR=C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb" "-DHDF5_DIR=C:/Program Files/HDF_Group/HDF5/2.1.1/cmake"` | 0 | 7.5 s | `CXX compiler identification is MSVC 19.51.36252.0`; configure/generate 완료. |
|
||||
| `V-BUILD` | `cmake --build .harness/build --config Debug --target fesa_unit_tests fesa_integration_tests fesa_reference_tests` | 0 | 5.9 s | 세 test executable이 `.harness/build/tests/Debug`에 link됨. |
|
||||
| `V-SHOW` | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | 0 | 1.7 s | 유효한 `ctestInfo` JSON; 후속 audit에서 362 tests 확인. |
|
||||
| `V-FOCUSED` | `ctest --test-dir .harness/build -C Debug --output-on-failure -R "^(InpSyntax|ShellSurfacePressureInput|ShellSurfacePressureDomain|ShellSurfacePressureKernel|SurfacePressureAssembly|LinearShellSurfacePressure|NonlinearShellSurfacePressure|ShellSurfacePressureApplication|ShellSurfacePressureReference)\."` | 0 | 15.8 s | `100% tests passed`, 64/64; unit 37, integration 18, reference 9. |
|
||||
| `V-REFERENCE` (사전) | `ctest --test-dir .harness/build -C Debug --output-on-failure -R "^ShellSurfacePressureReference\."` | 0 | 2.9 s | 9/9 통과. |
|
||||
| `V-CLI-BUILD` | `cmake --build .harness/build --config Debug --target fesa_cli` | 0 | 2.7 s | `.harness/build/src/fesa/Debug/fesa.exe` link 완료. |
|
||||
| `V-CLI-RUN` | `fesa.exe .harness/build/reference/shell-surface-pressure-load/shellNL-meshfine-pressure.inp` | 0 | 약 10 m 56 s | FESA만 실행. factor-one increment 10이 accepted되고 schema-1 HDF5/log가 atomic publish됨. 마지막 log는 `combined_pass=1`, `transition=accepted`. |
|
||||
| `V-REFERENCE` (생성 결과) | 같은 `^ShellSurfacePressureReference\.` 명령 | 0 | 2.7 s | 새 root execution-directory HDF5를 선택하여 9/9 통과. |
|
||||
| inventory | CTest JSON suite/count 및 staged DLL audit | 0 | 1.9 s | 362 discovered, 모든 named suite nonzero, runtime closure 확인. |
|
||||
|
||||
<a id="build-test--발견focused-결과"></a>
|
||||
### 발견·focused 결과
|
||||
|
||||
| suite | 발견 수 | 결과 |
|
||||
| --- | ---: | --- |
|
||||
| `InpSyntax` | 5 | 통과 |
|
||||
| `ShellSurfacePressureInput` | 15 | 통과 |
|
||||
| `ShellSurfacePressureDomain` | 3 | 통과 |
|
||||
| `ShellSurfacePressureKernel` | 11 | 통과 |
|
||||
| `SurfacePressureAssembly` | 3 | 통과 |
|
||||
| `LinearShellSurfacePressure` | 5 | 통과 |
|
||||
| `NonlinearShellSurfacePressure` | 10 | 통과 |
|
||||
| `ShellSurfacePressureApplication` | 3 | 통과 |
|
||||
| `ShellSurfacePressureReference` | 9 | 통과 |
|
||||
| 선택 합계 | 64 | 64 passed, 0 failed |
|
||||
|
||||
선택된 test 중 skip, zero-discovery, failure는 없다.
|
||||
|
||||
<a id="build-test--경고와-runtime-closure"></a>
|
||||
### 경고와 runtime closure
|
||||
|
||||
configure/build 출력에는 compiler/linker warning이 없다. `CMAKE_HAVE_LIBC_PTHREAD`
|
||||
probe의 실패 표시는 Windows configure probe 결과일 뿐 `/W4 /WX` warning이 아니다.
|
||||
|
||||
| 실행 파일 directory | staged DLL |
|
||||
| --- | --- |
|
||||
| `.harness/build/src/fesa/Debug` | `hdf5.dll`, `libiomp5md.dll`, `libmmd.dll`, `mkl_core.3.dll`, `mkl_def.3.dll`, `mkl_intel_thread.3.dll`, `tbb12_debug.dll` |
|
||||
| `.harness/build/tests/Debug` | `hdf5.dll`, `libiomp5md.dll`, `libmmd.dll`, `mkl_core.3.dll`, `mkl_def.3.dll`, `mkl_intel_thread.3.dll`, `tbb12_debug.dll` |
|
||||
|
||||
test discovery/execution뿐 아니라 copied nonlinear input을 CLI로 실제 완료했으므로,
|
||||
MKL/TBB/HDF5 runtime staging도 실행으로 확인됐다.
|
||||
|
||||
<a id="build-test--stop-소유권-분류-변경-없음"></a>
|
||||
### Stop 소유권, 분류, 변경 없음
|
||||
|
||||
`.codex/hooks.json`의 Stop은 `scripts/hooks/stop_validation.py`에 연결되어 있다.
|
||||
이 훅이 agent turn 종료 시 단 한 번의 targetless whole-project MSVC x64 Debug build와
|
||||
unfiltered CTest를 소유한다. 이 Step은 hook entry point를 수동 호출하거나 중복 full
|
||||
verification을 실행하지 않았다.
|
||||
|
||||
- agent-owned classification: `passed`
|
||||
- 실패 classification: 없음 (`configure`, `compile`, `link`, `test`,
|
||||
`reference-comparison`, `artifact`, `environment`, `regression` 모두 없음)
|
||||
- automatic Stop disposition: Harness phase completed locally at
|
||||
`2026-09-01 17:43:57`. The single automatic Stop whole-project MSVC x64
|
||||
Debug build passed. It ran `cmake --build .harness/build --config Debug`,
|
||||
then `ctest --test-dir .harness/build -C Debug --show-only=json-v1` with
|
||||
nonzero discovery, and `ctest --test-dir .harness/build -C Debug
|
||||
--output-on-failure`; the final full CTest result was `362/362 PASS`,
|
||||
`0 failed`.
|
||||
- automatic Stop evidence sources:
|
||||
`phases/shell-surface-pressure-load/step7-output.json`,
|
||||
`.harness/build/Testing/Temporary/LastTest.log`, and phase/commit metadata
|
||||
`2c91462`, `bf2339c`, `c4d1e2a`. Classification: `pass`; failed tests:
|
||||
none. Duration: not separately preserved in committed report; completion
|
||||
timestamp and LastTest log are authoritative.
|
||||
- Step 7은 source/header/test/CMake/Harness/tolerance/upstream contract/reference artifact를
|
||||
변경하지 않았고, 세 Gate 6 보고서 및 허용된 Step 7 status/summary만 변경한다.
|
||||
|
||||
physics evaluation과 release readiness는 이 보고서 범위 밖이다.
|
||||
|
||||
<a id="reference-comparison"></a>
|
||||
|
||||
<a id="reference-comparison--shell-surface-pressure-load--reference-comparison-보고서"></a>
|
||||
## Shell Surface Pressure Load — Reference Comparison 보고서
|
||||
|
||||
<a id="reference-comparison--메타데이터와-gate-6-판정"></a>
|
||||
### 메타데이터와 Gate 6 판정
|
||||
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- case_id: `shellnl-meshfine-pressure-s4-follower`
|
||||
- FESA authoritative output: schema-1
|
||||
`.harness/build/reference/shell-surface-pressure-load/shellNL-meshfine-pressure_results.h5`
|
||||
- 실행 모드: 요구 input의 byte-identical copy에 대한 FESA-only 실행
|
||||
- tolerance authority: 변경하지 않은 `docs/TOLERANCE.md`
|
||||
- deterministic classification: `passed`
|
||||
- blocking verdict: pass
|
||||
- warning-only verdict: pass (UR warning 없음)
|
||||
|
||||
이 문서는 Coordinator에 `pass-for-physics-evaluation`만 권고한다. Abaqus 내부 알고리즘
|
||||
동등성, Physics Gate 7 또는 release readiness를 주장하지 않는다.
|
||||
|
||||
<a id="reference-comparison--artifact-check와-불변성"></a>
|
||||
### ARTIFACT CHECK와 불변성
|
||||
|
||||
아래 source artifact는 FESA-only 실행 전후에 size, SHA-256 및 기록 timestamp가 모두
|
||||
동일했다. Reference artifact의 rename, rewrite, 보정 또는 생성은 없었다.
|
||||
|
||||
| 용도 | 정확한 source path | bytes | SHA-256 |
|
||||
| --- | --- | ---: | --- |
|
||||
| required input | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure.inp` | 56,665 | `53718ccc9b41c23fcc1b509a51d66f1347e87aca43a74f1d6cec4d2085f4b90e` |
|
||||
| required displacement CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure displacements.csv` | 111,182 | `2fe53f98eac9f04779100721c3edf8049eb1dbfe733ebcbd819aeeed03b81198` |
|
||||
| review-only reaction CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure reactions.csv` | 108,923 | `a2347f4e88e4b73c75abe7c23e96bcc696c16c1975e2440b3ad9bf7ecda5f2b6` |
|
||||
| excluded stress CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure stresses.csv` | 1,036,876 | `bc06f3324cc5d6655ded2939b3e1cb9d55a0359fa0d272a6958399464218a128` |
|
||||
|
||||
유일하게 copy한 source artifact는 다음 exact input이다.
|
||||
|
||||
```text
|
||||
.harness/build/reference/shell-surface-pressure-load/
|
||||
shellNL-meshfine-pressure.inp
|
||||
```
|
||||
|
||||
copy의 size/SHA-256은 required input과 정확히 일치한다. Source history와 실행 command를
|
||||
감사했으며 `abaqus.exe`, `abaqus.bat`, Nastran 또는 다른 reference solver invocation은
|
||||
없었다. source/path text의 `abaqus` parser 명칭은 실행 증거가 아니다.
|
||||
|
||||
<a id="reference-comparison--fesa-생성물과-frame-선택"></a>
|
||||
### FESA 생성물과 frame 선택
|
||||
|
||||
| 생성물 | bytes | SHA-256 | 검증 증거 |
|
||||
| --- | ---: | --- | --- |
|
||||
| copied input | 56,665 | `53718ccc9b41c23fcc1b509a51d66f1347e87aca43a74f1d6cec4d2085f4b90e` | source와 exact match |
|
||||
| `shellNL-meshfine-pressure_results.h5` | 10,547,430 | `74f35e3e59edd05460733b1d6367994c7f4a1e847b366f2efad6fbecc03796f3` | atomic publish된 schema-1 HDF5 |
|
||||
| `shellNL-meshfine-pressure_log.txt` | 40,786 | `8555ff365dcf1f066813d0cce6440c3d56c9840baf8246696daa7b2e7b0061a1` | factor-one increment accepted |
|
||||
|
||||
`Step-1`에는 load factor 0.1부터 1.0까지 accepted frame 10개가 있다. factor-one
|
||||
entry는 frame index 9, increment 10, `load_factor=1.0`, `is_factor_one=1`의 정확히
|
||||
하나이며, selected dataset은
|
||||
`/steps/Step-1/frames/9/nodal/displacement`다.
|
||||
|
||||
<a id="reference-comparison--compare-사전검사와-row-projection"></a>
|
||||
### COMPARE 사전검사와 row projection
|
||||
|
||||
비교기는 `/model/nodes`와 factor-one final nodal displacement를 사용한다. Key는 row
|
||||
position 또는 internal index가 아니라 `(Step-1 factor-one accepted frame, instance,
|
||||
source node label, component)`다.
|
||||
|
||||
| 사전검사 | 결과 |
|
||||
| --- | --- |
|
||||
| exact source artifact를 읽을 수 있음 | pass |
|
||||
| schema / Step / accepted factor-one frame | pass: schema 1, `Step-1`, factor-one 1개 |
|
||||
| HDF5 `/model/nodes` inventory | pass: finite/unique `(Part-1-1, label)` 729개 |
|
||||
| displacement CSV wide-row inventory | pass: finite/unique `(PART-1-1, label)` 729개 |
|
||||
| identity normalization | pass: comparison key에서만 instance ASCII case normalize; stored identity 보존 |
|
||||
| component projection | pass: U1/U2/U3 -> UX/UY/UZ, UR1/UR2/UR3 -> URX/URY/URZ |
|
||||
| U logical rows | pass: 정확히 2,187 |
|
||||
| UR logical rows | pass: 정확히 2,187 |
|
||||
| missing / extra / duplicate / nonfinite | 없음; tolerance 전에 fail-closed precheck |
|
||||
| reaction/stress disposition | reaction review-only, stress excluded; comparison family를 생성하지 않음 |
|
||||
|
||||
생성 HDF5가 존재한 뒤 `ShellSurfacePressureReference`를 다시 실행하여 9/9가 통과했다.
|
||||
이는 exact artifact audit, schema/frame selection, cardinality, identity match,
|
||||
precheck-before-tolerance, family policy와 deterministic repeat comparison을 확인한다.
|
||||
|
||||
<a id="reference-comparison--공통-tolerance와-per-family-결정"></a>
|
||||
### 공통 tolerance와 per-family 결정
|
||||
|
||||
Reference만으로 family scale과 near-zero band를 계산했다.
|
||||
|
||||
\[
|
||||
S=\max |r_i|,\qquad B=0.01S.
|
||||
\]
|
||||
|
||||
`abs(reference) <= B`이면 `abs(fesa-reference) <= B`, 나머지는 relative error
|
||||
`<= 0.05`를 적용하고 family relative RMS도 `<= 0.01`이어야 한다. 별도의 absolute
|
||||
gate, `max(1,S)`, clamp, average, row omission은 사용하지 않았다.
|
||||
|
||||
| family | 영향 | components | rows | S | B | near-zero pass | relative pass | max abs. error / row | max applicable relative error / row | relative RMS | verdict |
|
||||
| --- | --- | --- | ---: | ---: | ---: | ---: | ---: | --- | --- | ---: | --- |
|
||||
| `pressure_nodal_translation_blocking` | blocking | U1, U2, U3 | 2,187 | `5.51545573e-3` | `5.51545573e-5` | 1,582/1,582 | 605/605 | `9.96028671352255e-7`, `(Part-1-1, 2, U3)` | `3.12464512172274e-3`, `(Part-1-1, 419, U3)` | `5.18831997081359e-5` | pass |
|
||||
| `pressure_nodal_rotation_warning` | warning-only | UR1, UR2, UR3 | 2,187 | `1.64645887e-3` | `1.64645887e-5` | 995/995 | 1,192/1,192 | `3.29623883250936e-6`, `(Part-1-1, 250, UR2)` | `3.81566175195545e-2`, `(Part-1-1, 286, UR2)` | `3.10406152731217e-4` | pass |
|
||||
|
||||
결정적인 4,374개의 모든 row decision이 통과했다. max absolute-error row와 max
|
||||
applicable-relative-error row는 별도로 기록하며 서로 다른 source row일 수 있다.
|
||||
두 family RMS도 모두 `0.01` 미만이다. U는 blocking으로 pass했고, UR은 warning-only
|
||||
contract를 유지하며 이번 결과는 pass여서 deterministic warning도 없다.
|
||||
|
||||
<a id="reference-comparison--내부-blocking-evidence"></a>
|
||||
### 내부 blocking evidence
|
||||
|
||||
최종 nonlinear log는 factor-one increment 10 / iteration 3에서
|
||||
`combined_pass=1`, `transition=accepted`를 기록했다. 이 internal evidence는 external
|
||||
CSV tolerance와 독립적이며 reaction CSV로 대체하지 않는다.
|
||||
|
||||
| internal family | rows | numerator / stored evidence | scale 또는 branch | metric / gate | 결과 |
|
||||
| --- | ---: | --- | --- | --- | --- |
|
||||
| accepted free translation-force residual | free DOF 1,875 | infinity norm `9.06582420157065e-6` | external/internal scale `1.47929199940215e5` | `6.12848863188238e-11 <= 1e-2` | pass |
|
||||
| accepted free rotation-moment residual | free DOF 1,875 | infinity norm `1.3758908607997e-6` | exact-zero external-scale branch | `1.3758908607997e-6 <= 1e-3` | pass |
|
||||
| global force balance | 3 | `[-5.04652281563267e-6, -3.33100482574622e-6, -3.02493572235107e-6]` | applied + masked constrained reaction, current arm | approved normalized gate `<=1e-8`, focused nonlinear test가 실행 | pass |
|
||||
| global moment balance | 3 | `[1.21226185001433e-6, 7.79749825596809e-7, -1.57924777074714e-5]` | spatial physical moment, current arm | approved normalized gate `<=1e-8`, 같은 focused test가 실행 | pass |
|
||||
|
||||
<a id="physics-evaluation"></a>
|
||||
|
||||
<a id="physics-evaluation--shell-surface-pressure-load-물리-평가"></a>
|
||||
## Shell Surface Pressure Load 물리 평가
|
||||
|
||||
<a id="physics-evaluation--1-metadata"></a>
|
||||
### 1. Metadata
|
||||
|
||||
- feature_id: `shell-surface-pressure-load`
|
||||
- source reference comparison report: `docs/shell-surface-pressure-load/verification.md`
|
||||
- source reference model: `docs/shell-surface-pressure-load/reference-model.md`
|
||||
- status: `pass-for-release-agent`
|
||||
- date: `2026-09-01`
|
||||
- evaluated commit: `1eb4dce885175b78b8229b095f14cac102ea93df`
|
||||
|
||||
이 판정은 승인된 물리 기대와 기존 Gate 6 evidence에 한정한다. Abaqus 내부 formulation,
|
||||
integration, stabilization 또는 result recovery와의 동등성을 주장하지 않으며 release
|
||||
readiness를 승인하지 않는다.
|
||||
|
||||
<a id="physics-evaluation--2-input-evidence"></a>
|
||||
### 2. Input Evidence
|
||||
|
||||
<a id="physics-evaluation--21-gate와-artifact"></a>
|
||||
#### 2.1 Gate와 artifact
|
||||
|
||||
`reference-comparison.md`는 명시적으로 `pass-for-physics-evaluation` handoff를 권고하고,
|
||||
blocking `U1/U2/U3` 2,187/2,187 rows와 warning-only `UR1/UR2/UR3` 2,187/2,187 rows가
|
||||
모두 통과했음을 기록한다. Physics Gate는 그 tolerance 판정을 재승인하지 않고, 통과한
|
||||
비교 결과를 물리 plausibility의 선행 조건으로만 사용했다.
|
||||
|
||||
| evidence | exact path / identity | read-only 확인 |
|
||||
| --- | --- | --- |
|
||||
| solver HDF5 | `.harness/build/reference/shell-surface-pressure-load/shellNL-meshfine-pressure_results.h5` | schema `1`, 10 accepted frames, unique factor-one frame `9` / increment `10`; SHA-256 `74f35e3e59edd05460733b1d6367994c7f4a1e847b366f2efad6fbecc03796f3` |
|
||||
| nonlinear log | `.harness/build/reference/shell-surface-pressure-load/shellNL-meshfine-pressure_log.txt` | factor-one iteration `3`: `combined_pass=1`, `transition=accepted`; SHA-256 `8555ff365dcf1f066813d0cce6440c3d56c9840baf8246696daa7b2e7b0061a1` |
|
||||
| required input | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure.inp` | 56,665 bytes, SHA-256 `53718ccc9b41c23fcc1b509a51d66f1347e87aca43a74f1d6cec4d2085f4b90e` |
|
||||
| required Abaqus CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure displacements.csv` | 729 finite wide rows; SHA-256 `2fe53f98eac9f04779100721c3edf8049eb1dbfe733ebcbd819aeeed03b81198` |
|
||||
| optional Abaqus CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure reactions.csv` | `review-only`; SHA-256 `a2347f4e88e4b73c75abe7c23e96bcc696c16c1975e2440b3ad9bf7ecda5f2b6` |
|
||||
| excluded Abaqus CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure stresses.csv` | `excluded`; SHA-256 `bc06f3324cc5d6655ded2939b3e1cb9d55a0359fa0d272a6958399464218a128` |
|
||||
| test record | `.harness/build/Testing/Temporary/LastTest.log` | existing automatic Stop evidence에서 full CTest `362/362 PASS`; 관련 physics test의 개별 pass 기록 확인 |
|
||||
| optional FESA debug CSV views | 없음 | 요구되거나 생성된 debug CSV가 없으며 official output으로 사용하지 않음 |
|
||||
|
||||
확인한 authoritative quantities는 factor-one global nodal displacement, generalized external/
|
||||
internal force, generalized residual, constrained reaction, global equilibrium, physical strain
|
||||
energy, 기존 MITC4 generalized strain/section resultant/stress다. Model purpose는 729-node,
|
||||
676-element `S4` square shell의 `SPOS`, positive `P=1e6`, `NLGEOM=YES` current-surface follower
|
||||
pressure response를 end-to-end로 확인하고, stored case가 직접 포함하지 않는 sign, S4R,
|
||||
linear, objectivity와 tangent 경계를 승인 internal tests로 보완하는 것이다.
|
||||
|
||||
<a id="physics-evaluation--3-physics-checks"></a>
|
||||
### 3. Physics Checks
|
||||
|
||||
| physics check | status | evidence와 판정 |
|
||||
| --- | --- | --- |
|
||||
| global equilibrium | `pass` | Factor-one applied force sum은 `[8.626e-12, -7.311e-12, -1.0000000000000016e8]`이고 constrained reaction force sum은 `[-5.047e-6, -3.331e-6, 9.999999999999714e7]`이다. HDF5 stored balance를 approved current-arm scales로 다시 normalize하면 force `6.758e-14`, moment `3.725e-14`로 둘 다 `<=1e-8`이다. |
|
||||
| reaction consistency | `pass` | Constrained DOF에서 `/nodal/reaction`과 `generalized_residual`은 exact 일치했다. Pressure resultant의 `-Z` `1.0e8`에 대해 masked constrained reaction은 `+Z` `9.999999999999714e7`이며, tiny `X/Y`와 moment remainder는 위 global balance gate 안이다. |
|
||||
| displacement direction | `pass` | Reference connectivity의 `SPOS` vector area는 `+Z`, positive pressure resultant는 `-Z`다. Factor-one HDF5의 729개 `UZ`는 모두 nonpositive이며 625개 free nodes는 negative, 104개 constrained boundary nodes는 exact zero다. Center node의 `UZ=-5.514459701328648e-3`로 load 방향과 deformation mode가 일치한다. |
|
||||
| pressure sign, resultant, and moment | `pass` | Current configuration의 quadrature vector-area oracle은 expected force `[-1.723e-12, 2.450e-11, -1.0000000000000025e8]`를 주며 HDF5 applied resultant와의 normalized error는 `8.94e-16`이다. Current-arm applied moment oracle error는 승인 `M_Sigma` 기준 `1.32e-16`이다. Existing `ShellSurfacePressureKernel.PartitionsUnityAndIntegratesPlanarResultantAndMoment`와 `ReversesExactlyForSposSnegAndNegativeMagnitude`도 full CTest 기록에서 pass했다. |
|
||||
| symmetry and expected zero | `pass` | Feature-blocking exact-zero contract인 pressure generalized external rotational entries는 factor-one HDF5에서 exact zero다. Zero pressure/factor geometry validation test도 pass했다. Stored square patch의 mirror symmetry는 보조 sanity로만 확인했으며 `UX/UY/UZ` mirror mismatch의 최대 절대값은 `1.63e-16`, `1.09e-16`, `8.89e-17` 이하다. 별도 외부 symmetry tolerance를 만들지 않았다. |
|
||||
| nonlinear follower objectivity and current-area behavior | `pass` | HDF5 resultant는 factor-one current `X+u` vector-area oracle과 위 roundoff 수준으로 일치했다. Current scalar area/reference scalar area ratio는 `1.0000006316335197`로 finite하다. Stored symmetric case만으로 reference/current path를 분리하지 않고, existing tests `UsesCurrentAreaAndNormalForFollowerForce`, `IsTranslationAndRigidRotationObjective`, `IsObjectiveUnderRigidMotionAndTracksCurrentArea`, `MatchesCenteredFiniteDifferenceForForceAndResidualSigns`의 pass evidence로 rigid rotation covariance, `gamma=1.25` area/resultant scaling, follower direction과 external tangent sign을 보완했다. |
|
||||
| element force balance | `not-separately-applicable` | 이 feature는 pressure-only element force row나 element end-action balance contract를 정의하지 않는다. 대신 HDF5에서 `generalized_internal_force - generalized_external_force - generalized_residual`은 element assembly 이후 nodal full space에서 exact zero이고 global resultant/moment gate가 pass했다. Existing MITC4 section resultants는 finite이며 별도 pressure comparator를 만들지 않았다. |
|
||||
| stress/strain | `pass-sanity-only` | Factor-one `generalized_strain`, `section_resultant`, `stress`의 component names, units, `shell-local` coordinate system과 `midsurface`/`section-position` location은 `io.md`와 일치하고 모든 값이 finite다. 관측 range는 strain `[-9.842e-4, 1.801e-3]`, section resultant `[-4.595e6, 8.646e6]`, stress `[-1.036e8, 1.039e8]`이다. Feature-specific stress sign/reference expectation은 없고 stress CSV는 `excluded`이므로 그 이상의 pass를 주장하지 않는다. |
|
||||
| rigid body mode | `pass-no-symptom` | Stored case는 104 boundary nodes의 DOF 1–6을 구속하고 625 interior nodes가 자유다. 모든 accepted frame이 finite하게 수렴했고 factor-one maximum translation은 `5.514e-3`로 10-unit span 대비 `5.514e-4`이며 unbounded translation, near-zero-stiffness 또는 impossible displacement 증상이 없다. Pressure가 support를 제공한다는 주장은 하지 않는다. |
|
||||
| energy/residual | `pass` | 모든 HDF5 numeric dataset과 required U/UR rows는 finite다. Factor-one free translation residual은 `9.06582420157065e-6 / 1.47929199940215e5 = 6.12849e-11 <=1e-2`; zero-external-scale rotation residual은 `1.3758908607997e-6 <=1e-3`이다. Existing `PHYSICAL_STRAIN_ENERGY=86418.04713575779`는 finite positive 보조 evidence이며 pressure-only energy gate로 사용하지 않았다. HDF5 diagnostics는 result-neutral ignored-keyword warning 4개뿐이고 error/nonfinite diagnostic은 없다. |
|
||||
| model coverage | `pass` | Stored case의 declared inventory `729 nodes / 676 S4 / SPOS / positive P / NLGEOM=YES`와 unique factor-one frame이 모두 확인됐다. Stored case가 직접 다루지 않는 `S4R`, `SNEG`, negative/zero magnitude, linear reference configuration, exact resultant/moment, current-area objectivity와 tangent는 Numerical Review가 지정한 internal portfolio에서 해당 named tests가 pass했다. 승인 범위 밖의 추가 reference portfolio는 요구하지 않는다. |
|
||||
|
||||
<a id="physics-evaluation--4-failure-classification"></a>
|
||||
### 4. Failure Classification
|
||||
|
||||
- failure classification: `none`
|
||||
- 다음 분류는 발생하지 않았다: `equilibrium-failure`, `reaction-inconsistency`,
|
||||
`displacement-direction-failure`, `symmetry-failure`, `stress-location-failure`,
|
||||
`element-force-inconsistency`, `rigid-body-mode-suspected`, `nonfinite-result`,
|
||||
`model-coverage-gap`, `upstream-contract`, `environment`.
|
||||
|
||||
`element force balance`의 `not-separately-applicable`과 stress의 `pass-sanity-only`는 upstream
|
||||
contract가 의도적으로 pressure-only element/stress acceptance family를 만들지 않은 데 따른
|
||||
범위 표시이며 failure 또는 evidence gap이 아니다.
|
||||
|
||||
<a id="physics-evaluation--5-evaluation-verdict"></a>
|
||||
### 5. Evaluation Verdict
|
||||
|
||||
**Verdict: `pass-for-release-agent`.**
|
||||
|
||||
문서화된 pressure 방향/부호, resultant/moment, reaction/equilibrium, exact-zero와 보조 symmetry,
|
||||
nonlinear follower objectivity/current-area, residual/nonfinite 및 declared model coverage가 모두
|
||||
물리적으로 일관된다. Release Agent가 release readiness를 별도로 audit할 수 있다. 이 verdict는
|
||||
release approval, publish 권한 또는 reference tolerance의 재승인이 아니다.
|
||||
|
||||
<a id="physics-evaluation--6-handoff-recommendation"></a>
|
||||
### 6. Handoff Recommendation
|
||||
|
||||
- handoff target: `Release Agent`
|
||||
- route: 항상 `Coordinator Agent`를 통해 전달
|
||||
- recommendation: Gate 8은 requirements-to-physics traceability, known limitations와 release
|
||||
evidence를 독립 audit한다. Physics Evaluation Agent는 Gate 8을 시작하거나 승인하지 않는다.
|
||||
|
||||
<a id="physics-evaluation--8-open-issues"></a>
|
||||
### 8. Open Issues
|
||||
|
||||
- missing physical expectations: 없음.
|
||||
- incomplete model coverage: 없음. Stored-case 한계는 승인 internal tests로 보완되며 추가
|
||||
reference case는 계약상 요구되지 않는다.
|
||||
- contradictory sign conventions: 없음.
|
||||
- unavailable energy/residual evidence: 없음. Existing energy와 residual HDF5/log evidence를
|
||||
사용했으며 새 pressure-only energy quantity는 요구되지 않는다.
|
||||
- blockers: 없음.
|
||||
Reference in New Issue
Block a user