docs: approve MITC4 implementation handoff
This commit is contained in:
@@ -0,0 +1,921 @@
|
||||
# Linear Static MITC4 Shell Implementation Plan
|
||||
|
||||
> **For agentic implementation workers:** 이 문서는 사용자 승인 전 `draft`다. 승인 후
|
||||
> Implementation Planning Agent가 같은 내용으로 Harness phase planning files만
|
||||
> materialize한다. Implementation Agent는 승인된 phase의 pending Step을
|
||||
> `docs/HARNESS.md`와 `docs/HARNESS_WORKFLOW.md`에 따라 하나씩 실행해야 하며,
|
||||
> Harness hook/runner lifecycle을 우회해서는 안 된다.
|
||||
|
||||
## 1. Metadata
|
||||
|
||||
- feature_id: `linear-static-mitc4-shell`
|
||||
- document_type: `implementation-plan`
|
||||
- status: `ready-for-implementation`
|
||||
- approval_state: `harness-step-draft-approved-2026-08-12`
|
||||
- owner_agent: `implementation-planning-agent`
|
||||
- date: `2026-08-12`
|
||||
- source_requirement: `docs/requirements/linear-static-mitc4-shell.md`
|
||||
- source_research: `docs/research/linear-static-mitc4-shell-research.md`
|
||||
- source_formulation: `docs/formulations/mitc4-shell-formulation.md`
|
||||
- source_numerical_review:
|
||||
`docs/numerical-reviews/linear-static-mitc4-shell-review.md`
|
||||
- source_io_definition:
|
||||
`docs/io-definitions/linear-static-mitc4-shell-io.md`
|
||||
- source_reference_models:
|
||||
`docs/reference-models/linear-static-mitc4-shell-reference-models.md`
|
||||
- target_platform: `Windows x64 / MSVC / C++17`
|
||||
- build_system: `CMake + CTest`
|
||||
- execution_infrastructure: `Python Harness`
|
||||
- current_numerical_verdict: `pass-for-implementation-planning`
|
||||
- harness_task_name_candidate: `linear-static-mitc4-shell`
|
||||
- implementation_authorized: `true-user-requested-2026-08-12`
|
||||
- harness_execution_authorized: `true-user-requested-2026-08-12`
|
||||
- phase_files_authorized: `true-user-approved-2026-08-12`
|
||||
|
||||
### Goal
|
||||
|
||||
승인된 Abaqus `.inp` subset의 `S4` 및 `S4R` source element를 하나의 FESA
|
||||
`FESA-MITC4` 선형 정적 shell formulation으로 해석하고, 물리적으로 분리된 fixed
|
||||
drilling stabilization, deterministic sparse assembly, mandatory HDF5 shell results,
|
||||
두 declared displacement reference case를 end-to-end로 연결한다.
|
||||
|
||||
### Architecture
|
||||
|
||||
기존 B33 경로를 파괴하거나 speculative common element hierarchy를 만들지 않는다.
|
||||
Domain에 shell semantic records를 추가하고, 별도 concrete `Mitc4Shell` kernel과
|
||||
shell-specific recovery를 만든다. 기존 `Analysis` lifecycle, six-DOF nodal
|
||||
load/constraint, sparse COO reduction, `LinearSolver`, generic `ResultsWriter` 경계,
|
||||
HDF5 temporary/self-check/atomic replacement는 재사용한다.
|
||||
|
||||
### Tech Stack
|
||||
|
||||
- C++17, MSVC `/W4 /WX`
|
||||
- CMake 3.25+, Visual Studio 18 2026 generator, x64 Debug
|
||||
- GoogleTest/CTest
|
||||
- Intel oneAPI MKL and TBB
|
||||
- HDF5 schema version 0
|
||||
- Python 3 Harness runner and repository hooks
|
||||
|
||||
### Global Constraints
|
||||
|
||||
1. 모든 production behavior는 같은 Step 안에서 `RED -> observed failure ->
|
||||
minimal GREEN -> focused VERIFY -> full VERIFY`를 닫는다.
|
||||
2. production C++ 파일 변경은 관련 C++ test와 함께 수행한다.
|
||||
3. public solver headers에 MKL, TBB, HDF5, Win32/vendor type을 노출하지 않는다.
|
||||
4. Node/Element에 equation ID를 저장하지 않고 `DofManager`만 numbering, scatter,
|
||||
constrained/free mapping 및 sparse pattern을 소유한다.
|
||||
5. `S4`와 `S4R`은 같은 FESA numerical path를 사용하며 source metadata만 다르다.
|
||||
6. physical 20-DOF kernel과 four numerical drilling coordinates를 recovery/output에서
|
||||
분리한다.
|
||||
7. reference files를 생성, 수정, rename, repair, normalize하지 않으며 Abaqus를
|
||||
실행하지 않는다.
|
||||
8. future geometrically nonlinear residual/tangent, distributed loads, mixed beam-shell
|
||||
models, reduced integration/hourglass, drilling calibration/energy output,
|
||||
`NR-O03`/`NR-O04`는 구현 범위 밖이다.
|
||||
9. 이 `draft`의 승인은 phase planning files 작성만 허용한다. Harness 실행은 별도의
|
||||
명시적 사용자 요청이 있어야 한다.
|
||||
|
||||
## 2. Readiness Check
|
||||
|
||||
| gate | evidence | status | planning consequence |
|
||||
| --- | --- | --- | --- |
|
||||
| Requirements | `docs/requirements/linear-static-mitc4-shell.md`, 001-072 approved | pass | 모든 must를 task/test에 추적 |
|
||||
| Research | `docs/research/linear-static-mitc4-shell-research.md` | pass | source-backed MITC4 tying/director/drilling 경계 유지 |
|
||||
| Formulation | `docs/formulations/mitc4-shell-formulation.md`, `approved-for-implementation-planning` | pass | linear sections만 구현; Section 15 future nonlinear 제외 |
|
||||
| Numerical Review | `docs/numerical-reviews/linear-static-mitc4-shell-review.md` | pass | critical blocker 없음; planning authorized |
|
||||
| I/O | `docs/io-definitions/linear-static-mitc4-shell-io.md`, `approved-for-implementation-planning` | pass | keyword, diagnostic, HDF5 schema를 그대로 구현 |
|
||||
| Reference Model | `docs/reference-models/linear-static-mitc4-shell-reference-models.md` | pass | 두 input/CSV pair만 read-only 사용 |
|
||||
| Repository seams | parser/model, element/analysis, result/reference 영역 read-only 조사 | pass | candidate files와 current signatures 확인 |
|
||||
| Toolchain paths | GoogleTest/MKL/TBB/HDF5 config directories 존재 | pass | Section 10의 exact configure command 사용 가능 |
|
||||
|
||||
Toolchain path evidence was resolved in this workspace on `2026-08-12`with
|
||||
`Test-Path -LiteralPath`returning `True`for all four literal directories used in
|
||||
Sections 10 and 12. They are environment-resolved paths, not placeholders. Each Step
|
||||
copies the fail-fast path precheck before CMake so a changed machine configuration
|
||||
stops before RED/GREEN evidence is recorded.
|
||||
|
||||
Declared read-only reference inventory:
|
||||
|
||||
| case | source | displacement CSV | SHA-256 |
|
||||
| --- | --- | --- | --- |
|
||||
| S4 | `reference/shell/shell.inp` | `reference/shell/shell displacements.csv` | input `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF`; CSV `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B` |
|
||||
| S4R | `reference/shellR/shellR.inp` | `reference/shellR/shellR displacements.csv` | input `1325940FB42B78961CF25E84379BF2693846FAD22473E7688AC5456B37B18CB4`; CSV `8887ACC5ED007CB97583A9FDC1150B48B9297E269A5BA8EBA6C1A5F6306E98CB` |
|
||||
|
||||
README, `metadata.json`, Abaqus provenance/version, canonical naming 및 추가 portfolio는
|
||||
readiness gate가 아니다. 현재 열린 product/numerical 결정은 없다. 남은 승인 항목은
|
||||
Section 12의 multi-Step Harness draft뿐이다.
|
||||
|
||||
## 3. Implementation Scope
|
||||
|
||||
### Included behavior
|
||||
|
||||
- exactly one `*STEP, *STATIC`, small displacement/small rotation
|
||||
- four-node `S4`/`S4R` parsing and one internal `FESA-MITC4` identity
|
||||
- stable source instance/label/type and four-node source ordering
|
||||
- homogeneous isotropic `E,nu` and centered single-layer constant `t`
|
||||
- deterministic positive-thickness nodal directors and right-handed frames
|
||||
- six global nodal DOFs; 24-entry shell scatter
|
||||
- physical membrane, bending, transverse shear with MITC edge-midpoint tying
|
||||
- common `2x2x2` Gauss integration for S4 and S4R
|
||||
- fixed `k_d=10^-3 min(R+)` drilling stabilization from the eight physical
|
||||
tangent-rotation diagonals only
|
||||
- nodal BC and global CLOAD; aggregate director-parallel moment rejection
|
||||
- deterministic global stiffness, constrained partition, factorize-before-load,
|
||||
effective RHS, solve, full residual/reaction
|
||||
- physical-only shell recovery, energy/equilibrium/verification metrics
|
||||
- exact mandatory HDF5 model/result schema and failure-atomic finalization
|
||||
- direct HDF5-to-Abaqus-displacement comparison: U blocking, UR warning-only
|
||||
|
||||
### Non-goals
|
||||
|
||||
- Abaqus `S4`/`S4R` algorithm equivalence
|
||||
- B31 mapping, mixed B33/MITC4 model execution or common public element hierarchy
|
||||
- `*DLOAD`, pressure, gravity, body/edge/follower load
|
||||
- composite, offsets, variable thickness, explicit normal/orientation
|
||||
- reduced integration, hourglass control, MITC4+
|
||||
- nonlinear state, finite director update, nonlinear residual/tangent execution
|
||||
- drilling physical strain/load/result/stress/energy, coefficient sweep or calibration
|
||||
- `NR-O03` smooth-angle and `NR-O04` warp/distortion threshold sweeps
|
||||
- extra shell benchmarks as a completion gate
|
||||
- Abaqus execution or reference artifact mutation
|
||||
|
||||
## 4. Work Breakdown
|
||||
|
||||
Tasks are ordered by implementation dependency. Harness executes Steps 0-13 in strict
|
||||
order even when the minimal dependency set below is smaller.
|
||||
|
||||
| task | depends on |
|
||||
| --- | --- |
|
||||
| TASK-00 | none |
|
||||
| TASK-01 | TASK-00 |
|
||||
| TASK-02 | TASK-01 |
|
||||
| TASK-03 | TASK-02 |
|
||||
| TASK-04 | TASK-03 |
|
||||
| TASK-05 | TASK-04 |
|
||||
| TASK-06 | TASK-00; executed after TASK-05 |
|
||||
| TASK-07 | TASK-04, TASK-06 |
|
||||
| TASK-08 | TASK-02, TASK-07 |
|
||||
| TASK-09 | TASK-05, TASK-08 |
|
||||
| TASK-10 | TASK-05, TASK-09 |
|
||||
| TASK-11 | TASK-09, TASK-10 |
|
||||
| TASK-12 | TASK-01, TASK-07, TASK-08, TASK-10, TASK-11 |
|
||||
| TASK-13 | TASK-11, TASK-12 |
|
||||
| TASK-14 | TASK-13 |
|
||||
| TASK-15 | TASK-13 |
|
||||
| TASK-16 | TASK-00 through TASK-15 |
|
||||
|
||||
### TASK-00: `shell-semantic-model`
|
||||
|
||||
- Own only model semantic records and immutable Domain access.
|
||||
- Candidate additions: `Mitc4ShellDefinition`, `ShellSection`, source type enum/value,
|
||||
internal formulation identity, four-node indices, material/section indices, node
|
||||
director/frame storage.
|
||||
- Preserve current B33 records and stable source/internal identity; reject mixed models
|
||||
at mapping rather than designing a heterogeneous solver hierarchy.
|
||||
- Tests: `MITC4-MODEL-001`, `MITC4-MODEL-002`.
|
||||
|
||||
### TASK-01: `shell-domain-mapping`
|
||||
|
||||
- Extend `AbaqusDomainMapper::map(const ParsedInput&)`; keep `AbaqusInputReader`
|
||||
syntax-only.
|
||||
- Accept exact S4/S4R and single-layer SHELL SECTION grammar, resolve ELSET/material,
|
||||
identity wrappers and six-DOF BC/CLOAD.
|
||||
- Fail closed with exact I/O diagnostic classes for connectivity, assignment,
|
||||
unsupported option/procedure/mixed model/distributed load.
|
||||
- Tests: `MITC4-MAP-001` through `MITC4-MAP-004`.
|
||||
|
||||
### TASK-02: `shell-director-geometry`
|
||||
|
||||
- Add deterministic geometry preprocessing after instance expansion: element normal
|
||||
candidates, area-weighted nodal director, pairwise orientation validation and nodal
|
||||
frame tie-break.
|
||||
- Validate center, eight stiffness points, four tying points and committed recovery
|
||||
points for finite bases, nonzero surface measure and positive finite Jacobian.
|
||||
- Do not introduce calibrated angle, warp or distortion thresholds.
|
||||
- Tests: `MITC4-GEO-001` through `MITC4-GEO-004`.
|
||||
|
||||
### TASK-03: `mitc4-kinematics-constitutive`
|
||||
|
||||
- Create concrete candidate `Mitc4Shell` without a public base hierarchy.
|
||||
- Implement shape identities, local frames, `T_p`/`T_d` channel maps, direct
|
||||
membrane/bending terms, all four covariant MITC tying samples/interpolation,
|
||||
engineering-shear factors, `C_ps/C_5/A/D/A_s` and fixed point order.
|
||||
- Keep all intermediate physical coordinates at 20 DOFs.
|
||||
- Tests: `MITC4-KIN-001` through `MITC4-KIN-005`.
|
||||
|
||||
### TASK-04: `mitc4-stiffness-drilling`
|
||||
|
||||
- Form physical `K20` with common `2x2x2` integration and embed by congruence.
|
||||
- Build `R+` only from the eight physical tangent-rotation diagonals, use exact
|
||||
`k_d=10^-3 min(R+)` and `T_d^T(k_d I4)T_d`; fail empty/nonfinite `R+`.
|
||||
- Tests: `MITC4-KERNEL-001` through `MITC4-KERNEL-006`.
|
||||
|
||||
### TASK-05: `mitc4-physical-recovery`
|
||||
|
||||
- Add only the element-kernel physical recovery seam for generalized strain/resultant,
|
||||
bottom/middle/top stress and physical element energy.
|
||||
- Prove pure numerical drill action contributes zero to every physical recovery value.
|
||||
- Tests: `MITC4-KERNEL-007`, `MITC4-PHYSREC-001`.
|
||||
|
||||
### TASK-06: `shell-dof-scatter`
|
||||
|
||||
- Retain six per-node full DOFs and add typed 24-entry shell scatter/pattern access;
|
||||
preserve existing 12-entry B33 behavior.
|
||||
- Preserve stable full/free/constrained numbering and all-constrained `0x0 Kff`.
|
||||
- Tests: `MITC4-DOF-001` through `MITC4-DOF-003`.
|
||||
|
||||
### TASK-07: `shell-sparse-assembly`
|
||||
|
||||
- Dispatch shell topology to `Mitc4Shell::globalStiffness()`.
|
||||
- Emit 576 element-local COO entries with stable `elementOrder`/`localOrder` into
|
||||
worker-owned buffers; preserve canonical fixed reduction and diagonal slots.
|
||||
- Tests: `MITC4-ASM-001` through `MITC4-ASM-003`.
|
||||
|
||||
### TASK-08: `shell-load-validation`
|
||||
|
||||
- Reuse global six-DOF `LoadAssembler` and existing constraint partition.
|
||||
- Aggregate CLOAD deterministically before testing exact-zero or
|
||||
`rho_M=abs(dot(d,M))/norm(M)<=1e-12`; rejected moments never reach stabilization.
|
||||
- Preserve force/moment units and factorization-before-load lifecycle.
|
||||
- Tests: `MITC4-LOAD-001` through `MITC4-LOAD-004`.
|
||||
|
||||
### TASK-09: `shell-analysis-state`
|
||||
|
||||
- Add shell result rows to `AnalysisState` and `result_records.hpp`: four fixed
|
||||
midsurface locations, local frames, eight generalized strains/resultants,
|
||||
bottom/middle/top stress, physical energy, equilibrium and verification metrics.
|
||||
- Preserve stable row order and expose candidate-owned containers only; perform no
|
||||
element calculation in this task.
|
||||
- Tests: `MITC4-STATE-001` through `MITC4-STATE-003`.
|
||||
|
||||
### TASK-10: `shell-result-recovery`
|
||||
|
||||
- Recover full residual `K*d-F` for nodal reaction/equilibrium evidence but call the
|
||||
kernel physical-only recovery for shell quantities.
|
||||
- Validate candidates fully before committing state; keep stable row order.
|
||||
- Tests: `MITC4-REC-001` through `MITC4-REC-005`.
|
||||
|
||||
### TASK-11: `shell-hdf5-output`
|
||||
|
||||
- Extend `Hdf5ResultsWriter` behind the unchanged generic `ResultsWriter::write`
|
||||
boundary.
|
||||
- Add exact schema paths/shapes/component attributes from the I/O contract without
|
||||
changing B33 dataset meaning.
|
||||
- Reuse temporary write, finite/schema self-check, close/reopen and atomic replace.
|
||||
- Tests: `MITC4-H5-001` through `MITC4-H5-004`.
|
||||
|
||||
### TASK-12: `shell-linear-static-flow`
|
||||
|
||||
- Route a shell Domain through the existing eight-hook `Analysis::run()` lifecycle.
|
||||
- Preserve assemble/partition, factorize, load/effective RHS, substitute,
|
||||
reconstruct, full residual/recover, atomic write order and single factorization.
|
||||
- Validate nonzero prescribed values, singular support and valid all-constrained solve.
|
||||
- Tests: `MITC4-FLOW-001` through `MITC4-FLOW-004`.
|
||||
|
||||
### TASK-13: `shell-reference-comparison`
|
||||
|
||||
- Add a test-only MITC4 comparator rather than widening beam-specific assumptions.
|
||||
- Consume exactly one declared input and displacement CSV per case; map instance,
|
||||
source node and six displacement components directly to HDF5.
|
||||
- Precheck header/row set/duplicates/nonfinite/schema/identity before numeric work.
|
||||
- Apply `1e-9+1e-6*reference_scale_c`; U blocks, UR only emits deterministic warning;
|
||||
record all required metrics and worst row.
|
||||
- Tests: `MITC4-REF-001` through `MITC4-REF-006`.
|
||||
|
||||
### TASK-14: `shell-s4-end-to-end`
|
||||
|
||||
- This is declared-case sub-work owned by TASK-13/Step 13's test-only reference module,
|
||||
not an independent production-module Step.
|
||||
- Run the declared S4 deck through CLI, authoritative HDF5, schema checks and
|
||||
read-only comparator.
|
||||
- Assert source type `S4`, internal `FESA-MITC4` and U pass/UR report behavior.
|
||||
- Tests: `MITC4-E2E-S4-001`, `MITC4-E2E-S4-002`.
|
||||
|
||||
### TASK-15: `shell-s4r-end-to-end`
|
||||
|
||||
- This is declared-case sub-work owned by TASK-13/Step 13's test-only reference module,
|
||||
not an independent production-module Step.
|
||||
- Run the declared S4R deck through the identical numerical route.
|
||||
- Assert only source metadata differs from an otherwise identical S4 semantic fixture;
|
||||
no reduced integration/hourglass branch exists.
|
||||
- Tests: `MITC4-E2E-S4R-001`, `MITC4-E2E-S4R-002`.
|
||||
|
||||
### TASK-16: `mitc4-full-verification`
|
||||
|
||||
- Run MSVC x64 Debug full build, CTest discovery, focused feature suites and full CTest.
|
||||
- Audit warnings, deterministic repeat evidence, required HDF5 inventory, reference
|
||||
immutability and git diff scope.
|
||||
- Produce only downstream implementation evidence; do not claim reference verification,
|
||||
physics sanity or release readiness.
|
||||
- Tests/audits: `MITC4-VERIFY-001` through `MITC4-VERIFY-004`.
|
||||
|
||||
## 5. TDD Test Plan
|
||||
|
||||
| test id | initial RED assertion | minimal GREEN behavior | focused verification |
|
||||
| --- | --- | --- | --- |
|
||||
| MITC4-MODEL-001 | four-node S4/S4R records/director/source identity do not exist | immutable shell records preserve source and internal identity | `DomainModel.*` |
|
||||
| MITC4-MODEL-002 | shell section/material/thickness ownership unavailable | one resolved centered homogeneous assignment per element | `DomainModel.*` |
|
||||
| MITC4-MAP-001 | valid S4/S4R and SHELL SECTION reject | both source types map to FESA-MITC4 | `InpDomainMapping.*` |
|
||||
| MITC4-MAP-002 | duplicate/unresolved/conflicting section cases lack exact errors | exact assignment/material validation | `InpDomainMapping.*` |
|
||||
| MITC4-MAP-003 | excluded shell options/mixed models may be ignored | exact fail-closed diagnostics | `InpDomainMapping.*` |
|
||||
| MITC4-MAP-004 | second/nonstatic/NLGEOM/DLOAD cases lack shell boundary tests | exact procedure/load rejection; no-op output unchanged | `InpDomainMapping.*` |
|
||||
| MITC4-GEO-001 | planar/rotated/warped directors unavailable | deterministic unit director and right-handed frame | `Mitc4Geometry.*` |
|
||||
| MITC4-GEO-002 | incident orientation/tie-break is untested | stable area-weighted result across repeated order | `Mitc4Geometry.*` |
|
||||
| MITC4-GEO-003 | duplicate/bow-tie/zero/reversed/nonfinite geometry may pass | exact geometry failures | `Mitc4Geometry.*` |
|
||||
| MITC4-GEO-004 | required-point Jacobian inventory absent | every required point finite and positive | `Mitc4Geometry.*` |
|
||||
| MITC4-KIN-001 | shape/derivative identities unavailable | partition/unity/derivative identities | `Mitc4ShellKinematics.*` |
|
||||
| MITC4-KIN-002 | frame/T transforms unavailable | orthonormal/right-handed frames and channel selection | `Mitc4ShellKinematics.*` |
|
||||
| MITC4-KIN-003 | tying values/weights unavailable | four hand-computed covariant tying values | `Mitc4ShellKinematics.*` |
|
||||
| MITC4-KIN-004 | constitutive/section matrices unavailable | exact coefficients, symmetry, positivity, unit rescaling | `Mitc4ShellConstitutive.*` |
|
||||
| MITC4-KIN-005 | quadrature order not fixed | exact common 2x2x2 points/weights | `Mitc4ShellKinematics.*` |
|
||||
| MITC4-KERNEL-001 | no 24x24 shell stiffness | finite symmetric 24x24 stiffness | `Mitc4ShellKernel.*` |
|
||||
| MITC4-KERNEL-002 | energy congruence unavailable | 20/24 virtual work and energy equal within 1e-12 | `Mitc4ShellKernel.*` |
|
||||
| MITC4-KERNEL-003 | rigid/rank checks fail | six physical rigid modes, physical rank 14, stabilized rank 18 | `Mitc4ShellKernel.*` |
|
||||
| MITC4-KERNEL-004 | deformation energy/patch fields unavailable | positive membrane/bending/shear/twist modes | `Mitc4ShellPatch.*` |
|
||||
| MITC4-KERNEL-005 | R+ membership/coefficient not implemented | exact rotational-only min and 1e-3 factor | `Mitc4ShellDrilling.*` |
|
||||
| MITC4-KERNEL-006 | empty R+ and pure drill behavior unspecified | deterministic failure; pure drill stabilized | `Mitc4ShellDrilling.*` |
|
||||
| MITC4-KERNEL-007 | drilling contaminates recovery/energy | physical recovery/energy exact zero for pure drill | `Mitc4ShellDrilling.*` |
|
||||
| MITC4-PHYSREC-001 | kernel recovery contract is not independently callable | exact physical strain/resultant/stress/energy for hand field | `Mitc4ShellPhysicalRecovery.*` |
|
||||
| MITC4-DOF-001 | shell scatter fixed at 12 | stable 24-entry scatter in node/component order | `DofManager.*` |
|
||||
| MITC4-DOF-002 | shell pattern unavailable | sorted unique pattern with all diagonals | `DofManager.*` |
|
||||
| MITC4-DOF-003 | constraint roundtrip lacks shell-sized system | no/mixed/all constraints and nonzero values roundtrip | `DofManager.*; EssentialConstraints.*` |
|
||||
| MITC4-ASM-001 | assembler rejects four-node element | 576 stable local contributions assemble | `SparseAssembly.*` |
|
||||
| MITC4-ASM-002 | thread/repetition may reorder | serial/TBB/repeated CSR bytes and values match | `SparseAssembly.*` |
|
||||
| MITC4-ASM-003 | S4/S4R could branch numerically | identical semantic fixtures produce identical K | `SparseAssembly.*` |
|
||||
| MITC4-LOAD-001 | shell force/moment fixture unavailable | six global components aggregate stably | `LoadAssembly.*` |
|
||||
| MITC4-LOAD-002 | director-parallel exact-zero branch untested | zero aggregate moment accepted | `LoadAssembly.*` |
|
||||
| MITC4-LOAD-003 | rho boundary/rejection untested | <=1e-12 accepted; >1e-12 exact diagnostic | `LoadAssembly.*` |
|
||||
| MITC4-LOAD-004 | rejected moment might enter drill channel | failure occurs before RHS/substitution | `LoadAssembly.*` |
|
||||
| MITC4-STATE-001 | AnalysisState has no shell row containers | exact shell row/component/location types are owned | `AnalysisState.*` |
|
||||
| MITC4-STATE-002 | physical energy/equilibrium/metrics are absent | finite candidate global evidence is stored | `AnalysisState.*` |
|
||||
| MITC4-STATE-003 | shell candidate rollback is unavailable | invalid candidate leaves prior state unchanged | `AnalysisState.*` |
|
||||
| MITC4-REC-001 | shell row types absent | four ordered location/frame/strain/resultant rows | `ResultRecovery.*` |
|
||||
| MITC4-REC-002 | bottom/middle/top stress absent | direct S11/S22/S12 recovery in fixed order | `ResultRecovery.*` |
|
||||
| MITC4-REC-003 | energy may include drilling | physical strain energy excludes stabilization | `ResultRecovery.*` |
|
||||
| MITC4-REC-004 | reaction/equilibrium semantics may diverge | full residual, force/moment balance, normalized metrics | `ResultRecovery.*` |
|
||||
| MITC4-REC-005 | invalid partial rows may commit | nonfinite/inventory failure preserves old state | `ResultRecovery.*` |
|
||||
| MITC4-H5-001 | shell metadata/model schema missing | exact metadata, elements, director/frame, material/section | `Hdf5ResultsWriter.*` |
|
||||
| MITC4-H5-002 | mandatory shell result paths missing | exact displacement/reaction/frame/strain/resultant/stress/global rows | `Hdf5ResultsWriter.*` |
|
||||
| MITC4-H5-003 | output request could filter or drilling paths appear | inventory unconditional; forbidden paths absent | `Hdf5ResultsWriter.*` |
|
||||
| MITC4-H5-004 | invalid shell candidate may replace final file | self-check failure preserves prior final | `Hdf5ResultsWriter.*` |
|
||||
| MITC4-FLOW-001 | shell cannot traverse Analysis lifecycle | exact hook order and one factorization | `LinearStaticCli.*` |
|
||||
| MITC4-FLOW-002 | prescribed shell RHS/reconstruction absent | Ff-Kfc*dc and full displacement correct | `LinearStaticCli.*` |
|
||||
| MITC4-FLOW-003 | singular/all-constrained behavior unproven | singular fails; 0x0 Kff succeeds | `LinearStaticCli.*` |
|
||||
| MITC4-FLOW-004 | failed output may commit state | candidate state/output commits only after validation | `LinearStaticCli.*` |
|
||||
| MITC4-REF-001 | six-column CSV header unsupported | exact MITC4 header maps instance/node/U/UR | `Mitc4ReferenceComparison.*` |
|
||||
| MITC4-REF-002 | invalid row inventory may be ignored | missing/extra/duplicate/nonfinite/schema mismatch fails first | `Mitc4ReferenceComparison.*` |
|
||||
| MITC4-REF-003 | tolerance could clamp/row-normalize | exact component group scale and mixed tolerance | `Mitc4ReferenceComparison.*` |
|
||||
| MITC4-REF-004 | UR may block verdict | U blocks; UR only warns | `Mitc4ReferenceComparison.*` |
|
||||
| MITC4-REF-005 | report metrics/order incomplete | row decisions, max, normalized, RMS, vector, worst row deterministic | `Mitc4ReferenceComparison.*` |
|
||||
| MITC4-REF-006 | comparator may require administrative files | only declared input/CSV/HDF5 required | `Mitc4ReferenceComparison.*` |
|
||||
| MITC4-E2E-S4-001 | S4 deck cannot produce valid shell HDF5 | CLI succeeds with exact S4 metadata/schema | `Mitc4S4Reference.*` |
|
||||
| MITC4-E2E-S4-002 | S4 U comparison unavailable | all U rows pass; UR fully reported | `Mitc4S4Reference.*` |
|
||||
| MITC4-E2E-S4R-001 | S4R deck selects no/other path | same FESA-MITC4 integration rule | `Mitc4S4RReference.*` |
|
||||
| MITC4-E2E-S4R-002 | S4R U comparison unavailable | all U rows pass; UR fully reported | `Mitc4S4RReference.*` |
|
||||
| MITC4-VERIFY-001 | feature tests not discoverable | all planned suites discovered/labeled | CTest JSON inventory |
|
||||
| MITC4-VERIFY-002 | warnings/regressions unknown | MSVC Debug full build passes /W4 /WX | full build |
|
||||
| MITC4-VERIFY-003 | nondeterminism unknown | repeated focused/full tests pass | full CTest |
|
||||
| MITC4-VERIFY-004 | artifact governance unknown | reference hashes/path and git diff unchanged | read-only audit |
|
||||
|
||||
Numerical thresholds are fixed: frame/symmetry/transformation-energy `<=1e-12`;
|
||||
rigid action, linear residual and global equilibrium `<=1e-10`. Patch tests compare
|
||||
against independently hand-computed analytical fields and signs, not the production
|
||||
routine itself.
|
||||
|
||||
## 6. CMake/CTest Plan
|
||||
|
||||
### Existing topology to preserve
|
||||
|
||||
- production library: `fesa_solver`
|
||||
- CLI: `fesa_cli`
|
||||
- unit: `fesa_unit_tests`
|
||||
- integration: `fesa_integration_tests`
|
||||
- reference: `fesa_reference_tests`
|
||||
- aggregate: `fesa_tests`
|
||||
|
||||
No new executable target is required. New kernel/test/comparator source files are
|
||||
explicitly registered in existing source lists. Add `linear-static-mitc4-shell` as an
|
||||
additive CTest label without removing the B33 label. Because
|
||||
`gtest_discover_tests()` currently applies target-wide labels, focused Step
|
||||
verification uses exact suite regexes; label-based MITC4 filtering is enabled only
|
||||
if per-test labeling can be added without relabeling unrelated B33 tests.
|
||||
|
||||
Candidate registrations:
|
||||
|
||||
- `src/fesa/CMakeLists.txt`: candidate `model/shell_geometry.cpp`,
|
||||
`elements/mitc4_shell.cpp` and any separate shell recovery implementation.
|
||||
- `tests/CMakeLists.txt`: candidate `shell_geometry_test.cpp`,
|
||||
`mitc4_shell_test.cpp`, optional focused shell recovery/HDF5 tests, and MITC4
|
||||
reference comparator/test sources.
|
||||
- Preserve existing runtime staging for MKL/TBB/HDF5 on all three test executables.
|
||||
|
||||
CTest discovery must show every suite named in Section 5 before implementation is
|
||||
considered verified.
|
||||
|
||||
## 7. Candidate Files and Ownership
|
||||
|
||||
All signatures in this section are candidates for the Implementation Agent to confirm
|
||||
against the approved contracts during the owning Step; they are not new approved APIs.
|
||||
|
||||
| owner/module | candidate files | candidate interface/direction |
|
||||
| --- | --- | --- |
|
||||
| model | `include/fesa/model/model_types.hpp`, `include/fesa/model/domain.hpp`, `src/fesa/model/domain.cpp` | separate shell records/accessors; no equation IDs |
|
||||
| shell semantic geometry | candidate new `include/fesa/model/shell_geometry.hpp`, `src/fesa/model/shell_geometry.cpp` | director/frame and required-point geometry validation without parser/kernel dependency |
|
||||
| Abaqus semantic map | `include/fesa/io/abaqus/domain_mapper.hpp`, `src/fesa/io/abaqus/domain_mapper.cpp` | keep `map(const ParsedInput&) -> Result<Domain>` |
|
||||
| analysis view | `include/fesa/analysis/analysis_model.hpp`, `src/fesa/analysis/analysis_model.cpp` | non-owning active shell view only if record representation requires |
|
||||
| shell kernel | new `include/fesa/elements/mitc4_shell.hpp`, `src/fesa/elements/mitc4_shell.cpp` | concrete create/stiffness/physical-recover API |
|
||||
| DOF | `include/fesa/fem/dof_manager.hpp`, `src/fesa/fem/dof_manager.cpp` | typed `array<size_t,24>` shell scatter beside B33 scatter |
|
||||
| sparse assembly | `src/fesa/assembly/sparse_assembler.cpp` | topology dispatch; unchanged public assemble signature |
|
||||
| load | `src/fesa/assembly/load_assembler.cpp` only if aggregate director projection cannot live in semantic validation | reuse full six-DOF assembly |
|
||||
| state/results | `include/fesa/analysis/analysis_state.hpp`, `src/fesa/analysis/analysis_state.cpp`, `include/fesa/results/result_records.hpp` | additive shell rows/global metrics |
|
||||
| recovery | `include/fesa/results/result_recovery.hpp`, `src/fesa/results/result_recovery.cpp` or new shell-specific cpp | candidate-then-commit; physical/drill split |
|
||||
| HDF5 | `src/fesa/io/hdf5/hdf5_results_writer.cpp` | generic public writer unchanged |
|
||||
| lifecycle | `src/fesa/analysis/linear_static_analysis.cpp` | preserve existing hook order |
|
||||
| app | `tests/integration/app/fesa_application_test.cpp`; production app only if feature dispatch needs it | CLI syntax unchanged |
|
||||
| reference tests | new `tests/reference/mitc4_reference_comparison.hpp/.cpp` and tests | test-only direct HDF5/CSV comparator |
|
||||
| build graph | `src/fesa/CMakeLists.txt`, `tests/CMakeLists.txt` | explicit additive source/test registration |
|
||||
|
||||
Candidate kernel seam:
|
||||
|
||||
```cpp
|
||||
class Mitc4Shell {
|
||||
public:
|
||||
static Result<Mitc4Shell> create(
|
||||
std::array<const Node*, 4> nodes,
|
||||
std::array<Vector3, 4> initialDirectors,
|
||||
const ShellSection& section,
|
||||
const LinearElasticMaterial& material);
|
||||
|
||||
[[nodiscard]] Matrix physicalLocalStiffness20() const;
|
||||
[[nodiscard]] Matrix globalStiffness24() const;
|
||||
[[nodiscard]] Result<ShellRecovery> recoverPhysical(
|
||||
const Vector& globalElementDisplacement24) const;
|
||||
};
|
||||
```
|
||||
|
||||
This candidate explicitly avoids returning drill energy/results and avoids a common
|
||||
public `Element` hierarchy. Exact value/reference ownership and math types are decided
|
||||
inside TASK-03 after compiling the first RED test.
|
||||
|
||||
## 8. Data Flow Contract
|
||||
|
||||
```text
|
||||
.inp bytes
|
||||
-> AbaqusInputReader (syntax/source locations only)
|
||||
-> AbaqusDomainMapper (approved semantics, S4/S4R provenance, section/material)
|
||||
-> geometry/director preprocessing
|
||||
-> immutable Domain
|
||||
-> non-owning AnalysisModel
|
||||
-> DofManager (6 DOF/node, 24-entry shell scatter, free/constrained maps)
|
||||
-> Mitc4Shell physical K20 + fixed drill embedding -> global K24
|
||||
-> worker-local COO -> stable SparseMatrix reduction
|
||||
-> Kff/Kfc/Kcf/Kcc partition -> Kff factorize
|
||||
-> aggregate CLOAD/director check -> Ff-Kfc*dc
|
||||
-> substitute -> full displacement
|
||||
-> full residual K*d-F
|
||||
-> physical-only shell recovery + global evidence
|
||||
-> validated candidate AnalysisState
|
||||
-> temporary results.h5 -> schema self-check -> atomic finalization
|
||||
|
||||
authoritative results.h5
|
||||
-> test-only MITC4 HDF5 projection
|
||||
-> exact source instance/node/component row-set precheck
|
||||
-> read-only declared Abaqus displacement CSV
|
||||
-> U blocking / UR warning-only deterministic report
|
||||
```
|
||||
|
||||
Invariants:
|
||||
|
||||
- Domain outlives AnalysisModel; no Domain copying.
|
||||
- Source labels/instances/types never become equation indices.
|
||||
- `S4`/`S4R` source type is metadata; both call the same kernel/quadrature.
|
||||
- full residual uses stabilized global K; shell strain/resultant/stress/physical energy
|
||||
use physical recovery only.
|
||||
- HDF5 `nodal/reaction` is full residual; constraint mask decides reaction versus free
|
||||
residual evidence.
|
||||
- result rows use fixed GP1..GP4 and BOTTOM/MIDDLE/TOP identity; no averaging or Abaqus
|
||||
integration-point relabeling.
|
||||
- state/output mutation occurs only after complete validation.
|
||||
|
||||
## 9. Acceptance Traceability Matrix
|
||||
|
||||
The inclusive ranges below cover every must requirement `001` through `072` exactly
|
||||
once without gap or overlapping requirement range.
|
||||
|
||||
| requirement range | owning tasks | test/evidence id | reference model id | acceptance |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 001 | TASK-01, TASK-12 | MAP-004, FLOW-001 | N/A | one static step only; deterministic rejection otherwise |
|
||||
| 002-004 | TASK-00, TASK-01, TASK-11, TASK-14, TASK-15 | MODEL-001, MAP-001, H5-001, both E2E suites | `shell-s4`, `shell-s4r` | S4/S4R one kernel; distinct stable source identity |
|
||||
| 005 | TASK-00, TASK-06, TASK-11 | MODEL-001, DOF-001/003, H5-001/002 | N/A | exact six-component order; no distributed equation ownership |
|
||||
| 006-010 | TASK-00, TASK-01 | MODEL-002, MAP-002/003 | N/A | finite E,nu,t; one assignment; unsupported meanings fail |
|
||||
| 011-016 | TASK-02, TASK-03 | GEO-001..004, KIN-002 | N/A | deterministic unit directors; exact geometry predicates |
|
||||
| 017-020 | TASK-01, TASK-08 | MAP-004, LOAD-001..004 | N/A | six-DOF BC/CLOAD; drilling/distributed load fails |
|
||||
| 021-023 | TASK-01 | MAP-001..004 and existing no-op regression | N/A | approved parser subset/identity wrappers/no-op policy |
|
||||
| 024-030 | TASK-00, TASK-06, TASK-07, TASK-09, TASK-10, TASK-12, TASK-16 | MODEL, DOF, ASM, STATE, REC, FLOW, VERIFY suites | N/A | ownership, deterministic assembly, lifecycle, residual reaction |
|
||||
| 031-038 | TASK-03, TASK-04, TASK-05, TASK-07, TASK-10 | KIN, KERNEL, PHYSREC, ASM-003, REC-003 | N/A | physical 5-DOF embedding, exact drilling, same quadrature, invariants |
|
||||
| 039-048 | TASK-09, TASK-10, TASK-11, TASK-12 | STATE-001..003, REC-001..005, H5-001..004, FLOW-004 | N/A | mandatory finite schema/results and atomic commit |
|
||||
| 049 | TASK-00 through TASK-16 | every production Task records RED/failure/GREEN/focused/full VERIFY; VERIFY-001..003 | `shell-s4`, `shell-s4r` where reference-dependent | TDD evidence, related C++ tests, MSVC Debug no-warning build and full CTest |
|
||||
| 050 | TASK-02 through TASK-05, TASK-07 | GEO-001/002, KIN-001/002, KERNEL-001..004, ASM-002 | N/A | frames, Jacobian, symmetry, transformation, six modes, positivity and repeatability |
|
||||
| 051 | TASK-02 through TASK-05, TASK-10, TASK-12 | GEO-001, KERNEL-001..003, REC-004, FLOW-002 | N/A | exact normalized 1e-12 and 1e-10 algebraic thresholds |
|
||||
| 052 | TASK-03 through TASK-05, TASK-10 | KIN-003/004, KERNEL-004, PHYSREC-001, REC-001/002 | N/A | independent membrane, bending, shear, twist fields and recovery signs/order |
|
||||
| 053 | TASK-04, TASK-05, TASK-14, TASK-15 | KERNEL-001..007, PHYSREC-001, both declared E2E suites | `shell-s4`, `shell-s4r` | formulation invariants/patches and both reference cases pass |
|
||||
| 054 | TASK-02 | GEO-001..004 | N/A | exact valid/rejected geometry inventory; no NR-O03/O04 |
|
||||
| 055 | TASK-16 | VERIFY scope audit | N/A | extra benchmark portfolio is explicitly nonblocking and absent from completion gate |
|
||||
| 056 | TASK-04, TASK-05, TASK-07, TASK-10 | KERNEL-005..007, PHYSREC-001, ASM-001/002, REC-003 | N/A | exact fixed drilling, deterministic rank/action and physical-output exclusion |
|
||||
| 057 | TASK-10, TASK-12, downstream Physics Evaluation | REC-002..004, FLOW-002, later physics report | `shell-s4`, `shell-s4r` | implementation exposes equilibrium/sign/energy evidence; physical plausibility verdict is downstream |
|
||||
| 058-060 | TASK-13, TASK-14, TASK-15 | REF-003, both E2E comparison tests | `shell-s4`, `shell-s4r` | exact U mixed tolerance without clamp |
|
||||
| 061-062 | TASK-13, TASK-14, TASK-15 | REF-004/005, both E2E tests | `shell-s4`, `shell-s4r` | UR same tolerance, deterministic warning only |
|
||||
| 063-064 | TASK-13 | REF-001/002/005 | `shell-s4`, `shell-s4r` | schema/row failure before numeric comparison; full metrics |
|
||||
| 065-068 | TASK-13, TASK-14, TASK-15 | REF-001/002/006, both case prechecks | `shell-s4`, `shell-s4r` | exact four read-only paths; unique finite mapped rows |
|
||||
| 069-071 | TASK-14, TASK-15 | both E2E suites | `shell-s4`, `shell-s4r` | declared S4/S4R; U blocks and UR warns; no other equality gate |
|
||||
| 072 | TASK-13 through TASK-16 | REF-006, VERIFY-004 and git/hash audit | `shell-s4`, `shell-s4r` | no reference solver run or artifact mutation |
|
||||
|
||||
## 10. Validation Commands
|
||||
|
||||
These commands are the environment-resolved Windows x64 Debug baseline. Planning does
|
||||
not execute build/tests. Each approved Harness Step first runs this literal path
|
||||
precheck and then repeats the relevant build/test subset after its RED and GREEN
|
||||
changes.
|
||||
|
||||
```powershell
|
||||
$requiredBuildPaths = @(
|
||||
"C:/git/googletest",
|
||||
"C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl",
|
||||
"C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb",
|
||||
"C:/Program Files/HDF_Group/HDF5/2.1.1/cmake"
|
||||
)
|
||||
foreach ($requiredBuildPath in $requiredBuildPaths) {
|
||||
if (-not (Test-Path -LiteralPath $requiredBuildPath)) {
|
||||
throw "Required configured build path is absent: $requiredBuildPath"
|
||||
}
|
||||
}
|
||||
|
||||
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"
|
||||
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
```
|
||||
|
||||
Focused commands:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug --target fesa_unit_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "DomainModel|InpDomainMapping|Mitc4Geometry|Mitc4Shell|DofManager|EssentialConstraints|SparseAssembly|LoadAssembly|ResultRecovery|Hdf5ResultsWriter" --output-on-failure
|
||||
|
||||
cmake --build .harness/build --config Debug --target fesa_integration_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "LinearStaticCli|Mitc4ShellCli" --output-on-failure
|
||||
|
||||
cmake --build .harness/build --config Debug --target fesa_reference_tests
|
||||
ctest --test-dir .harness/build -C Debug -R "Mitc4ReferenceComparison|Mitc4S4Reference|Mitc4S4RReference" --output-on-failure
|
||||
```
|
||||
|
||||
Planning-document verification:
|
||||
|
||||
```powershell
|
||||
git diff --check -- docs/implementation-plans/linear-static-mitc4-shell-implementation-plan.md
|
||||
git status --short
|
||||
git diff --name-only
|
||||
```
|
||||
|
||||
Reference immutability audit is read-only and fails on any mismatch:
|
||||
|
||||
```powershell
|
||||
$expectedReferenceHashes = [ordered]@{
|
||||
"reference/shell/shell.inp" = "4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF"
|
||||
"reference/shell/shell displacements.csv" = "C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B"
|
||||
"reference/shellR/shellR.inp" = "1325940FB42B78961CF25E84379BF2693846FAD22473E7688AC5456B37B18CB4"
|
||||
"reference/shellR/shellR displacements.csv" = "8887ACC5ED007CB97583A9FDC1150B48B9297E269A5BA8EBA6C1A5F6306E98CB"
|
||||
}
|
||||
foreach ($referencePath in $expectedReferenceHashes.Keys) {
|
||||
$actualHash = (Get-FileHash -Algorithm SHA256 -LiteralPath $referencePath).Hash
|
||||
if ($actualHash -ne $expectedReferenceHashes[$referencePath]) {
|
||||
throw "Reference artifact changed: $referencePath"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Do not invoke `scripts/hooks/*.py` manually. Harness runner installs/uses the configured
|
||||
PreToolUse and Stop hooks automatically. Do not invoke `scripts/execute.py` until the
|
||||
user separately authorizes execution.
|
||||
|
||||
## 11. Risks and Downstream Handoff
|
||||
|
||||
| risk | controlling plan decision | stop condition |
|
||||
| --- | --- | --- |
|
||||
| beam-only ModelDefinition leaks through every layer | add shell semantic records first; preserve B33 access | stop if a Step requires unapproved mixed-model hierarchy |
|
||||
| fixed 12-DOF scatter breaks B33 | typed beam/shell scatter paths and B33 regressions | stop on any B33 focused/full regression |
|
||||
| drilling contaminates physical output | separate physical recovery from stabilized full K | stop if pure-drill recovery/energy is nonzero |
|
||||
| director/frame sign nondeterminism | source-order, area-weight and tie-break tests | stop on repeat/order/thread difference |
|
||||
| S4R accidentally selects reduced integration | one internal formulation and ASM/E2E equality tests | stop if source type reaches quadrature dispatch |
|
||||
| full residual confused with element resultants | keep reaction from Kd-F, physical recovery separately | stop if reaction is reconstructed from shell resultants |
|
||||
| writer expansion changes B33 schema | additive shell branches plus full B33 CTest | stop on B33 schema regression |
|
||||
| comparator inherits B33 four-file/Frame assumptions | dedicated test-only MITC4 comparator | stop if administrative files become required |
|
||||
| reference artifacts staged by Harness | clean isolated worktree, hash/diff audit | stop immediately on any reference path change |
|
||||
| future nonlinear equations enter production | scope and code review prohibition | stop if nonlinear state/tangent is allocated or called |
|
||||
|
||||
### Implementation Agent
|
||||
|
||||
- Read the approved implementation plan, `docs/HARNESS.md` and
|
||||
`docs/HARNESS_WORKFLOW.md` before every Step.
|
||||
- Execute only the Harness-selected pending Step and use the repository hooks/scripts
|
||||
through the documented runner lifecycle.
|
||||
- Never choose the next Step, edit executor-owned timestamps/statuses, batch multiple
|
||||
Steps, or implement outside the Step's file ownership.
|
||||
- Record the RED command and observed failure before GREEN.
|
||||
|
||||
### Build/Test Executor Agent
|
||||
|
||||
- Use Section 10 exact CMake/MSVC/CTest baseline after implementation Steps finish.
|
||||
- Report new warnings, discovery gaps and exact failing test names without changing
|
||||
upstream contracts.
|
||||
|
||||
### Correction Agent
|
||||
|
||||
- Apply only minimal failure-driven corrections inside approved file ownership.
|
||||
- Do not reinterpret MITC4 mathematics, I/O schema or tolerance.
|
||||
|
||||
### Reference Verification Agent
|
||||
|
||||
- Consume authoritative HDF5 and declared read-only CSV directly.
|
||||
- Create the separate reference-verification report; only U affects pass/fail and every
|
||||
UR warning remains visible.
|
||||
|
||||
### Physics Evaluation and Release Agents
|
||||
|
||||
- Physics evaluates equilibrium, directions, symmetry, energy and result signs after
|
||||
reference verification.
|
||||
- Release readiness remains blocked until implementation, build/test, reference and
|
||||
physics gates all provide evidence.
|
||||
|
||||
## 12. Harness Step Draft
|
||||
|
||||
This approved draft is materialized under `phases/linear-static-mitc4-shell/`.
|
||||
Every Step is zero-based, kebab-case and closes RED/GREEN/VERIFY before the
|
||||
Executor advances it. TASK-14/TASK-15 are declared-case sub-work inside Step 13's
|
||||
single test-only reference module; TASK-16 is downstream Build/Test Executor evidence,
|
||||
not an Implementation Agent phase Step. During materialization, the exact required-reading
|
||||
paths, configure block, focused command and full VERIFY block shown here are copied
|
||||
verbatim into every `stepN.md`; a materialized Step never refers back to this draft or
|
||||
to an external conversation.
|
||||
|
||||
Every materialized Step copies this mandatory reading inventory before its
|
||||
Step-specific paths:
|
||||
|
||||
- `AGENTS.md`
|
||||
- `docs/PRD.md`, `docs/ARCHITECTURE.md`, `docs/ADR.md`
|
||||
- `docs/HARNESS.md`, `docs/HARNESS_WORKFLOW.md`
|
||||
- this approved implementation plan and all source contracts listed in Metadata
|
||||
- `.codex/hooks.json`
|
||||
- `phases/index.json`, `phases/linear-static-mitc4-shell/index.json` and its own
|
||||
`phases/linear-static-mitc4-shell/stepN.md`
|
||||
- every path created/modified by prerequisite Steps and their step output/status
|
||||
|
||||
If any mandatory or Step-specific path is missing or contradicts the approved plan,
|
||||
the Implementation Agent records `blocked` for the Executor-selected current Step and
|
||||
stops; it does not invent the missing contract.
|
||||
|
||||
Step-specific path ledger copied into the corresponding materialized Step:
|
||||
|
||||
| Step | exact source/prerequisite paths |
|
||||
| ---: | --- |
|
||||
| 0 | `include/fesa/model/model_types.hpp`; `include/fesa/model/domain.hpp`; `src/fesa/model/domain.cpp`; `tests/unit/model/model_types_test.cpp`; `tests/unit/model/domain_test.cpp` |
|
||||
| 1 | Step 0 paths; `include/fesa/io/abaqus/domain_mapper.hpp`; `src/fesa/io/abaqus/domain_mapper.cpp`; `tests/unit/io/abaqus/domain_mapper_test.cpp` |
|
||||
| 2 | Step 0-1 paths; candidate new `include/fesa/model/shell_geometry.hpp`; `src/fesa/model/shell_geometry.cpp`; `tests/unit/model/shell_geometry_test.cpp`; `src/fesa/CMakeLists.txt`; `tests/CMakeLists.txt` |
|
||||
| 3 | Step 2 paths; candidate new `include/fesa/elements/mitc4_shell.hpp`; `src/fesa/elements/mitc4_shell.cpp`; `tests/unit/elements/mitc4_shell_test.cpp`; `src/fesa/CMakeLists.txt`; `tests/CMakeLists.txt` |
|
||||
| 4 | Step 3 MITC4 kernel/header/test paths |
|
||||
| 5 | Step 3-4 MITC4 kernel/header/test paths |
|
||||
| 6 | Step 0 paths; `include/fesa/fem/dof_manager.hpp`; `src/fesa/fem/dof_manager.cpp`; `tests/unit/fem/dof_manager_test.cpp`; `tests/unit/constraints/essential_constraints_test.cpp` |
|
||||
| 7 | Steps 4/6 paths; `include/fesa/assembly/sparse_assembler.hpp`; `src/fesa/assembly/sparse_assembler.cpp`; `tests/unit/assembly/sparse_assembler_test.cpp` |
|
||||
| 8 | Steps 2/7 paths; `include/fesa/assembly/load_assembler.hpp`; `src/fesa/assembly/load_assembler.cpp`; `tests/unit/assembly/load_assembler_test.cpp` |
|
||||
| 9 | Step 5 paths; `include/fesa/results/result_records.hpp`; `include/fesa/analysis/analysis_state.hpp`; `src/fesa/analysis/analysis_state.cpp`; `tests/unit/results/result_records_test.cpp` |
|
||||
| 10 | Steps 5/9 paths; `include/fesa/results/result_recovery.hpp`; `src/fesa/results/result_recovery.cpp`; `tests/unit/results/result_recovery_test.cpp` |
|
||||
| 11 | Steps 9/10 paths; `include/fesa/io/hdf5/hdf5_results_writer.hpp`; `src/fesa/io/hdf5/hdf5_results_writer.cpp`; `tests/unit/io/hdf5/hdf5_results_writer_test.cpp` |
|
||||
| 12 | Steps 7-11 paths; `include/fesa/analysis/linear_static_analysis.hpp`; `src/fesa/analysis/linear_static_analysis.cpp`; `tests/integration/analysis/linear_static_analysis_test.cpp`; `tests/integration/app/fesa_application_test.cpp` |
|
||||
| 13 | Steps 11/12 paths; candidate new `tests/reference/mitc4_reference_comparison.hpp`, `tests/reference/mitc4_reference_comparison.cpp`, `tests/reference/mitc4_reference_comparison_test.cpp`, `tests/reference/mitc4_reference_cases_test.cpp`; `tests/CMakeLists.txt`; the four exact read-only reference paths in Section 2 |
|
||||
|
||||
The configure command copied before each Step's RED build is:
|
||||
|
||||
```powershell
|
||||
$requiredBuildPaths = @(
|
||||
"C:/git/googletest",
|
||||
"C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl",
|
||||
"C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb",
|
||||
"C:/Program Files/HDF_Group/HDF5/2.1.1/cmake"
|
||||
)
|
||||
foreach ($requiredBuildPath in $requiredBuildPaths) {
|
||||
if (-not (Test-Path -LiteralPath $requiredBuildPath)) {
|
||||
throw "Required configured build path is absent: $requiredBuildPath"
|
||||
}
|
||||
}
|
||||
|
||||
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"
|
||||
```
|
||||
|
||||
The full VERIFY block copied at the end of every Step is:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug
|
||||
ctest --test-dir .harness/build -C Debug --show-only=json-v1
|
||||
ctest --test-dir .harness/build -C Debug --output-on-failure
|
||||
```
|
||||
|
||||
### Step 0 — `shell-semantic-model`
|
||||
|
||||
- Required reading: requirements 002-016/024, I/O Sections 3/5, architecture model
|
||||
ownership, current `model_types.hpp`/`domain.*` and their tests.
|
||||
- Prerequisite: approved plan only; no production dependency on a prior Step.
|
||||
- RED: add MODEL-001/002 tests and CMake registration if needed; run:
|
||||
`cmake --build .harness/build --config Debug --target fesa_unit_tests` then
|
||||
`ctest --test-dir .harness/build -C Debug -R "DomainModel" --output-on-failure`.
|
||||
Record the missing shell type/accessor failure. Unexpected pass is a stop.
|
||||
- GREEN: minimally add shell semantic records/Domain const access; no parser/kernel.
|
||||
- VERIFY: rerun the focused commands and common full VERIFY.
|
||||
- Prohibitions: no equation IDs, element hierarchy, mixed-model execution, parser edits.
|
||||
|
||||
### Step 1 — `shell-domain-mapping`
|
||||
|
||||
- Required reading: Step 0 outputs, requirements 001-010/017-023, I/O Sections 1-3/8-9,
|
||||
current `domain_mapper.*` and parser/model tests.
|
||||
- Prerequisite: Step 0 `completed`.
|
||||
- RED: add MAP-001..004; build `fesa_unit_tests` and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "InpDomainMapping" --output-on-failure`.
|
||||
Record valid S4/S4R rejection and exact negative diagnostic failures.
|
||||
- GREEN: minimally extend semantic mapping; keep `input_reader` syntax-only.
|
||||
- VERIFY: focused parser/model tests, then common full VERIFY.
|
||||
- Prohibitions: no element math, no silent unsupported keyword, no reference edits.
|
||||
|
||||
### Step 2 — `shell-director-geometry`
|
||||
|
||||
- Required reading: requirements 011-016, formulation Sections 4/9/17, Numerical Review
|
||||
5.2/5.5/6.1, I/O 3.3/9, completed semantic model/mapping.
|
||||
- Prerequisite: Step 1 `completed`.
|
||||
- RED: add GEO-001..004; build unit target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "Mitc4Geometry" --output-on-failure`.
|
||||
- GREEN: implement deterministic director/frame and exact geometry inventory validation.
|
||||
- VERIFY: focused geometry/mapping tests, then common full VERIFY.
|
||||
- Prohibitions: no calibrated angle/warp/distortion threshold; no NR-O03/O04.
|
||||
|
||||
### Step 3 — `mitc4-kinematics-constitutive`
|
||||
|
||||
- Required reading: formulation Sections 3-11/17, Numerical Review 5.1-5.6/6.1,
|
||||
current math adapters and Euler kernel style.
|
||||
- Prerequisite: Step 2 `completed`.
|
||||
- RED: add KIN-001..005 in new `mitc4_shell_test.cpp`, register it, build unit target,
|
||||
run `ctest --test-dir .harness/build -C Debug -R "Mitc4ShellKinematics|Mitc4ShellConstitutive" --output-on-failure`.
|
||||
- GREEN: minimally add concrete shell kernel kinematics/constitutive seams; no global
|
||||
assembly or drilling.
|
||||
- VERIFY: focused kernel tests, then common full VERIFY.
|
||||
- Prohibitions: no public base hierarchy, no S4R branch, no nonlinear tangent code.
|
||||
|
||||
### Step 4 — `mitc4-stiffness-drilling`
|
||||
|
||||
- Required reading: formulation Sections 10-14/17, requirements 031-038/050-056,
|
||||
Numerical Review 5.7/6.1-6.2, completed Step 3 kernel.
|
||||
- Prerequisite: Step 3 `completed`.
|
||||
- RED: add KERNEL-001..006; build unit target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "Mitc4ShellKernel|Mitc4ShellPatch|Mitc4ShellDrilling" --output-on-failure`.
|
||||
- GREEN: implement K20, 20-to-24 congruence and exact fixed drilling only.
|
||||
- VERIFY: focused kernel suite, then common full VERIFY.
|
||||
- Prohibitions: translations in R+, coefficient sweep, recovery/result output, future nonlinear.
|
||||
|
||||
### Step 5 — `mitc4-physical-recovery`
|
||||
|
||||
- Required reading: formulation Sections 14/16, requirements 035/042-046/052/056,
|
||||
I/O result component/location order, completed Step 4 kernel.
|
||||
- Prerequisite: Step 4 `completed`.
|
||||
- RED: add KERNEL-007 and PHYSREC-001; build unit target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "Mitc4ShellDrilling|Mitc4ShellPhysicalRecovery" --output-on-failure`.
|
||||
- GREEN: minimally add kernel-local physical recovery and physical energy API only.
|
||||
- VERIFY: focused physical recovery/drilling tests, then common full VERIFY.
|
||||
- Prohibitions: no AnalysisState/global result rows, no drilling contribution or HDF5.
|
||||
|
||||
### Step 6 — `shell-dof-scatter`
|
||||
|
||||
- Required reading: requirements 005/025, architecture DofManager ownership, current
|
||||
`dof_manager.*` and constraint tests, completed shell model.
|
||||
- Prerequisite: Step 5 `completed`.
|
||||
- RED: add DOF-001..003; build unit target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "DofManager|EssentialConstraints" --output-on-failure`.
|
||||
- GREEN: minimally add typed 24-entry scatter/pattern while preserving 12-entry B33.
|
||||
- VERIFY: focused DOF/constraint tests, then common full VERIFY.
|
||||
- Prohibitions: no equation IDs in model, no constraint/load ownership move.
|
||||
|
||||
### Step 7 — `shell-sparse-assembly`
|
||||
|
||||
- Required reading: requirements 027/030/037, architecture deterministic COO rule,
|
||||
current `sparse_assembler.cpp`/`sparse_matrix.cpp` tests, completed kernel/scatter.
|
||||
- Prerequisite: Step 6 `completed`.
|
||||
- RED: add ASM-001..003; build unit target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "SparseAssembly" --output-on-failure`.
|
||||
- GREEN: minimally dispatch shell and emit stable 576-entry local buffers.
|
||||
- VERIFY: focused assembly tests, then common full VERIFY.
|
||||
- Prohibitions: no worker global CSR mutation, unordered reduction or S4R integration branch.
|
||||
|
||||
### Step 8 — `shell-load-validation`
|
||||
|
||||
- Required reading: requirements 017-020/028, formulation 8/13, I/O 4.2-4.3,
|
||||
current `load_assembler.*` and constraint lifecycle.
|
||||
- Prerequisite: Step 7 `completed`.
|
||||
- RED: add LOAD-001..004; build unit target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "LoadAssembly|EssentialConstraints" --output-on-failure`.
|
||||
- GREEN: minimally add aggregate nodal moment/director validation and reuse full DOF load.
|
||||
- VERIFY: focused load/constraint tests, then common full VERIFY.
|
||||
- Prohibitions: no distributed/equivalent/follower load; no drill load channel.
|
||||
|
||||
### Step 9 — `shell-analysis-state`
|
||||
|
||||
- Required reading: requirements 026/041-046/048, I/O 6.3-6.5,
|
||||
current `analysis_state.*`/`result_records.hpp` and completed physical recovery types.
|
||||
- Prerequisite: Step 8 `completed`.
|
||||
- RED: add STATE-001..003; build unit target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "AnalysisState" --output-on-failure`.
|
||||
- GREEN: minimally add candidate-owned shell row/global evidence containers and
|
||||
validation/commit mechanics.
|
||||
- VERIFY: focused AnalysisState tests, then common full VERIFY.
|
||||
- Prohibitions: no element calculation, ResultRecovery orchestration or HDF5 writing.
|
||||
|
||||
### Step 10 — `shell-result-recovery`
|
||||
|
||||
- Required reading: requirements 029/035/041-046/048, formulation 14/16, I/O 6.3-6.5,
|
||||
current `result_recovery.*` and completed Steps 5/9.
|
||||
- Prerequisite: Step 9 `completed`.
|
||||
- RED: add REC-001..005; build unit target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "ResultRecovery" --output-on-failure`.
|
||||
- GREEN: minimally orchestrate full-residual evidence and physical shell recovery into
|
||||
a fully validated candidate, then commit it.
|
||||
- VERIFY: focused recovery tests, then common full VERIFY.
|
||||
- Prohibitions: no new result record type, location averaging, drill recovery or writer edit.
|
||||
|
||||
### Step 11 — `shell-hdf5-output`
|
||||
|
||||
- Required reading: requirements 039-048, I/O Section 6 exact schema, ADR atomic output,
|
||||
current HDF5 writer/self-check tests, completed recovery records.
|
||||
- Prerequisite: Step 10 `completed`.
|
||||
- RED: add H5-001..004; build unit target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "Hdf5ResultsWriter" --output-on-failure`.
|
||||
- GREEN: add exact additive shell schema behind unchanged ResultsWriter boundary.
|
||||
- VERIFY: focused HDF5 tests, then common full VERIFY.
|
||||
- Prohibitions: no B33 schema reinterpretation, CSV solver output, partial final file.
|
||||
|
||||
### Step 12 — `shell-linear-static-flow`
|
||||
|
||||
- Required reading: requirements 024-030, architecture eight-hook lifecycle, I/O CLI
|
||||
contract, current `linear_static_analysis.*`/application integration tests.
|
||||
- Prerequisite: Step 11 `completed`.
|
||||
- RED: add FLOW-001..004; build integration target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "LinearStaticCli|Mitc4ShellCli" --output-on-failure`.
|
||||
- GREEN: minimally route shell through existing lifecycle; preserve one factorization.
|
||||
- VERIFY: focused integration tests, then common full VERIFY.
|
||||
- Prohibitions: no analysis lifecycle reorder, no 0x0 singular conversion, no early state commit.
|
||||
|
||||
### Step 13 — `shell-reference-comparison`
|
||||
|
||||
- Required reading: requirements 058-072, I/O Section 7, Reference Model contract,
|
||||
both declared S4/S4R paths and hashes, and current B33 comparator only as reusable
|
||||
identity/report precedent.
|
||||
- Scope ownership: this one test-only reference module owns TASK-13 comparator behavior
|
||||
plus TASK-14/TASK-15 declared-case tests; it owns no solver production module.
|
||||
- Prerequisite: Step 12 `completed` and valid MITC4 HDF5 fixture.
|
||||
- RED: add REF-001..006 plus E2E-S4-001/002 and E2E-S4R-001/002 before the comparator
|
||||
implementation; build the reference target and run
|
||||
`ctest --test-dir .harness/build -C Debug -R "Mitc4ReferenceComparison|Mitc4S4Reference|Mitc4S4RReference" --output-on-failure`.
|
||||
Record the missing comparator/declared-case failure.
|
||||
- GREEN: minimally add test-only comparator for exact shell CSV/HDF5 contract.
|
||||
- If a declared case exposes a production defect outside this reference-test module,
|
||||
stop the Step and route a focused correction to the owning prior module; do not patch
|
||||
unrelated production layers inside this Step.
|
||||
- VERIFY: focused comparator and both declared-case tests, then common full VERIFY.
|
||||
- Prohibitions: no reference artifact writes/Abaqus run, no metadata/README gate, no UR blocking.
|
||||
|
||||
After explicit approval, planning may create only:
|
||||
|
||||
- `phases/index.json` with task status `pending` and no creation timestamp;
|
||||
- `phases/linear-static-mitc4-shell/index.json` with Steps 0-13 initially `pending` and
|
||||
no executor-owned timestamps;
|
||||
- `phases/linear-static-mitc4-shell/stepN.md` containing the approved self-contained
|
||||
directions.
|
||||
|
||||
Approval does not authorize `python scripts/execute.py linear-static-mitc4-shell` or
|
||||
`--push`.
|
||||
|
||||
## 13. Open Issues
|
||||
|
||||
| id | item | blocking now | resolution owner |
|
||||
| --- | --- | --- | --- |
|
||||
| OI-001 | Section 12 multi-Step Harness draft was explicitly approved on 2026-08-12 and materialized. | resolved | user |
|
||||
| OI-002 | Candidate shell semantic representation and exact C++ value/reference types are not public API decisions. | no | owning RED test in Steps 0/3 |
|
||||
| OI-003 | Per-test MITC4 CTest label can be added without relabeling B33 tests인지 확인한다. Exact suite regex remains sufficient. | no | Step 0 and downstream TASK-14 CMake verification |
|
||||
|
||||
No mathematical, I/O, reference-inventory or tolerance decision remains open for
|
||||
implementation planning. The user separately authorized implementation and Harness
|
||||
execution on 2026-08-12; the Executor still owns branch, Step selection, timestamps,
|
||||
commits and advancement.
|
||||
@@ -1,6 +1,6 @@
|
||||
# Linear Static MITC4 Shell Numerical Review
|
||||
|
||||
## Metadata
|
||||
## 1. Metadata
|
||||
|
||||
- feature_id: `linear-static-mitc4-shell`
|
||||
- source_formulation: `docs/formulations/mitc4-shell-formulation.md`
|
||||
@@ -8,339 +8,357 @@
|
||||
- source_research: `docs/research/linear-static-mitc4-shell-research.md`
|
||||
- source_io_definition: `docs/io-definitions/linear-static-mitc4-shell-io.md`
|
||||
- source_reference_inventory: `docs/reference-models/linear-static-mitc4-shell-reference-models.md`
|
||||
- repository_policy: `AGENTS.md`, `docs/ADR.md`, `docs/ARCHITECTURE.md`,
|
||||
`docs/SOLVER_AGENT_DESIGN.md`
|
||||
- reviewed_revisions: `73df844`, `22a3238`
|
||||
- repository_policy: `AGENTS.md`, `docs/SOLVER_AGENT_DESIGN.md`,
|
||||
`docs/numerical-reviews/README.md`
|
||||
- reviewed_head: `a058ef7`
|
||||
- prior_pass_commit: `60b42f4` (`context-only; verdict not inherited`)
|
||||
- status: `pass-for-implementation-planning`
|
||||
- owner_agent: `numerical-review-agent`
|
||||
- date: `2026-08-12`
|
||||
- implementation_planning_authorized: `true`
|
||||
- implementation_complete: `false`
|
||||
- build_test_complete: `false`
|
||||
- reference_comparison_complete: `false`
|
||||
- physics_evaluation_complete: `false`
|
||||
- release_ready: `false`
|
||||
|
||||
## Review Verdict
|
||||
이번 재검토는 현재 HEAD의 요구조건, 연구, 정식화, I/O 및 reference-case 계약을
|
||||
처음부터 상호 대조했다. 기존 review의 판정과 artifact 관찰 결과는 결론의 전제로
|
||||
사용하지 않았고, 이전 finding은 현 문서의 수식으로 다시 검산한 뒤 disposition만
|
||||
기록했다. 원 MITC4 local paper는 tying 위치와 covariant shear 보간을 확인하는 데
|
||||
read-only로 사용했다.
|
||||
|
||||
이 단계에서는 Abaqus, Harness, C++ build/test, FESA 실행 및 reference comparison을
|
||||
수행하지 않았다. Reference artifact를 생성, 수정, 복원 또는 정규화하지 않았다.
|
||||
|
||||
## 2. Review Verdict
|
||||
|
||||
- verdict: `pass-for-implementation-planning`
|
||||
- reason: The current linear-static formulation closes the physical 20-DOF MITC4
|
||||
kernel, its global 24-DOF embedding, fixed drilling regularization, Jacobian and
|
||||
quadrature rules, residual/stiffness equations, recovery signs, and verification
|
||||
invariants without a mathematical inconsistency in the approved feature scope.
|
||||
- critical_blockers: `none`
|
||||
- remaining_formulation_revisions: `none for the current linear-static scope`
|
||||
- downstream_boundary: Implementation Planning may begin. This verdict does not
|
||||
claim implementation, build/test, reference-comparison, physics-sanity, or release
|
||||
completion.
|
||||
- confirmed_defects: `none in the approved current linear-static scope`
|
||||
- open_blocking_questions: `none`
|
||||
- reason: 현재 정식화는 24 global DOF와 20 physical DOF의 관계, MITC4 shear
|
||||
tying, plane-stress section law, 공통 `2 x 2 x 2` quadrature, residual/stiffness,
|
||||
고정 drilling 안정화, 물리 recovery 및 검증 불변식을 구현계획으로 옮길 수 있을
|
||||
만큼 명시한다. 요구조건, I/O 및 reference 계약과 모순되는 차원, 부호, 위치 또는
|
||||
pass/fail 의미도 발견되지 않았다.
|
||||
- downstream_boundary: 이 판정은 Implementation Planning 진입만 허용한다. 구현,
|
||||
MSVC build/CTest, reference comparison, physics sanity 또는 release를 승인하지 않는다.
|
||||
|
||||
The future geometrically nonlinear material in Formulation Section 15 remains
|
||||
explicitly non-executable. Its unresolved global finite-rotation map and objective
|
||||
drilling potential do not block the current linear-static implementation plan.
|
||||
정식화 Section 15의 geometrically nonlinear residual/tangent는 future-only다. 완전한
|
||||
`Phi: R24 -> R20`, map Hessian, objective drilling potential 및 finite-rotation load work가
|
||||
미정인 사실은 미래 nonlinear 구현을 막지만 현재 linear-static 판정은 막지 않는다.
|
||||
|
||||
## Critical Findings
|
||||
## 3. Critical Findings
|
||||
|
||||
No confirmed mathematical defect remains in the approved linear-static formulation.
|
||||
The previous review's `needs-reference-model` verdict is not a valid current
|
||||
formulation verdict: the current numerical-review gate is based on numerical and
|
||||
formulation consistency, while downstream artifact administration and comparison
|
||||
execution are separate gates.
|
||||
### 3.1 Confirmed defects
|
||||
|
||||
### 1. Previous finding disposition
|
||||
현재 승인된 선형 정적 범위에서 구현계획 전에 Formulation 또는 Research로 돌려보낼
|
||||
confirmed mathematical defect는 없다.
|
||||
|
||||
| previous item | current disposition | evidence and strict consequence |
|
||||
`K20`의 exact-arithmetic 대칭/positive-semidefinite 구조와 20-to-24 congruence는
|
||||
일관된다. 다만 실제 구현의 rank, rigid action, patch field와 reference error는 문서
|
||||
검토만으로 통과했다고 볼 수 없으며 Section 6의 downstream test evidence가 필요하다.
|
||||
|
||||
### 3.2 Previous finding disposition
|
||||
|
||||
| previous item | rerun disposition | current independent basis |
|
||||
| --- | --- | --- |
|
||||
| `NR-C01` Jacobian/geometry inventory | resolved | Formulation Sections 9.2-9.3 enumerate center, stiffness, tying, and recovery locations and require finite bases, nonzero area, and `J>0`; Requirements 014/016 intentionally define no calibrated smooth-angle, distortion, or warp threshold. |
|
||||
| `NR-C02` drilling normalization | resolved | Formulation Section 12.2 and Requirements 033-036 now define one exact dimensional rule using only positive physical tangent-rotation diagonals. No calibration decision remains. |
|
||||
| `NR-C03` mixed-DOF algebraic scaling | resolved | Formulation Sections 12.3 and 12.5 define physical length scaling separately from the physical/drilling stiffness split and provide normalized rank, symmetry, and rigid-action evidence. |
|
||||
| `NR-C04` 20/24-DOF weak-form mismatch | resolved | Formulation Sections 5.2-5.3 and 7.1-7.2 place physical, drilling, and external work in the common global 24-DOF test space using the required transpose maps. |
|
||||
| `NR-C05` nonlinear global tangent closure | resolved for current scope | Formulation Section 15 now labels the nonlinear equations non-executable and identifies the missing nonlinear `Phi` map, map Hessian, and objective drilling potential. Those items block only a future nonlinear feature. |
|
||||
| `NR-D01` drilling-direction nodal moment | retained/resolved | The exact-zero branch and `rho_M=|d dot M|/||M|| <= 1e-12` rule are consistent in Formulation Section 6.2 and I/O Section 4.3. |
|
||||
| `NR-D02` normalized algebraic checks | retained/resolved | Formulation Section 17.1 defines scale-aware symmetry, rigid-action, frame, transformation-energy, residual, and equilibrium checks without a denominator clamp. |
|
||||
| `NR-O01` drilling coefficient/plateau | resolved by approved fixed rule | `k_d=10^-3 min(R+)` replaces the former coefficient-family/sweep question. A sweep, plateau, response sensitivity, or condition-number calibration is not an acceptance gate. |
|
||||
| `NR-O02` drilling-energy warning | removed from approved scope | Drilling is an internal numerical potential only. No drilling-energy ratio, warning threshold, or drilling-specific output is required. |
|
||||
| `NR-O03` smooth-director angle | removed from approved scope | Requirements 014/054 and Formulation Sections 4.2 and 9.3 use exact orientation/finite/nonzero predicates and explicitly remove `NR-O03`. It is not an open numerical decision. |
|
||||
| `NR-O04` distortion/warp calibration | removed from approved scope | Requirements 016/054 and Formulation Sections 9.2-9.3 require exact finite/positive validity checks and explicitly remove `NR-O04`. It is not an open numerical decision. |
|
||||
| `NR-O05` U/UR tolerance | resolved | Requirements 058-062, Formulation Section 17.5, I/O Section 7.6, and Reference Case Section 5 all use the exact approved B33 component-scale formula. |
|
||||
| `NR-C01` Jacobian/geometry inventory | `resolved` | Formulation 9.2-9.3은 center, eight stiffness points, four tying points 및 committed recovery points를 공통 fail-closed inventory로 두고 finite bases, nonzero surface measure와 `J>0`를 요구한다. 승인 범위는 calibrated distortion/warp cutoff를 요구하지 않는다. |
|
||||
| `NR-C02` drilling normalization | `resolved` | Formulation 12.2는 `R+`를 오직 8 physical tangent-rotation diagonals의 finite positive 값으로 제한하므로 모든 후보의 단위가 `force*length`로 같다. |
|
||||
| `NR-C03` mixed-DOF spectrum scaling | `resolved` | Formulation 12.5의 `(L_e I3,I2)` 및 `(L_e I3,I3)` congruence는 rank/condition evidence에서 translation/rotation 단위 혼합을 제거한다. Raw mixed-unit spectrum은 금지된다. |
|
||||
| `NR-C04` 20/24 weak-form mismatch | `resolved` | Formulation 5.2-5.3과 7.1-7.2는 physical, drilling, external work를 모두 `V24`에서 `T_p^T`와 `T_d^T`로 결합한다. |
|
||||
| `NR-C05` nonlinear 20-to-24 closure | `resolved for current scope` | Section 15는 physical chart tangent와 conditional global pullback을 분리하고 map-curvature 항을 보존하며, 미정인 global map/objective drill을 future-only blocker로 명시한다. |
|
||||
| `NR-D01` drilling-direction moment | `retained and consistent` | Exact-zero moment는 별도 처리하고 nonzero moment에 `rho_M=abs(d dot M)/norm(M)<=1e-12`를 적용한다. Numerical drilling은 거부된 moment를 운반하지 않는다. |
|
||||
| `NR-D02` normalized algebraic checks | `retained and consistent` | `1e-12` symmetry/frame/energy와 `1e-10` rigid/residual/equilibrium 기준은 scaled matrices와 unclamped denominators에 적용된다. |
|
||||
| `NR-O01` coefficient sweep/plateau | `closed by product decision` | `k_d=1e-3 min(R+)`가 고정 계약이다. Sweep, plateau 및 coefficient optimality는 구현 gate가 아니다. |
|
||||
| `NR-O02` drilling-energy ratio | `removed from scope` | Drilling energy는 내부 quadratic identity일 뿐 physical energy나 mandatory output이 아니며 ratio/warning threshold도 요구하지 않는다. |
|
||||
| `NR-O03` smooth-director calibration | `removed from scope` | Pairwise positive incident-normal orientation, finite/nonzero averaging 및 duplicate-node fold modeling이 승인된 exact predicate다. 별도 angle calibration은 gate가 아니다. |
|
||||
| `NR-O04` distortion/warp calibration | `removed from scope` | Basic topology, finite/nonzero surface measure 및 required-point `J>0`가 승인된 predicate다. Quality sweep이나 cutoff는 gate가 아니다. |
|
||||
| `NR-O05` U/UR tolerance | `resolved` | 모든 관련 문서가 `1e-9+1e-6*reference_scale_c`, U blocking, UR warning-only를 동일하게 정의한다. |
|
||||
|
||||
### 2. Required policy classifications
|
||||
이전의 `needs-reference-model` 판정에 포함됐던 canonical naming, README,
|
||||
`metadata.json`, provenance, expanded portfolio 및 아직 없는 comparison result는 현재
|
||||
프로젝트 정책상 formulation verdict의 blocker가 아니다. 현 Reference Model 문서는
|
||||
정확한 기존 input/displacement path와 row/tolerance 계약을 제공한다.
|
||||
|
||||
#### 2.1 Fixed drilling rule — resolved and implementation-ready
|
||||
### 3.3 Open questions
|
||||
|
||||
Let `R+` contain only the finite, strictly positive diagonal entries of the physical
|
||||
local stiffness `K20` associated with the eight director-tangent rotational DOFs.
|
||||
The formulation fixes
|
||||
- current_linear_scope: `none blocking`
|
||||
- future_geometric_nonlinearity: finite global rotation coordinate, `Phi`와 그 1/2차
|
||||
미분, chart recentering, objective drilling, nodal-moment work 및 nonlinear output/state
|
||||
계약이 미정이다. 이는 별도 future formulation/review가 소유한다.
|
||||
- optional_characterization: near-singular positive-J geometry의 conditioning과 original
|
||||
MITC4의 distorted-curved membrane locking을 더 넓게 정량화할 수 있으나 현재 승인된
|
||||
planning/completion gate는 아니다.
|
||||
- downstream_results: implementation rank/patch evidence와 S4/S4R comparison 결과는
|
||||
아직 없으며 해당 후속 Agent가 판정한다. 부재 자체는 pre-implementation review의
|
||||
결함이 아니다.
|
||||
|
||||
```text
|
||||
k_ref = min(R+)
|
||||
k_d = 1e-3 * k_ref
|
||||
K_drill_local = k_d * I4
|
||||
K_drill_24 = T_d^T * K_drill_local * T_d
|
||||
```
|
||||
## 4. Numerical Risk Assessment
|
||||
|
||||
All entries in `R+` have rotational-stiffness dimension `force*length`; translations,
|
||||
off-diagonals, nonpositive values, and nonfinite values are excluded. Therefore
|
||||
`k_d` has the correct dimension, `K_drill_24` is symmetric positive on the four pure
|
||||
drilling coordinates, and the physical and drilling channels are algebraically
|
||||
separate. An empty `R+` is a deterministic numerical-validation failure. This is a
|
||||
complete algorithm contract, not a calibration placeholder.
|
||||
|
||||
The deterministic nodal frames fix the local-coordinate representation, and
|
||||
Formulation Section 5.3 supplies the virtual-work/energy congruence used by the
|
||||
coordinate-transformation check. No unselected drilling coefficient or family
|
||||
remains for Implementation Planning.
|
||||
|
||||
#### 2.2 No drilling outputs — resolved and consistent
|
||||
|
||||
Formulation Sections 7.2, 12.3, 12.5, 14, and 17.4 keep drilling out of physical
|
||||
strain, resultant, stress, and reported physical shell energy. The internal identity
|
||||
`E_drill = 0.5 gamma^T K_drill_local gamma` is permissible verification algebra; it
|
||||
does not create an external result quantity. Requirements 035/036/046 and I/O
|
||||
Sections 6.1/6.4/6.5 consistently require no drilling coefficient, stiffness, ratio,
|
||||
or energy dataset. There is no output-contract defect.
|
||||
|
||||
#### 2.3 Exact B33 U/UR tolerance — resolved
|
||||
|
||||
For each case and component `c`, using only finite Abaqus rows,
|
||||
|
||||
```text
|
||||
reference_scale_c = max(abs(reference_value_i))
|
||||
tolerance_c = 1e-9 + 1e-6 * reference_scale_c
|
||||
```
|
||||
|
||||
The `1e-9` floor is in the model's user-consistent length unit for `U1/U2/U3` and is
|
||||
dimensionless for `UR1/UR2/UR3`. No row is zero-clamped and no row-specific relative
|
||||
denominator replaces the component scale. `U1/U2/U3` exceedance is blocking at the
|
||||
later Reference Verification gate; `UR1/UR2/UR3` uses the same formula but is
|
||||
warning-only. The formula is exact and needs no MITC4-specific calibration.
|
||||
|
||||
#### 2.4 Removed and administrative items — nonblocking
|
||||
|
||||
`NR-O03`, `NR-O04`, drilling sweeps, drilling-energy criteria, and expanded flat,
|
||||
thin/thick, distorted, warped, curved-shell, or mesh-convergence portfolios are not
|
||||
part of the approved implementation-planning gate. They may remain future research
|
||||
or release evidence but shall not be reintroduced as missing numerical evidence.
|
||||
|
||||
Canonical reference naming, a bundle README, `metadata.json`, provenance, an Abaqus
|
||||
version, duplicated units/coordinates/model/step/frame descriptions, or a schema
|
||||
version are administrative information and cannot block this formulation verdict.
|
||||
The absence of optional `metadata.json` is therefore not a defect. If such a file is
|
||||
added later, it remains read-only context and cannot override the approved exact
|
||||
paths, row mapping, or tolerance.
|
||||
|
||||
## Numerical Risk Assessment
|
||||
|
||||
| risk | current assessment | required in-scope control |
|
||||
| risk label | assessment | required in-scope control |
|
||||
| --- | --- | --- |
|
||||
| Transverse-shear locking | controlled for the original MITC4 scope, not claimed eliminated for every mesh | Use the exact edge-midpoint covariant shear projection of Sections 10.2-10.4 and pass transverse-shear patch/reference checks. |
|
||||
| Curved/distorted-mesh membrane locking | known limitation of the original MITC4 family | Preserve the documented limitation. An expanded convergence portfolio is nonblocking and does not authorize MITC4+. |
|
||||
| Volumetric locking | not applicable to the approved plane-stress shell contract | Do not reinterpret `C5` as a full 3D nearly incompressible material law. |
|
||||
| Hourglass modes | no reduced-integration/hourglass path is approved | Both source `S4` and `S4R` use the same full `2x2x2` FESA integration and MITC tying path. |
|
||||
| Degenerate, inverted, or self-intersecting geometry | fail-closed contract is present | Enforce distinct connectivity, non-self-intersection, finite nonzero surface measure, finite reciprocal bases, and `J>0` at every required location. |
|
||||
| Near-singular but still positive geometry | conditioning may degrade because no calibrated quality threshold is in scope | Preserve finite checks and deterministic solver failure diagnostics; do not invent `NR-O04` thresholds. |
|
||||
| Opposed or invalid nodal directors | would corrupt frames, signs, and tying | Reject nonfinite/zero candidates, nonpositive incident-normal agreement, and nonfinite/zero averages; use duplicate source nodes for folds. |
|
||||
| Drilling singularity | four nonphysical modes would remain without regularization | Apply the exact fixed `R+` rule and verify stabilized nullity six. |
|
||||
| Drilling contamination of physics | possible if drill enters the physical operator or recovery | Keep `T_p` and `T_d` separate and verify pure drill has zero physical strain/resultant/stress and no physical energy contribution. |
|
||||
| Rigid-mode test contamination | a full spatial rotation vector can contain director-parallel rotation | Construct physical rigid rotation with `u_I=omega x X_I`, `delta d_I=omega x d_I`, and `gamma_I=0` as specified in Section 8.3. |
|
||||
| Wrong shear component/factor | would cause patch failure or incorrect shear energy | Keep the `xi-zeta`/`eta-zeta` tying pairs and engineering factor `gamma_ij=2 epsilon_ij` explicit. |
|
||||
| Recovery sign/location drift | could hide a correct stiffness behind wrong outputs | Reuse stiffness frames, tying, material, and thickness quadrature; preserve four Gauss identities and bottom/middle/top positions without averaging. |
|
||||
| Future nonlinear misuse | current Section 15 does not define a complete global nonlinear element | Keep it non-executable until a separate approved nonlinear formulation closes `Phi`, map curvature, objective drill, load work, and state. |
|
||||
| `rigid_body_modes` | Physical `K20`은 six rigid modes와 expected rank 14를 가져야 한다. 24-DOF embedding은 네 drill null coordinates를 더하고 fixed drill block 뒤 expected rank 18/nullity 6이다. | 세 translation과 세 rotation을 명시적으로 구성한다. Rotation mode는 `u_I=omega x X_I`, `theta_I=omega-(omega dot d_I)d_I`, `gamma_I=0`를 사용한다. |
|
||||
| `patch_test` | Bilinear membrane/bending field와 MITC tied shear는 required patch states를 표현할 계약을 갖는다. | `E11/E22/G12`, `K11/K22/K12`, `G13/G23`를 독립 시험하고 signs/component order/resultants/stress를 함께 확인한다. |
|
||||
| `symmetry` | `B^T C B`, `T_p^T K20 T_p`, `T_d^T(k_d I)T_d`는 exact arithmetic에서 symmetric이다. | Scaled Frobenius check `<=1e-12`; deterministic assembly가 대칭을 깨지 않는지 확인한다. |
|
||||
| `positive_definiteness` | Free element는 six-mode semidefinite이고, 충분히 구속된 nonsingular `Kff`는 positive definite가 기대된다. Geometry 또는 supports가 부적절하면 singularity가 정당하다. | Scaled spectrum/rank, non-rigid positive physical energy, constrained solve 및 singular negative cases를 분리한다. |
|
||||
| `hourglass` | `1 x 1` reduced integration을 쓰지 않으므로 Abaqus-style hourglass path는 `N/A`다. | Full `2 x 2` midsurface rank test는 유지한다. S4R source label로 reduced rule을 선택하지 않는다. |
|
||||
| `shear_locking` | Edge-midpoint MITC projection이 transverse-shear locking을 다루지만 모든 mesh/thickness에서 완전 제거를 주장할 수 없다. | Required shear/bending patch와 declared references를 통과한다. Broader thin/thick convergence는 nonblocking characterization이다. |
|
||||
| `membrane_locking` | Original MITC4는 membrane strain을 수정하지 않아 distorted curved meshes에서 알려진 locking 위험이 남는다. | Known limitation을 유지하고 MITC4+ 성능을 주장하지 않는다. Expanded curved/distorted portfolio는 optional이다. |
|
||||
| `volumetric_locking` | 승인된 homogeneous plane-stress shell에는 `N/A`다. | `C5`를 3D nearly-incompressible law로 확장하지 않는다. |
|
||||
| `distortion` | 양의 `J`를 유지하는 심한 distortion/warpage는 정확도와 rank/conditioning을 악화할 수 있다. | 모든 required location의 exact predicates와 rank/finite-result checks를 시행한다. 승인되지 않은 quality cutoff를 추가하지 않는다. |
|
||||
| `singular_jacobian` | Nonfinite/nonpositive `J`, zero surface measure, invalid reciprocal basis는 mapping을 무효화한다. | Center, stiffness, tying 및 recovery inventory 전체를 omission/clamp 없이 fail closed한다. |
|
||||
| `conditioning` | Thin shells, near-degenerate positive-J geometry 및 작은 fixed drill scale에서 `Kff` conditioning이 나빠질 수 있다. | Spectrum/condition evidence는 오직 length-scaled matrix를 사용한다. Threshold calibration은 gate가 아니지만 factorization failure는 결정적으로 진단한다. |
|
||||
| `convergence` | Current solve는 direct linear solve라 Newton convergence는 `N/A`; spatial convergence와 locking trend는 모델 의존이다. | Free residual/global equilibrium `<=1e-10`과 declared reference cases를 확인한다. Broader mesh sequences는 optional이다. |
|
||||
| `drilling_contamination` | Numerical drill이 physical strain/recovery에 들어가면 비물리 결과가 생긴다. | `T_p`/`T_d`를 분리하고 pure drill에서 physical strain/resultant/stress/energy가 zero임을 시험한다. Full residual은 의도대로 stabilized system 전체를 포함한다. |
|
||||
| `future_nonlinear_misuse` | Section 15만으로 global nonlinear element를 만들면 nonobjective drill 또는 inconsistent tangent가 된다. | Current plan에서 완전히 제외하고 별도 승인 전 실행하지 않는다. |
|
||||
|
||||
## Consistency Checks
|
||||
## 5. Consistency Checks
|
||||
|
||||
### 1. DOF order, director sign, and coordinate transforms — pass
|
||||
### 5.1 Units, dimensions, DOF order, and constrained/free system — `pass`
|
||||
|
||||
- Global order is exactly `[UX,UY,UZ,URX,URY,URZ]` per node.
|
||||
- `R_I=[a_I b_I d_I]` is right-handed and orthonormal, with
|
||||
`[alpha,beta,gamma]^T=R_I^T theta_I^g`.
|
||||
- The director variation `delta d_I=beta_I a_I-alpha_I b_I` has the correct sign for
|
||||
`theta_I x d_I`.
|
||||
- `T_p` is `20x24`; `T_d` is `4x24`. The physical operator receives only `q20`, and
|
||||
the drilling potential receives only `gamma`.
|
||||
- The transpose maps in Formulation Sections 5.3 and 7.2 preserve virtual work and
|
||||
energy in the common 24-DOF space.
|
||||
- Per-node global order is exactly `[UX,UY,UZ,URX,URY,URZ]`; element order is 24
|
||||
global coordinates and 20 physical coordinates
|
||||
`[uX,uY,uZ,alpha,beta]` per node plus four separately selected `gamma` coordinates.
|
||||
- `T_p` is `20 x 24`, `T_d` is `4 x 24`, `K20` is `20 x 20`, and both global
|
||||
stiffness contributions are `24 x 24`.
|
||||
- Translation-translation, translation-rotation, and rotation-rotation stiffness
|
||||
blocks have units `force/length`, `force`, and `force*length`; `R+` therefore
|
||||
excludes every translational diagonal.
|
||||
- The constrained/free equation is `Kff*df=Ff-Kfc*dc`. Stiffness partition and
|
||||
factorization precede load assembly, and an all-constrained valid `0 x 0 Kff` is
|
||||
not reclassified as singular.
|
||||
- `r=K*d-F` fixes the internal-minus-external sign. Constrained entries are the
|
||||
required reaction rows and free entries remain residual evidence.
|
||||
|
||||
### 2. Shape functions, geometry, and B operator — pass
|
||||
### 5.2 Local/global transforms, congruence, and energy — `pass`
|
||||
|
||||
- The bilinear shape functions satisfy partition of unity, nodal interpolation, and
|
||||
derivative-sum identities.
|
||||
- The degenerated geometry uses a dimensionless unit director and separate thickness
|
||||
factor `t*zeta/2`, avoiding thickness double-counting.
|
||||
- The direct covariant strain column is the symmetric gradient written in covariant
|
||||
bases. The two transverse covariant shear components alone are replaced by the
|
||||
canonical MITC4 edge-midpoint interpolation.
|
||||
- Reconstructing with reciprocal bases before local projection preserves the tensor
|
||||
meaning. Engineering shear factors are applied once in the local five-component
|
||||
vector.
|
||||
- The same projected `B_bar` is used in strain, residual, stiffness, and recovery;
|
||||
no direct/tied shear mismatch remains.
|
||||
- `(a_I,b_I,d_I)` and `(e1,e2,e3)` are deterministic right-handed orthonormal frames.
|
||||
The least-aligned-axis nodal rule avoids a fixed-axis parallel singularity.
|
||||
- `[alpha,beta,gamma]^T=R_I^T theta_I^g` gives
|
||||
`delta d=beta*a-alpha*b=theta x d` with the required sign.
|
||||
- `q20=T_p qg` and `gamma=T_d qg` preserve virtual work. Congruence gives
|
||||
`Kphys24=T_p^T K20 T_p` and `Kdrill24=T_d^T(k_d I4)T_d`; the corresponding local and
|
||||
global quadratic energies are identical.
|
||||
- A physical rigid rotation uses only the tangent projection of `omega`, so `gamma=0`
|
||||
and drilling does not destroy the six physical rigid modes.
|
||||
|
||||
### 3. Constitutive matrix and dimensional consistency — pass
|
||||
### 5.3 Kinematic operators and MITC tying — `pass`
|
||||
|
||||
- For finite `E>0` and `-1<nu<0.5`, the plane-stress block and
|
||||
`kappa_s G I2`, with `kappa_s=5/6`, are symmetric positive definite.
|
||||
- `B_bar^T C5 B_bar J dxi deta dzeta` has stiffness-consistent dimensions because
|
||||
the geometry Jacobian contains the through-thickness scale.
|
||||
- Membrane/shear strain is dimensionless, curvature is `1/length`, `N/Q` is
|
||||
`force/length`, `M` is `force`, stress is `force/length^2`, and physical energy is
|
||||
- Bilinear `N_I` satisfies partition, Kronecker and derivative-sum identities.
|
||||
- Membrane and bending content comes from the direct covariant small-strain operator.
|
||||
Only `epsilon_xi-zeta` and `epsilon_eta-zeta` are replaced.
|
||||
- `epsilon_xi-zeta` is tied at `(0,-1,0)` and `(0,+1,0)` and interpolated in `eta`;
|
||||
`epsilon_eta-zeta` is tied at `(-1,0,0)` and `(+1,0,0)` and interpolated in `xi`.
|
||||
Each interpolation reproduces its own edge value and is constant along the edge
|
||||
direction, matching the original MITC4 construction.
|
||||
- The assumed covariant tensor is reconstructed through reciprocal bases, projected
|
||||
into the stored local Cartesian frame, and converted once to engineering shear
|
||||
`gamma_ij=2 epsilon_ij`. The same projected `B_bar` drives strain, internal force,
|
||||
stiffness and recovery.
|
||||
|
||||
### 5.4 Constitutive and section matrices — `pass`
|
||||
|
||||
- `Cps=E/(1-nu^2)[[1,nu,0],[nu,1,0],[0,0,(1-nu)/2]]` uses engineering `G12`; its
|
||||
shear coefficient is exactly `G=E/[2(1+nu)]`.
|
||||
- `C5=diag(Cps,(5/6)G I2)` is symmetric positive definite for `E>0` and
|
||||
`-1<nu<0.5`. `sigma33=0` and absent thickness stretch remain assumptions.
|
||||
- `A=t Cps`, `B=0`, `D=t^3 Cps/12`, and `As=(5/6)Gt I2` have consistent dimensions.
|
||||
Membrane/shear strains are dimensionless, curvature is `1/length`, `N/Q` is
|
||||
`force/length`, `M` is `force`, stress is `force/length^2`, and energy is
|
||||
`force*length`.
|
||||
- The drilling reference uses rotational stiffness only, so no translation/rotation
|
||||
unit mixing occurs.
|
||||
|
||||
### 4. Integration, residual, stiffness, and modes — pass
|
||||
### 5.5 Jacobian, derivative transform, and integration — `pass`
|
||||
|
||||
- Stiffness uses deterministic two-point Gauss quadrature in each of `xi`, `eta`, and
|
||||
`zeta`, with points `+-1/sqrt(3)` and unit weights.
|
||||
- Both source types select this one rule; FESA does not emulate Abaqus S4/S4R internal
|
||||
integration or hourglass behavior.
|
||||
- `K20 = integral(B_bar^T C5 B_bar dV)` is symmetric positive semidefinite. The
|
||||
expected physical rank is 14: 20 physical coordinates minus six rigid modes.
|
||||
- `Kphys24=T_p^T K20 T_p` adds four drilling null coordinates. The fixed positive
|
||||
drilling block removes those four, leaving exactly six physical rigid modes.
|
||||
- `f_int=K_e q_g` and `r=K d-F` use a consistent linear sign. Partitioning uses
|
||||
`Kff df=Ff-Kfc dc`, including the valid `0x0 Kff` all-constrained case.
|
||||
- The three-dimensional degenerated mapping uses
|
||||
`X=sum(N X_I)+(t*zeta/2)sum(N d_I)` with a unit nodal director and separate
|
||||
thickness, preventing nodal thickness double counting.
|
||||
- `J=det[G_xi,G_eta,G_zeta]` and finite covariant/reciprocal bases are checked at all
|
||||
eight stiffness points, all four midsurface tying points, center, and every
|
||||
committed bottom/middle/top recovery evaluation. Failed points are not skipped,
|
||||
averaged, clamped or repaired.
|
||||
- Direct natural derivatives are converted covariantly and then to the local
|
||||
Cartesian tensor through contravariant bases; no flat-element derivative shortcut
|
||||
is substituted for curved/warped accepted geometry.
|
||||
- Both S4 and S4R use the common in-plane `2 x 2` points
|
||||
`+-1/sqrt(3)` with unit weights and two identical thickness points, for eight
|
||||
volume evaluations. Tied shear is evaluated at `zeta=0` and reused at both
|
||||
thickness points while the remaining mapping and direct components use the actual
|
||||
thickness point.
|
||||
|
||||
### 5. Recovery and external result meaning — pass
|
||||
### 5.6 Internal force, residual, stiffness, and future tangent — `pass`
|
||||
|
||||
- Nodal reactions are constrained entries of the assembled full residual; free
|
||||
entries remain equilibrium evidence.
|
||||
- Generalized strains are thickness moments with order
|
||||
`[E11,E22,G12,K11,K22,K12,G13,G23]`.
|
||||
- Resultants use `[N11,N22,N12,M11,M22,M12,Q13,Q23]` and the stated centered-layer
|
||||
`A/D/A_s` cross-check.
|
||||
- Bottom/middle/top `[S11,S22,S12]` are direct section-position evaluations. `S33=0`
|
||||
is documented but not emitted, and `S13/S23` point stress is outside the output
|
||||
contract.
|
||||
- Physical shell energy excludes numerical drilling stabilization, matching the I/O
|
||||
schema.
|
||||
- Current `K20=integral(B_bar^T C5 B_bar dV)` and `f_int20=K20 q20` are mutually
|
||||
consistent and symmetric positive semidefinite in exact arithmetic.
|
||||
- The complete current weak form is in `V24` and adds the numerical drilling
|
||||
gradient before subtracting the global nodal `CLOAD` vector.
|
||||
- No geometric stiffness or nonlinear state enters the current product path.
|
||||
Future Section 15 correctly separates `Kmat` and the stress-dependent `Kgeo` and,
|
||||
conditionally on a future `Phi`, includes both `A^T K20 A` and the
|
||||
residual-weighted map-Hessian term.
|
||||
|
||||
### 6. Architecture and deterministic lifecycle — pass for planning
|
||||
### 5.7 Fixed drilling contract — `pass`
|
||||
|
||||
The formulation and I/O handoff match ADR-007/008/009/016/017 and the architecture:
|
||||
stable element-local computation, deterministic COO/reduction, stiffness assembly
|
||||
and partition before load assembly, factorization before substitution, full residual
|
||||
recovery, stable row identity, and failure-atomic HDF5 commit. These are planning and
|
||||
later implementation-test obligations, not unresolved equations.
|
||||
- `R+` contains only finite strictly positive diagonals of the eight physical
|
||||
tangent-rotation coordinates. `k_ref=min(R+)`, `k_d=1e-3 k_ref`, and
|
||||
`Kd_local=k_d I4` are dimensionally consistent and deterministic; empty `R+`
|
||||
fails validation.
|
||||
- `T_d^T(k_d I4)T_d` is symmetric and positive on the four pure drilling
|
||||
coordinates. It must remove those four nonphysical null modes without changing
|
||||
the physical rank/null modes.
|
||||
- Drilling is excluded from generalized strain/resultant/stress and reported
|
||||
physical strain energy. A director-parallel applied nodal moment is rejected as
|
||||
`unsupported-drilling-load`; no numerical drill load channel exists.
|
||||
|
||||
## Verification Readiness
|
||||
### 5.8 Recovery, signs, locations, units, and external comparison — `pass`
|
||||
|
||||
### Required element and algebraic tests
|
||||
- Nodal `[U1,U2,U3,UR1,UR2,UR3]` and full-residual
|
||||
`[RF1,RF2,RF3,RM1,RM2,RM3]` are global and source-node ordered.
|
||||
- Four midsurface Gauss rows recover
|
||||
`[E11,E22,G12,K11,K22,K12,G13,G23]` and
|
||||
`[N11,N22,N12,M11,M22,M12,Q13,Q23]` in the stored local frame. The definition
|
||||
`e_m(z)=epsilon0+z*kappa` fixes curvature, moment, and bottom/top stress signs.
|
||||
- `[S11,S22,S12]` is evaluated directly at `zeta=-1,0,+1`; `S33=0` is documented but
|
||||
not emitted, and `S13/S23` point stress is not synthesized. Different natural or
|
||||
section locations are never averaged.
|
||||
- Reference comparison first rejects missing, extra, duplicate, nonfinite or
|
||||
identity-mismatched rows. For each case/component,
|
||||
`reference_scale_c=max(abs(finite Abaqus values))` and
|
||||
`tolerance_c=1e-9+1e-6*reference_scale_c`; no zero clamp or row denominator is
|
||||
introduced. U1/U2/U3 is blocking and UR1/UR2/UR3 is warning-only.
|
||||
- Source S4 and S4R select the same FESA MITC4 kernel/quadrature/recovery path while
|
||||
preserving source type. This is an input mapping, not an Abaqus formulation,
|
||||
integration, stabilization or recovery equivalence claim.
|
||||
|
||||
Implementation Planning shall trace RED/GREEN/VERIFY tests for:
|
||||
## 6. Verification Readiness
|
||||
|
||||
1. shape-function identities and deterministic right-handed nodal/integration frames;
|
||||
2. valid and invalid geometry at every center, Gauss, tying, and recovery location;
|
||||
3. `T_p`/`T_d` dimensions, virtual-work equality, and transformation-energy equality;
|
||||
4. direct versus tied shear component construction and engineering-shear factors;
|
||||
5. constitutive symmetry/positive definiteness and exact `2x2x2` quadrature;
|
||||
6. normalized symmetry at `1e-12`, rigid action at `1e-10`, physical rank 14, and
|
||||
stabilized rank 18/nullity six;
|
||||
7. exact `R+`, `k_ref`, `k_d`, and `K_drill_local` construction, including empty-`R+`
|
||||
failure and exclusion of translational diagonals;
|
||||
8. pure drilling: positive drill action, zero physical strain/resultant/stress, and
|
||||
no drilling-specific output;
|
||||
9. deterministic assembly/recovery ordering and thread-count repeatability;
|
||||
10. partition/effective-RHS/full-residual reaction behavior, including all-constrained
|
||||
`0x0 Kff` handling.
|
||||
### 6.1 Downstream unit and invariant tests
|
||||
|
||||
For a nonzero scaled stiffness, use the formulation's normalized metrics without a
|
||||
fallback denominator. Exactly zero constructed energy cases are classified by their
|
||||
separate rigid/null action tests rather than clamped to pass.
|
||||
Implementation Planning shall convert the following to `RED -> GREEN -> VERIFY`:
|
||||
|
||||
### Required patch and sign tests
|
||||
1. Shape identities; nodal/integration frame orthonormality, handedness and axis
|
||||
tie-break determinism.
|
||||
2. `T_p`/`T_d` dimensions, orthogonal channel selection, virtual-work equality and
|
||||
nonzero transformation-energy equality.
|
||||
3. Hand-calculated direct membrane/bending columns, all four covariant tying values,
|
||||
interpolation weights and engineering-shear factors.
|
||||
4. `Cps/C5/A/D/As` coefficients, symmetry, positive definiteness, dimensions and
|
||||
force/length unit-rescaling invariance.
|
||||
5. Common `2 x 2 x 2` point/weight order and an independent analytical or
|
||||
higher-order flat-element stiffness/recovery cross-check.
|
||||
6. Required-location geometry validation: valid planar/rotated/warped cases and
|
||||
duplicate, bow-tie/self-intersecting, zero-area, reversed, nonfinite,
|
||||
nonpositive-J and opposed-normal negative cases.
|
||||
7. Scaled symmetry `<=1e-12`, physical rigid action `<=1e-10`, expected physical
|
||||
rank 14, stabilized rank 18/nullity six, and positive non-rigid physical energy.
|
||||
8. Exact `R+` membership, exclusion of translations, fixed coefficient, empty-`R+`
|
||||
failure, pure drill action and zero physical recovery/energy.
|
||||
9. Stable COO/reduction, source/result/diagnostic order and thread-count
|
||||
repeatability.
|
||||
10. `Kff/Kfc` effective RHS, nonzero prescribed values, full-residual reaction,
|
||||
singular-support negative case, and valid all-constrained `0 x 0 Kff` case.
|
||||
11. Exact-zero and accepted/rejected `rho_M` moment projections, including proof
|
||||
that rejected drilling moments never reach stabilization.
|
||||
12. Mandatory HDF5 locations/components/units, physical-only energy, nonfinite
|
||||
recovery failure and atomic finalization.
|
||||
|
||||
- constant membrane strain/stress and `N` sign;
|
||||
- pure bending about both local axes, curvature/moment order, and bottom/top stress sign;
|
||||
- constant transverse shear and `Q13/Q23` order;
|
||||
- pure twist and `K12/M12` convention;
|
||||
- zero physical recovery from a pure drilling vector.
|
||||
### 6.2 Required patch and sign tests
|
||||
|
||||
### Declared reference readiness
|
||||
- independent constant `E11`, `E22`, and `G12` membrane fields with `N` and
|
||||
middle-stress signs;
|
||||
- pure `K11` and `K22` bending with `M` order and bottom/top stress reversal;
|
||||
- pure `K12` twist with `M12` sign;
|
||||
- constant `G13` and `G23` transverse shear with `Q13/Q23` order;
|
||||
- six physical rigid states and four pure drilling states;
|
||||
- source-type-only S4/S4R variants producing identical FESA numeric rows and
|
||||
different preserved source metadata.
|
||||
|
||||
The lightweight inventory identifies these read-only required pairs:
|
||||
### 6.3 Reference and physics handoff readiness
|
||||
|
||||
- `reference/shell/shell.inp` and
|
||||
`reference/shell/shell displacements.csv` for source `S4`;
|
||||
- `reference/shellR/shellR.inp` and
|
||||
`reference/shellR/shellR displacements.csv` for source `S4R`.
|
||||
The declared read-only pairs are:
|
||||
|
||||
Read-only inspection confirmed that all four declared files exist, their SHA-256
|
||||
values match the Reference Case inventory, and each required displacement CSV has
|
||||
49 data rows. This is inventory evidence only. No FESA output exists yet in this
|
||||
review, and no reference-comparison pass/fail decision was made.
|
||||
- `reference/shell/shell.inp` with
|
||||
`reference/shell/shell displacements.csv` for S4;
|
||||
- `reference/shellR/shellR.inp` with
|
||||
`reference/shellR/shellR displacements.csv` for S4R.
|
||||
|
||||
The later comparator must require exact normalized source-row/component sets,
|
||||
finite/unique values, U blocking, UR warning-only, and the approved mixed tolerance.
|
||||
The two Abaqus cases are not expected to equal one another, while identical supported
|
||||
FESA models labeled S4 or S4R must take the same internal numerical path.
|
||||
The Reference Model and I/O documents define deterministic HDF5-to-CSV identity,
|
||||
precheck and tolerance sufficiently for later comparison. This review did not assert
|
||||
that `results.h5` exists or that any row passes. Reference Verification owns numeric
|
||||
U/UR outcome; Physics Evaluation owns force/moment balance, displacement direction,
|
||||
symmetry, result signs, recovered-resultant consistency and physical plausibility.
|
||||
|
||||
### Nonblocking evidence
|
||||
### 6.4 Missing evidence classification
|
||||
|
||||
The following cannot change this formulation verdict:
|
||||
- blocking_for_current_formulation: `none`
|
||||
- required_after_implementation: invariant, patch, MSVC build/CTest, declared
|
||||
reference comparison and physics evidence above
|
||||
- nonblocking_optional: drilling coefficient sweep/energy ratio, `NR-O03`, `NR-O04`,
|
||||
canonical naming, README/metadata/provenance, expanded benchmark portfolio and
|
||||
broader mesh convergence studies
|
||||
- future_only: nonlinear directional-derivative/objectivity/Newton evidence after
|
||||
its missing formulation decisions are separately approved
|
||||
|
||||
- absent README, `metadata.json`, provenance, canonical name, schema-version record,
|
||||
or duplicated bundle descriptions;
|
||||
- no coefficient sweep, drilling-energy ratio, smooth-angle calibration, or
|
||||
distortion/warp threshold sweep;
|
||||
- no expanded flat/thin/thick/distorted/warped/curved/convergence benchmark portfolio;
|
||||
- no implementation result, build/test result, Abaqus run, or completed comparison
|
||||
at this pre-implementation gate.
|
||||
|
||||
## Required Revisions
|
||||
## 7. Required Revisions
|
||||
|
||||
### Formulation Agent
|
||||
|
||||
- None for the approved current linear-static implementation scope.
|
||||
- Keep Formulation Section 15 non-executable until a separately approved nonlinear
|
||||
feature closes its global coordinate map, consistent tangent, objective drilling,
|
||||
and load-work decisions.
|
||||
- Do not promote Section 15 to executable status until a separate formulation closes
|
||||
the nonlinear global coordinate map, objective drilling and load-work contracts.
|
||||
|
||||
### Research Agent
|
||||
|
||||
- None before current Implementation Planning.
|
||||
- Broader original-MITC4 locking and convergence studies remain optional future
|
||||
characterization and must not silently widen the implementation gate.
|
||||
|
||||
### Reference Model Agent
|
||||
|
||||
- None for this formulation verdict. Preserve the four declared artifacts read-only.
|
||||
- Optional administrative metadata, if later added by an authorized phase, does not
|
||||
replace the approved exact paths, matching, and tolerance contract.
|
||||
|
||||
## Downstream Handoff
|
||||
|
||||
### Implementation Planning Agent
|
||||
|
||||
Implementation Planning is authorized. The plan shall:
|
||||
|
||||
- cover the deterministic director/frame preprocessing, `24 -> 20 + 4` transforms,
|
||||
covariant MITC tying, full `2x2x2` integration, fixed drilling split, and recovery;
|
||||
- trace every approved must-requirement to TDD tests, including the invariant, patch,
|
||||
fixed-drilling, failure, schema, row-matching, and U/UR decision behaviors above;
|
||||
- preserve one internal `FESA-MITC4` numerical path for source S4 and S4R while keeping
|
||||
source metadata distinct;
|
||||
- keep drilling out of physical recovery and HDF5 results;
|
||||
- exclude future nonlinear execution, calibration sweeps, removed `NR-O03/NR-O04`,
|
||||
expanded portfolios, and administrative reference requirements.
|
||||
|
||||
This handoff authorizes planning only. It does not authorize Harness execution,
|
||||
production-code changes, reference-artifact mutation, or a claim of implementation
|
||||
completion.
|
||||
- Optional locking/convergence characterization must remain clearly outside the
|
||||
approved implementation gate and must not imply MITC4+ or Abaqus equivalence.
|
||||
|
||||
### I/O Definition Agent
|
||||
|
||||
The current I/O contract is numerically consistent with the formulation. Planning
|
||||
shall preserve its exact source identity, load projection, output units/locations,
|
||||
physical-energy meaning, reference row mapping, and U/UR decision rule.
|
||||
- None for the current numerical verdict. Preserve exact physical/full-residual
|
||||
distinction, source identity, locations, units and U-versus-UR decision rule.
|
||||
|
||||
### Reference Verification and Physics Evaluation Agents
|
||||
### Reference Model Agent
|
||||
|
||||
These remain downstream of implementation and build/test. Reference Verification
|
||||
will decide U/UR comparison outcomes; Physics Evaluation will independently assess
|
||||
equilibrium, signs, symmetry, and physical plausibility. Neither result is asserted
|
||||
by this review.
|
||||
- None for the current numerical verdict. Preserve the four declared files read-only
|
||||
and do not add administrative or portfolio gates.
|
||||
|
||||
## Review Evidence
|
||||
## 8. Downstream Handoff
|
||||
|
||||
This review used the repository policy/design files, the approved requirements,
|
||||
research, formulation, I/O definition and reference-case inventory listed in
|
||||
Metadata, plus read-only inspection of the four declared artifacts. Local FEM wiki
|
||||
material cross-checked MITC4 kinematics, edge-midpoint assumed shear and known locking
|
||||
risks; the approved repository documents remain the feature source of truth.
|
||||
### Implementation Planning Agent
|
||||
|
||||
Implementation Planning is authorized and shall:
|
||||
|
||||
- trace the required tests in Section 6 to the approved requirement IDs before
|
||||
production work;
|
||||
- keep `24 global -> 20 physical + 4 drilling` transforms, covariant MITC tying,
|
||||
common `2 x 2 x 2` integration, fixed drilling and physical recovery as explicit
|
||||
independent test seams;
|
||||
- preserve stiffness assembly/partition/factorization-before-load, stable reduction,
|
||||
full-residual reaction and failure-atomic HDF5 lifecycle;
|
||||
- keep future nonlinear execution, coefficient calibration, drilling output,
|
||||
`NR-O03/NR-O04`, reference-artifact mutation and Abaqus-equivalence claims outside
|
||||
the plan.
|
||||
|
||||
This handoff authorizes planning only. It does not authorize Harness execution,
|
||||
production implementation, reference artifact changes, or completion claims.
|
||||
|
||||
### Reference Verification Agent
|
||||
|
||||
- Compare authoritative FESA HDF5 rows directly with the matching declared Abaqus
|
||||
displacement CSV after exact row-set precheck.
|
||||
- Let only U1/U2/U3 affect pass/fail; report every UR1/UR2/UR3 warning without
|
||||
changing the verdict.
|
||||
|
||||
### Physics Evaluation Agent
|
||||
|
||||
- After reference verification, independently evaluate force and global moment
|
||||
balance, free residual, reaction sign, displacement direction, symmetry, positive
|
||||
physical energy and consistency of local resultants/stresses.
|
||||
|
||||
### Coordinator and Release Agents
|
||||
|
||||
- Record the Numerical Review gate as passed for planning at HEAD `a058ef7`.
|
||||
- Do not infer implementation or release completion. Build/test, reference,
|
||||
physics-sanity and release-readiness gates remain pending.
|
||||
|
||||
Reference in New Issue
Block a user