chore: remove retired workflow and historical material
This commit is contained in:
@@ -1,920 +0,0 @@
|
||||
# Nonlinear Static Newton-Raphson I/O Definition
|
||||
|
||||
## 1. Metadata
|
||||
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- source_requirement: `docs/nonlinear-static-newton-raphson/requirements.md`
|
||||
- source_requirement_sha256: `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`
|
||||
- source_research: `docs/nonlinear-static-newton-raphson/research.md`
|
||||
- source_research_sha256: `4F63D23E03D1A68E5F8563B678FDD6F761F9558165778EF0433133EFAD303570`
|
||||
- source_formulation: `docs/nonlinear-static-newton-raphson/formulation.md`
|
||||
- source_formulation_sha256: `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9`
|
||||
- source_numerical_review: `docs/nonlinear-static-newton-raphson/numerical-review.md`
|
||||
- source_numerical_review_sha256: `C00994EF4BB23A237547459E157EE5BDA96B28CAF08F712CD31A8E0ABBF62D2C`
|
||||
- source_reference_model: `docs/nonlinear-static-newton-raphson/reference-model.md`
|
||||
- source_reference_model_sha256: `B2E6845AB59A32F78261B7A47506C27F7BF4B61401B34BC5DE3DAD4F03D6ADDA`
|
||||
- decision_source: `USER-DECISION-004 option 1`
|
||||
- balance_gate_decision: user-approved factor-one global force/moment normalized gate `<=1e-8`
|
||||
- repository_policy: `AGENTS.md`, `docs/SOLVER_AGENT_DESIGN.md`, `docs/PRD.md`,
|
||||
`docs/ARCHITECTURE.md`, `docs/ADR.md`, `docs/TOLERANCE.md`
|
||||
- status: `ready-for-coordinator-review`
|
||||
- owner_agent: `io-definition-agent`
|
||||
- date: `2026-08-28`
|
||||
- authoritative_output: input sibling `<stem>_results.h5`
|
||||
- diagnostic_log: input sibling `<stem>_log.txt`
|
||||
- hdf5_schema_version: `1`
|
||||
|
||||
이 문서는 승인된 Stage 5 I/O 계약만 정의한다. Parser, writer, comparison tool의
|
||||
C++ API나 파일 소유권은 정의하지 않는다. FESA는 Abaqus와 독립적인 solver이며,
|
||||
아래 `.inp` subset과 reference CSV mapping은 Abaqus full compatibility, Abaqus
|
||||
`S4/S4R` 내부 알고리즘, 적분, stabilization, 상태 갱신 또는 output recovery
|
||||
동등성을 주장하지 않는다.
|
||||
|
||||
FEM wiki 근거는 `Abaqus Input File Syntax`,
|
||||
`Abaqus Output Database and Results Files`,
|
||||
`Abaqus General and Linear Perturbation Steps`,
|
||||
`Abaqus Initial and Boundary Conditions`,
|
||||
`Abaqus Loads and Predefined Fields`,
|
||||
`Abaqus Beam and Shell Section Definitions`를 사용했다. 이 근거는 keyword/data/comment
|
||||
line, model/history data, output request, step/load/boundary/section 용어를 정렬하기
|
||||
위한 보조 근거이며, 승인된 FESA 요구조건과 정식화가 우선한다.
|
||||
|
||||
## 2. Abaqus Input Scope
|
||||
|
||||
- input_format: Abaqus input file (`.inp`)
|
||||
- supported Abaqus documentation source/version: 프로젝트 연구 bundle 및 local FEM
|
||||
wiki에 보존된 Abaqus 2024 input syntax/output vocabulary. 저장된 nonlinear reference
|
||||
input은 Abaqus/CAE Learning Edition 2024 생성물이다.
|
||||
- supported_analysis: no-prior-history baseline에서 시작하는 정확히 하나의 source
|
||||
`*STEP, NLGEOM=YES`와 하나의 nonlinear `*STATIC` procedure.
|
||||
- internal_element_formulation: source `S4`와 `S4R` 모두 materially linear,
|
||||
geometrically nonlinear Total Lagrangian `FESA-MITC4`에 매핑한다.
|
||||
- ordinary_unit_system: 사용자가 일관되게 선택한 미지정 단위계. FESA는 단위 추론이나
|
||||
변환을 수행하지 않는다.
|
||||
- compatibility_disclaimer: 이 문서가 명시한 keyword 위치, parameter, data-line arity,
|
||||
validation rule, output mapping만 지원 범위다.
|
||||
|
||||
`supported`는 syntax가 parsing되고 feature semantic model에 매핑된다는 뜻이다.
|
||||
`unsupported`는 명확한 diagnostic으로 거부한다. `ignored-with-warning`은 syntax와
|
||||
소속 data line을 소비하고 warning을 남기지만 Domain, AnalysisModel, nonlinear
|
||||
procedure, mandatory HDF5 output 또는 reference comparison 의미를 바꾸지 않는다.
|
||||
`requires-user-decision` 항목은 없다.
|
||||
|
||||
| keyword | policy | allowed location | required parameters and data grammar | semantic mapping | unsupported behavior |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `*HEADING` | supported | optional top-level first keyword | parameter 없음; 다음 keyword 전까지 text row 0개 이상 | raw heading을 source metadata로 보존 | parameter, nested location, 두 번째 heading은 input error |
|
||||
| `*INCLUDE` | unsupported | anywhere | 허용 data/parameter grammar 없음 | file traversal 또는 include expansion 없음 | `unsupported-keyword`; 참조 파일을 열지 않음 |
|
||||
| `*PART` / `*END PART` | supported | top-level model block | `NAME=<part-name>` 필수; `*END PART` data 없음 | part-local node, element, set, shell section scope | unclosed, nested, duplicate, data-bearing close는 input error |
|
||||
| `*NODE` | supported | part scope | 각 row `node_label,x,y,z`; parameter 없음 | 양의 source node label과 finite global Cartesian coordinate | arity 오류, duplicate label, nonfinite value, dangling later reference는 input/model error |
|
||||
| `*NSET` | supported | part 또는 assembly scope | `NSET=<name>` 필수; optional `GENERATE`; assembly scope는 `INSTANCE=<name>` 필수; explicit labels 또는 `first,last,increment` | deterministic node-set membership | mixed-instance set, invalid generate row, duplicate set name, empty set, dangling member는 input error |
|
||||
| `*ELEMENT` | supported | part scope | `TYPE=S4` 또는 `TYPE=S4R`; 각 row `element_label,n1,n2,n3,n4` | four-node source shell connectivity; source type 보존; internal type `FESA-MITC4` | 다른 element type은 `unsupported-element-formulation`; repeated node, arity 오류, dangling node, mixed element model은 error |
|
||||
| `*ELSET` | supported | part 또는 assembly scope | `ELSET=<name>` 필수; optional `GENERATE`; assembly scope는 `INSTANCE=<name>` 필수; `*NSET`과 같은 row rule | deterministic element-set membership | mixed-instance set, invalid generate row, duplicate set name, empty set, dangling member는 input error |
|
||||
| `*MATERIAL` | supported | top-level model data | `NAME=<material-name>` 필수; data 없음 | 정확히 하나의 supported isotropic `*ELASTIC` 소유 | duplicate material, missing/duplicate elasticity, 다른 material behavior는 input error |
|
||||
| `*ELASTIC` | supported | current `*MATERIAL` scope | 정확히 한 row `E,nu`; parameter 없음 | homogeneous isotropic linear elasticity; `G=E/(2(1+nu))` 파생 | extra field/row, dependency/temperature data, nonfinite value, `E<=0`, `nu<=-1`, `nu>=0.5`는 error |
|
||||
| `*SHELL SECTION` | supported | part scope | `ELSET=<name>`와 `MATERIAL=<name>` 필수; 정확히 한 row `thickness[,integration_points]` | centered homogeneous single-layer shell section | composite/layer data, offset, orientation, controls, variable thickness, missing reference, conflicting assignment, nonpositive thickness는 error |
|
||||
| `*ASSEMBLY` / `*END ASSEMBLY` | supported | 정확히 하나의 top-level assembly | `NAME=<assembly-name>` 필수; `*END ASSEMBLY` data 없음 | identity-instance scope와 assembly-level set scope | nested/duplicate assembly, instance transform data, unmatched close는 input error |
|
||||
| `*INSTANCE` / `*END INSTANCE` | supported | assembly scope | `NAME=<instance-name>`, `PART=<part-name>` 필수; transform data 없음 | named identity copy; 같은 part의 multiple identity instances 허용 | duplicate/dangling instance 또는 translation/rotation data는 unsupported input |
|
||||
| `*BOUNDARY` | supported | top-level model data 또는 sole step의 `*STATIC` 뒤 | parameter 없음; 각 row `target,first_dof,last_dof[,value]`; omitted value는 exact zero | common load-factor path의 factor-one absolute global DOF target; DOF `1..6` | amplitude, local coordinate system, invalid range/arity, unresolved target, nonfinite value, conflicting expanded value는 error |
|
||||
| `*CLOAD` | supported | sole step의 `*STATIC` 뒤 | parameter 없음; 각 row `target,dof,magnitude`; DOF `1..6` | load factor로만 scale되는 fixed-global dead nodal force/moment source | amplitude/follower/local load, invalid arity/DOF, unresolved target, nonfinite magnitude, drilling-direction aggregate moment는 error |
|
||||
| `*DLOAD` | unsupported | anywhere | 허용 data/parameter grammar 없음 | distributed/body/pressure/edge/follower load object를 만들지 않음 | load-like usage는 `unsupported-distributed-load`; 그 외는 `unsupported-keyword` |
|
||||
| `*STEP` / `*END STEP` | supported for nonlinear selector | 정확히 하나의 top-level history block | optional `NAME`; `NLGEOM=YES` 필수; `*END STEP` data 없음 | canonical nonlinear step identity `Step-1` | zero/multiple/mixed/unclosed/nested step 또는 non-`YES` nonlinear selector는 nonlinear increment 전 실패 |
|
||||
| `*STATIC` | supported nonlinear procedure | sole step의 첫 procedure keyword | 정확히 한 row `initial_increment,time_period,minimum_increment,maximum_increment`; 네 값 모두 finite positive; `time_period`는 endpoint `1.0` identity | 첫 값은 fixed increment `h`; 세 번째/네 번째 값은 unused compatibility source; factors는 one 미만 ordinal multiple 뒤 exact factor one | missing/extra rows/fields, nonpositive/nonfinite field, endpoint가 `1.0`이 아니면 `invalid-nonlinear-static-data` |
|
||||
| `*OUTPUT` | ignored-with-warning | sole step의 `*STATIC` 뒤 | 정확히 `FIELD, VARIABLE=PRESELECT` 또는 `HISTORY, VARIABLE=PRESELECT`; `FIELD`/`HISTORY`는 value 없는 flag이고 둘 중 하나만 필요; `VARIABLE`은 정확히 한 번 필요; duplicate, both flags, missing `VARIABLE`, 다른 value, extra parameter는 input error | stored reference의 `*Output, field, variable=PRESELECT`와 `*Output, history, variable=PRESELECT`를 warning no-op으로 수용; FESA mandatory output을 select/suppress할 수 없음 | output request는 FESA output을 바꾸지 않음; malformed parameter set은 `invalid-keyword-parameter` |
|
||||
| `*NODE OUTPUT` | ignored-with-warning | active allowlisted `*OUTPUT` scope | parameter와 다음 keyword 전 variable data를 소비 | legacy nodal request `U`, `RF` 등을 수용 | HDF5 selection, history output, empty synthetic dataset을 만들지 않음 |
|
||||
| `*ELEMENT OUTPUT` | ignored-with-warning | active allowlisted `*OUTPUT` scope | parameter와 다음 keyword 전 variable data를 소비 | legacy element request `S` 등을 수용 | extrapolated stress, averaging, comparison projection을 만들지 않음 |
|
||||
| `*PREPRINT` | ignored-with-warning | top-level | parameter를 보존 후 무시; data 불필요 | generator control syntax 수용 | semantic object 없음 |
|
||||
| `*RESTART` | ignored-with-warning | sole step | parameter를 보존 후 무시; restart state/data 없음 | legacy restart request syntax 수용 | restart write/read/continue 없음 |
|
||||
| `*CONTACT OUTPUT` | ignored-with-warning | active allowlisted `*OUTPUT` scope | parameter와 다음 keyword 전 data를 소비 | legacy contact-output request syntax만 수용 | contact model/output 없음 |
|
||||
|
||||
`*ORIENTATION`, `*TRANSFORM`, amplitudes, follower loads, pressure, gravity, body
|
||||
force, edge load, `*DLOAD`, composite shell definitions, shell section offsets,
|
||||
material nonlinearity, density, temperature dependency, contact, MPC, penalty, multiple
|
||||
steps, restarts, submodels, transforms, nested assemblies와 위 표에 없는 모든
|
||||
model-affecting keyword는 fail-closed unsupported input이다. 저장 또는 future linear
|
||||
shell input의 `NLGEOM=NO`는 `docs/linear-static-mitc4-shell/io.md`가 계속 관할한다.
|
||||
이 feature bundle에서 해당 linear case는 `shell-s4-linear-limit` regression reference일
|
||||
뿐 nonlinear response evidence가 아니다.
|
||||
|
||||
## 3. Syntax Policy
|
||||
|
||||
- Keyword line은 optional leading whitespace 뒤 `*`로 시작한다. Comment line은 `**`로
|
||||
시작하며 semantic effect가 없다.
|
||||
- Keyword name, parameter name, supported enumerated value, named-reference lookup은
|
||||
ASCII case-insensitive다. Raw source spelling은 diagnostic/report display용으로
|
||||
보존한다.
|
||||
- Data line과 keyword parameter field는 comma-separated다. 주변 whitespace는 parsing
|
||||
전에 trim한다. 필수 field가 비어 있거나, 허용되지 않은 trailing field가 있거나,
|
||||
numeric token이 malformed이면 input error다.
|
||||
- 승인된 empty data-field 의미는 `*BOUNDARY` 네 번째 value 생략뿐이며 exact zero로
|
||||
매핑한다. `*SHELL SECTION`의 optional second field는 생략 가능하고, 존재하면 positive
|
||||
base-10 integer여야 한다.
|
||||
- Continuation line, physical-line continuation, multiline name, quoted case-sensitive
|
||||
name, parameter substitution, include file은 unsupported다. 각 logical keyword/data row는
|
||||
한 physical line에 완결되어야 한다.
|
||||
- 이 feature는 public numeric Abaqus line-length compatibility limit를 정의하지 않는다.
|
||||
승인 input은 single-line ASCII record이며, 읽을 수 없는 physical line은 implicit
|
||||
continuation 없이 parsing 실패다.
|
||||
- Keyword, parameter, set/material/part/instance name, numeric label의 input text는
|
||||
ASCII로 취급한다. HDF5 string output은 UTF-8이지만 non-ASCII source label/name은
|
||||
이 feature 계약 밖이다.
|
||||
- Node label, element label, explicit set member는 positive base-10 integer다. Source
|
||||
label은 text와 numeric identity로 보존한다. Stable internal index는 diagnostic 또는
|
||||
comparison row에서 source identity를 대체할 수 없다.
|
||||
- 모든 real-valued input은 finite `double`로 parse되어야 한다. `NaN`, `Inf`, overflow,
|
||||
nonfinite underflow, locale-dependent numeric format은 reject한다.
|
||||
- Model data와 history data는 개념적으로 분리한다. Mesh, set, material, section,
|
||||
coordinate, initial shell frame은 model data다. Step, procedure, boundary, load,
|
||||
output request는 history data다.
|
||||
- 어떤 keyword에도 속하지 않는 standalone data 또는 active keyword block 밖의 data는
|
||||
input error다. Output-request variable data는 allowlisted output keyword에 종속될 때만
|
||||
no-op으로 소비한다.
|
||||
- 모든 parsed keyword, parameter, data row, semantic entity는 normalized file path,
|
||||
1-based line, raw keyword spelling, source identity까지 추적 가능해야 한다.
|
||||
|
||||
## 4. Model Data Mapping
|
||||
|
||||
### 4.1 Stable Source Identity and Ordering
|
||||
|
||||
Identity-instance expansion 뒤 source node와 source element의 stable identity는 다음과
|
||||
같다.
|
||||
|
||||
```text
|
||||
SourceEntityId { instance_name, source_label }
|
||||
```
|
||||
|
||||
Name lookup은 case-insensitive지만 raw spelling은 보존한다. Stable internal ID는 input
|
||||
part declaration order, instance declaration order, part-local entity declaration order로
|
||||
부여한다. Hash iteration, thread scheduling, set spelling, CSV row order는 source identity,
|
||||
internal row order, diagnostic order 또는 result row order를 바꾸면 안 된다.
|
||||
|
||||
### 4.2 Nodes, Elements and Sets
|
||||
|
||||
- `*NODE`는 finite global Cartesian initial midsurface coordinate `[X,Y,Z]`로 매핑하며
|
||||
unit dimension은 `length`다.
|
||||
- `*ELEMENT, TYPE=S4/S4R`는 ordered four-node shell connectivity `[1,2,3,4]`로 매핑한다.
|
||||
Natural corner 순서는 `(-1,-1)`, `(+1,-1)`, `(+1,+1)`, `(-1,+1)`이며 connectivity를
|
||||
조용히 reverse하지 않는다.
|
||||
- Source type `S4` 또는 `S4R`는 metadata로 보존한다. 두 type 모두 같은 internal
|
||||
`FESA-MITC4` formulation, `2 x 2 x 2` integration, nonlinear state path를 선택한다.
|
||||
Source `S4R`는 reduced integration, hourglass control 또는 Abaqus `S4R` internal
|
||||
behavior를 활성화하지 않는다.
|
||||
- `*NSET`과 `*ELSET`은 explicit row order를 보존한다. `GENERATE`는 inclusive
|
||||
`first,last,increment` 순서로 expand한다. Assembly-scope set은 하나의 `INSTANCE`만
|
||||
참조할 수 있고 mixed instance는 허용하지 않는다.
|
||||
- Set membership은 Domain commit 전에 source identity로 resolve한다. 같은 scope의
|
||||
duplicate set definition, dangling member, invalid generate range는 analysis 전 실패한다.
|
||||
|
||||
### 4.3 Material, Section, Coordinates and Units
|
||||
|
||||
- `*MATERIAL`과 `*ELASTIC`은 finite `E>0`, `-1<nu<0.5`를 갖는 homogeneous isotropic
|
||||
materially linear material 하나로 매핑한다.
|
||||
- `*SHELL SECTION`은 하나의 element set을 resolved material과 positive finite
|
||||
`thickness>0`를 갖는 centered homogeneous shell layer로 매핑한다. Optional source
|
||||
integration-point 값은 syntax compatibility로만 보존하며 quadrature, recovery, output,
|
||||
reference comparison에 영향을 주지 않는다.
|
||||
- Initial nodal director와 right-handed triad는 instance expansion 뒤 승인된 linear MITC4
|
||||
deterministic incident-element rule로 파생한다. 이 값들은 model data이며 모든 increment의
|
||||
fixed initial reference를 정의한다.
|
||||
- 필수 geometry check는 finite coordinate, valid four-node topology, 모든 Gauss/tying/
|
||||
center/recovery location의 positive reference Jacobian, non-opposed incident normals,
|
||||
valid reciprocal bases, valid initial frames를 포함한다.
|
||||
- `.inp` 단위는 user-consistent unspecified다. HDF5는 `length`, `force`, `force*length`,
|
||||
`force/length`, `force/length^2`, `1` 같은 unit dimension string만 기록하고 SI를 쓰거나
|
||||
추론하지 않는다.
|
||||
|
||||
## 5. History Data Mapping
|
||||
|
||||
### 5.1 Step and Procedure
|
||||
|
||||
Nonlinear procedure는 정확히 하나의 source step이 `*STEP, NLGEOM=YES`를 포함하고 그
|
||||
안에 정확히 하나의 supported `*STATIC` data row가 있을 때만 선택한다. Semantic step
|
||||
name은 canonical `Step-1`이다. Raw source step name은 provenance로만 보존한다.
|
||||
|
||||
Nonlinear `*STATIC` data row의 의미는 다음과 같다.
|
||||
|
||||
- `initial_increment`는 fixed positive load-factor increment `h`다.
|
||||
- `time_period`는 endpoint `1.0`과 정확히 같은 identity여야 한다.
|
||||
- `minimum_increment`와 `maximum_increment`는 positive finite source value여야 하지만
|
||||
cutback, growth, retry, stopping, convergence, output cadence에는 사용하지 않는다.
|
||||
- Intended factor identity는 `1.0`보다 작은 ordinal `j*h` 값들을 만든 뒤, 마지막에 exact
|
||||
assigned factor `1.0` 하나를 붙여 만든다. Cumulative `lambda += h`, tolerance-based
|
||||
duplicate endpoint detection, growth, cutback, retry는 금지한다.
|
||||
- `reference/shellNL/shellNL.inp`의 성공 run에서 expected intended/accepted factor sequence는
|
||||
`0.1,0.2,...,1.0`이다.
|
||||
|
||||
Factor zero는 no-prior-history step-start committed baseline이다. Accepted frame은 committed
|
||||
increment와 일대일 대응해야 하므로 factor zero는 accepted HDF5 frame이 아니다. Factor zero는
|
||||
다음 metadata/model dataset으로만 projection한다.
|
||||
|
||||
- `factor_zero_is_frame=0`
|
||||
- `factor_zero_load_factor=0.0`
|
||||
- `/model/prescribed_displacement_start`와 initial state의 step-start displacement 및
|
||||
rotation-vector component
|
||||
- `/model/shell/nodal_frame`과 `/model/shell/nodal_director`의 step-start triad/director
|
||||
- zero scaled `*CLOAD` contribution과 step-start boundary value
|
||||
|
||||
### 5.2 Boundary Conditions
|
||||
|
||||
`*BOUNDARY` target resolution은 direct node label 또는 node set을 허용한다. Expanded row는
|
||||
stable source-node identity와 DOF order `1..6`를 사용한다.
|
||||
|
||||
| DOF | component | unit dimension | nonlinear path meaning |
|
||||
| ---: | --- | --- | --- |
|
||||
| 1 | `UX` / CSV `U1` | length | factor-one absolute global displacement target |
|
||||
| 2 | `UY` / CSV `U2` | length | factor-one absolute global displacement target |
|
||||
| 3 | `UZ` / CSV `U3` | length | factor-one absolute global displacement target |
|
||||
| 4 | `URX` / CSV `UR1` | dimensionless rotation | factor-one absolute fixed-initial global rotation-vector target |
|
||||
| 5 | `URY` / CSV `UR2` | dimensionless rotation | factor-one absolute fixed-initial global rotation-vector target |
|
||||
| 6 | `URZ` / CSV `UR3` | dimensionless rotation | factor-one absolute fixed-initial global rotation-vector target |
|
||||
|
||||
Step 앞 row와 sole step 내부 row는 모두 같은 semantic step의 factor-one target으로 매핑한다.
|
||||
Cross-step propagation은 없다. Load factor `lambda`에서 current constrained value는
|
||||
`q_start + lambda * (q_target - q_start)`다. Current release에는 prior history가 없으므로
|
||||
ordinary start value는 승인된 start-state dataset에 명시된 값을 제외하고 zero다.
|
||||
Constrained Newton correction component는 exact zero다.
|
||||
|
||||
### 5.3 Concentrated Loads
|
||||
|
||||
`*CLOAD` target resolution은 boundary와 같다. 같은 node/DOF로 resolve되는 여러 row는 source
|
||||
order로 factor-one global load coefficient에 누적한다. Factor `lambda`에서 magnitude는
|
||||
`lambda`만 곱한다.
|
||||
|
||||
| DOF | source component | unit dimension | nonlinear meaning |
|
||||
| ---: | --- | --- | --- |
|
||||
| 1 | `F1` | force | fixed-global dead nodal force |
|
||||
| 2 | `F2` | force | fixed-global dead nodal force |
|
||||
| 3 | `F3` | force | fixed-global dead nodal force |
|
||||
| 4 | `M1` | force*length | fixed-global source nodal moment admitted only through physical director-tangent work |
|
||||
| 5 | `M2` | force*length | fixed-global source nodal moment admitted only through physical director-tangent work |
|
||||
| 6 | `M3` | force*length | fixed-global source nodal moment admitted only through physical director-tangent work |
|
||||
|
||||
Nonzero aggregated nodal moment `M_src`마다 preprocessing과 모든 entered trial state에서
|
||||
`abs(dot(d,M_src))/norm(M_src) <= 1e-12`를 denominator clamping 없이 만족해야 한다.
|
||||
실패하면 `unsupported-drilling-load`다. Source moment vector는 fixed global coordinate에
|
||||
남으며 FESA는 rejected moment component를 회전, 축소, 변형하거나 numerical drilling channel로
|
||||
보내지 않는다.
|
||||
|
||||
### 5.4 Output Requests
|
||||
|
||||
Abaqus output request keyword는 `ignored-with-warning` compatibility syntax로만 수용한다.
|
||||
이 keyword들은 history output을 켜지 않고, frame cadence를 제어하지 않으며, mandatory FESA
|
||||
HDF5 dataset을 select, suppress, rename할 수 없다. Trial Newton state는 HDF5 field/history
|
||||
output이 아니다. Per-iteration evidence는 `<stem>_log.txt`에 diagnostic text로만 기록한다.
|
||||
|
||||
## 6. Internal Model Contract
|
||||
|
||||
이 section은 semantic field를 정의하며 C++ API를 정의하지 않는다.
|
||||
|
||||
- Node record: stable internal node ID, `SourceEntityId`, finite global coordinate,
|
||||
initial director, initial right-handed triad, source location.
|
||||
- Element record: stable internal element ID, `SourceEntityId`, preserved source type
|
||||
`S4` 또는 `S4R`, internal formulation `FESA-MITC4`, ordered four-node connectivity,
|
||||
resolved section/material identity, source location.
|
||||
- Set record: case-insensitive set name, source scope, optional source instance,
|
||||
deterministic expanded source members, stable internal member IDs.
|
||||
- Material record: case-insensitive material name, finite `E`, finite `nu`, derived `G`,
|
||||
source location, homogeneous isotropic materially linear identity.
|
||||
- Section record: source `ELSET`, resolved material, positive thickness, optional ignored
|
||||
source integration-point field, centered single-layer identity.
|
||||
- Boundary record: source target, expanded node identities, DOF range, finite factor-one
|
||||
absolute target values, step-start values, source location, conflict status.
|
||||
- Load record: source target, expanded node identities, DOF, finite factor-one source
|
||||
magnitude, deterministic aggregate value, dead fixed-global load identity.
|
||||
- Step record: raw source name, canonical `Step-1`, `NLGEOM=YES` nonlinear procedure
|
||||
identity, fixed increment `h`, endpoint `1.0`, unused third/fourth `*STATIC` values,
|
||||
intended factor sequence, output-request no-op inventory.
|
||||
- State contract: committed state와 trial state는 alias될 수 없다. 완전하게 수렴한
|
||||
candidate만 displacement, rotation vector, `Q`, director, load factor, frame identity,
|
||||
internal/external force, residual/reaction, physical recovery row를 commit한다. Failed
|
||||
trial, nonconvergence, nonfinite data, solve failure, recovery failure 또는 output failure는
|
||||
prior committed state와 prior authoritative final result를 보존한다.
|
||||
- Output request record: keyword, parameter, variable row, source location은 warning
|
||||
diagnostic용으로만 보존한다. Solver 또는 HDF5 selection effect는 없다.
|
||||
|
||||
Source identity와 internal index identity는 diagnostics, HDF5 row order, reference
|
||||
comparison 전체에서 구분해야 한다. CSV의 element-label order는 solver identity가 아니며
|
||||
`(instance, source_label)` key를 대체하지 않는다.
|
||||
|
||||
## 7. Output HDF5 Schema
|
||||
|
||||
### 7.1 Public Output Names, Log and Lifecycle
|
||||
|
||||
승인된 public CLI shape는 다음 하나뿐이다.
|
||||
|
||||
```powershell
|
||||
fesa.exe <model.inp>
|
||||
```
|
||||
|
||||
CLI는 input path 해석보다 먼저 argv token을 왼쪽에서 오른쪽으로 scan한다. 어떤 token이든
|
||||
case-sensitive exact literal substring `--output`을 포함하면, `--output`, `--output=...`,
|
||||
`--output-path`, prefix/suffix form을 모두 포함해 usage failure다. 이 failure는 input path
|
||||
resolution, parsing, Analysis construction, derived-result path ownership, HDF5 candidate,
|
||||
log creation/truncation, output finalization 전 exit code `2`로 끝난다. Stderr에는 ordered
|
||||
diagnostic 하나만 쓴다.
|
||||
|
||||
```text
|
||||
severity=error code=cli-usage argument_index=<uint64> argument=<escaped argv token> message=literal --output is not supported
|
||||
```
|
||||
|
||||
여러 token이 `--output`을 포함해도 첫 matching token만 보고 위 diagnostic 하나만 낸다.
|
||||
Literal `--output`에 대한 compatibility alias나 deprecation window는 없다. `--output`을
|
||||
포함하지 않는 다른 unknown option은 별도 `unrecognized-option` usage diagnostic을 유지할 수
|
||||
있다.
|
||||
|
||||
Input/output lexical identity는 다음 순서로 정의한다.
|
||||
|
||||
1. 단일 input path token이 relative path이면 invocation CWD를 lexical base로 붙인다.
|
||||
2. `.`와 `..` component만 lexically normalize한다. Symlink, junction, short-name,
|
||||
case-preserving target path는 resolve하지 않는다.
|
||||
3. Normalized user-addressed final filename의 마지막 extension이 case-insensitive `.inp`가
|
||||
아니면 input usage failure다.
|
||||
4. `<stem>`은 마지막 extension 하나만 제거한 basename이다. 앞선 dot과 basename case는
|
||||
보존한다. 예: `Beam.Model.INP` -> `Beam.Model_results.h5`,
|
||||
`Beam.Model_log.txt`.
|
||||
5. Derived outputs는 normalized user-addressed input path의 sibling이다.
|
||||
|
||||
- result final: `<input-directory>/<stem>_results.h5`
|
||||
- log final/live file: `<input-directory>/<stem>_log.txt`
|
||||
|
||||
File-vs-directory collision과 same-derived-pair concurrency는 output ownership 문제다.
|
||||
`<stem>_log.txt`가 directory 또는 truncate 불가능한 non-regular path이면 log create/open/
|
||||
truncate failure다. `<stem>_results.h5`가 directory이면 HDF5 output collision으로 fail-closed
|
||||
한다. 같은 derived pair를 목표로 하는 concurrent invocation은 same-directory
|
||||
implementation-private lock을 nonblocking exclusive ownership으로 먼저 획득해야 한다. Lock
|
||||
획득 실패 또는 lock path의 directory collision은 exit code `6`의 output-busy failure이며
|
||||
best-effort fatal stderr diagnostic 하나를 시도하고 log/HDF5를 변경하지 않는다. Lock holder
|
||||
하나만 log truncate, HDF5 candidate, final replace를 시도한다. Candidate filename은
|
||||
public contract가 아니지만 반드시 same-directory,
|
||||
implementation-private, exclusive-create collision-safe여야 하며 실패한 candidate는
|
||||
authoritative output이 아니다.
|
||||
|
||||
HDF5 result lifecycle과 log lifecycle은 의도적으로 비대칭이다.
|
||||
|
||||
- `<stem>_log.txt`는 CLI usage validation, lexical output derivation, single-writer lock
|
||||
획득 뒤 replace/truncate된다. Create/open/truncate failure는 Analysis 전 exit code `6`으로
|
||||
abort하며, best-effort fatal stderr diagnostic 하나를 시도한다.
|
||||
- Log write/flush failure는 즉시 abort한다. Solver는 retry, fallback, continue 또는 result
|
||||
commit을 하지 않는다. Prior authoritative HDF5는 보존하고, 이미 flush된 live-log prefix는
|
||||
rollback하지 않는다. Failed write 뒤 남은 partial trailing line은 authoritative iteration
|
||||
record가 아니며 tooling은 LF-terminated complete record만 parsing한다.
|
||||
- Log close는 successful analysis/recovery 뒤, 그리고 HDF5 candidate open/write/final replace
|
||||
전 수행한다. Close failure는 result commit을 block하고 exit code `6`으로 끝낸다.
|
||||
- `<stem>_results.h5`는 sibling candidate가 완전히 write, flush, close, reopen, schema-check된
|
||||
뒤 atomic move/replace에 성공한 경우에만 authoritative다.
|
||||
- HDF5 failure는 exit code `6`을 반환하고 가능한 경우 prior valid final을 보존하며 current-run
|
||||
log를 rollback하지 않는다. HDF5 failure는 log close 성공 뒤 발생하므로 current log는 닫힌
|
||||
current-run audit으로 남는다.
|
||||
|
||||
Newton iteration log는 UTF-8 no BOM, LF-terminated text file이다. Header, trailer, BOM, CRLF는
|
||||
없다. Entered Newton iteration마다 physical line 하나만 기록하고, 각 line은 fixed field order의
|
||||
TAB-separated `label=value` record다. Per-iteration stderr duplication은 정확히 0개다. 각
|
||||
iteration record는 다음 iteration 진입 전 또는 return 전 flush되어야 한다.
|
||||
|
||||
Non-Newton procedure 또는 Newton iteration에 진입하기 전 끝난 controlled failure는 iteration
|
||||
record를 fabricate하지 않는다. 같은 open/truncate/failure lifecycle을 적용하되 successful
|
||||
non-Newton run의 `<stem>_log.txt` content는 zero-byte empty file이다. Pre-Newton controlled
|
||||
failure도 entered iteration이 없으면 iteration record가 없는 log file만 남긴다.
|
||||
|
||||
고정 field order는 다음과 같다.
|
||||
|
||||
| order | label | value contract |
|
||||
| ---: | --- | --- |
|
||||
| 1 | `record` | literal `newton-iteration` |
|
||||
| 2 | `schema` | literal `nsnr-log-v1` |
|
||||
| 3 | `increment` | entered increment identity, `uint64` |
|
||||
| 4 | `target_factor` | finite round-trip numeric load factor |
|
||||
| 5 | `iteration` | entered Newton iteration identity `1..100` |
|
||||
| 6 | `last_completed_stage` | enum stage completed before outcome; `none` allowed |
|
||||
| 7 | `failing_stage` | `none` for completed gate records, otherwise failing stage enum |
|
||||
| 8 | `residual_force_channel` | literal `residual_force` or `not-evaluated(reason)` |
|
||||
| 9 | `residual_force_numerator_norm` | `||r_f^u||_inf` or `not-evaluated(reason)` |
|
||||
| 10 | `residual_force_denominator_scale` | matching `||f_ext,f^u||_inf`가 exact zero이면 exact `0`; nonzero이면 `max(||f_int,f^u||_inf,||f_ext,f^u||_inf)`; 또는 `not-evaluated(reason)` |
|
||||
| 11 | `residual_force_branch` | matching external scale이 nonzero이면 `relative`, exact zero이면 `zero-scale`, 또는 `not-evaluated(reason)` |
|
||||
| 12 | `residual_force_threshold` | `1e-2` for `relative`, `1e-3` for `zero-scale`, or `not-evaluated(reason)` |
|
||||
| 13 | `residual_force_threshold_unit` | `1`, `force`, or `not-evaluated(reason)` |
|
||||
| 14 | `residual_force_pass` | `0`, `1`, or `not-evaluated(reason)` |
|
||||
| 15 | `residual_moment_channel` | literal `residual_moment` or `not-evaluated(reason)` |
|
||||
| 16 | `residual_moment_numerator_norm` | `||r_f^phi||_inf` or `not-evaluated(reason)` |
|
||||
| 17 | `residual_moment_denominator_scale` | matching `||f_ext,f^phi||_inf`가 exact zero이면 exact `0`; nonzero이면 `max(||f_int,f^phi||_inf,||f_ext,f^phi||_inf)`; 또는 `not-evaluated(reason)` |
|
||||
| 18 | `residual_moment_branch` | matching external scale이 nonzero이면 `relative`, exact zero이면 `zero-scale`, 또는 `not-evaluated(reason)` |
|
||||
| 19 | `residual_moment_threshold` | `1e-2` for `relative`, `1e-3` for `zero-scale`, or `not-evaluated(reason)` |
|
||||
| 20 | `residual_moment_threshold_unit` | `1`, `force*length`, or `not-evaluated(reason)` |
|
||||
| 21 | `residual_moment_pass` | `0`, `1`, or `not-evaluated(reason)` |
|
||||
| 22 | `correction_translation_channel` | literal `correction_translation` or `not-evaluated(reason)` |
|
||||
| 23 | `correction_translation_numerator_norm` | `||Delta u_f||_inf` fresh correction or `not-evaluated(reason)` |
|
||||
| 24 | `correction_translation_denominator_scale` | `||Delta u_inc,f||_inf` from current trial relative to step start or `not-evaluated(reason)` |
|
||||
| 25 | `correction_translation_branch` | `relative`, `zero-scale`, or `not-evaluated(reason)` |
|
||||
| 26 | `correction_translation_threshold` | `1e-2` for `relative`, `1e-3` for `zero-scale`, or `not-evaluated(reason)` |
|
||||
| 27 | `correction_translation_threshold_unit` | `1`, `length`, or `not-evaluated(reason)` |
|
||||
| 28 | `correction_translation_pass` | `0`, `1`, or `not-evaluated(reason)` |
|
||||
| 29 | `correction_rotation_channel` | literal `correction_rotation` or `not-evaluated(reason)` |
|
||||
| 30 | `correction_rotation_numerator_norm` | `||Delta phi_f||_inf` fresh correction or `not-evaluated(reason)` |
|
||||
| 31 | `correction_rotation_denominator_scale` | `||Delta phi_inc,f||_inf` from current trial relative to step start or `not-evaluated(reason)` |
|
||||
| 32 | `correction_rotation_branch` | `relative`, `zero-scale`, or `not-evaluated(reason)` |
|
||||
| 33 | `correction_rotation_threshold` | `1e-2` for `relative`, `1e-3` for `zero-scale`, or `not-evaluated(reason)` |
|
||||
| 34 | `correction_rotation_threshold_unit` | `1`, `1`, or `not-evaluated(reason)` |
|
||||
| 35 | `correction_rotation_pass` | `0`, `1`, or `not-evaluated(reason)` |
|
||||
| 36 | `combined_pass` | logical AND of four pass fields, or `not-evaluated(reason)` |
|
||||
| 37 | `transition` | `accept`, `update`, `fail`, or `not-evaluated(reason)` |
|
||||
| 38 | `outcome` | `accepted`, `continue`, `nonconverged`, or `failed` |
|
||||
| 39 | `diagnostic_code` | `none` or approved diagnostic code |
|
||||
|
||||
`nsnr-log-v1`의 39개 field label, order와 TAB-separated `label=value` serialization은
|
||||
변경하지 않는다. Completed gate record는 `failing_stage=none`이고 네 channel의 identity,
|
||||
numerator/norm, denominator/scale, branch, typed threshold, pass를 모두 finite 또는 enum
|
||||
value로 노출한다.
|
||||
|
||||
Residual channel은 required residual/internal/external vector와 그 infinity norm을 모두 finite로
|
||||
확인한 뒤 matching external scale `S_ext^u=||f_ext,f^u||_inf` 또는
|
||||
`S_ext^phi=||f_ext,f^phi||_inf` 자체로 branch를 선택한다. Matching external scale이 exact
|
||||
zero이면 `residual_*_denominator_scale=0`, `residual_*_branch=zero-scale`로 직렬화하고 numerator에
|
||||
typed absolute `1e-3 force` 또는 `1e-3 force*length`를 inclusive `<=`로 직접 적용한다.
|
||||
이 exact `0`은 matching external selector를 직렬화하며 divisor 또는 internal-inclusive max가
|
||||
아니다. Selector predicate는 `S_ext==0`이고 tolerance band, zero clamp, `max(1,...)`를 쓰지 않는다.
|
||||
Internal scale 또는 residual numerator가 nonzero여도 이 branch를 `relative`로 바꾸지 않는다.
|
||||
Matching external scale이 nonzero이면 `residual_*_denominator_scale`은 retained
|
||||
`max(||f_int,f||_inf,||f_ext,f||_inf)`이고 `residual_*_branch=relative`이며, numerator/denominator
|
||||
ratio에 dimensionless `1e-2`를 inclusive `<=`로 적용한다. 이 branch에 typed absolute gate를
|
||||
OR로 추가하지 않는다.
|
||||
|
||||
Correction channel은 기존 계약 그대로 current-trial incremental-solution denominator가 exact
|
||||
zero이면 `zero-scale`과 typed `1e-3 length` 또는 `1e-3 dimensionless`를, nonzero이면
|
||||
`relative`와 dimensionless `1e-2`를 사용한다. Empty free channel은 exact-zero numerator/scale의
|
||||
typed `zero-scale` branch로 평가한다. 네 channel의 pass는 `combined_pass`에서 logical AND로만
|
||||
결합한다.
|
||||
|
||||
Early failure record는 entered iteration 하나에 대응한다. 이미 계산된 earlier fields는 실제
|
||||
finite value를 기록하고, 실패 stage 뒤의 모든 later field는 `not-evaluated(reason)`을 기록한다.
|
||||
Not-evaluated field에 zero, pass `0`, pass `1`, fabricated denominator 또는 fabricated
|
||||
threshold를 쓰면 안 된다. `last_completed_stage`와 `failing_stage`는 stage enum을 사용하며
|
||||
recommended enum은 `iteration-entered`, `trial-state`, `load-boundary`, `residual`,
|
||||
`tangent`, `factorization`, `correction`, `convergence-gates`, `update`, `recovery`,
|
||||
`commit`, `log-write`, `log-flush`, `none`이다.
|
||||
|
||||
Numeric value는 locale-independent C-locale decimal point를 사용하고 finite IEEE-754 `double`
|
||||
round-trip이 가능해야 한다. `NaN`, `Inf`, localized comma, thousands separator, raw whitespace는
|
||||
금지한다. String value는 raw TAB/LF/CR/control byte/backslash를 포함할 수 없으며 `\\`, `\t`,
|
||||
`\n`, `\r`, `\0`, `\xHH` escape를 사용한다. Record order는 increment, target factor,
|
||||
iteration 순서로 deterministic해야 한다.
|
||||
|
||||
Schema version `1`의 모든 mandatory HDF5 dataset은 contiguous, uncompressed dataset이다.
|
||||
Chunking, compression filter, extendible dataset, trial-history group은 이 release 계약에 없다.
|
||||
|
||||
### 7.2 Metadata and Common Dataset Attribute Rules
|
||||
|
||||
`results.h5` schema가 authoritative solver output이다. 실제 final filename은 Section 7.1의
|
||||
`<stem>_results.h5`다. 모든 string은 UTF-8이다. 모든 physical real dataset은 IEEE-754
|
||||
float64를 사용한다. Stable ID는 별도 명시가 없으면 unsigned 64-bit integer다.
|
||||
|
||||
`/metadata` group의 required attributes는 다음과 같다.
|
||||
|
||||
| attribute | required value or meaning |
|
||||
| --- | --- |
|
||||
| `schema_version` | `1` |
|
||||
| `feature_id` | `nonlinear-static-newton-raphson` |
|
||||
| `solver_version` | executing solver version string |
|
||||
| `source_input_identity` | lexical normalized user-addressed input path and content identity string; symlink/junction target resolution 없음 |
|
||||
| `unit_system_label` | `user-consistent-unspecified` |
|
||||
| `coordinate_convention` | `global-cartesian; shell-local=fixed-initial-reference; positive-thickness=+zeta` |
|
||||
| `analysis_procedure` | `nonlinear-static-full-newton` |
|
||||
| `internal_formulation` | `FESA-MITC4-total-lagrangian` |
|
||||
| `integration_rule` | `2x2x2-gauss; mitc4-edge-midpoint-shear` |
|
||||
| `step_name` | `Step-1` |
|
||||
| `frame_indexing` | `accepted-increment-order-zero-based` |
|
||||
| `factor_zero_is_frame` | `0` |
|
||||
| `factor_zero_load_factor` | `0.0` |
|
||||
|
||||
모든 numeric model/result dataset은 다음 required attributes를 가진다.
|
||||
|
||||
- `schema_version=1`
|
||||
- `component_names`
|
||||
- `component_unit_dimensions`
|
||||
- `coordinate_system`
|
||||
- `location`
|
||||
|
||||
Accepted-frame result dataset은 추가로 다음 attributes를 가진다.
|
||||
|
||||
- `step_name=Step-1`
|
||||
- `frame_index=<uint64>`
|
||||
- `increment_index=<uint64>`
|
||||
- `load_factor=<float64>`
|
||||
- `is_factor_one=<0|1>`
|
||||
|
||||
### 7.3 Model Datasets
|
||||
|
||||
| dataset path | shape and dtype | row identity / fields | required attributes and ordering |
|
||||
| --- | --- | --- | --- |
|
||||
| `/model/nodes` | `[node_count]` compound | `internal_node_id:uint64`, `instance_name:utf8`, `source_label:utf8`, `coordinates:float64[3]` | internal ID ascending; `coordinate_system=global-cartesian`, `component_unit_dimensions=length,length,length`, `location=nodal-reference` |
|
||||
| `/model/elements` | `[element_count]` compound | `internal_element_id:uint64`, `instance_name:utf8`, `source_label:utf8`, `source_element_type:utf8`, `internal_formulation:utf8`, `node_internal_ids:uint64[4]`, `shell_section_internal_id:uint64`, `material_internal_id:uint64` | internal element ID ascending; `formulation=FESA-MITC4-total-lagrangian` |
|
||||
| `/model/shell/materials` | `[material_count]` compound | `internal_material_id:uint64`, `name:utf8`, `E:float64`, `nu:float64` | declaration order; `component_unit_dimensions=force/length^2,1`, `location=model-material` |
|
||||
| `/model/shell/sections` | `[section_count]` compound | `internal_section_id:uint64`, `source_file:utf8`, `source_line:uint64`, `source_elset:utf8`, `material_internal_id:uint64`, `thickness:float64` | declaration order; `component_unit_dimensions=length`, `location=model-shell-section`, `layering=centered-single-layer` |
|
||||
| `/model/shell/nodal_director` | `[node_count,3]` float64 | `/model/nodes` row; `[D1,D2,D3]` | initial director; `coordinate_system=global-cartesian`, `location=nodal-initial-director`, units `1,1,1` |
|
||||
| `/model/shell/nodal_frame` | `[node_count,3,3]` float64 | `/model/nodes` row; axis row `[A,B,D]`, global component column `[X,Y,Z]` | initial right-handed triad; `coordinate_system=global-cartesian`, `location=nodal-initial-frame`, units `1,1,1` |
|
||||
| `/model/nodal_constraint_mask` | `[node_count,6]` uint8 | `/model/nodes` row; DOF `[UX,UY,UZ,URX,URY,URZ]` | `0=free`, `1=constrained`; constrained reaction comparison identity의 authority |
|
||||
| `/model/prescribed_displacement_start` | `[node_count,6]` float64 | same row/DOF order | factor-zero start values; units `[length x3,1 x3]`, `load_factor=0.0` |
|
||||
| `/model/prescribed_displacement_target` | `[node_count,6]` float64 | same row/DOF order | factor-one absolute target values; units `[length x3,1 x3]`, `load_factor=1.0` |
|
||||
| `/model/shell/midsurface_locations` | `[4,2]` float64 | location rows `GP1..GP4`; columns `[XI,ETA]` | `coordinate_system=shell-natural`; `(-g,-g),(+g,-g),(+g,+g),(-g,+g)`, `g=1/sqrt(3)` |
|
||||
| `/model/shell/section_positions` | `[3]` float64 | rows `[BOTTOM,MIDDLE,TOP]`; values `[-1,0,+1]` | `coordinate_system=shell-natural`; physical `z=t*zeta/2`; Abaqus section-point identity가 아님 |
|
||||
|
||||
### 7.4 Accepted Frame Table
|
||||
|
||||
Successful nonlinear run 뒤 `/steps/Step-1/accepted_frames`는 mandatory다.
|
||||
|
||||
| path | shape and dtype | fields | required meaning |
|
||||
| --- | --- | --- | --- |
|
||||
| `/steps/Step-1/accepted_frames` | `[frame_count]` compound | `frame_index:uint64`, `increment_index:uint64`, `load_factor:float64`, `iteration_count:uint64`, `is_factor_one:uint8` | committed increment마다 한 row; `frame_index`는 `<frame>` group name과 같음; load factor는 strictly increasing; 마지막 row는 `load_factor=1.0`, `is_factor_one=1` |
|
||||
|
||||
`frame_count`는 committed increment 수이며 successful run에서는 하나 이상이다. Factor-one
|
||||
row는 정확히 하나다. Factor zero는 이 dataset에 row를 갖지 않고 `/frames/0` 특별 의미도
|
||||
갖지 않는다.
|
||||
|
||||
### 7.5 Accepted Frame Result Datasets
|
||||
|
||||
`/steps/Step-1/accepted_frames.frame_index = <frame>`마다 아래 dataset들이
|
||||
`/steps/Step-1/frames/<frame>/` 아래 mandatory다.
|
||||
|
||||
| quantity | exact dataset path | shape | row identity and component order | units / coordinates / location |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| committed displacement and rotation vector | `/steps/Step-1/frames/<frame>/nodal/displacement` | `[node_count,6]` float64 | `/model/nodes` row; `[UX,UY,UZ,URX,URY,URZ]` | `[length,length,length,1,1,1]`; global Cartesian translations and fixed-initial global rotation-vector components; nodal |
|
||||
| committed triad | `/steps/Step-1/frames/<frame>/nodal/triad` | `[node_count,3,3]` float64 | node row; axis row `[A,B,D]`, global component column `[X,Y,Z]` | dimensionless; global Cartesian; committed `Q`; director는 row `D` |
|
||||
| committed director | `/steps/Step-1/frames/<frame>/nodal/director` | `[node_count,3]` float64 | node row; `[D1,D2,D3]` | dimensionless; global Cartesian; triad axis `D`와 같아야 함 |
|
||||
| generalized internal force | `/steps/Step-1/frames/<frame>/nodal/generalized_internal_force` | `[node_count,6]` float64 | node row; `[FI1,FI2,FI3,MI_PHI1,MI_PHI2,MI_PHI3]` | `[force x3,force*length x3]`; work-conjugate to `[u,phi]`; nodal |
|
||||
| generalized external force | `/steps/Step-1/frames/<frame>/nodal/generalized_external_force` | `[node_count,6]` float64 | node row; `[FE1,FE2,FE3,ME_PHI1,ME_PHI2,ME_PHI3]` | `[force x3,force*length x3]`; work-conjugate to `[u,phi]`; approved physical moment projection 후 fixed-global dead loads; nodal |
|
||||
| generalized residual | `/steps/Step-1/frames/<frame>/nodal/generalized_residual` | `[node_count,6]` float64 | node row; `[RU1,RU2,RU3,RPHI1,RPHI2,RPHI3]` | `[force x3,force*length x3]`; nonlinear solution coordinate의 full assembled `f_int-f_ext`; nodal |
|
||||
| reaction / spatial full-residual projection | `/steps/Step-1/frames/<frame>/nodal/reaction` | `[node_count,6]` float64 | node row; `[RF1,RF2,RF3,RM1,RM2,RM3]` | `[force x3,force*length x3]`; global; translation은 full generalized residual과 같고 rotation은 `J_l(phi)^(-T)` spatial moment conversion. Constrained reaction은 mask를 generalized residual에 먼저 적용한 뒤 변환하며 accepted free residual의 authority는 이 dataset이 아니라 `nodal/generalized_residual`이다. |
|
||||
| shell local frame | `/steps/Step-1/frames/<frame>/element/shell/local_frame` | `[element_count,4,3,3]` float64 | element row, midsurface location row `GP1..GP4`, axis row `[E1,E2,E3]`, global component column `[X,Y,Z]` | dimensionless; physical recovery용 fixed-initial shell local frame; rotating Abaqus output frame이 아님 |
|
||||
| generalized strain | `/steps/Step-1/frames/<frame>/element/shell/generalized_strain` | `[element_count,4,8]` float64 | element row, `GP1..GP4`; `[E11,E22,G12,K11,K22,K12,G13,G23]` | `[1,1,1,1/length,1/length,1/length,1,1]`; fixed-reference shell local; midsurface |
|
||||
| section resultant | `/steps/Step-1/frames/<frame>/element/shell/section_resultant` | `[element_count,4,8]` float64 | element row, `GP1..GP4`; `[N11,N22,N12,M11,M22,M12,Q13,Q23]` | `[force/length x3,force x3,force/length x2]`; fixed-reference shell local; midsurface |
|
||||
| in-plane stress | `/steps/Step-1/frames/<frame>/element/shell/stress` | `[element_count,4,3,3]` float64 | element row, `GP1..GP4`, section position `[BOTTOM,MIDDLE,TOP]`, component `[S11,S22,S12]` | `force/length^2`; fixed-reference shell local; direct bottom/middle/top evaluation |
|
||||
| physical strain energy | `/steps/Step-1/frames/<frame>/global/energy` | `[1]` float64 | `[PHYSICAL_STRAIN_ENERGY]` | `force*length`; deterministic element reduction; numerical drilling stabilization 제외 |
|
||||
| global applied-plus-reaction balance error | `/steps/Step-1/frames/<frame>/global/equilibrium` | `[6]` float64 | `[FORCE_1,FORCE_2,FORCE_3,MOMENT_1,MOMENT_2,MOMENT_3]` | `[force x3,force*length x3]`; global Cartesian; formulation §13.4의 applied-plus-constrained-reaction balance error; moment about global origin `[0,0,0]`, current force arms와 spatial physical nodal moments 사용; `location=global-balance-error` |
|
||||
|
||||
Trial Newton state, iteration history, line search, cutback attempt, damping, automatic
|
||||
stabilization, numerical drilling stress, drilling energy ratio, `S33`, `S13`, `S23`,
|
||||
nodal stress extrapolation, element-corner stress, averaged stress, Abaqus integration-point
|
||||
number에 대한 HDF5 dataset은 만들지 않는다.
|
||||
|
||||
#### 7.5.1 Equilibrium Projection and Schema Compatibility
|
||||
|
||||
Schema version `1`과 기존 `/global/equilibrium` path/shape는 유지한다. 기존 계약이 이미
|
||||
global origin `[0,0,0]`, current force arm과 spatial physical nodal moment를 지정했으므로 이
|
||||
dataset의 authoritative meaning은 처음부터 formulation §13.4의 **global
|
||||
applied-plus-reaction balance error**다. Raw full-residual sum, initial-coordinate arm 또는 raw
|
||||
rotation-coordinate covector를 이 path에 쓰는 것은 schema-compatible implementation이 아니다.
|
||||
이 의미 명확화는 path, shape 또는 component를 바꾸지 않으므로 schema version을 올리지 않는다.
|
||||
|
||||
같은 accepted frame의 세 equilibrium quantity는 다음처럼 서로 다른 HDF5 projection으로
|
||||
재구성된다. 별도 중복 summary dataset은 만들지 않는다.
|
||||
|
||||
| logical quantity | authoritative HDF5 projection | coordinates / units | disposition |
|
||||
| --- | --- | --- | --- |
|
||||
| accepted free residual | `/model/nodal_constraint_mask==0`인 component를 `/nodal/generalized_residual`에서 선택한다. NSNR-069 scale은 같은 free component의 `/nodal/generalized_internal_force`와 `/nodal/generalized_external_force`에서 계산한다. | translation channel은 global force, rotation-coordinate channel은 generalized force-length | `blocking-internal` |
|
||||
| constrained reaction resultant | `/model/nodal_constraint_mask`를 `/nodal/generalized_residual`에 먼저 적용해 constrained generalized reaction을 만들고, rotation block만 accepted `phi`의 `J_l(phi)^(-T)`로 spatial moment로 변환한다. Current position은 `/model/nodes.coordinates + /nodal/displacement[UX,UY,UZ]`다. Stable node order로 `sum(F_react)`와 `sum(x cross F_react + M_react)`를 계산한다. | global force `[3]`, global spatial force-length moment `[3]` about `[0,0,0]` | `review-only-summary` |
|
||||
| applied-plus-reaction balance error | required dataset `/global/equilibrium`; applied contribution은 accepted `/nodal/generalized_external_force`의 translation block과 `J_l(phi)^(-T)`로 변환한 rotational block, reaction contribution은 바로 위 constrained projection을 사용한다. Stable node order로 formulation §13.4의 합을 계산한다. | global force `[3]`, global spatial force-length moment `[3]` about `[0,0,0]` | `blocking-internal` |
|
||||
|
||||
Componentwise constraint selection은 spatial moment 변환보다 먼저 수행한다. 따라서 partial
|
||||
rotational constraint나 nonzero prescribed rotation에서도 constrained reaction resultant에 free
|
||||
generalized residual이 섞이지 않는다. Local `/nodal/reaction` display나 full residual sum을 위 세
|
||||
quantity 중 다른 하나의 substitute로 사용하지 않는다. Nonzero prescribed translation에서는
|
||||
initial position이 아니라 accepted current position을 force arm으로 사용한다.
|
||||
|
||||
### 7.6 Diagnostics Dataset
|
||||
|
||||
`/diagnostics`는 mandatory이며 row가 0개일 수 있다.
|
||||
|
||||
| path | shape and dtype | fields | required meaning |
|
||||
| --- | --- | --- | --- |
|
||||
| `/diagnostics` | `[diagnostic_count]` compound | `severity:utf8`, `code:utf8`, `file:utf8`, `line:uint64`, `keyword:utf8`, `entity_identity:utf8`, `message:utf8` | CLI/input/model/solver/output deterministic diagnostics; ignored keyword warning도 success file에 보존 |
|
||||
|
||||
Diagnostic order는 source file declaration order, 1-based line, stable entity identity,
|
||||
diagnostic code, discovery order를 순서대로 사용한다. Source가 없는 CLI/solver/output
|
||||
diagnostic은 explicit empty source field를 사용한다.
|
||||
|
||||
### 7.7 Output Failure and Atomic Finalization
|
||||
|
||||
Writer는 log close 성공 뒤에만 final file과 같은 directory에 implementation-private temporary
|
||||
HDF5 candidate를 만든다. Candidate는 metadata, model datasets, accepted-frame table, 모든
|
||||
accepted-frame dataset, diagnostics를 모두 쓰고, shape, attribute, finite value, source
|
||||
identity, row order를 검증한다. Checked HDF5 close와 read-only reopen/self-check가 성공한
|
||||
뒤에만 final `<stem>_results.h5`를 replace/create한다. 실패한 candidate는 제거하거나
|
||||
non-authoritative implementation-private artifact로만 남긴다. Controlled failure는 incomplete
|
||||
final result를 노출하면 안 된다. HDF5 failure는 이미 닫힌 current-run log를 rollback하지 않는다.
|
||||
|
||||
## 8. FESA HDF5 to Reference CSV Comparison Mapping
|
||||
|
||||
Comparison tooling은 FESA `results.h5` schema와 exact read-only Abaqus CSV artifact만 읽는다.
|
||||
CSV는 FESA output이 아니다. HDF5에서 추출한 deterministic CSV view는 debugging/reporting
|
||||
보조물로만 둘 수 있다.
|
||||
|
||||
### 8.1 Declared Cases and Artifacts
|
||||
|
||||
| case id | role | exact path | comparison disposition |
|
||||
| --- | --- | --- | --- |
|
||||
| `shellnl-meshfine-s4-final` | primary nonlinear input | `reference/shellNL-meshfine/shellNL-meshfine.inp` | required source input |
|
||||
| `shellnl-meshfine-s4-final` | displacement CSV | `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | required blocking/warning comparison |
|
||||
| `shellnl-meshfine-s4-final` | reaction CSV | `reference/shellNL-meshfine/shellNL-meshfine reactions.csv` | constrained nodes/components only required review |
|
||||
| `shellnl-meshfine-s4-final` | stress CSV | `reference/shellNL-meshfine/shellNL-meshfine stresses.csv` | optional read-only inspection/order evidence only |
|
||||
| `shellnl-s4-final` | companion nonlinear input | `reference/shellNL/shellNL.inp` | required source input |
|
||||
| `shellnl-s4-final` | displacement CSV | `reference/shellNL/shellNL displacements.csv` | required blocking/warning comparison |
|
||||
| `shellnl-s4-final` | reaction CSV | `reference/shellNL/shellNL reactions.csv` | constrained nodes/components only required review |
|
||||
| `shellnl-s4-final` | stress CSV | `reference/shellNL/shellNL stresses.csv` | optional read-only inspection/order evidence only |
|
||||
| `shell-s4-linear-limit` | linear control input | `reference/shell/shell.inp` | existing linear MITC4 contract의 required regression input |
|
||||
| `shell-s4-linear-limit` | displacement CSV | `reference/shell/shell displacements.csv` | required regression comparison |
|
||||
| `shell-s4-linear-limit` | reaction CSV | `reference/shell/shell reactions.csv` | optional read-only inspection only |
|
||||
| `shell-s4-linear-limit` | stress CSV | `reference/shell/shell stresses.csv` | optional read-only inspection/order evidence only |
|
||||
|
||||
Reference artifact file은 workflow에서 rename, rewrite, normalize, zero-clamp, repair,
|
||||
regenerate하지 않는다. Fine과 coarse nonlinear case는 각각 자기 input/CSV에 독립적으로
|
||||
비교하며 cross-mesh row mapping이나 interpolation을 만들지 않는다.
|
||||
|
||||
### 8.2 Accepted-State and Frame Mapping
|
||||
|
||||
- `shellnl-meshfine-s4-final`과 `shellnl-s4-final`은 각각 accepted factor-one HDF5 frame만
|
||||
비교한다. 해당 frame은 `/steps/Step-1/accepted_frames`에서 `is_factor_one=1`이고
|
||||
`load_factor=1.0`인 unique row다. 그 `frame_index`가
|
||||
`/steps/Step-1/frames/<frame>`를 선택한다.
|
||||
- 두 nonlinear case의 required CSV row는 exact `Frame` value
|
||||
`Increment 10: Step Time = 1.000`만 가져야 하며, 이는 각 case의 accepted
|
||||
factor-one state로 논리 매핑한다. Required row에 다른 `Frame` 값이 있으면 schema mismatch다.
|
||||
- `shell-s4-linear-limit` CSV에는 `Frame` column이 없으며
|
||||
`docs/linear-static-mitc4-shell/io.md`의 existing linear MITC4 final frame
|
||||
`/steps/Step-1/frames/0`에 매핑한다.
|
||||
- Trial Newton state, iteration log line, optional stress inventory row는 reference row가 아니다.
|
||||
|
||||
### 8.3 Nodal Displacement Projection
|
||||
|
||||
Required logical key는 다음과 같다.
|
||||
|
||||
```text
|
||||
(case_id, accepted_state, canonical_instance_name, source_node_label, component)
|
||||
```
|
||||
|
||||
Instance `PART-1-1`에서 linear/coarse case는 node label `1..49`, fine case는 `1..729`를
|
||||
각각 정확히 한 번 요구한다. Instance matching은 case-insensitive로 수행하되 report에는 raw
|
||||
spelling을 보존한다. Row order는 identity가 아니다.
|
||||
|
||||
| CSV column | comparison component | nonlinear HDF5 source | linear regression HDF5 source |
|
||||
| --- | --- | --- | --- |
|
||||
| `U-U1` | `U1` | factor-one `nodal/displacement` column `UX` | final `nodal/displacement` column `UX` |
|
||||
| `U-U2` | `U2` | factor-one `nodal/displacement` column `UY` | final `nodal/displacement` column `UY` |
|
||||
| `U-U3` | `U3` | factor-one `nodal/displacement` column `UZ` | final `nodal/displacement` column `UZ` |
|
||||
| `UR-UR1` | `UR1` | factor-one `nodal/displacement` column `URX` | final `nodal/displacement` column `URX` |
|
||||
| `UR-UR2` | `UR2` | factor-one `nodal/displacement` column `URY` | final `nodal/displacement` column `URY` |
|
||||
| `UR-UR3` | `UR3` | factor-one `nodal/displacement` column `URZ` | final `nodal/displacement` column `URZ` |
|
||||
|
||||
`U1/U2/U3`는 blocking이다. `UR1/UR2/UR3`는 모든 case에서 warning-only다. UR warning
|
||||
exceedance는 blocking verdict를 바꾸지 않는다.
|
||||
|
||||
### 8.4 Nonlinear Local Reaction Review Projection
|
||||
|
||||
Reaction review row는 input boundary mask로 선택한다.
|
||||
|
||||
- coarse `shellnl-s4-final`: `1,3..9,14..17,22..33` — 24 nodes;
|
||||
- fine `shellnl-meshfine-s4-final`: `1,3..9,34..57,82..153` — 104 nodes.
|
||||
|
||||
승인 input에서 위 node들은 여섯 global DOF가 모두 constrained다. Comparator는 row
|
||||
eligibility를 CSV zero value나 row position이 아니라 `/model/nodal_constraint_mask`와 source
|
||||
node identity에서 도출한다. Translation reaction은 factor-one
|
||||
`nodal/generalized_residual`의 constrained `RU1..RU3`이고, rotational reaction은 constrained
|
||||
`RPHI1..RPHI3`를 먼저 선택한 뒤 accepted `phi`의 `J_l(phi)^(-T)`로 변환한 spatial physical
|
||||
moment다. Stored all-six-constrained rows에서는 factor-one `/nodal/reaction`의 대응 column과
|
||||
동일해야 한다.
|
||||
|
||||
| CSV columns | coarse family | fine family | disposition |
|
||||
| --- | --- | --- | --- |
|
||||
| `RF-RF1`, `RF-RF2` | `coarse.local_reaction_inplane_force` | `fine.local_reaction_inplane_force` | `review-only` |
|
||||
| `RF-RF3` | `coarse.local_reaction_transverse_force` | `fine.local_reaction_transverse_force` | `review-only` |
|
||||
| `RM-RM1`, `RM-RM2` | `coarse.local_reaction_physical_moment` | `fine.local_reaction_physical_moment` | `review-only` |
|
||||
| `RM-RM3` | comparison projection 없음 | comparison projection 없음 | `excluded` |
|
||||
|
||||
Raw generalized rotation-coordinate residual은 Abaqus `RM` CSV column과 직접 비교하지 않는다.
|
||||
Review-only family도 source key, schema, inventory, finite value와 모든 row/common-policy error를
|
||||
보고한다. 그 precheck 또는 numerical finding은 blocking verdict를 바꾸지 않는다.
|
||||
|
||||
### 8.5 Internal Factor-One Equilibrium Projection
|
||||
|
||||
Internal equilibrium은 Abaqus CSV comparison이 아니다. Fine primary와 coarse companion의
|
||||
각 accepted factor-one HDF5 frame에서 Section 7.5.1의 projection을 사용한다.
|
||||
|
||||
| family id | exact HDF5 rows/components | gate |
|
||||
| --- | --- | --- |
|
||||
| `coarse.accepted_free_force_residual` | 75 free `RU1/RU2/RU3` rows와 같은 rows의 internal/external force | NSNR-069 force channel |
|
||||
| `coarse.accepted_free_moment_residual` | 75 free `RPHI1/RPHI2/RPHI3` rows와 같은 rows의 internal/external generalized moment | NSNR-069 moment channel |
|
||||
| `coarse.global_force_balance` | factor-one `/global/equilibrium` `FORCE_1..3` | normalized `<=1e-8` |
|
||||
| `coarse.global_moment_balance` | factor-one `/global/equilibrium` `MOMENT_1..3` | normalized `<=1e-8` |
|
||||
| `fine.accepted_free_force_residual` | 1,875 free `RU1/RU2/RU3` rows와 같은 rows의 internal/external force | NSNR-069 force channel |
|
||||
| `fine.accepted_free_moment_residual` | 1,875 free `RPHI1/RPHI2/RPHI3` rows와 같은 rows의 internal/external generalized moment | NSNR-069 moment channel |
|
||||
| `fine.global_force_balance` | factor-one `/global/equilibrium` `FORCE_1..3` | normalized `<=1e-8` |
|
||||
| `fine.global_moment_balance` | factor-one `/global/equilibrium` `MOMENT_1..3` | normalized `<=1e-8` |
|
||||
|
||||
Global balance의 force scale은 applied/reaction nodal force contribution의 2-norm 합 중 큰
|
||||
값, moment scale은 current-arm force moment와 spatial physical nodal moment contribution의
|
||||
2-norm 합 중 큰 값이다. Force와 moment를 분리해 `norm(balance_error)/scale<=1e-8`을
|
||||
적용한다. Scale이 exact zero이면 balance error도 exact zero일 때만 pass한다. Absolute floor,
|
||||
`max(1,S)` 또는 zero clamp는 없다. Accepted free residual은 NSNR-069의 external-channel exact-zero/
|
||||
nonzero branch를 그대로 재현한다. 이 internal gate에는 `docs/TOLERANCE.md`, Abaqus value 또는
|
||||
local reaction error를 적용하지 않는다.
|
||||
|
||||
Constrained reaction resultant force `[3]`와 moment `[3]`는 Section 7.5.1의 distinct
|
||||
`review-only-summary`로 함께 계산·보고한다. `/global/equilibrium`, constrained reaction
|
||||
resultant와 accepted free residual 중 어느 하나를 다른 quantity의 대체 dataset으로 쓰지 않는다.
|
||||
|
||||
### 8.6 External Comparison Families
|
||||
|
||||
External tolerance source는 정확히 `docs/TOLERANCE.md`다. 별도 absolute floor, `max(1,S)`
|
||||
clamp, row averaging, source-order matching, component calibration 또는 zero clamp는 허용하지
|
||||
않는다.
|
||||
|
||||
| family id | case | components | required row count | units / coordinates | disposition |
|
||||
| --- | --- | --- | ---: | --- | --- |
|
||||
| `linear.translation` | `shell-s4-linear-limit` | `U1,U2,U3` on nodes `1..49` | 147 | length / global | blocking regression |
|
||||
| `linear.rotation` | `shell-s4-linear-limit` | `UR1,UR2,UR3` on nodes `1..49` | 147 | dimensionless / fixed-initial global | warning-only |
|
||||
| `coarse.translation` | `shellnl-s4-final` | `U1,U2,U3` on nodes `1..49` | 147 | length / global | blocking |
|
||||
| `coarse.rotation` | `shellnl-s4-final` | `UR1,UR2,UR3` on nodes `1..49` | 147 | dimensionless / fixed-initial global | warning-only |
|
||||
| `coarse.local_reaction_inplane_force` | `shellnl-s4-final` | `RF1,RF2` on constrained nodes | 48 | force / global shell plane | review-only |
|
||||
| `coarse.local_reaction_transverse_force` | `shellnl-s4-final` | `RF3` on constrained nodes | 24 | force / global transverse | review-only |
|
||||
| `coarse.local_reaction_physical_moment` | `shellnl-s4-final` | `RM1,RM2` on constrained nodes | 48 | force*length / global spatial | review-only |
|
||||
| `fine.translation` | `shellnl-meshfine-s4-final` | `U1,U2,U3` on nodes `1..729` | 2,187 | length / global | blocking |
|
||||
| `fine.rotation` | `shellnl-meshfine-s4-final` | `UR1,UR2,UR3` on nodes `1..729` | 2,187 | dimensionless / fixed-initial global | warning-only |
|
||||
| `fine.local_reaction_inplane_force` | `shellnl-meshfine-s4-final` | `RF1,RF2` on constrained nodes | 208 | force / global shell plane | review-only |
|
||||
| `fine.local_reaction_transverse_force` | `shellnl-meshfine-s4-final` | `RF3` on constrained nodes | 104 | force / global transverse | review-only |
|
||||
| `fine.local_reaction_physical_moment` | `shellnl-meshfine-s4-final` | `RM1,RM2` on constrained nodes | 208 | force*length / global spatial | review-only |
|
||||
|
||||
Reference-model read-only scale audit value는 다음과 같다. 이 값은 calibration 상수가 아니다.
|
||||
|
||||
| family id | `S=max(abs(reference))` | `0.01*S` |
|
||||
| --- | ---: | ---: |
|
||||
| `linear.translation` | `2.37408203e-5` | `2.37408203e-7` |
|
||||
| `linear.rotation` | `7.60725743e-6` | `7.60725743e-8` |
|
||||
| `coarse.translation` | `2.37408203e-5` | `2.37408203e-7` |
|
||||
| `coarse.rotation` | `7.60725743e-6` | `7.60725743e-8` |
|
||||
| `coarse.local_reaction_inplane_force` | `1.91663182` | `1.91663182e-2` |
|
||||
| `coarse.local_reaction_transverse_force` | `1.17769805e4` | `1.17769805e2` |
|
||||
| `coarse.local_reaction_physical_moment` | `1.95418418e4` | `1.95418418e2` |
|
||||
| `fine.translation` | `2.57957054e-5` | `2.57957054e-7` |
|
||||
| `fine.rotation` | `6.58704994e-6` | `6.58704994e-8` |
|
||||
| `fine.local_reaction_inplane_force` | `5.38827419e-1` | `5.38827419e-3` |
|
||||
| `fine.local_reaction_transverse_force` | `2.78506128e3` | `2.78506128e1` |
|
||||
| `fine.local_reaction_physical_moment` | `4.71557520e3` | `4.71557520e1` |
|
||||
|
||||
### 8.7 Row Prechecks
|
||||
|
||||
Tolerance 또는 internal metric 전에 다음을 검사한다.
|
||||
|
||||
1. 각 case의 exact declared input과 해당 disposition에 필요한 CSV가 존재하고 readable이다.
|
||||
2. Reference CSV header는 surrounding whitespace trim 뒤 필요한 column을 가진다.
|
||||
3. 두 nonlinear case required row는 exact approved `Frame` value만 포함한다.
|
||||
4. HDF5 metadata, model rows, accepted-frame table, factor-one frame, required result dataset이
|
||||
문서화된 shape, component name, attributes와 finite value를 가진다.
|
||||
5. Wide CSV row는 이 문서의 component mapping으로 component row로 deterministically expand한다.
|
||||
6. Source wide key와 expanded component key는 unique하다. Duplicate reference 또는 HDF5 key는
|
||||
affected family를 tolerance 전에 fail한다.
|
||||
7. Input node inventory와 source constraint mask로 expected key set을 만든다. CSV zero value나 row
|
||||
position으로 reaction identity를 추론하지 않는다.
|
||||
8. 각 declared external family에서 FESA와 reference projected key set은 exact equal해야 한다.
|
||||
Missing row와 extra row를 모두 fail한다.
|
||||
9. Required HDF5/CSV value, derived scale, norm과 metric은 모두 finite여야 한다.
|
||||
10. Internal free residual은 exact free mask와 force/moment channel을 보존한다. Global balance는 모든
|
||||
applied source와 constrained reaction을 stable source order로 정확히 한 번 사용한다.
|
||||
11. Local review row를 global resultant로 collapse하거나 대체하지 않는다. Review-only precheck/error는
|
||||
deterministic review failure로 기록하지만 blocking verdict를 변경하지 않는다.
|
||||
12. Warning-only precheck/tolerance failure는 deterministic warning을 만들고 blocking verdict를
|
||||
변경하지 않는다. Blocking precheck failure만 전체 external comparison을 fail한다.
|
||||
13. Row omission/synthesis, averaging, source-order matching, clamp, normalization 또는 artifact repair를
|
||||
허용하지 않는다.
|
||||
|
||||
### 8.8 Stress CSV Disposition
|
||||
|
||||
Optional stress CSV identity는 다음과 같다.
|
||||
|
||||
```text
|
||||
(case_id, accepted_state, instance, element_label,
|
||||
element_corner_node_label, section_surface, component)
|
||||
```
|
||||
|
||||
Stored stress CSV는 element-corner node row와 `SPOS/SNEG` section surface에서 `S-S11`,
|
||||
`S-S22`, `S-S33`, `S-S12`를 포함한다. `reference/shell/shell stresses.csv`는 사용자가
|
||||
변경한 ascending element-label block `1..36` 순서를 갖지만 row order는 identity가 아니다.
|
||||
Fine stress CSV의 element `1`, `SNEG`, `Node Label=ss` 한 행은 optional excluded artifact
|
||||
finding으로만 기록한다. Artifact를 수정하지 않는다.
|
||||
|
||||
FESA HDF5는 `GP1..GP4`와 `BOTTOM/MIDDLE/TOP`에서 direct `[S11,S22,S12]`만 emit한다.
|
||||
따라서 모든 stored stress CSV는 optional read-only inspection/order evidence only다. HDF5
|
||||
numerical-comparison projection, `S33` synthesis, nodal extrapolation, corner averaging,
|
||||
Gauss-to-corner matching 또는 element-label-order matching은 없다.
|
||||
|
||||
## 9. Validation Rules
|
||||
|
||||
| validation area | required pass condition | failure class |
|
||||
| --- | --- | --- |
|
||||
| CLI usage | input path 정확히 하나; 어떤 argv token에도 exact literal substring `--output` 없음; matching 시 path resolution/parsing/Analysis/log/HDF5 전 `cli-usage` stderr diagnostic 정확히 1개 | usage, exit `2` |
|
||||
| keyword inventory | keyword가 supported, explicit diagnostic의 unsupported, 또는 exact ignored-with-warning allowlist 중 하나 | input, exit `3` |
|
||||
| syntax | ASCII keyword/data grammar, comma fields, finite numeric tokens, continuation/include 없음 | input, exit `3` |
|
||||
| nesting/cardinality | part/assembly/instance/step이 닫힘; nonlinear procedure는 정확히 하나의 `NLGEOM=YES` step | input, exit `3` |
|
||||
| source identity | scope 내 duplicate name/label 없음; 모든 reference resolved; instance identity unique | input, exit `3` |
|
||||
| set expansion | explicit/generated set이 deterministic expand되고 하나의 supported scope/instance에 머묾 | input, exit `3` |
|
||||
| shell element | only `S4/S4R`; 네 개의 distinct resolved nodes; mixed element model 없음; source type metadata 보존 | input/model, exit `3` 또는 `4` |
|
||||
| material and section | single isotropic elastic material, centered homogeneous positive-thickness shell section, element마다 정확히 하나의 assignment | input/model, exit `3` 또는 `4` |
|
||||
| geometry and coordinates | finite global coordinates, positive reference/current validity checks, required location마다 valid directors/triads/branches | model 또는 solver trial failure, exit `4` 또는 `5` |
|
||||
| boundary | DOF `1..6`, resolved finite targets, factor-one absolute meaning, conflicting expanded value 없음 | input, exit `3` |
|
||||
| load | resolved finite `CLOAD`, stable aggregation, fixed-global dead path, unsupported `DLOAD`/follower/distributed load 없음 | input/model, exit `3` 또는 `4` |
|
||||
| aggregate moment | exact-zero case 또는 preprocessing 및 모든 entered trial에서 `rho_M<=1e-12` | model/solver, exit `4` 또는 `5` |
|
||||
| nonlinear static data | 네 positive finite values, endpoint `1.0`, fixed increment sequence with final exact factor one | input, exit `3` |
|
||||
| Newton iteration | iteration identity `1..100`; iteration `100` acceptance 가능; iteration `101` 없음; line search/cutback/retry/fallback 없음 | solver, exit `5` |
|
||||
| convergence channels | finite-first 평가 뒤 residual force/moment는 matching external scale exact-zero이면 typed absolute `1e-3`, nonzero이면 retained `max(internal,external)` relative `1e-2`; correction translation/rotation은 기존 denominator branch; 네 channel 모두 inclusive `<=`이고 logical AND | solver, exit `5` |
|
||||
| nonfinite data | required residual, tangent, correction, state, load, recovery, output value가 acceptance 전 finite | solver/output, exit `5` 또는 `6` |
|
||||
| commit/rollback | complete converged candidate만 commit; failure는 prior committed state와 prior authoritative final HDF5 보존 | solver/output, exit `5` 또는 `6` |
|
||||
| HDF5 schema | exact paths, shapes, attributes, schema version, row identities, finite values, accepted-frame table, diagnostics; `/global/equilibrium`은 applied-plus-reaction balance error이고 accepted free residual/constrained reaction resultant와 분리됨; final replace는 log close success 뒤에만 허용 | output, exit `6` |
|
||||
| equilibrium projection | accepted free rows는 generalized residual과 exact free mask, constrained reaction은 mask-before-spatial-conversion, global balance는 applied plus constrained reaction/current arm/origin `[0,0,0]`; factor-one global force와 moment는 각각 dimension-separated normalized `<=1e-8`; 세 quantity가 같은 accepted state를 공유하되 서로 대체되지 않음 | solver/output/reference internal gate |
|
||||
| log | UTF-8 no BOM, LF, TAB-separated fixed `label=value` schema; entered Newton iteration마다 record 하나; no per-iteration stderr duplication; no-Newton procedure는 zero-byte empty log; open/write/flush/close fail-closed | output, exit `6` |
|
||||
| reference rows | fine primary/coarse companion/linear-control exact artifacts, headers, row keys, component keys, finite values, factor-one frame mapping과 disposition별 precheck | reference precheck |
|
||||
| tolerance | external family에만 exact `docs/TOLERANCE.md` row/RMS policy 적용; U blocking, UR warning-only, local RF/RM review-only 보존; internal global balance/free residual gate와 혼합 금지 | reference/internal verification |
|
||||
|
||||
Downstream test가 다뤄야 하는 approved diagnostic code는 다음을 포함한다.
|
||||
|
||||
| code | class | meaning |
|
||||
| --- | --- | --- |
|
||||
| `cli-usage` | usage/2 | argv token이 exact literal substring `--output`을 포함하며 pre-input/pre-log/pre-output failure 하나를 stderr에 기록 |
|
||||
| `unrecognized-option` | usage/2 | `--output` substring을 포함하지 않는 다른 unsupported option |
|
||||
| `malformed-keyword` | input/3 | keyword 또는 parameter grammar invalid |
|
||||
| `invalid-keyword-location` | input/3 | keyword가 approved scope 밖에 위치 |
|
||||
| `invalid-keyword-parameter` | input/3 | parameter missing, duplicate, empty 또는 subset 밖 |
|
||||
| `unsupported-keyword` | input/3 | `*INCLUDE` 포함 approved subset 밖 keyword |
|
||||
| `unsupported-distributed-load` | input/3 | `*DLOAD`, pressure, gravity, body, edge, follower load 요청 |
|
||||
| `duplicate-entity` | input/3 | source identity가 scope 안에서 duplicate |
|
||||
| `unresolved-reference` | input/3 | connectivity, set, instance, section, material, load, boundary target dangling |
|
||||
| `unsupported-element-formulation` | input/3 | shell feature에서 source element type이 `S4` 또는 `S4R`가 아님 |
|
||||
| `unsupported-mixed-element-model` | input/3 | shell과 non-shell product semantics 혼합 |
|
||||
| `invalid-shell-connectivity` | input/3 | shell connectivity arity, duplicate node 또는 resolved node identity invalid |
|
||||
| `unsupported-shell-section-option` | input/3 | composite/layer/offset/orientation/variable-thickness section 의미 등장 |
|
||||
| `invalid-shell-material` | model/4 | material value가 finite `E,nu` bound 위반 |
|
||||
| `invalid-shell-thickness` | model/4 | shell thickness nonfinite 또는 nonpositive |
|
||||
| `invalid-shell-geometry` | model/4 | shell geometry, reference Jacobian 또는 topology invalid |
|
||||
| `opposed-incident-normal` | model/4 | averaging 전 incident normal pair가 nonpositive |
|
||||
| `invalid-shell-director` | model/4 | nodal/interpolated director, triad 또는 branch validity 실패 |
|
||||
| `invalid-shell-jacobian` | model/4 | required Gauss/tying/center/recovery point의 basis/Jacobian invalid |
|
||||
| `unsupported-drilling-load` | model/4 또는 solver/5 | aggregate nodal moment가 current-director admissibility 위반 |
|
||||
| `invalid-nonlinear-static-data` | input/3 | `*STATIC` row arity, finite/positive check 또는 endpoint-one identity 실패 |
|
||||
| `unsupported-analysis-procedure` | input/3 | supported nonlinear static source step으로 매핑되지 않음 |
|
||||
| `nonfinite-newton-data` | solver/5 | required residual, tangent, correction 또는 trial state nonfinite |
|
||||
| `tangent-factorization-failed` | solver/5 | entered iteration의 fresh tangent factorization 실패 |
|
||||
| `correction-solve-failed` | solver/5 | fresh Newton correction solve 실패 |
|
||||
| `nonlinear-nonconvergence` | solver/5 | iteration `100` 완료 후 네 convergence channel이 모두 통과하지 않음 |
|
||||
| `invalid-accepted-state` | solver/5 | converged candidate recovery/state identity가 commit 전 실패 |
|
||||
| `log-output-failure` | output/6 | required live log create/open/truncate, write, flush 또는 close 실패 |
|
||||
| `output-busy` | output/6 | same derived pair single-writer lock을 획득하지 못했거나 lock path collision 발생 |
|
||||
| `hdf5-output-failure` | output/6 | candidate HDF5 write, schema validation 또는 atomic finalization 실패 |
|
||||
|
||||
## 10. Open Issues and Downstream Handoff
|
||||
|
||||
Open issues blocking Implementation Planning: 없음.
|
||||
|
||||
Downstream handoff to Implementation Planning Agent through Coordinator:
|
||||
|
||||
- Public CLI/output naming migration을 보존한다: `fesa.exe <model.inp>`,
|
||||
lexical sibling `<stem>_results.h5`, `<stem>_log.txt`, 그리고 exact literal substring
|
||||
`--output`을 포함하는 모든 argv token의 pre-input/pre-log/pre-output exit `2`와 정확히
|
||||
하나의 `cli-usage` stderr diagnostic.
|
||||
- Supported/unsupported/ignored keyword row와 nonlinear `*STATIC` rule을 parser
|
||||
acceptance/rejection test로 변환한다.
|
||||
- Stored reference grammar인 `*Output, field, variable=PRESELECT`와
|
||||
`*Output, history, variable=PRESELECT`를 duplicate/extra parameter 없이
|
||||
`ignored-with-warning`으로 수용하고, output request가 FESA output을 바꾸지 못함을 test한다.
|
||||
- `NLGEOM=YES`가 nonlinear procedure를 선택하고 `shell` `NLGEOM=NO` case가 기존 linear
|
||||
MITC4 contract의 regression으로 남는지 test한다.
|
||||
- HDF5 schema version `1`을 위 accepted-frame schema 그대로 구현한다. Factor-zero non-frame
|
||||
handling, unique factor-one frame selection, triad/director projection, no
|
||||
compression/chunking, no trial-state HDF5 history를 포함한다. `/global/equilibrium` path/shape는
|
||||
유지하되 authoritative meaning을 applied-plus-reaction balance error로 검증한다.
|
||||
- `AUDIT-001`을 별도 test로 닫는다. Accepted free residual은 generalized residual/internal/external
|
||||
force와 exact free mask, constrained reaction resultant는 mask-before-`J_l(phi)^(-T)`와 accepted
|
||||
current arm, global balance는 applied plus constrained reaction을 사용한다. Nonzero prescribed
|
||||
translation/rotation case에서도 initial arm, raw rotational covector 또는 raw full-residual sum을
|
||||
세 quantity의 공통 substitute로 쓰지 않는다.
|
||||
- 비대칭 lifecycle을 보존한다. Log는 usage validation, lexical path derivation, single-writer
|
||||
lock 뒤 live current-run audit이고, log create/open/truncate는 Analysis 전 abort, write/flush는
|
||||
즉시 abort, close failure는 HDF5 commit을 block한다. HDF5 final은 log close와 candidate
|
||||
self-check 성공 뒤에만 replace하며 failure는 prior valid final과 current log를 손상하지 않는다.
|
||||
- Newton log parser/schema test는 UTF-8 no BOM, LF, physical TAB-separated fixed
|
||||
`label=value` 39-field order, finite round-trip numerics, escaping, completed-gate four-channel
|
||||
metrics, residual matching-external-scale exact-zero/nonzero branch와 retained nonzero-scale
|
||||
denominator, typed thresholds, four-channel AND, early-failure `not-evaluated(reason)`, no-Newton
|
||||
zero-byte log, zero per-iteration stderr duplication, flush-before-next/return을 포함한다.
|
||||
- Fine primary, coarse companion과 linear control의 exact CSV path, trimmed header, 두 nonlinear
|
||||
case의 exact factor-one `Frame`, source node/component identity, constrained reaction mask,
|
||||
missing/extra/duplicate row와 nonfinite value를 tolerance 전에 precheck한다. Row order를 identity로
|
||||
쓰지 않는다.
|
||||
- External declared family에는 `docs/TOLERANCE.md`만 적용한다. `U1/U2/U3`는 blocking,
|
||||
`UR1/UR2/UR3`는 warning-only, local `RF1/RF2/RF3`와 spatial physical `RM1/RM2`는
|
||||
review-only다. Local `RM3`와 모든 stress CSV value는 제외한다. Review-only row의
|
||||
schema/inventory/error report를 생략하거나 blocking으로 되돌리지 않는다.
|
||||
- Fine/coarse factor-one global force/moment balance는 dimension-separated normalized `<=1e-8`,
|
||||
accepted free force/moment residual은 NSNR-069으로 blocking 검증한다. 이 internal gate에
|
||||
Abaqus CSV나 `docs/TOLERANCE.md` scale을 사용하지 않는다. Constrained reaction resultant는
|
||||
distinct review-only summary로 보고한다.
|
||||
- Optional stress CSV는 read-only inventory/order evidence only로 유지한다. Nodal stress
|
||||
extrapolation, corner averaging, `S33` synthesis, element-label-order matching을 추가하지
|
||||
않는다.
|
||||
- Final HDF5 projection, parser diagnostics, schema tests, reference comparison tests,
|
||||
log lifecycle tests는 Coordinator를 통해 전달한다. 이 문서만으로 parser, C++ API,
|
||||
reference artifact, comparison-result, physics, release 변경을 승인하지 않는다.
|
||||
@@ -1,466 +0,0 @@
|
||||
# MITC4 비선형 정적 해석 수정과 시행착오
|
||||
|
||||
아래는 당시 실패 재현·원인·수정·검증 기록이다. 임시 shell/Hook/phase 복구 명령은 현재 실행 절차가 아니다.
|
||||
|
||||
<a id="corrections"></a>
|
||||
|
||||
<a id="corrections--nonlinear-static-newton-raphson-correction-report"></a>
|
||||
## Nonlinear Static Newton-Raphson Correction Report
|
||||
|
||||
<a id="corrections--1-metadata"></a>
|
||||
### 1. Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| source failure report | `docs/nonlinear-static-newton-raphson/README.md`; `phases/nonlinear-static-newton-raphson/step0-output.json`; `phases/nonlinear-static-newton-raphson/step1-output.json` |
|
||||
| source implementation plan | `docs/nonlinear-static-newton-raphson/README.md` |
|
||||
| status | `corrected-for-implementation-rerun` |
|
||||
| owner_agent | `correction-agent` |
|
||||
| date | `2026-08-24` |
|
||||
|
||||
`implementation-report.md`, `build-test.md`, `reference-comparison.md`는 아직 생성되지 않았으므로 현재 Coordinator failure evidence와 Executor의 `step0-output.json` 및 `step1-output.json`을 source failure report로 사용했다.
|
||||
|
||||
Sections 2-6의 Codex `0.147.0` 내용은 initial correction history이고 Sections 7-9는 REWORK-004 history다. Section 10은 FileTracker diagnosis history이고 Sections 11-13은 이전 correction history다. Current correction과 status는 Section 14가 supersede한다.
|
||||
|
||||
<a id="corrections--2-failure-triage"></a>
|
||||
### 2. Failure Triage
|
||||
|
||||
- classification: `harness`
|
||||
- normalized classification: `harness-nested-codex-windows-shell-tool-execution-hang`
|
||||
- first failed command:
|
||||
|
||||
```powershell
|
||||
codex exec --json --model gpt-5.6-terra --config 'model_reasoning_effort="xhigh"' --sandbox workspace-write --dangerously-bypass-hook-trust --cd C:\git\FESADev\.worktrees\nonlinear-static-newton-raphson -
|
||||
```
|
||||
|
||||
- failed target or test: nested shell smoke `cmd.exe /d /c echo CODEX_SHELL_SMOKE_OK`
|
||||
- evidence tail: baseline diagnostic는 45초 안에 종료되지 않았다. JSONL에는 `item.started`, `type=command_execution`, `status=in_progress`가 기록됐지만 대응하는 completion event와 `CODEX_SHELL_SMOKE_OK` 출력이 없었다. 진단 root PID `11292`와 관찰된 descendant PID tree를 `taskkill /PID 11292 /T /F`로 종료한 뒤 `remainingPids=[]`를 확인했다.
|
||||
- historical evidence: `step0-output.json`도 exit code `124`, stderr `Codex timed out after 1800 seconds.`를 기록했고 `Get-Date`, `cmd.exe /d /c echo test`, `exit 0` 등의 nested command가 `status=in_progress`에 머물렀다.
|
||||
|
||||
<a id="corrections--3-root-cause-summary"></a>
|
||||
### 3. Root Cause Summary
|
||||
|
||||
실패 경계는 repaired Python Executor의 timeout/retry 처리나 FESA C++ 구현이 아니라 local `codex-cli 0.147.0`의 nested command execution runtime이다. 같은 worktree에서 direct PowerShell과 `cmd.exe`는 정상 실행되고, focused Harness Python test도 통과하며, runner-equivalent Codex baseline만 nested shell completion을 반환하지 않았다.
|
||||
|
||||
Local CLI help는 `--disable <FEATURE>`와 `--enable <FEATURE>`를 문서화하고, `codex features list`는 `code_mode_host`를 `stable true`, `shell_tool`을 `stable true`, `unified_exec`를 `stable false`, `hooks`를 `stable true`로 보고했다. 다음 좁은 가설을 한 변수씩 검사했다.
|
||||
|
||||
| variant | result | command completion evidence |
|
||||
| --- | --- | --- |
|
||||
| baseline | 45.318초 timeout 후 exact PID tree cleanup | `item.started/status=in_progress`; completion 및 echo output 없음 |
|
||||
| `--disable code_mode_host` | exit `0`, 33.322초 | shell 미실행; stderr `code-mode host is disabled`; completion event 없음 |
|
||||
| `--enable unified_exec` | 45.299초 timeout 후 exact PID tree cleanup | completion event 및 echo output 없음 |
|
||||
| `--disable code_mode_host --enable unified_exec` | exit `0`, 25.922초 | shell 미실행; 동일한 fail-closed host-disabled error |
|
||||
|
||||
따라서 `--disable code_mode_host`는 shell execution을 복구하지 않고 tool host를 fail-closed로 제거한다. `unified_exec`도 단독 또는 조합에서 실제 shell completion을 만들지 못했다. Codex 내부 결함의 더 세부 원인은 repository evidence로 확정할 수 없으며, 안전한 documented runner flag workaround는 입증되지 않았다. 이는 implementation defect, test defect 또는 CMake registration issue가 아니라 external Codex runtime blocker다.
|
||||
|
||||
<a id="corrections--5-verification-evidence"></a>
|
||||
### 5. Verification Evidence
|
||||
|
||||
| purpose | command | result |
|
||||
| --- | --- | --- |
|
||||
| installed CLI | `codex --version` | exit `0`; `codex-cli 0.147.0` |
|
||||
| documented options | `codex exec --help`; `codex features list` | exit `0`; `--enable/--disable`, `code_mode_host`, `unified_exec`, `shell_tool`, `hooks` 확인 |
|
||||
| targeted reproduction | runner-equivalent `codex exec ... --sandbox workspace-write ...` + one echo tool request | 45초 timeout; command started, completion/output 없음; exact tree cleanup 후 remaining PID 0 |
|
||||
| focused Harness Python | `uv run --with pytest python -m pytest -v -rs tests/test_execute.py` | exit `0`; 10 passed |
|
||||
| full Harness Python | `uv run --with pytest python -m pytest -v -rs` | exit `1`; 23 passed, 1 failed |
|
||||
| MSVC Debug build | `cmake --build .harness/build --config Debug` | exit `0`; solver/CLI/unit/integration/reference targets built |
|
||||
| CTest discovery | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | exit `0`; 214 tests discovered |
|
||||
| full CTest | `ctest --test-dir .harness/build -C Debug --output-on-failure` | exit `0`; 214/214 passed |
|
||||
|
||||
`.harness/config.json`은 없었다. Existing `.harness/build/CMakeCache.txt`는 `Visual Studio 18 2026`, `x64`, approved local GoogleTest/MKL/TBB/HDF5 paths를 사용하므로 Harness auto-detected build tree를 재사용했다.
|
||||
|
||||
Full Python failure는 pre-existing out-of-scope contract mismatch다: `test_agent_toml_and_limited_skill_yaml_schemas_are_parseable`가 actual `xhigh`와 expected `extra high`를 비교한다. Dispatch 지시에 따라 이 test, `AGENTS.md`, agent profile을 변경하지 않았다.
|
||||
|
||||
Stop hook은 Harness Step 실행을 금지한 이번 correction session에서 별도 Codex Step 종료 evidence를 생성하지 않았다. Hook entry point의 수동 실행은 project contract가 금지하므로 대신 config-resolved full MSVC build와 full CTest를 직접 실행해 결과를 위에 기록했다.
|
||||
|
||||
<a id="corrections--9-rework-004-tdd-and-verification-evidence"></a>
|
||||
### 9. REWORK-004 TDD And Verification Evidence
|
||||
|
||||
<a id="corrections--failure-and-minimal-correction"></a>
|
||||
#### Failure and Minimal Correction
|
||||
|
||||
- classification: `harness`
|
||||
- implementation defect: Codex `0.149.1`에서 통과한 runtime envelope의 `--disable unified_exec` option을 `scripts/execute.py`가 nested `codex exec`에 전달하지 않았다.
|
||||
- RED test: `test_invoke_codex_uses_implementation_agent_command_contract`
|
||||
- minimal GREEN: command vector에서 `"codex", "exec"` 바로 뒤에 `"--disable", "unified_exec"` 두 argument만 추가했다.
|
||||
- preserved behavior: `workspace-write` default/validated override, `--dangerously-bypass-hook-trust`, `gpt-5.6-terra`, `model_reasoning_effort="xhigh"`, 1800-second structured timeout, no-push default, `danger-full-access` 비사용 정책은 변경하지 않았다.
|
||||
|
||||
<a id="corrections--red--green--verify"></a>
|
||||
#### RED / GREEN / VERIFY
|
||||
|
||||
| stage | command | exit | duration | evidence tail |
|
||||
| --- | --- | ---: | ---: | --- |
|
||||
| RED | `uv run --with pytest python -m pytest -v -rs tests/test_execute.py::test_invoke_codex_uses_implementation_agent_command_contract` | `1` | 1.2초 | `assert ('--disable', 'unified_exec') in adjacent_arguments`; 1 failed |
|
||||
| GREEN | same targeted command | `0` | 1.1초 | 1 passed |
|
||||
| focused VERIFY | `uv run --with pytest python -m pytest -v -rs tests/test_execute.py` | `0` | 1.1초 | 10 passed |
|
||||
| full Harness Python | `uv run --with pytest python -m pytest -v -rs` | `1` | 1.3초 | 23 passed, 1 pre-existing failure |
|
||||
| MSVC Debug build | `cmake --build .harness/build --config Debug` | `0` | 3.8초 | solver/CLI/unit/integration/reference targets built |
|
||||
| CTest discovery | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | `0` | 0.7초 | 214 tests discovered |
|
||||
| full CTest | `ctest --test-dir .harness/build -C Debug --output-on-failure` | `0` | 10.2초 | 214/214 passed |
|
||||
|
||||
Full Python failure는 기존 `test_agent_toml_and_limited_skill_yaml_schemas_are_parseable`의 `assert 'xhigh' == 'extra high'` 한 건이다. REWORK-004의 command-contract test를 포함한 `tests/test_execute.py`는 10/10 통과하며, dispatch 경계에 따라 pre-existing mismatch를 수정하지 않았다.
|
||||
|
||||
<a id="corrections--10-filetracker-workspace-write-diagnosis"></a>
|
||||
### 10. FileTracker Workspace-Write Diagnosis
|
||||
|
||||
<a id="corrections--101-metadata"></a>
|
||||
#### 10.1 Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| source failure report | `phases/nonlinear-static-newton-raphson/step1-output.json`; `docs/nonlinear-static-newton-raphson/README.md` |
|
||||
| source implementation plan | `docs/nonlinear-static-newton-raphson/README.md`; `phases/nonlinear-static-newton-raphson/step1.md` |
|
||||
| status | `blocked` |
|
||||
| owner_agent | `correction-agent` |
|
||||
| date | `2026-08-24` |
|
||||
|
||||
<a id="corrections--102-failure-triage"></a>
|
||||
#### 10.2 Failure Triage
|
||||
|
||||
- classification: `harness`
|
||||
- normalized classification: `harness-msbuild-filetracker-eaccessdenied-workspace-write`
|
||||
- attempt: `1`
|
||||
- first failed stage command:
|
||||
|
||||
```powershell
|
||||
cmake --build .harness/build --config Debug
|
||||
```
|
||||
|
||||
- failed target or test: Visual Studio 18 generator의 `fesa_solver.vcxproj`와 GoogleTest `gtest.vcxproj` CL task
|
||||
- evidence tail: MSBuild `18.8.2`가 `Microsoft.CppCommon.targets(790,5)`에서 `MSB4018`을 냈다. Inner exception은 `System.UnauthorizedAccessException`, HRESULT `0x80070005 (E_ACCESSDENIED)`이며 stack은 `NativeMethods.GetLongFilePath` -> `FileTracker..cctor()` -> `FileTracker.FileIsExcludedFromDependencies` -> `CanonicalTrackedInputFiles.ConstructDependencyTable` -> `CL.ComputeOutOfDateSources`다.
|
||||
- command-result caveat: `step1-output.json`의 item 25는 build와 CTest를 세미콜론으로 연결해 aggregate exit `0`을 기록했지만, 그 내부 `cmake --build`는 exit `1`로 실패했다. 뒤따른 stale-build CTest 성공은 Visual Studio build 성공 evidence가 아니다.
|
||||
- configure boundary: 보존된 `.harness/build/CMakeCache.txt`는 `CMAKE_GENERATOR=Visual Studio 18 2026`, platform `x64`다. CMake generation 자체가 아니라 생성된 MSBuild project의 CL dependency-tracking 단계가 실패했다.
|
||||
|
||||
<a id="corrections--103-root-cause-summary"></a>
|
||||
#### 10.3 Root Cause Summary
|
||||
|
||||
FESA source, Step 1 test 또는 CMake registration이 원인이 아니다. 서로 독립적인 FESA와 GoogleTest project가 동일한 `FileTracker` static initializer에서 실패하므로 project-local input보다 sandbox/environment boundary다.
|
||||
|
||||
Microsoft의 `FileTracker.cs`는 static initialization에서 `Path.GetTempPath()`를 구한 뒤 그 경로에 `GetShortFilePath`와 `GetLongFilePath`를 적용한다. 관찰 stack의 첫 failing native call과 정확히 일치한다. 현재 inherited `TEMP`/`TMP`는 `C:\Users\baram\AppData\Local\Temp`이고 runner는 이를 재지정하지 않는다. 따라서 Codex Windows `workspace-write` restricted token이 workspace 밖 user Temp의 long-path normalization을 거부한 것이 가장 좁은 root-cause inference다.
|
||||
|
||||
- boundary confidence: `high` — 두 project에서 같은 FileTracker initializer/`E_ACCESSDENIED`가 재현됨.
|
||||
- exact denied-path confidence: `medium-high` — Microsoft source의 static field order와 inherited Temp가 일치하지만 failing API가 path argument를 log하지는 않음.
|
||||
- implementation classification: environment-owned sandbox/MSBuild interaction; implementation defect, test defect, CMake registration issue가 아님.
|
||||
|
||||
검토한 primary vendor evidence:
|
||||
|
||||
- Microsoft MSBuild source: `https://github.com/dotnet/msbuild/blob/main/src/Utilities/TrackedDependencies/FileTracker.cs`
|
||||
- Microsoft CL task documentation: `https://learn.microsoft.com/en-us/visualstudio/msbuild/cl-task?view=visualstudio`
|
||||
- installed Visual Studio target: `C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Microsoft\VC\v180\Microsoft.CppCommon.targets` lines 48-49 and 764-771
|
||||
- OpenAI Codex sandbox CLI source: `https://github.com/openai/codex/blob/main/codex-rs/cli/src/lib.rs`; built-in writable profile name은 `:workspace`
|
||||
|
||||
<a id="corrections--105-workaround-evaluation-and-verification-evidence"></a>
|
||||
#### 10.5 Workaround Evaluation And Verification Evidence
|
||||
|
||||
| purpose | exact command/evidence | result |
|
||||
| --- | --- | --- |
|
||||
| preserved failure | `cmake --build .harness/build --config Debug` in `step1-output.json` | internal build exit `1`; `FileTracker..cctor()` `E_ACCESSDENIED` in both FESA and gtest |
|
||||
| supported property inspection | installed `Microsoft.CppCommon.targets`; Microsoft CL task docs | `TrackFileAccess` defaults to `true` and is passed to CL; property is vendor-defined for incremental file-access tracking |
|
||||
| narrow property smoke | nested `codex exec --sandbox workspace-write ...` requesting exactly `cmake --build .harness/build --config Debug -- /p:TrackFileAccess=false` | 60-second diagnostic timeout before a command completion event; no pass/fail conclusion; exact root PID `13720` and descendants cleaned, then absent |
|
||||
| direct sandbox launcher check | `codex sandbox -P :workspace -C C:\git\FESADev\.worktrees\nonlinear-static-newton-raphson cmd.exe /d /c echo SANDBOX_OK` | 10-second timeout; no `SANDBOX_OK`; exact root PID `16708` tree cleaned, then absent |
|
||||
| workspace-write alternative evidence | Visual Studio-bundled Ninja/MSVC build in `step1-output.json` | focused CTest 27/27 and full CTest 228/228 passed |
|
||||
|
||||
`/p:TrackFileAccess=false`는 vendor-defined 후보지만 동일 `workspace-write`에서 build completion이 관찰되지 않아 safe workaround로 채택할 수 없다. `TEMP`/`TMP`를 worktree로 재지정하는 후보도 FileTracker가 system-wide Temp를 dependency exclusion 기준으로 사용한다는 Microsoft source comment 때문에 tracking semantics 보존을 입증하지 않고 자동 적용하지 않았다.
|
||||
|
||||
Ninja/MSVC는 같은 sandbox에서 implementation/test 건전성을 입증하지만 Step 1 VERIFY가 명시한 `Visual Studio 18 2026` generator acceptance criterion을 대체하지 않는다. 따라서 correction-agent가 phase/upstream contract 변경 없이 자동 채택할 수 없다. `danger-full-access`는 지시대로 실행하거나 시험하지 않았다.
|
||||
|
||||
<a id="corrections--11-rework-006-ninjamsvc-validation-contract-correction"></a>
|
||||
### 11. REWORK-006 Ninja/MSVC Validation Contract Correction
|
||||
|
||||
<a id="corrections--111-metadata"></a>
|
||||
#### 11.1 Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| source failure report | `phases/nonlinear-static-newton-raphson/step1-output.json`; `docs/nonlinear-static-newton-raphson/README.md` USER-DECISION-002 option A / REWORK-006 |
|
||||
| source implementation plan | `docs/nonlinear-static-newton-raphson/README.md`; `phases/nonlinear-static-newton-raphson/step0.md`..`step12.md` |
|
||||
| status | `corrected-for-implementation-rerun` |
|
||||
| owner_agent | `correction-agent` |
|
||||
| date | `2026-08-24` |
|
||||
|
||||
<a id="corrections--112-failure-triage"></a>
|
||||
#### 11.2 Failure Triage
|
||||
|
||||
- classification: `harness`
|
||||
- normalized classification: `harness-msbuild-filetracker-eaccessdenied-workspace-write`
|
||||
- attempt: `2`, resolved by USER-DECISION-002 option A의 approved validation-contract change
|
||||
- first failed command: `cmake --build .harness/build --config Debug`
|
||||
- failed target: Visual Studio generator/MSBuild `FileTracker..cctor()`; Section 10의 `E_ACCESSDENIED`
|
||||
- replacement acceptance: `workspace-write` 안에서 VsDevCmd x64를 상속한 Ninja/MSVC Debug configure/build, CTest discovery, full CTest가 모두 통과해야 한다.
|
||||
|
||||
<a id="corrections--113-root-cause-summary"></a>
|
||||
#### 11.3 Root Cause Summary
|
||||
|
||||
FESA C++/test/CMake target defect가 아니라 Visual Studio generator의 MSBuild FileTracker와 `workspace-write` sandbox 사이 environment failure였다. User가 option A를 승인했으므로 tracked root `CMakePresets.json`과 existing Harness preset adapter를 사용해 동일 MSVC x64 Debug compiler를 Ninja로 구동한다. Harness Python은 이미 complete preset triplet과 parent environment copy를 지원하므로 production Python 변경은 필요하지 않았다.
|
||||
|
||||
<a id="corrections--115-red---green-evidence"></a>
|
||||
#### 11.5 RED -> GREEN Evidence
|
||||
|
||||
| stage | command | result |
|
||||
| --- | --- | --- |
|
||||
| RED-1 | `uv run --with pytest python -m pytest -v -rs tests/test_harness_preset_contract.py` | exit `1`; `CMakePresets.json` `FileNotFoundError` |
|
||||
| GREEN-1 | same focused command after preset/example/local config | exit `0`; 1 passed |
|
||||
| RED-2 | `uv run --with pytest python -m pytest -q tests/test_harness_preset_contract.py` after adding generated-build ignore assertion | exit `1`; `.harness/build-ninja-msvc-debug/` rule absent |
|
||||
| GREEN-2 | focused verbose command after `.gitignore` update | exit `0`; 1 passed; `git check-ignore` confirms config and build output |
|
||||
|
||||
Contract details:
|
||||
|
||||
- preset: `windows-msvc-ninja-debug`
|
||||
- generator/configuration: `Ninja`, `CMAKE_BUILD_TYPE=Debug`
|
||||
- binary directory: `.harness/build-ninja-msvc-debug`
|
||||
- cache variables: `FESA_GTEST_SOURCE_DIR`, `MKL_DIR`, `TBB_DIR`, `HDF5_DIR` use `$env{...}` and therefore fail closed when the parent launch envelope is incomplete.
|
||||
- `.harness/config.json` is ignored and byte-identical to `.harness/config.example.json`; both SHA-256 `D07429860D472AE37D02D6CD638900FA46175085AF47F179E98601227F8D3C43` at verification.
|
||||
|
||||
<a id="corrections--116-verification-evidence"></a>
|
||||
#### 11.6 Verification Evidence
|
||||
|
||||
Exact nested launch envelope:
|
||||
|
||||
```powershell
|
||||
VsDevCmd.bat -arch=x64 -host_arch=x64
|
||||
$env:FESA_GTEST_SOURCE_DIR='C:/git/googletest'
|
||||
$env:MKL_DIR='C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl'
|
||||
$env:TBB_DIR='C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb'
|
||||
$env:HDF5_DIR='C:/Program Files/HDF_Group/HDF5/2.1.1/cmake'
|
||||
codex exec --ephemeral --json --sandbox workspace-write --disable unified_exec --dangerously-bypass-hook-trust -m gpt-5.6-terra -c 'model_reasoning_effort="xhigh"' -C C:\git\FESADev\.worktrees\nonlinear-static-newton-raphson <bounded-validation-prompt>
|
||||
```
|
||||
|
||||
`CODEX_HOME=C:\Users\baram\.codex`를 상속하고 approved WindowsApps PATH entries를 child launch에서만 제거했다. `danger-full-access`와 sandbox bypass option은 사용하지 않았고 project hooks는 유지했다.
|
||||
|
||||
| verify item | exact command/evidence | result |
|
||||
| --- | --- | --- |
|
||||
| environment preflight | nested shell prints architecture, four variables, `cl.exe`, `ninja.exe` | exit `0`; target/host `x64`; `cl.exe` Hostx64/x64; VS-bundled Ninja; all dependency paths exist |
|
||||
| configure | `cmake --preset windows-msvc-ninja-debug` | exit `0` |
|
||||
| build | `cmake --build --preset windows-msvc-ninja-debug` | exit `0` |
|
||||
| discovery | `ctest --preset windows-msvc-ninja-debug --show-only=json-v1` | exit `0`; 228 tests |
|
||||
| full CTest | `ctest --preset windows-msvc-ninja-debug --output-on-failure` | exit `0`; 228/228 passed; 10.69초 |
|
||||
| generated metadata | `.harness/build-ninja-msvc-debug/CMakeCache.txt`와 `CMakeCXXCompiler.cmake` | `Ninja`; `Debug`; compiler ID `MSVC`; Hostx64/x64 `cl.exe` |
|
||||
| Stop | hooks-retained nested `codex exec` completion | overall exit `0`; no Stop blocking response; automatic Stop uses ignored config's same preset plan |
|
||||
| full Harness Python | `uv run --with pytest python -m pytest -v -rs` | 24 passed, 1 pre-existing out-of-scope failure: actual `xhigh` vs expected `extra high` |
|
||||
|
||||
첫 cold workspace run은 full CTest에서 temporary `fesa_reference_tests_NOT_BUILT`로 207/208만 통과해 blocker-clear로 사용하지 않았고 phase도 reset하지 않았다. Automatic hooks가 missing target build를 완료한 뒤 두 번째 independent nested `workspace-write` run에서 위 228/228 evidence를 확보한 다음에만 phase를 reset했다.
|
||||
|
||||
Reference artifact no-change evidence: `git diff --name-only -- reference`는 empty였다. `shellNL.inp`, shellNL displacement/reaction/stress CSV와 shell input/displacement/reaction/stress CSV의 SHA-256은 implementation-plan inventory와 모두 일치한다. Reference solver와 feature Harness phase는 실행하지 않았다.
|
||||
|
||||
<a id="corrections--12-rework-007-step-11-nonlinear-nonconvergence-contract-triage"></a>
|
||||
### 12. REWORK-007 Step 11 Nonlinear Nonconvergence Contract Triage
|
||||
|
||||
<a id="corrections--121-metadata"></a>
|
||||
#### 12.1 Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| source failure report | `phases/nonlinear-static-newton-raphson/step11-output.json`; `docs/nonlinear-static-newton-raphson/README.md` REWORK-007 |
|
||||
| source implementation plan | `docs/nonlinear-static-newton-raphson/README.md`; `phases/nonlinear-static-newton-raphson/step11.md` |
|
||||
| status | `needs-upstream-decision` |
|
||||
| owner_agent | `correction-agent` |
|
||||
| date | `2026-08-24` |
|
||||
|
||||
<a id="corrections--122-failure-triage"></a>
|
||||
#### 12.2 Failure Triage
|
||||
|
||||
- classification: `upstream-contract`
|
||||
- normalized classification: `implementation-shellnl-nonlinear-nonconvergence-no-hdf5`
|
||||
- attempt: `1`
|
||||
- first failed command:
|
||||
|
||||
```powershell
|
||||
ctest --preset windows-msvc-ninja-debug -R "NonlinearStaticReference|ReferenceTolerance|Mitc4Reference" --output-on-failure
|
||||
```
|
||||
|
||||
- failed target or test: `NonlinearStaticReference.CopiesRunsComparesAndPreservesTheReadOnlyReferenceInventory` (CTest test 288)
|
||||
- evidence tail: copied build-local `shellNL.inp` reaches `severity=error`, `code=nonlinear-nonconvergence` after iteration 100. `generated.HasValue()` is false because no authoritative copied-sibling `shellNL_results.h5` is committed.
|
||||
- correction-agent reproduction: the exact focused test alone failed deterministically in 103.84 seconds with the same diagnostic. The original reference input was not passed to FESA.
|
||||
|
||||
<a id="corrections--123-root-cause-summary"></a>
|
||||
#### 12.3 Root Cause Summary
|
||||
|
||||
This is not an implementation defect in the observed convergence calculation. The implementation in `src/fesa/analysis/nonlinear_static_procedure.cpp` supplies same-trial free rotational residual, internal moment and external moment to `EvaluateNewtonConvergence`. `src/fesa/analysis/nonlinear_static_control.cpp` then implements the approved `NSNR-069` and formulation Section 14.1 literally:
|
||||
|
||||
\[
|
||||
D_M=\max(\|f_{int,f}^{\phi}\|_\infty,
|
||||
\|f_{ext,f}^{\phi}\|_\infty),\qquad
|
||||
\eta_M=\frac{\|r_f^{\phi}\|_\infty}{D_M}
|
||||
\]
|
||||
|
||||
for every nonzero \(D_M\), with the typed absolute `1e-3 force-length` branch available only when \(D_M=0\) exactly.
|
||||
|
||||
The approved `reference/shellNL/shellNL.inp` contains only `Set-1, 3, -100000.` under `*CLOAD`; it applies no rotational moment component. Therefore the free rotational external vector is exactly zero and
|
||||
|
||||
\[
|
||||
r_f^{\phi}=f_{int,f}^{\phi}-0=f_{int,f}^{\phi},
|
||||
\qquad
|
||||
D_M=\|f_{int,f}^{\phi}\|_\infty=\|r_f^{\phi}\|_\infty.
|
||||
\]
|
||||
|
||||
For every nonzero rotational residual, \(\eta_M=1>10^{-2}\). The channel can pass only if floating-point assembly produces the exact zero vector, at which point and only then the exact-zero branch is selected. Thus the current approved denominator structurally prevents practical convergence for a no-applied-moment shell case even when its residual is well below the approved typed absolute threshold.
|
||||
|
||||
The reproduced log contains 100/100 parsed iteration records with exact printed equality between `residual_moment_numerator_norm` and `residual_moment_denominator_scale`; all 100 use `branch=relative` and `pass=0`. Representative values are:
|
||||
|
||||
| iteration | numerator | denominator | branch | pass |
|
||||
| ---: | ---: | ---: | --- | ---: |
|
||||
| 1 | `2.363968570753043e-09` | `2.363968570753043e-09` | `relative` | 0 |
|
||||
| 2 | `1.4372536725204554e-06` | `1.4372536725204554e-06` | `relative` | 0 |
|
||||
| 3 | `3.138301877925187e-06` | `3.138301877925187e-06` | `relative` | 0 |
|
||||
| 99 | `3.8876064110127118e-06` | `3.8876064110127118e-06` | `relative` | 0 |
|
||||
| 100 | `4.6441010823627948e-06` | `4.6441010823627948e-06` | `relative` | 0 |
|
||||
|
||||
Every listed numerator is below `1e-3 force-length`, but the approved exact-zero-denominator predicate forbids use of that absolute branch. Changing the implementation alone would contradict the approved requirement and formulation.
|
||||
|
||||
<a id="corrections--125-verification-evidence"></a>
|
||||
#### 12.5 Verification Evidence
|
||||
|
||||
| purpose | exact command/evidence | result |
|
||||
| --- | --- | --- |
|
||||
| focused reproduction | `ctest --preset windows-msvc-ninja-debug -R '^NonlinearStaticReference\.CopiesRunsComparesAndPreservesTheReadOnlyReferenceInventory$' --output-on-failure` | exit `1`; 0/1 passed; test 288 failed in 103.84 s with 100-iteration `nonlinear-nonconvergence` |
|
||||
| iteration-log audit | parse latest copied-run `shellNL_log.txt` fields for every iteration | 100 records; numerator equals denominator in 100/100; `relative` in 100/100; `residual_moment_pass=0` in 100/100 |
|
||||
| implementation trace | `nonlinear_static_procedure.cpp` residual/internal/external channel construction plus `nonlinear_static_control.cpp` denominator evaluation | matches `NSNR-069` and formulation Section 14.1 exactly |
|
||||
| input trace | `reference/shellNL/shellNL.inp` lines 149-151 | one translational direction-3 force; no applied rotational moment |
|
||||
| reference preservation | pre/post SHA-256 plus `git diff -- reference` | all eight declared hashes unchanged; reference diff empty |
|
||||
| full Ninja/MSVC build/CTest | not run | intentionally stopped at decisive `upstream-contract`; no implementation correction exists to verify |
|
||||
| Stop | not applicable | Correction was not a Harness Step and made no production/test/CMake change |
|
||||
| Harness Python pytest | not applicable | no Harness/Hook/agent-config behavior changed |
|
||||
|
||||
<a id="corrections--13-rework-008-nonlinear-reaction-reference-mismatch-triage"></a>
|
||||
### 13. REWORK-008 Nonlinear Reaction Reference Mismatch Triage
|
||||
|
||||
<a id="corrections--131-metadata"></a>
|
||||
#### 13.1 Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| source failure report | `phases/nonlinear-static-newton-raphson/step11-output.json`; `docs/nonlinear-static-newton-raphson/README.md` dispatch `REWORK-008-nonlinear-reaction-reference-mismatch` |
|
||||
| source implementation plan | `docs/nonlinear-static-newton-raphson/README.md`; `phases/nonlinear-static-newton-raphson/step11.md` |
|
||||
| status | `needs-upstream-decision` |
|
||||
| owner_agent | `correction-agent` |
|
||||
| date | `2026-08-25` |
|
||||
|
||||
`implementation-report.md`, `build-test.md`, `reference-comparison.md`는 아직 존재하지 않는다. 따라서 immutable `step11-output.json` SHA-256 `0F3B876AF84398EB1D2C90335998115797054B012899DE27E4070A6F533EEF91`, Coordinator dispatch, current implementation/CTest와 read-only result/reference audit를 source evidence로 사용했다.
|
||||
|
||||
<a id="corrections--132-failure-triage"></a>
|
||||
#### 13.2 Failure Triage
|
||||
|
||||
- initial failure classification: `reference-comparison`
|
||||
- final classification: `upstream-contract`
|
||||
- normalized classification: `reference-blocking-model-adequacy-conflict`
|
||||
- attempt: `1` for `REWORK-008`; 이전 `REWORK-007`은 별도 nonlinear convergence classification이다.
|
||||
- first failed command in Step 11:
|
||||
|
||||
```powershell
|
||||
cmake --build --preset windows-msvc-ninja-debug; ctest --preset windows-msvc-ninja-debug -R '^NonlinearStaticReference\.CopiesRunsComparesAndPreservesTheReadOnlyReferenceInventory$' --output-on-failure
|
||||
```
|
||||
|
||||
- correction-agent reproduction:
|
||||
|
||||
```powershell
|
||||
ctest --preset windows-msvc-ninja-debug -R '^NonlinearStaticReference\.CopiesRunsComparesAndPreservesTheReadOnlyReferenceInventory$' --output-on-failure
|
||||
```
|
||||
|
||||
- failed target or test: `NonlinearStaticReference.CopiesRunsComparesAndPreservesTheReadOnlyReferenceInventory` (fresh CTest test 293)
|
||||
- evidence tail: exit `8`, 0/1 passed, 16.88 s. Row identity/schema/nonfinite prechecks passed before the common tolerance gate reported exactly three failed blocking families: in-plane RF RMS `0.11437709952897851`, transverse RF RMS `0.048448360241294064`, physical spatial RM RMS `0.02746412616679237`, each above `0.01`.
|
||||
|
||||
<a id="corrections--133-root-cause-summary"></a>
|
||||
#### 13.3 Root Cause Summary
|
||||
|
||||
Observed reaction computation/storage/mapping path에는 implementation defect evidence가 없다.
|
||||
|
||||
1. `nonlinear_static_procedure.cpp`는 같은 accepted state에서 `residual = internal.force - external.generalized_external_force`를 만들고 `trial.reaction = trial.residual`로 저장한다. `nonlinear_analysis_state.cpp`는 모든 DOF에서 이 두 identity를 검증한다.
|
||||
2. `nonlinear_hdf5_results_writer.cpp`는 translation reaction을 그대로 쓰고 rotational reaction만 승인식 `J_l(phi)^(-T)`로 physical spatial moment에 변환한다. 24 constrained nodes에서 `phi=0`이므로 이 변환은 identity다. Full-precision HDF5 audit에서 constrained translation과 generalized residual의 차이, constrained moment 변환 차이, constrained `phi`가 모두 exact `0`이었다.
|
||||
3. Comparator는 `/model/nodal_constraint_mask`와 `(case, state, instance, node label, component)` exact key를 사용한다. 이번 실행이 schema/missing/extra/duplicate/nonfinite failure가 아니라 family tolerance report까지 도달했으므로 storage와 row mapping precheck도 통과했다.
|
||||
4. Dominant RF3/RM1/RM2 mismatch는 nonlinear 전용 경로에서 생기지 않는다. FESA nonlinear-linear 최대 차이는 RF3 `2.9441580409184098e-06`, RM1 `1.3046948879491538e-05`, RM2 `1.2039316061418504e-05`이고, Abaqus nonlinear-linear 차이는 각각 `0`, `5.0022208599999994e-12`, `1.1141310098e-11`이다. 그럼에도 FESA linear와 Abaqus linear 사이에는 nonlinear과 동일한 local RF3/RM mismatch가 이미 존재한다. 예를 들어 node 31 RF3는 FESA `1059.5675655371299`, reference `339.61334199999999`; node 22 RM1은 FESA `-1564.1175318019484`, reference `-515.62542699999995`다.
|
||||
5. 전체 constrained reaction 합은 FESA nonlinear `[7.9591888635377472e-12, 7.2906680692597092e-12, 100000.00000082512]`, Abaqus nonlinear `[4.5008441418303846e-13, -1.7997131562808022e-12, 99999.999592799955]`로 global balance와 sign이 일치한다. Stored `/global/equilibrium`도 `[-5.2007287365540833e-12, 2.1302730413008675e-11, 99999.999999999985, 1.5669833723712425e-11, 6.4043503405991029e-12, -3.0183203934097235e-11]`다.
|
||||
6. RF1/RF2는 nonlinear에서 새로 생기는 weak geometric membrane reaction이지만 FESA extrema `±1.3774894254907935`와 Abaqus extrema `±1.9166318200000001`의 차이는 storage/mapping 오류가 아니다. Linear Abaqus reaction은 거의 zero이고, independent FESA MITC4와 Abaqus S4가 서로 다른 local nodal support-force redistribution을 만들 수 있다는 approved formulation/model limitation 안에 있다.
|
||||
|
||||
따라서 demonstrated cause는 nonlinear reaction implementation이 아니라 reference blocking quantity의 model-adequacy 전제다. Approved `reference-model.md`는 linear reaction CSV를 review-only로 두면서, 같은 local RF3/RM distribution을 nonlinear에서 blocking으로 승격한다. Project contract는 FESA MITC4의 integration/stabilization/internal behavior가 Abaqus S4와 동등하다고 주장하지 않는다. Global equilibrium은 맞지만 formulation-sensitive local nodal reaction 분포가 1% RMS를 만족해야 한다는 분석적 또는 독립 benchmark 근거는 없다. 이를 code-only로 Abaqus 값에 맞추는 것은 formulation/model adequacy 또는 reference acceptance contract 변경이며 Correction Agent 범위를 벗어난다.
|
||||
|
||||
<a id="corrections--135-verification-evidence"></a>
|
||||
#### 13.5 Verification Evidence
|
||||
|
||||
Visual Studio environment는 `VsDevCmd.bat -arch=x64 -host_arch=x64`로 설정했고, `.harness/config.json`/preset가 요구한 `FESA_GTEST_SOURCE_DIR=C:/git/googletest`, `MKL_DIR=C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl`, `TBB_DIR=C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb`, `HDF5_DIR=C:/Program Files/HDF_Group/HDF5/2.1.1/cmake`를 사용했다.
|
||||
|
||||
| purpose | exact command/evidence | exit/result |
|
||||
| --- | --- | --- |
|
||||
| focused reproduction | `ctest --preset windows-msvc-ninja-debug -R '^NonlinearStaticReference\.CopiesRunsComparesAndPreservesTheReadOnlyReferenceInventory$' --output-on-failure` | exit `8`; 0/1 passed; only three reaction-family RMS gates failed |
|
||||
| reaction dataflow audit | `nonlinear_static_procedure.cpp` residual/reaction assignment, `nonlinear_analysis_state.cpp` identities, `nonlinear_hdf5_results_writer.cpp` physical-moment projection and comparator exact-key prechecks; build-local datasets dumped with `$hdf5Bin='C:\Program Files\HDF_Group\HDF5\2.1.1\bin'; $env:PATH="$hdf5Bin;$env:PATH"; & "$hdf5Bin\h5dump.exe" -m %.17g -d <dataset> <results.h5>` | exit `0`; constrained pipeline differences and constrained rotation were exact zero |
|
||||
| nonlinear/linear audit | join build-local FESA HDF5 and immutable CSV rows by exact `(instance, node label, component)` in read-only PowerShell | exit `0`; dominant mismatch is already present in both solvers' linear results and survives nonlinear unchanged |
|
||||
| targeted nonlinear output | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shellNL/shellnl-s4-final-441332835013800-0/shellNL_results.h5` | SHA-256 `A82349F1AABDC2B042A7DBF643D0D917B04245B64E5D73F9507B83A2D67FDE91` |
|
||||
| targeted linear output | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shell/shell-s4-linear-limit-441349319977100-1/shell_results.h5` | SHA-256 `167248AB523484FB6F515AE6A309C7380B4A1226B74BE03B207F4532C3064B66` |
|
||||
| configure | `cmake --preset windows-msvc-ninja-debug` | exit `0`; 0.342 s; configure/generate complete |
|
||||
| build | `cmake --build --preset windows-msvc-ninja-debug` | exit `0`; 0.116 s; `ninja: no work to do.` |
|
||||
| CTest discovery | `ctest --preset windows-msvc-ninja-debug --show-only=json-v1` | exit `0`; 294 tests discovered |
|
||||
| full MSVC CTest | `ctest --preset windows-msvc-ninja-debug --output-on-failure` | exit `8`; 293/294 passed; only test 293 failed with the same three RMS values; test 294 comparator invalid-HDF5/warning checks passed |
|
||||
| source failure hash | `Get-FileHash phases/nonlinear-static-newton-raphson/step11-output.json -Algorithm SHA256` | exit `0`; `0F3B876AF84398EB1D2C90335998115797054B012899DE27E4070A6F533EEF91` |
|
||||
| reference preservation | `git diff -- reference` | exit `0`; empty diff |
|
||||
| repository identity | `git rev-parse HEAD` | exit `0`; `65b56b1755e4537b48b44476375b6235da732648` |
|
||||
| Stop | not applicable | Correction Agent session은 Harness Step이 아니며 production/test/CMake를 변경하지 않았다. Full preset build/CTest를 직접 실행했다. |
|
||||
| Harness Python pytest | not applicable | Harness Python, Hook, agent config behavior를 변경하지 않았다. |
|
||||
|
||||
<a id="corrections--14-rework-009-user-local-windowsapps-powershell-launch-correction"></a>
|
||||
### 14. REWORK-009 User-local WindowsApps PowerShell Launch Correction
|
||||
|
||||
<a id="corrections--141-metadata"></a>
|
||||
#### 14.1 Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| source failure report | `phases/nonlinear-static-newton-raphson/step11-output.json`; `docs/nonlinear-static-newton-raphson/README.md` dispatch `REWORK-009-user-windowsapps-pwsh-launch-filter-root-dispatch-required` |
|
||||
| source implementation plan | `docs/nonlinear-static-newton-raphson/README.md`; `phases/nonlinear-static-newton-raphson/step11.md` |
|
||||
| status | `corrected-for-implementation-rerun` |
|
||||
| owner_agent | `correction-agent` |
|
||||
| date | `2026-08-28` |
|
||||
|
||||
`implementation-report.md`, `build-test.md`, `reference-comparison.md`는 아직 존재하지 않는다. 따라서 current `step11-output.json` SHA-256 `BF3A1CA6DD35EA8414710018D7F1644A1D2C6C2BCF87C11F74DA2A01BBEAB3AD`, Coordinator dispatch, preserved attempt-1 TDD evidence와 attempt-2 Stop evidence를 source evidence로 사용했다.
|
||||
|
||||
<a id="corrections--142-failure-triage"></a>
|
||||
#### 14.2 Failure Triage
|
||||
|
||||
- classification: `harness`
|
||||
- normalized classification: `harness-launch-path-filter-missed-user-windowsapps-pwsh-access-denied`
|
||||
- attempt: `2` under `STEP11-EXECUTION-003`; attempt 1은 1,800초 timeout이고 attempt 2는 아래 shell launch failure다.
|
||||
- first failed command boundary:
|
||||
|
||||
```powershell
|
||||
codex exec --json --model gpt-5.6-terra --config 'model_reasoning_effort="xhigh"' --sandbox workspace-write --dangerously-bypass-hook-trust --cd C:\git\FESADev\.worktrees\nonlinear-static-newton-raphson --disable unified_exec -
|
||||
```
|
||||
|
||||
- failed target: attempt-2 nested Codex의 첫 PowerShell tool launch.
|
||||
- evidence tail: nested Codex `0.150.1`이 `C:\Users\baram\AppData\Local\Microsoft\WindowsApps\pwsh.exe`를 선택했다. `workspace-write` runner가 `CreateProcessAsUserW failed: 5 (Access denied)`로 이를 거부해 소스 확인, RED/VERIFY 명령과 Step status update가 실행되지 않았다. Codex process 자체는 `exitCode=0`이지만 blocker agent message만 반환했으므로 Step 성공 evidence가 아니다.
|
||||
- state evidence: `HEAD=65b56b1755e4537b48b44476375b6235da732648`; Step 11 `pending`; Step 12 `pending`.
|
||||
|
||||
<a id="corrections--143-root-cause-summary"></a>
|
||||
#### 14.3 Root Cause Summary
|
||||
|
||||
이번 실패는 solver, comparator 또는 `1e-8` gate defect가 아니라 Harness child launch environment defect다.
|
||||
|
||||
1. 이전 launcher filter는 `C:\Program Files\WindowsApps\Microsoft.PowerShell_*` entry만 제거했다.
|
||||
2. 따라서 `C:\Users\baram\AppData\Local\Microsoft\WindowsApps` entry와 그 아래 `pwsh.exe` execution alias가 PATH에 남았다.
|
||||
3. Nested Codex shell resolver는 남은 user-local alias를 선택했고, Windows native `workspace-write` sandbox는 그 alias의 child process 생성을 Windows error 5로 거부했다.
|
||||
4. PATH에서 `\\WindowsApps(?:\\|$)`에 일치하는 모든 entry를 제거하면 현재 환경의 Program Files entry 세 개와 user-local entry 한 개가 함께 제거된다. 이때 `pwsh`는 resolve되지 않고 `powershell`은 `C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe`로 resolve된다.
|
||||
5. Root가 같은 Codex CLI `0.150.1`, `gpt-5.6-terra`, `xhigh`, `--disable unified_exec`, `workspace-write`, `CODEX_HOME=C:\Users\baram\.codex` envelope에서 이 filter를 적용한 nested smoke는 위 Windows PowerShell을 선택해 exact `FESA_CODEX_SHELL_SMOKE_OK`를 출력하고 exit `0`으로 끝났다. Correction audit의 독립 direct smoke도 같은 executable, exact output과 exit `0`을 확인했다.
|
||||
|
||||
따라서 repository runner나 Step 11 implementation을 고칠 필요가 없다. Rerun launch에서 PATH predicate만 전체 WindowsApps entry를 제거하도록 바로잡으면 된다.
|
||||
|
||||
<a id="corrections--145-verification-evidence"></a>
|
||||
#### 14.5 Verification Evidence
|
||||
|
||||
| purpose | exact command/evidence | exit/result |
|
||||
| --- | --- | --- |
|
||||
| failure artifact audit | `Get-FileHash phases/nonlinear-static-newton-raphson/step11-output.json -Algorithm SHA256`; JSON `exitCode`, `stderr`, blocker message 검사 | exit `0`; SHA-256 `BF3A1CA6DD35EA8414710018D7F1644A1D2C6C2BCF87C11F74DA2A01BBEAB3AD`; nested process path와 `CreateProcessAsUserW failed: 5` 확인 |
|
||||
| filter audit | `($env:PATH -split ';') \| Where-Object { $_ -notmatch '\\WindowsApps(?:\\|$)' }`를 child-only PATH로 적용한 뒤 `Get-Command codex,pwsh,powershell` 확인 | four WindowsApps entries removed; Codex `codex-cli 0.150.1`; `pwsh=<none>`; `powershell=C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe` |
|
||||
| independent direct smoke | filtered PATH에서 `powershell.exe -NoProfile -Command '[Console]::WriteLine($PSHOME); [Console]::WriteLine("FESA_CODEX_SHELL_SMOKE_OK")'` | exit `0`; `$PSHOME=C:\Windows\System32\WindowsPowerShell\v1.0`; exact `FESA_CODEX_SHELL_SMOKE_OK` |
|
||||
| same-envelope nested Codex smoke | Coordinator/root evidence: Codex `0.150.1`, Terra/xhigh, `--disable unified_exec`, `workspace-write`, aligned `CODEX_HOME`, all-WindowsApps filter | exit `0`; selected system Windows PowerShell and printed exact `FESA_CODEX_SHELL_SMOKE_OK` |
|
||||
| recovered attempt-1 RED | `ctest --preset windows-msvc-ninja-debug -R 'GlobalForceAndMoment' --output-on-failure` before comparator GREEN | exit `8`; preserved old `<=1e-10` rejected both `5e-9` and exact `1e-8` in `NSNR-REF-024` |
|
||||
| recovered attempt-1 GREEN | same focused GlobalForceAndMoment CTest after comparator-only shared gate became `1e-8` | exit `0`; 2/2 passed, including inclusive boundary and exact-zero-scale tests |
|
||||
| focused implementation evidence | attempt-1 focused procedure, HDF5 and global-balance runs; attempt-2 `LastTest.log` named-test audit | `NSNR-PROC-019`, `NSNR-HDF5-014`, `NSNR-REF-022`, `NSNR-REF-024`, `NSNR-REF-025` all present as passed |
|
||||
| attempt-2 Stop full CTest | `.harness/build-ninja-msvc-debug/Testing/Temporary/LastTest.log`, SHA-256 `41CA3D4E410F7BFD55E50FC7D40A79D00D26116945C468E74F0E38720E676447` | 302 `Testing` rows, 0 failure markers, final `302/302`; root/Coordinator records full `302/302` pass |
|
||||
| new full build/CTest | not run | existing evidence was sufficient and dispatch prohibited unnecessary Harness/build/CTest rerun |
|
||||
| Stop | not applicable | Correction Agent session은 Harness Step이 아니며 code/test/CMake를 변경하지 않았다. |
|
||||
| Harness Python pytest | not applicable | runner, Hook 또는 agent config를 변경하지 않았다. |
|
||||
|
||||
Attempt-1 RED/GREEN은 recovered immutable execution evidence이며 이 correction에서 재현하거나 새로 주장한 RED가 아니다. Current code를 old threshold로 되돌리지 않았고 reference artifact도 실행·수정하지 않았다.
|
||||
@@ -1,261 +0,0 @@
|
||||
# Nonlinear Static Newton-Raphson 수치 검토
|
||||
|
||||
## 1. Metadata
|
||||
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- source_formulation: `docs/nonlinear-static-newton-raphson/formulation.md`
|
||||
- source_formulation_status: `ready-for-numerical-review`
|
||||
- source_formulation_sha256: `878028F7B8EC1B91DA9BF00AF78825F50EB0B71046E840A0EEA595AFFD5E14B9`
|
||||
- source_requirements: `docs/nonlinear-static-newton-raphson/requirements.md`
|
||||
- source_requirements_sha256: `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`
|
||||
- source_research: `docs/nonlinear-static-newton-raphson/research.md`
|
||||
- source_research_sha256: `4F63D23E03D1A68E5F8563B678FDD6F761F9558165778EF0433133EFAD303570`
|
||||
- repository_policy: `AGENTS.md`, `docs/SOLVER_AGENT_DESIGN.md`, `docs/TOLERANCE.md`
|
||||
- decision_source: `USER-DECISION-004 option 1`
|
||||
- balance_gate_decision: user-approved factor-one global force/moment normalized gate `<=1e-8`
|
||||
- diagnostic_evidence: `docs/nonlinear-static-newton-raphson/lessons.md` §13,
|
||||
`docs/nonlinear-static-newton-raphson/translation-displacement-comparison.md`
|
||||
- status: `pass-for-io-definition`
|
||||
- owner_agent: `numerical-review-agent`
|
||||
- date: `2026-08-28`
|
||||
- post_closure_addendum_date: `2026-08-29`
|
||||
- post_closure_additive_case: `shellnl-meshfine-02-s4-final`
|
||||
|
||||
이 검토는 정식화를 수학·수치 알고리즘 계약으로 검토하고 기존 reference artifact를
|
||||
읽기 전용으로 조사했다. C++ API, 최종 HDF5 dataset path, implementation plan 또는
|
||||
reference artifact를 설계·실행·생성·수정하지 않았다.
|
||||
|
||||
## 2. Review Verdict
|
||||
|
||||
- verdict: `pass-for-io-definition`
|
||||
- reason: 승인 정식화는 fixed-initial-reference Total Lagrangian MITC4, finite rotation,
|
||||
nonlinear `24 -> 20` map, objective drilling, same-trial residual/tangent, reaction의
|
||||
spatial-moment 변환과 current-arm global balance를 구현 가능한 수치 계약으로 정의한다.
|
||||
Revised requirements와 충돌하는 formulation defect는 없다.
|
||||
- reaction disposition: local nodal `RF1/RF2/RF3`와 physical spatial `RM1/RM2`는 exact
|
||||
source-key/schema/inventory/finite/error evidence를 유지하는 `review-only`다. 이 값은
|
||||
formulation-sensitive nodal redistribution이므로 blocking verdict를 결정하지 않는다.
|
||||
Local `RM3`는 계속 제외한다.
|
||||
- blocking equilibrium: 각 nonlinear case의 factor-one accepted state에서 `(a)` global
|
||||
applied-plus-reaction force balance, `(b)` global applied-plus-reaction moment balance,
|
||||
`(c)` accepted free-DOF force/moment residual evidence가 blocking이다. `(d)` constrained
|
||||
reaction resultant는 별도 quantity로 보존하지만 balance error를 대신하지 않는다.
|
||||
- reference readiness: `reference/shell`, `reference/shellNL`와
|
||||
`reference/shellNL-meshfine`의 선언 input 및 필요한 displacement/reaction CSV가 존재하고
|
||||
읽을 수 있다. Fine case는 사용자가 요청한 mesh-refined nonlinear evidence이며 coarse
|
||||
case와 서로의 reference에 독립적으로 비교한다. Merge 후 추가된 read-only
|
||||
`reference/shellNL-meshfine_02` bundle도 별도 verification 대상으로 inventory했다. 이
|
||||
post-closure 추가는 기존 세 case의 gate, 과거 Stage 6 comparison 또는 Release verdict를
|
||||
소급 변경하지 않는다.
|
||||
- boundary: `pass-for-io-definition`은 I/O 계약을 다시 정의할 수 있다는 뜻이며 reference
|
||||
comparison pass, implementation completion, physics 또는 release 승인이 아니다.
|
||||
|
||||
## 3. Critical Findings
|
||||
|
||||
### 3.1 Confirmed defects
|
||||
|
||||
Formulation Agent 또는 Research Agent로 반환할 confirmed defect는 없다. Formulation
|
||||
§11.4는 constrained generalized reaction과 spatial physical moment를 구분하고, §13.4는
|
||||
global origin `[0,0,0]`, current nodal position과 physical spatial moment를 사용하는
|
||||
applied-plus-reaction balance를 명시한다.
|
||||
|
||||
### 3.2 Required downstream correction: `AUDIT-001`
|
||||
|
||||
Stage 5/6은 같은 accepted state에서 다음 세 quantity를 서로 바꿔 쓰지 않아야 한다.
|
||||
|
||||
1. **Global applied-plus-reaction balance error**: applied와 constrained reaction을 더한
|
||||
force `[3]`와 moment `[3]`; blocking.
|
||||
2. **Constrained reaction resultant**: constrained reaction만 합한 force `[3]`와 current-arm
|
||||
moment `[3]`; distinct nonblocking reaction summary.
|
||||
3. **Accepted free residual**: stable free-DOF source/component rows와 force/moment channel gate;
|
||||
blocking.
|
||||
|
||||
현재 nonlinear implementation helper는 full residual을 합하고 initial Domain coordinates와
|
||||
raw rotational generalized residual을 사용한다. 현재 `shellNL`/`shellNL-meshfine` support는
|
||||
prescribed `u=phi=0`이므로 initial/current support arm과 generalized/spatial support moment가
|
||||
일치하고, 이 helper는 작은 free residual을 제외하면 constrained reaction resultant에
|
||||
가깝다. 그러나 applied load를 더한 balance error는 아니며 세 quantity 중 어느 것도
|
||||
일반적으로 대체하지 못한다. 지원 범위의 nonzero prescribed translation/rotation에서는
|
||||
반드시 current position과 `J_l(phi)^(-T)` spatial-moment conversion을 적용해야 한다.
|
||||
|
||||
### 3.3 Numerical risks and nonblocking artifact issue
|
||||
|
||||
- Fine stress CSV에는 element `1`, `SNEG`의 `Node Label=ss` 한 행이 있다. Stress는 승인된
|
||||
FESA Gauss direct recovery와 위치가 다르고 수치 comparison에서 제외되므로 이 optional
|
||||
inspection artifact의 malformed identity는 I/O 진입 blocker가 아니다. Artifact를 repair,
|
||||
normalize 또는 rewrite하지 않는다.
|
||||
- Coarse/fine Abaqus `S4`와 FESA MITC4가 동일한 local support reaction distribution을
|
||||
만들어야 한다는 formulation evidence는 없다. Global balance와 free residual로 blocking
|
||||
physics를 검증하고 local rows는 오차를 숨기지 않은 채 review-only로 남긴다.
|
||||
- Stored cases의 response는 weak geometric-nonlinear regime다. Reference displacement pass가
|
||||
tangent, objectivity, finite-rotation 또는 rollback 검증을 대신하지 않는다.
|
||||
- `shellNL-meshfine_02`는 topology와 constraint inventory는 fine case와 같지만 source load가
|
||||
`F1=+1e8`, `F2=+1e8`, `F3=-1e8`이다. 기존 fine case의 `F3=-1e5`와 같은 물리 case 또는
|
||||
mesh-only refinement로 취급하지 않으며 각자의 reference에만 비교한다.
|
||||
|
||||
### 3.4 Open questions
|
||||
|
||||
I/O Definition 진입을 막는 open question은 없다. Public large-response benchmark, shell MMS와
|
||||
broader locking/distortion portfolio는 useful future evidence지만 이번 gate의 추가 조건이 아니다.
|
||||
|
||||
## 4. Numerical Risk Assessment
|
||||
|
||||
| risk label | assessment | required control / downstream evidence |
|
||||
| --- | --- | --- |
|
||||
| `rigid_body_modes` | Physical/internal/drill energy는 finite rigid motion에서 objective하고 pure drill만 regularized 되어야 한다. | finite rigid superposition에서 strain, stress, physical energy, drill gamma/energy와 residual covariance를 blocking invariant로 확인한다. |
|
||||
| `patch_test` | Green-Lagrange direct strain과 MITC tied shear는 같은 trial 및 first/second variation을 써야 한다. | membrane, bending, twist, transverse-shear patch와 linear limit을 확인한다. |
|
||||
| `symmetry` | Applied nodal moment가 없으면 physical/drill tangent는 exact arithmetic에서 symmetric이다. Fixed-spatial moment work tangent는 일반적으로 nonsymmetric다. | no-moment case만 scaled symmetry gate를 적용하고 moment case는 derivative consistency로 검증한다. |
|
||||
| `positive_definiteness` | Nonlinear tangent는 compression/near-buckling에서 indefinite일 수 있다. | positive definiteness를 global gate로 만들지 않고 singular/malformed tangent와 물리적 indefiniteness를 구분한다. |
|
||||
| `hourglass` | S4/S4R 모두 `2 x 2 x 2` full integration이며 reduced/hourglass path는 범위 밖이다. | source label로 integration 또는 stabilization을 바꾸지 않는 test가 필요하다. |
|
||||
| `shear_locking` | MITC shear tying은 transverse-shear locking을 완화하지만 general locking-free를 보장하지 않는다. | patch/reference evidence를 blocking으로, broader thin/thick study를 characterization으로 둔다. |
|
||||
| `volumetric_locking` | approved plane-stress shell과 `nu < 0.5` 범위에서는 `N/A`다. | 3-D incompressible behavior claim으로 확장하지 않는다. |
|
||||
| `membrane_locking` | original-style MITC4는 curved/distorted nonlinear mesh에서 membrane locking 위험이 남는다. | known limitation으로 보존하고 MITC4+ 또는 Abaqus 내부 성능을 상속한다고 주장하지 않는다. |
|
||||
| `distortion` | positive Jacobian만으로 accuracy는 보장되지 않지만 별도 calibrated quality cutoff는 승인되지 않았다. | 모든 Gauss/tying/center/recovery location을 fail-closed 검사한다. |
|
||||
| `singular_jacobian` | `J0<=0`, `j<=0`, invalid reciprocal basis/polar stretch는 residual/tangent를 무효화한다. | failed point를 omit, average, clamp 또는 repair하지 않는다. |
|
||||
| `conditioning` | thin geometry, small fixed drill scale와 near mechanism은 conditioning을 악화시킨다. | scale-aware diagnostics를 쓰고 hidden regularization/fallback을 금지한다. |
|
||||
| `convergence` | Full Newton은 same-trial consistent tangent에 의존하고 line search/cutback이 없다. | NSNR-069/070, four-channel AND, iteration `1..100`, finite-first와 no retry를 고정한다. |
|
||||
| `reaction_distribution` | local nodal support distribution은 element formulation/mesh/stabilization에 민감하다. | exact local error report는 유지하되 global balance/free residual만 blocking한다. |
|
||||
|
||||
## 5. Consistency Checks
|
||||
|
||||
| check | result | evidence |
|
||||
| --- | --- | --- |
|
||||
| units and dimensions | `pass` | Translation residual/reaction은 force, rotation residual/reaction moment는 force-length다. Force와 moment family 및 norm scale을 혼합하지 않는다. |
|
||||
| signs | `pass` | `r=f_int-f_ext`; constrained entry는 reaction, free entry는 equilibrium evidence다. Balance는 `applied+reaction`이고 reaction resultant는 reaction만 합한다. |
|
||||
| DOF ordering | `pass` | Global node order `[UX,UY,UZ,URX,URY,URZ]`; stable free/constrained partition과 `Delta q_c=0`을 보존한다. |
|
||||
| coordinates and moment conversion | `pass-with-handoff` | Global origin `[0,0,0]`, current arm `X+u`, spatial moment `J_l(phi)^(-T) r_phi`가 승인 의미다. `AUDIT-001` 구현 projection audit가 남는다. |
|
||||
| kinematic operator | `pass` | Green-Lagrange strain, MITC shear projection 및 first/second variation은 same-trial identity다. |
|
||||
| constitutive contract | `pass` | Constant symmetric `C5`가 fixed-reference engineering strain을 second Piola-Kirchhoff stress로 매핑하며 material history가 없다. |
|
||||
| Jacobian rules | `pass` | Fixed `J0`가 integration measure, current `j`와 `det(Fc)`가 validity predicate다. |
|
||||
| integration | `pass` | S4/S4R 공통 four midsurface by two thickness points; reduced/selective integration은 금지한다. |
|
||||
| residual/tangent | `pass` | Material/geometric/map-Hessian/drill/moment-work derivative가 complete same-trial tangent를 이룬다. |
|
||||
| recovery locations | `pass-with-handoff` | Nodal U/UR/reaction 및 Gauss direct shell recovery logical meaning은 정의되었다. Final dataset projection은 I/O-owned다. |
|
||||
| reference identity | `pass` | Case/state/instance/source label/component로 match하고 row order를 identity로 쓰지 않는다. |
|
||||
|
||||
## 6. Verification Readiness
|
||||
|
||||
### 6.1 Blocking internal numerical tests
|
||||
|
||||
기존 승인 수치 portfolio를 유지한다.
|
||||
|
||||
1. Stress-free `q=0` linear MITC4 residual/tangent/recovery와 physical/drill split.
|
||||
2. `||Q^TQ-I||_F<=1e-12`, `|det(Q)-1|<=1e-12`, `d=Qe3` 및 branch margin.
|
||||
3. Mixed translation/rotation scaled tangent directional derivative schedule와 interior scaled
|
||||
error `<=1e-6`; zero analytical direction `<=1e-10`.
|
||||
4. No-applied-moment scaled tangent symmetry `<=1e-12`; applied moment는 derivative
|
||||
consistency만 검사한다.
|
||||
5. Finite rigid objectivity의 scaled physical strain/stress/energy/drill/residual `<=1e-10`.
|
||||
6. Membrane/bending/twist/shear patch, component order와 bottom/top stress sign.
|
||||
7. Fixed-global force/moment identity, `rho_M<=1e-12`, absolute prescribed path와 zero
|
||||
constrained Newton correction.
|
||||
8. Exact fixed-factor sequence, factor one, iterations `1..100`, pass at 100, no 101/cutback/retry.
|
||||
9. NSNR-069/070의 finite-first exact-zero/nonzero branches, inclusive thresholds와 four-channel AND.
|
||||
10. Trial/recovery/solve/output failure rollback과 deterministic assembly/frame/row/diagnostic order.
|
||||
|
||||
### 6.2 Factor-one blocking equilibrium contract
|
||||
|
||||
각 nonlinear case의 accepted factor-one state에 대해
|
||||
|
||||
\[
|
||||
\mathbf a_{F,I}=\mathbf F_I^{appl},\qquad
|
||||
\mathbf c_{F,I}=\mathbf F_I^{react},
|
||||
\]
|
||||
|
||||
\[
|
||||
\mathbf a_{M,I}=(\mathbf x_I-\mathbf 0)\times\mathbf F_I^{appl}
|
||||
+\mathbf M_I^{appl},\qquad
|
||||
\mathbf c_{M,I}=(\mathbf x_I-\mathbf 0)\times\mathbf F_I^{react}
|
||||
+\mathbf M_I^{react}
|
||||
\]
|
||||
|
||||
를 stable source-node order로 계산한다. `x=X+u`이고 applied physical moment는 formulation
|
||||
§13.4의 effective physical-work moment다. Define
|
||||
|
||||
\[
|
||||
\mathbf e_F=\sum_I(\mathbf a_{F,I}+\mathbf c_{F,I}),\quad
|
||||
S_F=\max\left(\sum_I\|\mathbf a_{F,I}\|_2,
|
||||
\sum_I\|\mathbf c_{F,I}\|_2\right),
|
||||
\]
|
||||
|
||||
\[
|
||||
\mathbf e_M=\sum_I(\mathbf a_{M,I}+\mathbf c_{M,I}),\quad
|
||||
S_M=\max\left(\sum_I\|\mathbf a_{M,I}\|_2,
|
||||
\sum_I\|\mathbf c_{M,I}\|_2\right).
|
||||
\]
|
||||
|
||||
Force와 moment는 각각 `rho_F=||e_F||2/S_F`, `rho_M=||e_M||2/S_M`로 검사하고 둘 다
|
||||
`<=1e-8`이어야 한다. 이 threshold는 승인된 nonlinear acceptance value이며,
|
||||
unclamped sum-of-contribution scale과 dimension-separated form은 승인된 linear MITC4
|
||||
global-equilibrium convention을 유지한다. `S=0`이면 balance도
|
||||
exact zero일 때만 `0`, 아니면 fail하며 absolute floor, `max(1,S)` 또는 zero clamp를 두지 않는다.
|
||||
|
||||
Accepted free residual은 cross-unit combined norm을 만들지 않는다. Factor-one accepted trial의
|
||||
free translation-force와 free rotation-moment rows가 각각 NSNR-069의 exact gate를 다시
|
||||
재현해야 한다: matching external scale이 nonzero이면 approved infinity-norm relative gate
|
||||
`<=1e-2`, exact zero이면 typed absolute `<=1e-3` force 또는 force-length다. 두 channel 모두
|
||||
finite-first로 통과해야 한다.
|
||||
|
||||
### 6.3 Downstream reference comparisons
|
||||
|
||||
- `shellnl-meshfine-s4-final`: 사용자가 요청한 mesh-refined primary nonlinear case.
|
||||
- `shellnl-s4-final`: coarse nonlinear companion regression.
|
||||
- `shell-s4-linear-limit`: existing linear-limit/source-identity regression.
|
||||
- `shellnl-meshfine-02-s4-final`: merge 후 추가된 post-closure nonlinear case. 과거 canonical
|
||||
Stage 6 `reference-comparison.md`의 비교 대상이 아니며 merge된 current code로 별도 실행·비교한다.
|
||||
|
||||
각 case의 `U1/U2/U3`는 blocking이고 `UR1/UR2/UR3`는 warning-only다. Coarse/fine은 각자의
|
||||
input/CSV와 독립 family로 비교하며 cross-mesh interpolation, row collapse 또는 observed-order
|
||||
claim을 만들지 않는다. Local RF/RM family는 common external tolerance로 오차를 전부
|
||||
기록하지만 review-only다. `RM3`와 stress는 수치 comparison에서 제외한다.
|
||||
|
||||
### 6.4 Post-closure additive case boundary
|
||||
|
||||
`shellnl-meshfine-02-s4-final`은 729 nodes, 676 S4 elements, `NLGEOM=YES`,
|
||||
`*STATIC 0.1,1.,0.001,0.1`, all-six-DOF `Set-2` 104 constrained nodes를 가진다. Exact
|
||||
factor-one displacement/reaction/stress CSV는 각각 729/729/5,408 rows이며 audited key는
|
||||
unique이고 required numeric value는 finite다. U1/U2/U3 2,187 rows는 blocking,
|
||||
UR1/UR2/UR3 2,187 rows는 warning-only, local RF1/RF2 208 rows, RF3 104 rows와 physical
|
||||
spatial RM1/RM2 208 rows는 review-only다. RM3와 stress는 excluded다.
|
||||
|
||||
Internal factor-one families는 fine case와 같은 row/gate 구조를 사용한다: free force residual
|
||||
1,875 rows, free moment residual 1,875 rows, global force balance 3 components와 global moment
|
||||
balance 3 components다. External family는 `docs/TOLERANCE.md`, internal free residual과 global
|
||||
balance는 Sections 6.2의 승인 gate를 그대로 사용한다. 이 문서 addendum은 comparison success를
|
||||
판정하지 않으며 Implementation Agent가 merge된 current code의 별도 evidence를 소유한다.
|
||||
|
||||
## 7. Required Revisions
|
||||
|
||||
### Formulation Agent
|
||||
|
||||
없음. §11.4/§13.4의 reaction, spatial moment와 global balance 의미는 revised requirements를
|
||||
충족한다.
|
||||
|
||||
### Research Agent
|
||||
|
||||
없음. Stored fine-mesh case와 internal invariant portfolio가 이번 I/O gate에 충분하다.
|
||||
|
||||
### I/O Definition Agent
|
||||
|
||||
`reference-model.md`의 logical quantities와 source identity를 최종 projection으로 연결한다.
|
||||
`AUDIT-001`의 balance error, constrained reaction resultant, accepted free residual을 별도
|
||||
quantity로 유지한다. Current-arm/spatial-moment semantics와 factor-one identity를 보존하고
|
||||
local RF/RM review-only disposition을 blocking으로 되돌리지 않는다.
|
||||
|
||||
## 8. Downstream Handoff
|
||||
|
||||
Coordinator를 통해 I/O Definition Agent에 전달한다.
|
||||
|
||||
- `pass-for-io-definition`; blockers: 없음.
|
||||
- External families는 `docs/TOLERANCE.md`를 그대로 사용한다. Independent absolute floor,
|
||||
averaging, collapse, source-order matching, clamp 또는 calibration gate를 추가하지 않는다.
|
||||
- Internal factor-one global force/moment balance는 Section 6.2의 dimension-separated normalized
|
||||
`1e-8` gate, accepted free residual은 NSNR-069 force/moment gate를 사용한다.
|
||||
- Fine primary와 coarse companion nonlinear cases 모두 U blocking/UR warning-only를 유지한다.
|
||||
- Post-closure `shellnl-meshfine-02-s4-final`도 같은 U/UR 및 local RF/RM disposition을 사용하되,
|
||||
과거 canonical comparison/Release verdict에 소급 포함하지 않고 별도 current-code verification으로
|
||||
보고한다.
|
||||
- Local RF1/RF2, RF3, spatial RM1/RM2는 separate review-only families이며 error/precheck를
|
||||
생략하지 않는다. RM3/stress는 excluded다.
|
||||
- Fine optional stress identity anomaly는 그대로 기록하고 artifact를 수정하지 않는다.
|
||||
- Abaqus S4와 FESA MITC4의 formulation, integration, stabilization 또는 내부 알고리즘
|
||||
동등성을 주장하지 않는다.
|
||||
@@ -1,346 +0,0 @@
|
||||
# Nonlinear Static Newton-Raphson Reference Model
|
||||
|
||||
## 1. Metadata
|
||||
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- source_requirements: `docs/nonlinear-static-newton-raphson/requirements.md`
|
||||
- source_requirements_sha256: `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`
|
||||
- source_research: `docs/nonlinear-static-newton-raphson/research.md`
|
||||
- source_formulation: `docs/nonlinear-static-newton-raphson/formulation.md`
|
||||
- source_numerical_review: `docs/nonlinear-static-newton-raphson/numerical-review.md`
|
||||
- decision_source: `USER-DECISION-004 option 1`
|
||||
- balance_gate_decision: user-approved factor-one global force/moment normalized gate `<=1e-8`
|
||||
- status: `pass-for-io-definition`
|
||||
- owner_agent: `numerical-review-agent`
|
||||
- date: `2026-08-28`
|
||||
- post_closure_addendum_date: `2026-08-29`
|
||||
- post_closure_additive_case: `shellnl-meshfine-02-s4-final`
|
||||
- artifact_policy: `read-only-existing-files`
|
||||
- external_tolerance_policy: `docs/TOLERANCE.md`
|
||||
|
||||
이 문서는 logical quantity, source identity, component matching, row precheck와
|
||||
blocking/warning-only/review-only 분류를 정의한다. 최종 HDF5 dataset projection은 I/O
|
||||
Definition Agent 소유이며 이 문서에는 dataset path를 정의하지 않는다.
|
||||
|
||||
## 2. Reference Acceptance Scope
|
||||
|
||||
승인 closure 계약의 세 stored case를 유지하고 merge 후 별도 검증할 한 case를 추가한다.
|
||||
|
||||
- `shellnl-meshfine-s4-final`: 사용자가 추가하고 검증을 요청한 729-node/676-element
|
||||
mesh-refined nonlinear primary case. External `U1/U2/U3`와 factor-one internal equilibrium은
|
||||
blocking이다.
|
||||
- `shellnl-s4-final`: 49-node/36-element coarse nonlinear companion regression. Fine case와
|
||||
별도 reference에 대해 external `U1/U2/U3`와 factor-one internal equilibrium을 blocking으로
|
||||
검증한다.
|
||||
- `shell-s4-linear-limit`: 같은 coarse topology의 `NLGEOM=NO` linear-limit/source-identity
|
||||
regression. Nonlinear response evidence로 부르지 않는다.
|
||||
- `shellnl-meshfine-02-s4-final`: 729-node/676-element post-closure nonlinear additive case.
|
||||
과거 canonical Stage 6 `reference-comparison.md`에는 포함되지 않았으며 merge된 current code로
|
||||
별도 verification한다. 이 pending comparison은 기존 세 case의 승인 gate 또는 Release verdict를
|
||||
소급 변경하지 않는다.
|
||||
|
||||
모든 selected case에서 displacement `U1/U2/U3`는 blocking, `UR1/UR2/UR3`는
|
||||
warning-only다. Coarse/fine/post-closure local nodal `RF1/RF2/RF3`와 physical spatial `RM1/RM2`는
|
||||
common external policy로 exact error/precheck evidence를 만들되 review-only이고 전체 blocking
|
||||
verdict를 바꾸지 않는다. Local `RM3`와 stress는 numerical comparison에서 제외한다.
|
||||
|
||||
Coarse와 fine은 각자의 input/CSV에 독립적으로 비교한다. 두 mesh 사이 node interpolation,
|
||||
row pairing, averaging, collapse, observed convergence order 또는 direct coarse/fine equality
|
||||
gate를 만들지 않는다. Fine case 추가는 Abaqus S4와 FESA MITC4의 element formulation,
|
||||
integration, stabilization 또는 internal behavior equivalence를 의미하지 않는다.
|
||||
`shellnl-meshfine-02-s4-final`도 자기 input/CSV에만 독립적으로 비교하고 기존 fine case와
|
||||
cross-case equality 또는 mesh-convergence gate를 만들지 않는다.
|
||||
|
||||
## 3. Reference Case Inventory
|
||||
|
||||
### 3.1 Exact input and CSV paths
|
||||
|
||||
| case id | purpose | exact path | required disposition | observed status |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| `shell-s4-linear-limit` | linear input | `reference/shell/shell.inp` | required | readable; S4, 49 nodes, 36 elements, `NLGEOM=NO` |
|
||||
| `shell-s4-linear-limit` | displacement reference | `reference/shell/shell displacements.csv` | required blocking/warning | 49 unique finite rows; single final static state |
|
||||
| `shell-s4-linear-limit` | reaction inventory | `reference/shell/shell reactions.csv` | inspection-only | 49 unique finite rows |
|
||||
| `shell-s4-linear-limit` | stress ordering inventory | `reference/shell/shell stresses.csv` | optional inspection | 288 rows; element labels `1..36` in contiguous ascending blocks |
|
||||
| `shellnl-s4-final` | coarse nonlinear input | `reference/shellNL/shellNL.inp` | required | readable; S4, 49 nodes, 36 elements, `NLGEOM=YES` |
|
||||
| `shellnl-s4-final` | displacement reference | `reference/shellNL/shellNL displacements.csv` | required blocking/warning | 49 unique finite rows; exact factor-one Frame |
|
||||
| `shellnl-s4-final` | local reaction reference | `reference/shellNL/shellNL reactions.csv` | required review-only | 49 unique finite inventory rows; exact factor-one Frame |
|
||||
| `shellnl-s4-final` | stress inventory | `reference/shellNL/shellNL stresses.csv` | optional inspection | 288 rows; element labels `1..36` in contiguous ascending blocks |
|
||||
| `shellnl-meshfine-s4-final` | fine nonlinear input | `reference/shellNL-meshfine/shellNL-meshfine.inp` | required | readable; S4, 729 nodes, 676 elements, `NLGEOM=YES` |
|
||||
| `shellnl-meshfine-s4-final` | displacement reference | `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | required blocking/warning | 729 unique finite rows; exact factor-one Frame |
|
||||
| `shellnl-meshfine-s4-final` | local reaction reference | `reference/shellNL-meshfine/shellNL-meshfine reactions.csv` | required review-only | 729 unique finite inventory rows; exact factor-one Frame |
|
||||
| `shellnl-meshfine-s4-final` | stress inventory | `reference/shellNL-meshfine/shellNL-meshfine stresses.csv` | optional inspection | 5,408 rows in ascending element blocks; one malformed optional node label `ss` |
|
||||
| `shellnl-meshfine-02-s4-final` | post-closure nonlinear input | `reference/shellNL-meshfine_02/shellNL-meshfine_02.inp` | required for separate verification | readable; S4, 729 nodes, 676 elements, `NLGEOM=YES` |
|
||||
| `shellnl-meshfine-02-s4-final` | displacement reference | `reference/shellNL-meshfine_02/shellNL-meshfine_02 displacements.csv` | required blocking/warning | 729 unique finite rows; exact factor-one Frame |
|
||||
| `shellnl-meshfine-02-s4-final` | local reaction reference | `reference/shellNL-meshfine_02/shellNL-meshfine_02 reactions.csv` | required review-only | 729 unique finite inventory rows; exact factor-one Frame |
|
||||
| `shellnl-meshfine-02-s4-final` | stress inventory | `reference/shellNL-meshfine_02/shellNL-meshfine_02 stresses.csv` | optional inspection | 5,408 unique finite inventory rows; excluded from numerical comparison |
|
||||
|
||||
`reference/shell/shell stresses.csv`는 사용자 변경 후 element label `1..36` 순서로 저장되어
|
||||
있음을 확인했다. Row order는 matching identity가 아니며 deterministic inspection display에만
|
||||
사용한다. Fine stress의 `Element Label=1`, `SNEG`, `Node Label=ss` 한 행은 optional excluded
|
||||
artifact issue다. 이 파일을 rename, repair, normalize 또는 rewrite하지 않는다.
|
||||
|
||||
Coarse와 fine nonlinear input은 homogeneous isotropic material `E=2.1e11`, `nu=0.3`,
|
||||
shell thickness `0.5`, center node-set load `DOF 3 = -100000`, all-six-DOF perimeter support,
|
||||
`*STATIC 0.1,1.,0.001,0.1`을 사용한다. Fine case는 같은 physical setup의 refined topology다.
|
||||
|
||||
Post-closure `_02` input은 같은 fine topology, material, section, `Set-2` 104-node all-six-DOF
|
||||
support와 `*STATIC`을 사용하지만 source load는 `F1=+1e8`, `F2=+1e8`, `F3=-1e8`이다.
|
||||
따라서 기존 fine case의 `F3=-1e5`와 동일 case로 취급하지 않는다.
|
||||
|
||||
### 3.2 Read-only artifact hashes
|
||||
|
||||
| exact path | SHA-256 |
|
||||
| --- | --- |
|
||||
| `reference/shell/shell.inp` | `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF` |
|
||||
| `reference/shell/shell displacements.csv` | `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B` |
|
||||
| `reference/shell/shell reactions.csv` | `0E34EEC27E700C3C0C744C1DAFD8A3B95EFEF34B8616FE96665876586FE82D41` |
|
||||
| `reference/shell/shell stresses.csv` | `2B75A5B0DEB045A283C9BB7E9B1153B79F7537FF487214BF4A23316B59B660A7` |
|
||||
| `reference/shellNL/shellNL.inp` | `4BF3ECB0F7F1E8462C573E993DBC97AC5D920C91CF6F23AD4C6891D77FFBADA2` |
|
||||
| `reference/shellNL/shellNL displacements.csv` | `4E0F99CA9372B1ADF7FAF102F43BC0B887DC743FDEDA378E4342D2CF8E0C0786` |
|
||||
| `reference/shellNL/shellNL reactions.csv` | `001CB1541A9E94424E5E650509D46BC8724970DF4DE47184D9DB09C7938AB069` |
|
||||
| `reference/shellNL/shellNL stresses.csv` | `5500E5114B1C44887528E30CEC054A1EB0F68BE3F4B8CE81FA59FC74A881483F` |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine.inp` | `40DF1CE77311C8D799564A21A60F3BDEBB8148D52CAE22B7292FDFAD32018220` |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | `740819FF8AED0E279961581F7CDBFA12784CFBA3A488C35A652E80103F64433F` |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine reactions.csv` | `AEB01C98C596792B0E5F2B86A81945CAB0BEB0C6969CFC6738C6F81DF1F94363` |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine stresses.csv` | `6D6213AB5DB9D6B1F5FBD641367D08BACC805967B6C5A95BCE0E1A5395377782` |
|
||||
| `reference/shellNL-meshfine_02/shellNL-meshfine_02.inp` | `DAEC7592489837B165D55382CAEAF53E21D84D804AA38C73CBF35E5CC0BAC3E5` |
|
||||
| `reference/shellNL-meshfine_02/shellNL-meshfine_02 displacements.csv` | `18EC051D265E0BD2C441FE73C08E097B83EE85BC2EB32FFBE3AF0DCB9CB89672` |
|
||||
| `reference/shellNL-meshfine_02/shellNL-meshfine_02 reactions.csv` | `59348996E0CE80687C9EB2747EEABF84ACED4CE97F8A56F0FFDDBDCA404A57A3` |
|
||||
| `reference/shellNL-meshfine_02/shellNL-meshfine_02 stresses.csv` | `933A72025A0E897FD65F81C913E53D1730BD551CE95CBDEA96F9F99B10BE8B18` |
|
||||
|
||||
Post-closure artifact byte counts는 input `56,554`, displacement `110,555`, reaction
|
||||
`109,000`, stress `1,036,916`이다. Hash와 byte count는 read-only audit evidence이며 artifact를
|
||||
rewrite하거나 canonical Stage 6 evidence로 소급 재분류하지 않는다.
|
||||
|
||||
## 4. Source Identity and Component Contract
|
||||
|
||||
### 4.1 Case and accepted-state identity
|
||||
|
||||
- Instance identity는 case-insensitive semantic match다. Artifact spelling `Part-1-1`과
|
||||
`PART-1-1`은 같은 instance이지만 file text를 rewrite하지 않는다.
|
||||
- 세 nonlinear case required rows의 exact CSV Frame은
|
||||
`Increment 10: Step Time = 1.000`이며 accepted factor-one state에 대응한다.
|
||||
- Linear case에는 `Frame` column이 없고 single final static state로 해석한다.
|
||||
- Row order는 identity가 아니다. Stable key match 후 deterministic reporting order로만 정렬한다.
|
||||
|
||||
### 4.2 Nodal displacement and rotation
|
||||
|
||||
CSV `U-U1/U-U2/U-U3`는 logical `U1/U2/U3`, `UR-UR1/UR-UR2/UR-UR3`는
|
||||
logical `UR1/UR2/UR3`에 대응한다. Key는
|
||||
|
||||
```text
|
||||
(case_id, accepted_state, canonical_instance_name, source_node_label, component)
|
||||
```
|
||||
|
||||
이다. Coarse/linear은 labels `1..49`, fine과 post-closure `_02`는 `1..729`를 각각 정확히 한 번 요구한다.
|
||||
U는 global length/blocking, UR은 fixed-initial global rotation-vector/warning-only다.
|
||||
|
||||
### 4.3 Local reaction review contract
|
||||
|
||||
Reaction source rows는 input `Set-2` constraint mask로 선택한다.
|
||||
|
||||
- coarse: `1, 3..9, 14..17, 22..33` — 24 nodes, all six DOFs constrained.
|
||||
- fine: `1, 3..9, 34..57, 82..153` — 104 nodes, all six DOFs constrained.
|
||||
- post-closure `_02`: fine과 같은 exact `Set-2` inventory — 104 nodes, all six DOFs constrained.
|
||||
|
||||
다른 CSV node rows는 file/schema/finite inventory지만 local reaction numerical rows가 아니다.
|
||||
Free FESA entries는 reaction이 아니라 accepted free residual evidence다.
|
||||
|
||||
| CSV components | logical quantity | matching FESA meaning | disposition |
|
||||
| --- | --- | --- | --- |
|
||||
| `RF-RF1`, `RF-RF2` | in-plane local reaction force | constrained translational full residual, global force | `review-only` |
|
||||
| `RF-RF3` | transverse local reaction force | constrained translational full residual, global force | `review-only` |
|
||||
| `RM-RM1`, `RM-RM2` | tangent-plane physical reaction moment | constrained generalized residual converted by `J_l(phi)^(-T)`, global spatial force-length | `review-only` |
|
||||
| `RM-RM3` | director/drilling-axis row | no approved physical external equivalence target | `excluded` |
|
||||
|
||||
Raw generalized rotational residual을 CSV RM에 직접 match하지 않는다. Review-only는 row omission을
|
||||
허용한다는 뜻이 아니다. Exact row precheck와 common-policy error/RMS를 모두 보고하되 그 결과가
|
||||
blocking verdict를 변경하지 않는다는 뜻이다.
|
||||
|
||||
### 4.4 Distinct factor-one equilibrium quantities
|
||||
|
||||
각 nonlinear case에서 같은 accepted factor-one state를 사용한다.
|
||||
|
||||
| logical quantity | source identity / projection | components | disposition |
|
||||
| --- | --- | --- | --- |
|
||||
| accepted free residual | input mask로 결정한 stable free `(instance,node,global DOF component)` rows; force와 moment channel 분리 | free `UX/UY/UZ`; free `URX/URY/URZ` generalized covectors | `blocking-internal` |
|
||||
| constrained reaction resultant | constrained source rows만 current arm과 spatial physical moment로 합산 | force `[1,2,3]`; moment `[1,2,3]` | `review-only-summary` |
|
||||
| applied-plus-reaction balance error | all resolved applied sources plus constrained reactions; global origin `[0,0,0]`; `x=X+u`; physical spatial nodal moments | force `[1,2,3]`; moment `[1,2,3]` | `blocking-internal` |
|
||||
|
||||
Constrained reaction resultant force is `sum(F_react)`. Its moment is
|
||||
`sum(x cross F_react + M_react)`. Balance error adds the corresponding applied force and
|
||||
`x cross F_appl + M_appl`. Accepted free residual is neither sum. 세 quantity는 exact
|
||||
source/state identity를 공유하지만 interchangeable하지 않다.
|
||||
|
||||
현재 stored case의 constrained prescribed `u=phi=0` 때문에 support current arm과 initial arm,
|
||||
generalized moment와 spatial moment가 수치적으로 일치한다. 이는 supported general nonzero
|
||||
prescribed translation/rotation에서 initial arm/raw rotational residual을 재사용할 근거가 아니다.
|
||||
|
||||
### 4.5 Stress inventory and exclusion
|
||||
|
||||
Stress inspection key는
|
||||
|
||||
```text
|
||||
(case_id, accepted_state, instance, element label,
|
||||
element-corner node label, SPOS/SNEG section surface, component)
|
||||
```
|
||||
|
||||
이다. Stored stress는 element-corner SPOS/SNEG rows이고 FESA 승인 recovery는 midsurface Gauss
|
||||
locations의 direct bottom/middle/top `[S11,S22,S12]`다. Nodal extrapolation/averaging을 만들지
|
||||
않으며 `S-S11/S-S22/S-S12/S-S33` 어느 것도 external family에 포함하지 않는다.
|
||||
|
||||
### 4.6 External comparison families
|
||||
|
||||
| family id | components / source rows | rows | units / coordinates | disposition |
|
||||
| --- | --- | ---: | --- | --- |
|
||||
| `linear.translation` | U1/U2/U3; nodes `1..49` | 147 | length / global | `blocking` |
|
||||
| `linear.rotation` | UR1/UR2/UR3; nodes `1..49` | 147 | dimensionless / fixed-initial global | `warning-only` |
|
||||
| `coarse.translation` | U1/U2/U3; nodes `1..49` | 147 | length / global | `blocking` |
|
||||
| `coarse.rotation` | UR1/UR2/UR3; nodes `1..49` | 147 | dimensionless / fixed-initial global | `warning-only` |
|
||||
| `coarse.local_reaction_inplane_force` | RF1/RF2; 24 constrained nodes | 48 | force / global shell plane | `review-only` |
|
||||
| `coarse.local_reaction_transverse_force` | RF3; 24 constrained nodes | 24 | force / global transverse | `review-only` |
|
||||
| `coarse.local_reaction_physical_moment` | RM1/RM2; 24 constrained nodes | 48 | force-length / global spatial | `review-only` |
|
||||
| `fine.translation` | U1/U2/U3; nodes `1..729` | 2,187 | length / global | `blocking` |
|
||||
| `fine.rotation` | UR1/UR2/UR3; nodes `1..729` | 2,187 | dimensionless / fixed-initial global | `warning-only` |
|
||||
| `fine.local_reaction_inplane_force` | RF1/RF2; 104 constrained nodes | 208 | force / global shell plane | `review-only` |
|
||||
| `fine.local_reaction_transverse_force` | RF3; 104 constrained nodes | 104 | force / global transverse | `review-only` |
|
||||
| `fine.local_reaction_physical_moment` | RM1/RM2; 104 constrained nodes | 208 | force-length / global spatial | `review-only` |
|
||||
| `meshfine02.translation` | U1/U2/U3; nodes `1..729` | 2,187 | length / global | `blocking` |
|
||||
| `meshfine02.rotation` | UR1/UR2/UR3; nodes `1..729` | 2,187 | dimensionless / fixed-initial global | `warning-only` |
|
||||
| `meshfine02.local_reaction_inplane_force` | RF1/RF2; 104 constrained nodes | 208 | force / global shell plane | `review-only` |
|
||||
| `meshfine02.local_reaction_transverse_force` | RF3; 104 constrained nodes | 104 | force / global transverse | `review-only` |
|
||||
| `meshfine02.local_reaction_physical_moment` | RM1/RM2; 104 constrained nodes | 208 | force-length / global spatial | `review-only` |
|
||||
|
||||
### 4.7 Internal blocking verification families
|
||||
|
||||
| family id | exact rows/components | gate |
|
||||
| --- | --- | --- |
|
||||
| `coarse.accepted_free_force_residual` | 75 free translation DOFs | NSNR-069 force channel, factor one |
|
||||
| `coarse.accepted_free_moment_residual` | 75 free rotation DOFs | NSNR-069 moment channel, factor one |
|
||||
| `coarse.global_force_balance` | 3 global balance-error components | normalized `<=1e-8` |
|
||||
| `coarse.global_moment_balance` | 3 global balance-error components | normalized `<=1e-8` |
|
||||
| `fine.accepted_free_force_residual` | 1,875 free translation DOFs | NSNR-069 force channel, factor one |
|
||||
| `fine.accepted_free_moment_residual` | 1,875 free rotation DOFs | NSNR-069 moment channel, factor one |
|
||||
| `fine.global_force_balance` | 3 global balance-error components | normalized `<=1e-8` |
|
||||
| `fine.global_moment_balance` | 3 global balance-error components | normalized `<=1e-8` |
|
||||
| `meshfine02.accepted_free_force_residual` | 1,875 free translation DOFs | NSNR-069 force channel, factor one |
|
||||
| `meshfine02.accepted_free_moment_residual` | 1,875 free rotation DOFs | NSNR-069 moment channel, factor one |
|
||||
| `meshfine02.global_force_balance` | 3 global balance-error components | normalized `<=1e-8` |
|
||||
| `meshfine02.global_moment_balance` | 3 global balance-error components | normalized `<=1e-8` |
|
||||
|
||||
이 internal families에는 Abaqus CSV value 또는 `docs/TOLERANCE.md`를 적용하지 않는다.
|
||||
Approved analytical/invariant gates이며 exact definitions는 `numerical-review.md` §6.2다.
|
||||
|
||||
## 5. Row Prechecks
|
||||
|
||||
Tolerance 또는 internal metric 전에 다음을 검사한다.
|
||||
|
||||
1. 각 case의 exact declared input과 해당 disposition에 필요한 CSV가 존재하고 readable하다.
|
||||
2. Header는 surrounding whitespace만 trim하고 required names/components가 모두 있어야 한다.
|
||||
3. Nonlinear required rows의 Frame은 exact factor-one identity여야 한다.
|
||||
4. Wide CSV는 Section 4 contract로 component rows에 결정적으로 expand한다.
|
||||
5. Wide key와 expanded key는 unique해야 한다. Duplicate는 affected family를 tolerance 전에 fail한다.
|
||||
6. Input node inventory와 source constraint mask로 expected key set을 만든다. CSV zero values 또는
|
||||
row position에서 reaction identity를 추론하지 않는다.
|
||||
7. FESA와 reference projected key sets는 exact equal해야 한다. Missing과 extra rows를 모두 fail한다.
|
||||
8. Required FESA/CSV/internal values와 derived scales/norms는 모두 finite여야 한다.
|
||||
9. Internal free residual rows는 exact free mask와 force/moment partition을 보존한다. Global balance는
|
||||
모든 applied source와 constrained reaction을 stable source order로 한 번씩만 사용한다.
|
||||
10. Local review rows는 global resultant로 collapse하거나 대체하지 않는다. Review precheck failure는
|
||||
deterministic review failure로 기록하지만 blocking verdict를 변경하지 않는다.
|
||||
11. Warning-only precheck/tolerance failure는 deterministic warning을 만들고 blocking verdict를
|
||||
변경하지 않는다. Blocking precheck failure는 전체 comparison을 fail한다.
|
||||
12. Row omission/synthesis, averaging, source-order matching, clamp, normalization 또는 artifact repair를
|
||||
허용하지 않는다.
|
||||
|
||||
Observed read-only nodal CSV audit:
|
||||
|
||||
| CSV | wide rows | duplicate keys | nonfinite required values | status |
|
||||
| --- | ---: | ---: | ---: | --- |
|
||||
| `reference/shell/shell displacements.csv` | 49 | 0 | 0 | readable |
|
||||
| `reference/shellNL/shellNL displacements.csv` | 49 | 0 | 0 | readable |
|
||||
| `reference/shellNL/shellNL reactions.csv` | 49 | 0 | 0 | readable |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | 729 | 0 | 0 | readable |
|
||||
| `reference/shellNL-meshfine/shellNL-meshfine reactions.csv` | 729 | 0 | 0 | readable |
|
||||
| `reference/shellNL-meshfine_02/shellNL-meshfine_02 displacements.csv` | 729 | 0 | 0 | readable |
|
||||
| `reference/shellNL-meshfine_02/shellNL-meshfine_02 reactions.csv` | 729 | 0 | 0 | readable |
|
||||
| `reference/shellNL-meshfine_02/shellNL-meshfine_02 stresses.csv` | 5,408 | 0 | 0 | readable; optional excluded inventory |
|
||||
|
||||
## 6. Tolerance and Blocking/Warning Policy
|
||||
|
||||
### 6.1 External families
|
||||
|
||||
Section 4.6의 모든 external blocking, warning-only와 review-only error report는
|
||||
`docs/TOLERANCE.md`를 그대로 사용한다.
|
||||
|
||||
- Reference-only `S=max(abs(reference_i))`, near-zero band `B=0.01*S`.
|
||||
- `abs(reference_i)<=B`이면 `abs(fesa-reference)<=B`.
|
||||
- 그 외 row는 relative error `<=0.05`.
|
||||
- 모든 row와 `RMS(error)/S<=0.01`이 함께 pass해야 family가 pass한다.
|
||||
- Independent absolute floor, `max(1,S)`, omission, averaging 또는 zero clamp는 없다.
|
||||
- `S=0`이면 모든 FESA 값도 exact zero일 때만 pass한다.
|
||||
|
||||
Observed reference-only scales는 reader/family audit evidence이며 calibration 값이 아니다.
|
||||
|
||||
| family | rows | `S` | `B=0.01*S` |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| `linear.translation` | 147 | `2.37408203e-5` | `2.37408203e-7` |
|
||||
| `linear.rotation` | 147 | `7.60725743e-6` | `7.60725743e-8` |
|
||||
| `coarse.translation` | 147 | `2.37408203e-5` | `2.37408203e-7` |
|
||||
| `coarse.rotation` | 147 | `7.60725743e-6` | `7.60725743e-8` |
|
||||
| `coarse.local_reaction_inplane_force` | 48 | `1.91663182` | `1.91663182e-2` |
|
||||
| `coarse.local_reaction_transverse_force` | 24 | `1.17769805e4` | `1.17769805e2` |
|
||||
| `coarse.local_reaction_physical_moment` | 48 | `1.95418418e4` | `1.95418418e2` |
|
||||
| `fine.translation` | 2,187 | `2.57957054e-5` | `2.57957054e-7` |
|
||||
| `fine.rotation` | 2,187 | `6.58704994e-6` | `6.58704994e-8` |
|
||||
| `fine.local_reaction_inplane_force` | 208 | `5.38827419e-1` | `5.38827419e-3` |
|
||||
| `fine.local_reaction_transverse_force` | 104 | `2.78506128e3` | `2.78506128e1` |
|
||||
| `fine.local_reaction_physical_moment` | 208 | `4.71557520e3` | `4.71557520e1` |
|
||||
| `meshfine02.translation` | 2,187 | `0.0257712454` | `0.000257712454` |
|
||||
| `meshfine02.rotation` | 2,187 | `0.00658291345` | `0.0000658291345` |
|
||||
| `meshfine02.local_reaction_inplane_force` | 208 | `3347707` | `33477.07` |
|
||||
| `meshfine02.local_reaction_transverse_force` | 104 | `2802821.5` | `28028.215` |
|
||||
| `meshfine02.local_reaction_physical_moment` | 208 | `4722449.5` | `47224.495` |
|
||||
|
||||
Blocking family의 precheck/row/RMS failure만 전체 external-reference verdict를 fail한다.
|
||||
Warning-only는 warning, review-only는 deterministic review finding/error table을 남기지만
|
||||
blocking verdict를 바꾸지 않는다. `RM3`와 stress는 family를 만들지 않는다.
|
||||
|
||||
### 6.2 Internal equilibrium families
|
||||
|
||||
- Accepted free force/moment residual은 factor-one accepted trial에서 NSNR-069을 그대로
|
||||
재현한다. Nonzero matching external scale이면 infinity-norm relative `<=1e-2`; exact-zero
|
||||
scale이면 typed absolute `<=1e-3` force 또는 force-length다.
|
||||
- Global force/moment balance는 `numerical-review.md` §6.2의 sum-of-contribution scale과
|
||||
dimension-separated normalized metric을 사용하며 각각 `<=1e-8`이다.
|
||||
- Internal gate에 external family tolerance, absolute floor, reference-derived scale 또는 local
|
||||
nodal reaction error를 섞지 않는다.
|
||||
|
||||
## 7. Open Issues and I/O Handoff
|
||||
|
||||
Open issues blocking I/O Definition: 없음.
|
||||
|
||||
Post-closure verification status: `shellnl-meshfine-02-s4-final`은 artifact/schema/family contract가
|
||||
준비되었지만 과거 canonical Stage 6 comparison에는 포함되지 않았다. Merge된 current code의
|
||||
별도 실행과 comparison evidence는 Implementation Agent 소유이며 이 inventory는 pass/fail을
|
||||
선언하지 않는다. 이 pending evidence는 기존 feature closure 또는 Release verdict를 바꾸지 않는다.
|
||||
|
||||
I/O Definition Agent handoff through Coordinator:
|
||||
|
||||
- Fine primary와 coarse companion nonlinear case의 accepted factor-one identity를 보존한다.
|
||||
- Post-closure `_02`는 기존 fine case와 독립 case/family로 projection하고 별도 current-code
|
||||
verification에 사용한다.
|
||||
- Section 4.4의 `(a)` applied-plus-reaction balance error, `(b)` constrained reaction resultant,
|
||||
`(c)` accepted free residual을 separate logical quantities로 최종 projection한다.
|
||||
- Global moment는 origin `[0,0,0]`, current `X+u` force arm과 spatial physical nodal moment를
|
||||
사용한다. General nonzero prescribed translation/rotation에서도 initial arm/raw rotational
|
||||
residual을 재사용하지 않는다.
|
||||
- Local RF/RM은 exact source-key/schema/inventory/finite/error reporting이 있는 review-only다.
|
||||
Local rows를 global sum으로 대체하거나 blocking으로 되돌리지 않는다.
|
||||
- Approved Gauss direct stress recovery를 유지한다. Optional element-corner stress artifact에
|
||||
맞춘 extrapolation/averaging 또는 stress comparison projection을 만들지 않는다.
|
||||
- Common external tolerance와 exact prechecks를 변경하지 않는다.
|
||||
|
||||
Reference artifact status: required input/displacement/reaction artifacts are present and readable.
|
||||
Optional fine stress identity issue는 transparent nonblocking inventory finding이다. 어떤 reference
|
||||
artifact도 생성, rename, repair, normalize 또는 수정하지 않았다.
|
||||
@@ -1,93 +0,0 @@
|
||||
# Nonlinear Static Newton-Raphson Release Readiness
|
||||
|
||||
본 문서는 당시 revision의 검증·판정 기록이다. 본문에 남긴 원본 보고서 이름과 SHA-256은
|
||||
통합 전 자료의 식별자이며 정리된 현재 파일의 byte hash를 뜻하지 않는다. 원문은 Git
|
||||
`858e87b`의 해당 기능 폴더에서 확인할 수 있다. 현재 진입점과 대응 기록은 [README](README.md)를 따른다.
|
||||
|
||||
## 1. Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| status | `ready-for-release` |
|
||||
| owner_agent | `release-agent` |
|
||||
| date | `2026-08-28` |
|
||||
| authoritative requirements | `requirements.md`, SHA-256 `89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E` |
|
||||
| implementation evidence | `implementation-report.md`, `build-test.md`, `reference-comparison.md` |
|
||||
| physics evidence | `physics-evaluation.md`, SHA-256 `C49011637D57D2F2B71738CA3AF48BEF3256D25078BE049499EBDDDE66DB8538` |
|
||||
| audit baseline | local/origin `feat-nonlinear-static-newton-raphson` HEAD `06861608da5ffa4c09b786c3f5052dc7c6604e1b` before the Coordinator-owned Stage 8 update |
|
||||
| release meaning | FESA feature workflow closure readiness only; publish, deploy, package, tag 또는 external release 권한이 아님 |
|
||||
|
||||
Literal `feature_id`를 선언한 모든 source report는 `nonlinear-static-newton-raphson`과 일치한다.
|
||||
`reference-comparison.md`에는 literal `feature_id` field가 없지만 exact bundle path
|
||||
`docs/nonlinear-static-newton-raphson/verification.md`, title, current SHA-256와 Stage 6
|
||||
handoff chain, 그리고 Physics report의 exact source hash가 같은 feature에 결정적으로 연결한다.
|
||||
상충하는 feature identity는 없으므로 upstream report를 변경하지 않고 nonblocking metadata
|
||||
omission으로 기록한다. `requirements.md`의 `status: draft`, `approved_by: pending user re-approval`과
|
||||
`FESA-REQ-NSNR-069 status: draft`는 stale metadata다.
|
||||
당시 Authoritative `coordination.md`는 그 requirements의 exact hash가 `2026-08-27` 사용자에게 명시적으로
|
||||
재승인되었고 Stage 1이 `passed`임을 기록한다. 당시 Stage 4/5/6 문서도 같은 hash를 입력으로
|
||||
사용하므로 실제 승인·수치 계약과의 모순은 없다.
|
||||
|
||||
## 6. Known Limitations
|
||||
|
||||
1. Coarse/fine local nodal `RF1/RF2/RF3`와 physical spatial `RM1/RM2`에는 six review-only
|
||||
discrepancy families가 남아 있다. Exact source-key/schema/inventory/finite/error report는 유지하지만
|
||||
blocking verdict는 global force/moment balance와 accepted free residual이 결정한다.
|
||||
2. Local `RM3`는 approved physical external comparison target이 없어 excluded다.
|
||||
3. Stored corner `SPOS/SNEG` stress와 FESA direct Gauss `BOTTOM/MIDDLE/TOP` stress는 위치·복구 identity가
|
||||
다르므로 numerical comparison에서 제외된다. Fine optional stress CSV에는 element `1`, `SNEG`의
|
||||
malformed `Node Label=ss` 한 행이 있으며 artifact를 repair하지 않는다.
|
||||
4. `UR1/UR2/UR3` external comparison은 warning-only다. Current portfolio에서는 모두 통과했지만 향후
|
||||
warning exceedance가 blocking failure로 자동 승격되지는 않는다.
|
||||
5. Stored nonlinear plate responses는 weak geometric-nonlinear regime다. Finite-rotation/tangent/objectivity/
|
||||
rollback은 internal invariant tests로 보강했지만 broad large-response benchmark 또는 experimental
|
||||
validation claim은 하지 않는다.
|
||||
6. Original-style MITC4는 curved/distorted/thin nonlinear mesh에서 membrane-locking과 conditioning
|
||||
위험이 있다. MITC4+ 또는 Abaqus `S4/S4R` 성능을 상속한다고 주장하지 않는다.
|
||||
7. 첫 release는 one-step, materially linear, fixed-increment Full Newton 범위다. Limit-point traversal,
|
||||
material nonlinearity, follower/distributed load, adaptive increment와 broader Abaqus keyword compatibility는
|
||||
지원하지 않고 fail-closed한다.
|
||||
8. Rotation-vector principal chart, director/swing/twist branch와 geometry/Jacobian validity 밖의 상태는
|
||||
fail-closed한다. No line search/cutback/retry이므로 difficult path의 automatic recovery를 보장하지 않는다.
|
||||
9. Global force/moment `<=1e-8`은 comparator-owned internal verification gate이며 runtime user setting이나
|
||||
`fesa.env` 계약이 아니다. External CSV families에는 별도로 `docs/TOLERANCE.md`만 적용한다.
|
||||
10. Numerical agreement은 Abaqus formulation, integration, stabilization, state update 또는 recovery의
|
||||
internal equivalence evidence가 아니다.
|
||||
|
||||
## 8. Release Verdict
|
||||
|
||||
- verdict: `ready-for-release`
|
||||
- gate basis: full build/test evidence passed, reference comparison overall status is
|
||||
`pass-for-physics-evaluation`, Physics status is `pass-for-release-agent`, 24/24 must requirements have
|
||||
explicit acceptance/test/reference/release disposition, and no blocking evidence gap remains.
|
||||
- qualification: six local RF/RM findings, stress/RM3 exclusions, warning-only UR와 model-coverage limitations are
|
||||
approved and disclosed nonblocking limitations, not unresolved implementation defects.
|
||||
- feature identity disposition: `reference-comparison.md`의 literal `feature_id` omission은 exact
|
||||
path/title/hash/handoff binding으로 해소되고 contradictory identity가 없으므로 verdict를 낮추지 않는다.
|
||||
- authority boundary: 이 verdict는 internal feature delivery closure recommendation이다. Publish, deploy,
|
||||
package, tag, external release 또는 solver equivalence claim을 승인하지 않는다.
|
||||
|
||||
## 9. Handoff Recommendation
|
||||
|
||||
Coordinator Agent가 이 보고서의 exact path/hash와 `ready-for-release`를 독립 audit한 뒤 Stage 8을
|
||||
`passed`로 기록하고 8-stage workflow를 closure할 것을 권고한다. Evidence gap return 또는 owning
|
||||
sub-agent rework는 필요하지 않다. 사용자가 요청한 commit/push는 Coordinator/root가 Release gate
|
||||
audit 후 별도로 수행해야 하며, 이 Release Agent는 commit, push, tag 또는 publish를 수행하지 않는다.
|
||||
|
||||
## 11. Open Issues
|
||||
|
||||
Blocking open issue는 없다.
|
||||
|
||||
| id | severity | disposition |
|
||||
| --- | --- | --- |
|
||||
| `RELEASE-META-001` | nonblocking documentation | `requirements.md`의 historical draft/pending metadata는 current-hash explicit user approval와 Coordinator Stage 1 pass로 해소된다. Upstream 문서는 이 gate에서 수정하지 않았다. |
|
||||
| `RELEASE-META-002` | nonblocking documentation | `reference-comparison.md`에는 literal `feature_id` field가 없지만 exact bundle path/title/SHA-256/Stage 6 handoff와 Physics source hash가 feature identity를 결정적으로 고정한다. Contradictory identity는 없고 upstream report는 변경하지 않았다. |
|
||||
| `RELEASE-LOCAL-001` | accepted risk | Six local RF/RM families remain review-only findings; global balance/free residual blocking evidence passed. |
|
||||
| `RELEASE-STRESS-001` | accepted limitation | `RM3`와 stored stress numerical comparison은 excluded; fine optional malformed stress row는 read-only로 유지한다. |
|
||||
| `RELEASE-COVERAGE-001` | known limitation | Weak nonlinear stored response와 original MITC4 curved/distorted membrane-locking risk가 broader claims를 제한한다. |
|
||||
|
||||
Missing required report, failed pass status, unresolved defect, missing declared comparison file 또는
|
||||
contradictory acceptance evidence는 발견되지 않았다.
|
||||
|
||||
현재 build·reference·물리 실행 기록은 [검증 보고서](verification.md)에 통합했다. 과거 readiness와 현재 재검증 필요를 구분하며 이 정리는 새로운 release 감사가 아니다.
|
||||
@@ -1,401 +0,0 @@
|
||||
# Nonlinear Static Newton–Raphson 요구조건
|
||||
|
||||
## 1. Metadata
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- title: `Nonlinear Static Analysis Using Newton–Raphson`
|
||||
- status: `draft`
|
||||
- owner_agent: `requirement-agent`
|
||||
- date: `2026-08-27`
|
||||
- approved_by: pending user re-approval
|
||||
- approval_date: pending
|
||||
- authoritative_scope: materially linear, geometrically nonlinear `S4/S4R -> FESA-MITC4`
|
||||
- independence: FESA는 독립 solver이며 Abaqus 또는 Midas의 내부 알고리즘 동등성을 주장하지 않는다.
|
||||
- unit_policy: `.inp` 단위계를 추론하거나 변환하지 않고 사용자가 일관되게 제공한 단위계를 보존한다.
|
||||
|
||||
Parent needs: `NEED-NSNR-001` nonlinear procedure, `NEED-NSNR-002` physics/numerical correctness,
|
||||
`NEED-NSNR-003` state/output integrity, `NEED-NSNR-004` independent verification.
|
||||
|
||||
## 2. Purpose and Expected Behavior
|
||||
FESA는 하나의 지원 nonlinear static step을 scalar load factor로 증가시키며 Full Newton–Raphson으로 각 증분의 평형을 구한다. 수렴한 증분만 atomically commit하고 authoritative accepted result로 기록한다. 기존 linear-static physics와 결과 의미는 보존하되 repository-wide derived output naming은 이 기능과 함께 적용할 승인 방향이다.
|
||||
|
||||
## 3. In Scope
|
||||
- Abaqus source `S4`, `S4R`의 FESA-MITC4 mapping과 homogeneous isotropic linear elasticity
|
||||
- fixed-initial-reference Total Lagrangian geometric nonlinearity와 finite rotational state
|
||||
- same-trial residual/algorithmically consistent tangent, fresh factorization/solve의 Full Newton
|
||||
- fixed scalar load-factor increments, common proportional load/BC path, fixed-global dead `*CLOAD`
|
||||
- factor-1 absolute prescribed `*BOUNDARY` targets와 four-value nonlinear `*STATIC`
|
||||
- four-channel residual/correction convergence, maximum 100 iterations, no line search
|
||||
- separate trial state, atomic commit/rollback, accepted-frame HDF5와 per-iteration text log
|
||||
- deterministic assembly, iteration, frame, result, diagnostic order와 factor-one global reaction/equilibrium 및 stored-reference verification
|
||||
|
||||
## 4. Out Of Scope
|
||||
- material nonlinearity, nonlinear material history, combined material/geometric nonlinearity
|
||||
- Updated Lagrangian, corotational procedure, multiple or mixed nonlinear steps, cross-step propagation
|
||||
- follower load, non-proportional path, controlled-displacement, arc-length/path-following
|
||||
- modified/adaptive Newton, tangent reuse, line search, damping, automatic growth/cutback/retry
|
||||
- energy/work convergence, trial-state HDF5 history, direct reference-solver execution
|
||||
- Abaqus/Midas formulation, stabilization, state update 또는 결과 절차의 내부 동등성
|
||||
|
||||
## 5. Analysis Definition
|
||||
| item | approved meaning |
|
||||
| --- | --- |
|
||||
| analysis | exactly one nonlinear static step from a no-prior-history baseline |
|
||||
| elements | `S4`, `S4R` source types map to materially linear FESA-MITC4 |
|
||||
| DOFs | global `[UX, UY, UZ, URX, URY, URZ]`; rotational correction is dimensionless |
|
||||
| kinematics | Total Lagrangian relative to one fixed initial configuration |
|
||||
| rotation state | committed orthonormal right-handed triad `Q`; director is its third axis; separate trial triad/director; multiplicative finite-rotation update |
|
||||
| material | homogeneous isotropic linear elasticity; no nonlinear material state |
|
||||
| control | one dimensionless scalar load factor with fixed increments and final shortening to factor 1 |
|
||||
| Newton | same-trial residual and consistent tangent, fresh factorization and correction solve every iteration |
|
||||
| convergence | translational-force residual, rotational-moment residual, translational correction, rotational correction; all four must pass with `<=` |
|
||||
| loads/BCs | fixed-global dead `*CLOAD`; factor-1 absolute `*BOUNDARY` targets on one proportional path |
|
||||
| state | candidate/trial remains separate; complete converged increment commits atomically |
|
||||
| coordinates/units | nodal values are global unless an approved element-local quantity states otherwise; user-consistent units without inference/conversion |
|
||||
|
||||
Exact Total Lagrangian shell equations, strain/stress measures, rotation map details, drilling treatment and consistent derivatives belong to Research/Formulation and Numerical Review without changing this approved scope.
|
||||
|
||||
## 6. Input Requirements
|
||||
- Nonlinear execution requires exactly one supported nonlinear static source step and one semantic step.
|
||||
- Supported first-release meanings are limited to the approved MITC4 material/section, nonlinear `*STATIC`, `*CLOAD`, and `*BOUNDARY` subset.
|
||||
- Nonlinear `*STATIC` has four positive finite values: first is the fixed increment, second represents endpoint 1 exactly, and third/fourth are accepted for compatibility but unused by stepping.
|
||||
- Nonzero prescribed `*BOUNDARY` values are factor-1 absolute global-DOF targets; approved `*CLOAD` components are fixed-global dead forces or moments.
|
||||
- Unsupported, ambiguous, missing, nonfinite, or out-of-scope meanings fail closed rather than falling back to linear or alternate nonlinear behavior.
|
||||
|
||||
## 7. Output Requirements
|
||||
- Successfully committed increments map one-to-one to authoritative accepted HDF5 frames in load-factor order and include the factor-1 frame; trial history is not authoritative output.
|
||||
- `<stem>_results.h5` is completed as a sibling candidate and replaces the final only after success; failure preserves a prior valid final.
|
||||
- `<stem>_log.txt` is replaced/truncated at invocation start and remains the current-run live audit after controlled success or failure.
|
||||
- Every entered Newton iteration has one deterministic diagnostic-only text summary; exact representation and low-level I/O mechanics belong to I/O Definition.
|
||||
- Every analysis procedure uses input-directory `<stem>_results.h5` and `<stem>_log.txt`; every invocation containing literal `--output` treats it as unrecognized and fails with exit code 2 before input parsing, Analysis, result-candidate, log, or output creation, with no compatibility alias or deprecation window. Result and log lifecycles are independent, not a cross-file all-or-nothing commit.
|
||||
- Exact HDF5 paths/shapes, factor-0 projection, triad projection, compression/chunking and path/collision conventions belong to I/O Definition.
|
||||
|
||||
## 8. Requirement Records
|
||||
```yaml
|
||||
- id: FESA-REQ-NSNR-001
|
||||
statement: "The FESA solver shall execute nonlinear static analysis through a separate procedure only when exactly one supported nonlinear source step maps to exactly one semantic step from a no-prior-history baseline."
|
||||
category: functional
|
||||
rationale: "Procedure cardinality and lifecycle must be unambiguous."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "One valid step selects one nonlinear procedure; zero, multiple, mixed, or ambiguous nonlinear steps fail before an attempted nonlinear increment, while unselected approved linear analysis retains its established behavior."
|
||||
tolerance: "Exact source/semantic cardinality and procedure identity."
|
||||
trace_to: {parent_need: "NEED-NSNR-001", downstream_agents: ["I/O Definition Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-003
|
||||
statement: "The FESA solver shall support only materially linear, geometrically nonlinear FESA-MITC4 for source types S4 and S4R in the first release."
|
||||
category: physics
|
||||
rationale: "The approved release is geometric-only and must not create nonlinear material state."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "Supported S4/S4R cases use homogeneous isotropic linear elasticity and MITC4; material-nonlinear or combined-nonlinearity input fails closed."
|
||||
tolerance: "Exact supported element/material inventory."
|
||||
trace_to: {parent_need: "NEED-NSNR-002", downstream_agents: ["Research Agent", "Formulation Agent", "Numerical Review Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-041
|
||||
statement: "The FESA solver shall use Total Lagrangian kinematics relative to one fixed initial reference configuration."
|
||||
category: physics
|
||||
rationale: "The formulation reference must not change across increments."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: analysis
|
||||
acceptance_criteria: "Every increment and accepted state retains the same initial-reference identity; current geometry is only a derived observable and never re-bases the formulation."
|
||||
tolerance: "Reference identity exact; numerical kinematic tolerances are owned by Numerical Review."
|
||||
trace_to: {parent_need: "NEED-NSNR-002", downstream_agents: ["Research Agent", "Formulation Agent", "Numerical Review Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-074
|
||||
statement: "The FESA solver shall retain global DOFs [UX, UY, UZ, URX, URY, URZ], use a dimensionless incremental rotation correction, and maintain separate trial and committed finite-rotation triad/director states."
|
||||
category: physics
|
||||
rationale: "Large rotations require an objective state distinct from failed candidates."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: analysis
|
||||
acceptance_criteria: "Committed Q is orthonormal and right-handed, its third axis is the director, candidate updates are multiplicative, successful commit transfers the complete state, and failure preserves the prior committed state."
|
||||
tolerance: "State identity exact; Q invariants use Numerical Review-approved tolerances."
|
||||
trace_to: {parent_need: "NEED-NSNR-002, NEED-NSNR-003", downstream_agents: ["Research Agent", "Formulation Agent", "Numerical Review Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-006
|
||||
statement: "The FESA solver shall perform Full Newton iterations using the same current-trial residual and algorithmically consistent tangent, followed by a fresh tangent factorization and correction solve."
|
||||
category: numerical
|
||||
rationale: "Residual, tangent, factorization, and correction must describe one trial state."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "Each entered iteration records one trial identity shared by residual and tangent, factorizes that tangent after evaluation, and solves its correction with that fresh factorization before convergence or update."
|
||||
tolerance: "Trial/factorization identity and event order exact."
|
||||
trace_to: {parent_need: "NEED-NSNR-002", downstream_agents: ["Formulation Agent", "Numerical Review Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-007
|
||||
statement: "The FESA solver shall accept an increment only when its free-DOF equilibrium residual and same-iteration free-DOF Newton correction gates all pass."
|
||||
category: numerical
|
||||
rationale: "Equilibrium and update size are both required convergence evidence."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "All four channel results are combined by logical AND; constrained DOFs are excluded from convergence and their full-equilibrium residual retains reaction meaning."
|
||||
tolerance: "The four channel policies in NSNR-069 and NSNR-070 apply with inclusive <= comparisons."
|
||||
trace_to: {parent_need: "NEED-NSNR-002", downstream_agents: ["Numerical Review Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-069
|
||||
statement: "The FESA solver shall evaluate translational-force and rotational-moment free-residual convergence with channel-separated infinity-norm gates selected by each matching external residual-channel scale."
|
||||
category: numerical
|
||||
rationale: "Force and moment dimensions require separate scales."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "For each residual channel, a nonzero matching external-channel scale retains denominator max(||internal||inf, ||external||inf), and the same-trial residual ratio passes iff <=1e-2; an exact-zero matching external-channel scale instead applies the typed absolute gate, which passes iff its numerator is <=1e-3 model-consistent force or <=1e-3 model-consistent force-length, respectively."
|
||||
tolerance: "Relative 1e-2 dimensionless for nonzero matching external-channel scale; exact-zero matching external-channel absolute 1e-3 force and 1e-3 force-length."
|
||||
trace_to: {parent_need: "NEED-NSNR-002", downstream_agents: ["Numerical Review Agent", "Implementation Planning Agent"]}
|
||||
status: draft
|
||||
- id: FESA-REQ-NSNR-070
|
||||
statement: "The FESA solver shall evaluate translational and rotational free-correction convergence with channel-separated infinity-norm gates."
|
||||
category: numerical
|
||||
rationale: "Translation and rotation corrections have different dimensions."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "For a nonzero current-trial incremental-solution denominator relative to the step-start committed state, the fresh-correction ratio passes iff <=1e-2; an exact-zero denominator instead passes iff its numerator is <=1e-3 model-consistent length or <=1e-3 dimensionless rotation, respectively."
|
||||
tolerance: "Relative 1e-2 dimensionless; zero-scale absolute 1e-3 length and 1e-3 dimensionless rotation."
|
||||
trace_to: {parent_need: "NEED-NSNR-002", downstream_agents: ["Numerical Review Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-008
|
||||
statement: "The FESA solver shall permit entered Newton iteration identities 1 through 100 and shall reject nonfinite required iteration data."
|
||||
category: numerical
|
||||
rationale: "The iteration limit and finite-data boundary must be deterministic."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "A pass at iteration 100 may commit; otherwise iteration 100 ends in nonconvergence without iteration 101, and any nonfinite required residual, tangent, correction, state, load, or recovery value fails before acceptance."
|
||||
tolerance: "Iteration identities and finite predicates exact."
|
||||
trace_to: {parent_need: "NEED-NSNR-002, NEED-NSNR-003", downstream_agents: ["Numerical Review Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-014
|
||||
statement: "The FESA solver shall apply each successful fresh Newton correction unchanged when another iteration is required and shall use no line search, damping, solver fallback, or energy/work convergence gate."
|
||||
category: constraint
|
||||
rationale: "The approved first release uses direct Full Newton updates only."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "The next candidate uses the fresh solve output without scalar or component modification; convergence depends only on NSNR-069 and NSNR-070."
|
||||
tolerance: "Correction/update identity exact."
|
||||
trace_to: {parent_need: "NEED-NSNR-002", downstream_agents: ["Numerical Review Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-046
|
||||
statement: "The FESA solver shall advance one scalar load factor by a fixed positive increment, shortening only the final increment to reach factor one without growth, cutback, or retry."
|
||||
category: numerical
|
||||
rationale: "Fixed stepping provides the approved deterministic load path."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "The intended and accepted factor sequence starts at zero, never overshoots one, ends at the discrete factor-one identity on success, and analysis failure creates no replacement attempt."
|
||||
tolerance: "Factor/order identity exact; endpoint arithmetic is fixed by Numerical Review before implementation."
|
||||
trace_to: {parent_need: "NEED-NSNR-002", downstream_agents: ["Numerical Review Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-048
|
||||
statement: "The FESA solver shall advance every approved CLOAD and nonzero prescribed BOUNDARY target on one common proportional scalar load-factor path."
|
||||
category: physics
|
||||
rationale: "Loads and prescribed values must share one path identity."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "Factor zero reproduces step-start values, intermediate states use the same factor for all approved targets, and factor one reproduces every target."
|
||||
tolerance: "Load-factor and target identity exact."
|
||||
trace_to: {parent_need: "NEED-NSNR-002", downstream_agents: ["Formulation Agent", "Numerical Review Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-018
|
||||
statement: "The FESA solver shall interpret approved CLOAD force and moment components as dead loads fixed in global directions while the common factor scales magnitude only."
|
||||
category: physics
|
||||
rationale: "Follower-load behavior would change equilibrium and tangent meaning."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "Force and moment source DOF directions remain unchanged with deformation, moments retain force-length dimensions, and no follower external-load tangent is used."
|
||||
tolerance: "Global component identity exact; values use the model-consistent unit system."
|
||||
trace_to: {parent_need: "NEED-NSNR-002", downstream_agents: ["Formulation Agent", "Numerical Review Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-063
|
||||
statement: "The FESA solver shall interpret each approved nonzero BOUNDARY value as a factor-one absolute global-DOF target interpolated from its step-start committed value."
|
||||
category: physics
|
||||
rationale: "Absolute prescribed values must not be confused with correction increments."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "The prescribed current value follows the common factor, zero start/target remains zero, the constrained correction is distinct from that value, and failed candidates do not change the step-start value."
|
||||
tolerance: "Prescribed path/source identity exact; values use model-consistent displacement or rotation units."
|
||||
trace_to: {parent_need: "NEED-NSNR-002, NEED-NSNR-003", downstream_agents: ["Formulation Agent", "Numerical Review Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-016
|
||||
statement: "The FESA solver shall map nonlinear STATIC four-value data with the first positive finite value as fixed increment, the second as endpoint one, and positive finite third and fourth values accepted but unused by stepping."
|
||||
category: input
|
||||
rationale: "The approved compatibility fields must not alter fixed stepping."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "Valid four-value data records the first value for runtime use and identifies the third/fourth as unused; invalid arity, nonfinite/nonpositive required values, or period not representing one fails closed."
|
||||
tolerance: "Parsed endpoint-one identity exact; warning representation is owned by I/O Definition."
|
||||
trace_to: {parent_need: "NEED-NSNR-001", downstream_agents: ["I/O Definition Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-011
|
||||
statement: "The FESA solver shall keep trial state separate and atomically commit a complete converged displacement, rotation/director, load-factor, frame, force, and recovery state while preserving the prior committed state on failure."
|
||||
category: functional
|
||||
rationale: "Partial nonlinear state commits would corrupt continuation and results."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "Successful validation commits one coherent state identity; iteration, increment, recovery, or output failure leaves the prior committed state and authoritative final result unchanged."
|
||||
tolerance: "State and commit identity exact."
|
||||
trace_to: {parent_need: "NEED-NSNR-003", downstream_agents: ["Formulation Agent", "Numerical Review Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-019
|
||||
statement: "The FESA solver shall preserve stable source identity and stable assembly order and shall keep the accepted free residual, constrained reaction resultant, and global applied-plus-reaction balance error as distinct equilibrium quantities derived at the same accepted state."
|
||||
category: physics
|
||||
rationale: "Reaction and equilibrium evidence must remain traceable without treating physically distinct projections as interchangeable."
|
||||
source: docs
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "Input instance/label/component maps deterministically through assembly, state, diagnostic, result, and comparison; accepted free entries remain free-equilibrium evidence, constrained entries form physical reactions, and the constrained-reaction resultant remains distinct from the global applied-plus-reaction balance error. Blocking factor-one equilibrium quantities are global applied-plus-reaction force [3] and moment [3] balance errors plus accepted free residual. Every global moment is about global origin [0,0,0] and uses current force arms plus spatial physical nodal moments."
|
||||
tolerance: "Source/component, quantity identity, origin, and discrete order exact; equilibrium and reference values use their separately approved numerical tolerances."
|
||||
trace_to: {parent_need: "NEED-NSNR-002, NEED-NSNR-004", downstream_agents: ["Formulation Agent", "Numerical Review Agent", "I/O Definition Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-020
|
||||
statement: "The FESA solver shall fail closed on every input or model meaning outside the approved element, material, load, boundary, step, and solver scope."
|
||||
category: input
|
||||
rationale: "Unsupported nonlinear behavior must not become a warning-only or linear fallback."
|
||||
source: docs
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "A negative inventory for each unsupported class rejects the model before nonlinear state or authoritative output is committed."
|
||||
tolerance: "Exact supported/unsupported inventory."
|
||||
trace_to: {parent_need: "NEED-NSNR-001", downstream_agents: ["I/O Definition Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-021
|
||||
statement: "The FESA solver shall create authoritative accepted HDF5 frames one-to-one with committed increments, including factor one, using a sibling candidate that replaces the final only on success and preserves a prior valid final on failure."
|
||||
category: output
|
||||
rationale: "Authoritative results must contain accepted states only and remain failure-safe."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "Committed increment and accepted-frame identities match in factor order, the successful result includes factor one, trial Newton history is absent, and controlled failure does not expose the candidate as final or damage a prior valid final."
|
||||
tolerance: "Commit/frame identity exact; numerical quantities use their approved verification tolerances."
|
||||
trace_to: {parent_need: "NEED-NSNR-003", downstream_agents: ["Numerical Review Agent", "I/O Definition Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-024
|
||||
statement: "The FESA solver shall replace or truncate the single derived text log at invocation start, retain it as the current-run live audit on controlled success or failure, and produce one deterministic diagnostic-only summary for every entered Newton iteration."
|
||||
category: output
|
||||
rationale: "Iteration evidence is required without making trial states authoritative results."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "Completed and early-failure iterations preserve their stable iteration/stage and convergence meaning in entered order; the log remains current-run diagnostic evidence and is not HDF5 trial history or reference data."
|
||||
tolerance: "Summary cardinality and semantic identity exact; representation and low-level failure presentation are owned by I/O Definition."
|
||||
trace_to: {parent_need: "NEED-NSNR-003", downstream_agents: ["I/O Definition Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-083
|
||||
statement: "The FESA solver shall apply repository-wide input-directory names <stem>_results.h5 and <stem>_log.txt, treat every invocation containing literal --output as unrecognized and fail it with exit code 2 before input parsing, Analysis, result-candidate, log, or output creation without a compatibility alias or deprecation window, and use independent asymmetric result/log lifecycles without cross-file all-or-nothing commit."
|
||||
category: output
|
||||
rationale: "Public output identity and authority must be consistent across procedures."
|
||||
source: user
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "Every existing and future procedure derives the two approved names beside its input and preserves linear-static numerical/HDF5 meaning under the migration; every argument form containing literal --output fails as unrecognized with exit code 2 before input parsing, Analysis, result-candidate, log, or output creation and has no accepted alias or deprecation form; log initialization does not commit HDF5 and HDF5 failure does not roll back the live log."
|
||||
tolerance: "Names, exit code, lifecycle independence, and regression identity exact; path and ownership mechanics are downstream decisions."
|
||||
trace_to: {parent_need: "NEED-NSNR-003", downstream_agents: ["I/O Definition Agent", "Implementation Planning Agent", "Numerical Review Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-026
|
||||
statement: "The FESA solver shall produce deterministic increment, iteration, assembly/reduction, accepted-frame, result-row, and diagnostic ordering for the same input and approved runtime configuration."
|
||||
category: constraint
|
||||
rationale: "Reproducible numerical and reference evidence requires stable discrete ordering."
|
||||
source: docs
|
||||
priority: must
|
||||
verification_method: test
|
||||
acceptance_criteria: "Repeated runs and approved thread configurations preserve the same intended/attempted/accepted factor identities, Newton event sequence, sparse/reduction structure, frame order, result identities, and log order."
|
||||
tolerance: "Discrete structure/order exact; floating equality policy is set by Numerical Review from repository conventions."
|
||||
trace_to: {parent_need: "NEED-NSNR-003, NEED-NSNR-004", downstream_agents: ["Numerical Review Agent", "Implementation Planning Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-030
|
||||
statement: "The FESA solver shall pass an approved verification portfolio covering the materially linear small-displacement limit, tangent consistency, factor-one global applied-plus-reaction balance and accepted free residual, symmetry or objectivity, and commit/rollback behavior."
|
||||
category: verification
|
||||
rationale: "Convergence alone does not establish nonlinear solver correctness."
|
||||
source: docs
|
||||
priority: must
|
||||
verification_method: analysis
|
||||
acceptance_criteria: "Numerical Review defines blocking cases and quantities for every listed category, and implementation passes each approved analytical, invariant, physics, or comparison gate. Reaction/equilibrium acceptance separately blocks on factor-one global applied-plus-reaction force [3] and moment [3] balance errors and accepted free-DOF residual evidence; constrained-reaction resultants retain a distinct identity, and local nodal reaction distribution does not decide the blocking verdict."
|
||||
tolerance: "Case-specific invariant tolerances are owned by Numerical Review; external comparisons use docs/TOLERANCE.md; existing linear-limit tolerance remains unchanged."
|
||||
trace_to: {parent_need: "NEED-NSNR-004", downstream_agents: ["Research Agent", "Formulation Agent", "Numerical Review Agent"]}
|
||||
status: approved
|
||||
- id: FESA-REQ-NSNR-034
|
||||
statement: "The FESA solver shall compare only approved accepted-state quantities against stored reference artifacts using stable source/component matching, the approved blocking/warning/review disposition, and the common docs/TOLERANCE.md policy."
|
||||
category: verification
|
||||
rationale: "Reference acceptance must be deterministic and independent of solver execution."
|
||||
source: docs
|
||||
priority: must
|
||||
verification_method: reference-comparison
|
||||
acceptance_criteria: "Numerical Review selects the exact existing input and required CSV quantities; precheck rejects missing, extra, duplicate, or nonfinite required rows before numerical comparison, without averaging, collapse, row-order matching, zero clamp, or reference repair. U1/U2/U3 remain blocking and UR1/UR2/UR3 remain warning-only. Local nodal RF1/RF2/RF3 and physical spatial RM1/RM2 retain deterministic source-key/schema/finite/inventory/error reporting but are review-only and never change the blocking verdict; local RM3 and stress remain excluded from numerical comparison."
|
||||
tolerance: "docs/TOLERANCE.md family-scale policy for external blocking, warning-only, and review-only error reporting; exact artifact roles, local review projection, family membership, and row schema are a Numerical Review-owned readiness gap."
|
||||
trace_to: {parent_need: "NEED-NSNR-004", downstream_agents: ["Numerical Review Agent", "I/O Definition Agent"]}
|
||||
status: approved
|
||||
```
|
||||
|
||||
## 9. Verification Quantities
|
||||
| quantity | dimension / coordinates | role |
|
||||
| --- | --- | --- |
|
||||
| nodal displacement and committed rotation/director state | length and dimensionless rotation; global | accepted-state kinematics and rollback |
|
||||
| accepted free-DOF residual | force or force-length; global DOF | blocking accepted-state equilibrium evidence |
|
||||
| local nodal `RF1/RF2/RF3`, physical spatial `RM1/RM2` | force or force-length; global | deterministic review-only/nonblocking distribution evidence; `RM3` excluded |
|
||||
| constrained-reaction resultant force `[3]` and moment `[3]` | force and force-length; global; moment about `[0,0,0]` with current arms and spatial physical moments | distinct reaction summary; not interchangeable with global balance error |
|
||||
| applied-plus-reaction balance error force `[3]` and moment `[3]` | force and force-length; global; same origin/arm/moment convention | blocking factor-one reaction/equilibrium evidence |
|
||||
| MITC4 internal force, stress and strain | model-consistent dimensions; approved element frame/configuration | formulation, physics and reference verification |
|
||||
| scalar load factor and accepted frame identity | dimensionless | path, commit and output ordering |
|
||||
| four convergence channels | typed as NSNR-069/070 | internal iteration acceptance only |
|
||||
| iteration summary | diagnostic identity, not a physical reference quantity | convergence/failure audit |
|
||||
|
||||
## 10. Tolerance Policy
|
||||
- `.inp` values remain in the user's consistent unit system; FESA performs no unit inference or conversion.
|
||||
- Residual ratios with nonzero matching external-channel scale and correction ratios with nonzero current-trial incremental-solution denominator are dimensionless and pass with `<=1e-2`.
|
||||
- Exact-zero matching external-channel residual thresholds are `1e-3` force and `1e-3` force-length; exact-zero correction-denominator thresholds are `1e-3` length and `1e-3` dimensionless rotation. Equal literals do not merge their dimensions.
|
||||
- External blocking, warning-only, and review-only error reporting use `docs/TOLERANCE.md` without changing their verdict disposition; internal invariant, tangent, endpoint-arithmetic, free-residual and global-balance tolerances are fixed by Numerical Review before implementation.
|
||||
|
||||
## 11. Reference Case Requirements
|
||||
- Stored nonlinear candidates use exact read-only input/displacement pairs `reference/shellNL/shellNL.inp` with `reference/shellNL/shellNL displacements.csv`, and `reference/shellNL-meshfine/shellNL-meshfine.inp` with `reference/shellNL-meshfine/shellNL-meshfine displacements.csv`. Exact local-reaction review artifacts are `reference/shellNL/shellNL reactions.csv` and `reference/shellNL-meshfine/shellNL-meshfine reactions.csv`; they are not missing-required blocking artifacts. The existing linear-limit pair is `reference/shell/shell.inp` and `reference/shell/shell displacements.csv`.
|
||||
- Numerical Review shall fix which exact nonlinear candidate case or cases are blocking versus diagnostic, the factor-one HDF5 projection, required source rows/components and comparison families, and the internal tolerances for global balance/free-residual gates. `U1/U2/U3` are blocking, `UR1/UR2/UR3` are warning-only, local nodal RF/RM rows are review-only, and `RM3` and stress have no numerical comparison projection.
|
||||
- All selected local review rows retain deterministic identity, schema, finite-value, inventory, and error reporting even though they cannot fail the blocking verdict. A physical global resultant sum is not a substitute identity for those local rows, and no row is averaged, collapsed, omitted, zero-clamped, or repaired.
|
||||
- Agents do not run Abaqus, Nastran or another reference solver and do not create, rename, repair or normalize stored reference artifacts.
|
||||
|
||||
## 12. Requirement Verification Matrix
|
||||
| id | category | source | priority | method | compact acceptance | tolerance | downstream | status |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| `NSNR-001` | functional | user | must | test | exactly one supported source/semantic nonlinear step | exact cardinality | I/O; Planning | approved |
|
||||
| `NSNR-003` | physics | user | must | test | MITC4 geometric-only, linear isotropic material | exact inventory | Research; Formulation; Numerical Review | approved |
|
||||
| `NSNR-041` | physics | user | must | analysis | fixed initial reference, no re-basing | identity exact | Research; Formulation; Numerical Review | approved |
|
||||
| `NSNR-074` | physics | user | must | analysis | finite committed/trial triad/director state and rollback | invariant tolerance downstream | Formulation; Numerical Review | approved |
|
||||
| `NSNR-006` | numerical | user | must | test | same-trial residual/tangent and fresh factorization/solve | identity/order exact | Formulation; Numerical Review; Planning | approved |
|
||||
| `NSNR-007` | numerical | user | must | test | all four free-DOF gates pass; constrained residual is reaction | NSNR-069/070 | Numerical Review; Planning | approved |
|
||||
| `NSNR-069` | numerical | user | must | test | force/moment residual relative gate for nonzero external scale; typed absolute gate for exact-zero external scale | `1e-2`; typed `1e-3` | Numerical Review; Planning | draft |
|
||||
| `NSNR-070` | numerical | user | must | test | translation/rotation correction relative or typed zero-scale gates | `1e-2`; typed `1e-3` | Numerical Review; Planning | approved |
|
||||
| `NSNR-008` | numerical | user | must | test | finite data, iterations 1..100, pass at 100 allowed | predicates/count exact | Numerical Review; Planning | approved |
|
||||
| `NSNR-014` | constraint | user | must | test | unchanged full correction; no line search/fallback/energy gate | identity exact | Numerical Review; Planning | approved |
|
||||
| `NSNR-046` | numerical | user | must | test | fixed increment, final shortening, no retry | factor/order exact | Numerical Review; Planning | approved |
|
||||
| `NSNR-048` | physics | user | must | test | one proportional factor for all load/BC targets | identity exact | Formulation; Numerical Review | approved |
|
||||
| `NSNR-018` | physics | user | must | test | fixed-global dead force/moment and no follower tangent | component exact | Formulation; Numerical Review | approved |
|
||||
| `NSNR-063` | physics | user | must | test | absolute factor-one BC target and separate correction | path/source exact | Formulation; Numerical Review | approved |
|
||||
| `NSNR-016` | input | user | must | test | four-value STATIC mapping and validation | endpoint exact | I/O; Planning | approved |
|
||||
| `NSNR-011` | functional | user | must | test | separate trial, atomic commit, prior-state preservation | state exact | Formulation; Numerical Review; Planning | approved |
|
||||
| `NSNR-019` | physics | docs | must | test | distinct free residual, constrained-reaction resultants and applied+reaction balance; current-arm/spatial-moment semantics | quantity/origin/identity/order exact | Formulation; Numerical Review; I/O | approved |
|
||||
| `NSNR-020` | input | docs | must | test | unsupported meaning fails closed | inventory exact | I/O; Planning | approved |
|
||||
| `NSNR-021` | output | user | must | test | accepted commit/frame bijection and failure-safe HDF5 final | identity exact | Numerical Review; I/O; Planning | approved |
|
||||
| `NSNR-024` | output | user | must | test | one ordered diagnostic summary per entered iteration and persistent live log | semantic identity exact | I/O; Planning | approved |
|
||||
| `NSNR-083` | output | user | must | test | repository names; every literal --output form unrecognized with pre-input/pre-Analysis/pre-output exit 2 and no alias/deprecation; asymmetric lifecycle; linear regression | public identity/precedence exact | I/O; Planning; Numerical Review | approved |
|
||||
| `NSNR-026` | constraint | docs | must | test | deterministic factor/iteration/assembly/frame/result/log order | discrete order exact | Numerical Review; Planning | approved |
|
||||
| `NSNR-030` | verification | docs | must | analysis | blocking small-limit/tangent/global applied+reaction balance/free-residual/physics/rollback portfolio | case-specific downstream; external policy unchanged | Research; Formulation; Numerical Review | approved |
|
||||
| `NSNR-034` | verification | docs | must | reference-comparison | U blocking, UR warning-only, local RF/RM review-only, exact matching/precheck | docs/TOLERANCE.md | Numerical Review; I/O | approved |
|
||||
|
||||
## 13. Open Questions
|
||||
없음. Specialist gaps are owned by downstream stages and are escalated only if they would change approved scope, physics, tolerance, authoritative output or public compatibility.
|
||||
|
||||
## 14. Downstream Handoff
|
||||
- Research/Formulation: exact Total Lagrangian MITC4 equations, strain/stress measures, rotation map/side/frame, drilling and consistent derivatives; Formulation propagates NSNR-069's exact-zero matching external-channel typed absolute branch and retained nonzero external-scale relative denominator.
|
||||
- Numerical Review: verify the revised NSNR-069 branch and unchanged thresholds/four-channel AND, endpoint arithmetic, tangent/objectivity/state-invariant checks, benchmark portfolio and performance adequacy. Fix exact coarse/fine reference roles, local review projection/families, and factor-one global balance/free-residual tolerances while preserving local RF/RM review-only, `RM3` exclusion, displacement/rotation disposition, exact prechecks, immutable artifacts and common external tolerance.
|
||||
- I/O Definition: HDF5 schema/projection/chunking/factor-0 handling, log representation/failure presentation and path/collision conventions. Audit and keep separately identifiable `(a)` global applied-plus-reaction balance error, `(b)` constrained-reaction resultant and `(c)` accepted free residual; global moments use current positions and spatial physical nodal moments about `[0,0,0]`, including supported nonzero prescribed translation/rotation cases.
|
||||
- Implementation Planning: backend adapters, output ownership primitive, candidate filename, performance targets and requirement-traced TDD plan. Stage 6 must test the three equilibrium identities separately and must not reuse one implementation dataset as another without proving its approved projection semantics.
|
||||
- Coordinator: escalate only a downstream proposal that changes the approved scope, physics, convergence tolerance, authoritative-result meaning or public output contract; do not advance the workflow on this document alone.
|
||||
@@ -1,602 +0,0 @@
|
||||
# Nonlinear Static Newton–Raphson 연구 브리프
|
||||
|
||||
## 1. Metadata
|
||||
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- source_requirement: `docs/nonlinear-static-newton-raphson/requirements.md`
|
||||
- source_requirement_status: `approved`
|
||||
- source_requirement_approval_date: `2026-08-23`
|
||||
- status: `passed`
|
||||
- owner_agent: `research-agent`
|
||||
- date: `2026-08-23`
|
||||
- research_scope: materially linear, geometrically nonlinear Total Lagrangian
|
||||
`S4/S4R -> FESA-MITC4`, finite rotation, Full Newton, fixed proportional path,
|
||||
state/output integrity, and verification evidence
|
||||
- evidence_boundary: 이 문서는 정식화, 수치 허용오차, C++ API, I/O schema 또는
|
||||
reference artifact를 확정하지 않는다. 외부 solver의 공개 결과는 후보 수치 evidence일
|
||||
뿐 내부 알고리즘 동등성 evidence가 아니다.
|
||||
|
||||
이 문서의 주장은 다음 네 가지 표지를 사용한다.
|
||||
|
||||
- **Verified fact**: 인용한 원문·공식 문서가 직접 뒷받침한다.
|
||||
- **Project decision**: 승인된 요구조건 또는 프로젝트 전역 계약이 고정한다.
|
||||
- **Inference**: verified fact와 project decision에서 도출한 연구 해석이며 downstream
|
||||
재검토가 필요하다.
|
||||
- **Open issue**: evidence 또는 downstream 결정이 아직 없다.
|
||||
|
||||
## 2. Research Questions
|
||||
|
||||
승인된 `FESA-REQ-NSNR-003`, `FESA-REQ-NSNR-041`, `FESA-REQ-NSNR-074`,
|
||||
`FESA-REQ-NSNR-006`, `FESA-REQ-NSNR-048`, `FESA-REQ-NSNR-018`,
|
||||
`FESA-REQ-NSNR-063`, `FESA-REQ-NSNR-011`, `FESA-REQ-NSNR-019`,
|
||||
`FESA-REQ-NSNR-030`, `FESA-REQ-NSNR-034`의 specialist gap에서 다음 질문을 도출했다.
|
||||
|
||||
1. 고정 초기 참조면을 쓰는 Total Lagrangian 4-node Reissner–Mindlin/MITC4 shell에서
|
||||
materially linear response를 표현할 때 어떤 strain/stress/virtual-work 근거가 필요한가?
|
||||
2. committed/trial triad와 director를 multiplicative finite-rotation update로 갱신할 때
|
||||
orthonormality뿐 아니라 objectivity, path independence, singularity avoidance와 consistent
|
||||
linearization을 어떻게 별도로 입증해야 하는가?
|
||||
3. 기존 linear MITC4의 `24 global -> 20 physical + 4 numerical drill` 경계를 finite rotation에
|
||||
확장할 때 global map의 1·2차 미분, rotation chart/recentering, objective drilling potential과
|
||||
nodal-moment work 중 무엇이 아직 미해결인가?
|
||||
4. Full Newton에서 residual, algorithmic tangent, factorization과 correction이 같은 trial
|
||||
state를 가리킨다는 것을 어떤 수학적·실행 순서 evidence로 확인할 수 있는가?
|
||||
5. fixed-global dead `CLOAD`와 absolute prescribed `BOUNDARY`를 하나의 scalar factor로
|
||||
진행할 때 translation, finite rotation, reaction과 external work의 의미는 무엇인가?
|
||||
6. original MITC4의 shear/membrane locking, distorted geometry, drilling, quadrature와
|
||||
conditioning 위험을 nonlinear large-rotation 상태에서 어떻게 제한하고 특성화할 것인가?
|
||||
7. small-displacement limit, tangent consistency, equilibrium/reaction, rigid-body/objectivity,
|
||||
symmetry, deterministic commit/rollback을 서로 독립적으로 검증할 benchmark/patch/MES/MMS
|
||||
portfolio는 무엇인가?
|
||||
8. 공개 benchmark와 기존 저장 artifact 중 정확히 어떤 입력·target quantity가 현재
|
||||
사용 가능하며, 무엇이 nonlinear acceptance artifact로는 아직 비어 있는가?
|
||||
|
||||
| research question | requirement_ids | research gap |
|
||||
| --- | --- | --- |
|
||||
| RQ-1 | `FESA-REQ-NSNR-003`, `FESA-REQ-NSNR-041` | TL materially-linear MITC4 theory boundary |
|
||||
| RQ-2 | `FESA-REQ-NSNR-074` | multiplicative triad/director update, objectivity and derivatives |
|
||||
| RQ-3 | `FESA-REQ-NSNR-003`, `FESA-REQ-NSNR-074` | nonlinear global/physical/drill map and finite nodal-moment work |
|
||||
| RQ-4 | `FESA-REQ-NSNR-006` | same-trial Full Newton consistency evidence |
|
||||
| RQ-5 | `FESA-REQ-NSNR-048`, `FESA-REQ-NSNR-018`, `FESA-REQ-NSNR-063` | proportional dead-load/prescribed finite path |
|
||||
| RQ-6 | `FESA-REQ-NSNR-003` | locking, drilling, quadrature and conditioning limits |
|
||||
| RQ-7 | `FESA-REQ-NSNR-011`, `FESA-REQ-NSNR-019`, `FESA-REQ-NSNR-030` | physics, tangent, objectivity and transactional verification portfolio |
|
||||
| RQ-8 | `FESA-REQ-NSNR-034` | exact stored/public nonlinear artifact and target readiness |
|
||||
|
||||
## 3. Source Inventory
|
||||
|
||||
### 3.1 Project contracts and local evidence
|
||||
|
||||
Project contract는 외부 reliability tier와 혼합하지 않고 `Project`로 표시한다.
|
||||
|
||||
| id | source_type | title/path | reliability_tier | 사용 범위와 한계 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| P1 | approved requirement | `docs/nonlinear-static-newton-raphson/requirements.md` | Project | 승인 scope, load path, Newton/state/output/verification 계약. 정식 방정식·내부 tolerance·exact reference artifact는 고정하지 않음 |
|
||||
| P2 | project governance | `AGENTS.md`, `docs/SOLVER_AGENT_DESIGN.md`, `docs/PRD.md` | Project | 독립 solver 정체성, 8-stage gate, research ownership과 external-reference 경계 |
|
||||
| P3 | architecture/decision | `docs/ARCHITECTURE.md`, `docs/ADR.md` (`ADR-016`, `ADR-017`, `ADR-022`) | Project | 별도 nonlinear procedure, deterministic assembly, candidate-before-commit, full residual/reaction 및 공통 comparison 정책. nonlinear shell 방정식은 없음 |
|
||||
| P4 | tolerance policy | `docs/TOLERANCE.md` | Project | 저장 reference row precheck와 family-scale row/RMS gate. tangent/objectivity/orthonormality/iteration tolerance를 제공하지 않음 |
|
||||
| P5 | existing linear MITC4 evidence | `docs/linear-static-mitc4-shell/{research,formulation,numerical-review,reference-model}.md` | Project | 승인된 linear MITC4 물리/적분/결과 경계와 기존 test inventory. `formulation.md` §15는 future-only gap inventory이며 nonlinear 정식화 evidence가 아님 |
|
||||
| P6 | local tests/artifacts | `tests/unit/elements/mitc4_shell_test.cpp`, `tests/unit/model/shell_geometry_test.cpp`, `tests/reference/mitc4_reference_cases_test.cpp`, `tests/reference/mitc4_reference_comparison_test.cpp`, `reference/shell/`, `reference/shellR/` | Project | linear rigid/patch/geometry/reference 회귀의 exact local identity. 두 `.inp` 모두 `nlgeom=NO`; nonlinear acceptance-ready가 아님 |
|
||||
|
||||
### 3.2 External sources
|
||||
|
||||
- access_date: `2026-08-23` (`S1`–`S17` 공통)
|
||||
- tier_policy: Tier 1은 공식 표준·기관·solver manual, Tier 2는 peer-reviewed 원 논문·교과서,
|
||||
Tier 3는 탐색용 synthesis를 뜻한다.
|
||||
|
||||
| id | source_type | title | author_or_org | URL_or_DOI | reliability_tier | 제공 evidence / 접근·적용 한계 |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| S1 | peer-reviewed original paper | *A Continuum Mechanics Based Four-Node Shell Element for General Non-linear Analysis* | E. N. Dvorkin, K.-J. Bathe | [MIT author PDF](https://web.mit.edu/kjb/www/Publications_Prior_to_1998/A_Continuum_Mechanics_Based_Four-Node_Shell_Element_for_General_Nonlinear_Analysis.pdf), DOI [`10.1108/eb023562`](https://doi.org/10.1108/eb023562) | Tier 2 | original four-node continuum-based shell, Total Lagrangian nonlinear equations, assumed transverse shear, examples, `2x2x2` elastic integration. 1984 five-physical-DOF update이며 FESA global 24-DOF/drill 계약은 없음; PDF는 공개 author copy이나 저작권 자료 |
|
||||
| S2 | peer-reviewed original paper | *On a Stress Resultant Geometrically Exact Shell Model. Part III: Computational Aspects of the Nonlinear Theory* | J. C. Simo, D. D. Fox, M. S. Rifai | [publisher record](https://www.sciencedirect.com/science/article/pii/0045782590900943), DOI [`10.1016/0045-7825(90)90094-3`](https://doi.org/10.1016/0045-7825(90)90094-3) | Tier 2 | singularity-free exact director update, finite-deformation mixed fields, exact discrete-equilibrium linearization, nonlinear examples. stress-resultant shell model이므로 FESA 식의 직접 근거가 아니며 publisher full text 접근 제한 가능 |
|
||||
| S3 | peer-reviewed original paper | *On the Choice of Finite Rotation Parameters* | A. Ibrahimbegović | [publisher record](https://www.sciencedirect.com/science/article/pii/S0045782597000595), DOI [`10.1016/S0045-7825(97)00059-5`](https://doi.org/10.1016/S0045-7825(97)00059-5) | Tier 2 | finite-rotation parametrization과 incremental rotation/Newton 구현 선택의 영향. 일반 구조 rotation 논문이며 MITC4/drilling 특화가 아님 |
|
||||
| S4 | peer-reviewed original paper | *Multiplicative Updating of the Rotation Tensor in the Finite Element Analysis of Rods and Shells—A Path Independent Approach* | C. Sansour, W. Wagner | [institutional record](https://digital.library.adelaide.edu.au/items/e3451786-5c76-498e-a1cd-662e73db573f), DOI [`10.1007/s00466-002-0401-4`](https://doi.org/10.1007/s00466-002-0401-4) | Tier 2 | multiplicative update의 path-dependence 문제와 path-independent 접근. Cosserat-type rod/shell이며 FESA의 numerical drill potential을 정의하지 않음 |
|
||||
| S5 | peer-reviewed open-access review/original formulation | *A Consistent Finite Element Formulation of the Geometrically Non-linear Reissner–Mindlin Shell Model* | A. Müller, M. Bischoff | [Springer open access](https://doi.org/10.1007/s11831-021-09702-7); corrections [`10.1007/s11831-022-09725-8`](https://doi.org/10.1007/s11831-022-09725-8), [`10.1007/s11831-022-09832-6`](https://doi.org/10.1007/s11831-022-09832-6) | Tier 2 | director가 사는 nonlinear manifold, objective/path-independent interpolation, potential의 correct gradient/Hessian 필요성. CC BY 4.0; projection-based higher-order formulation은 FESA MITC4와 다름 |
|
||||
| S6 | peer-reviewed original paper | *The MITC4+ Shell Element in Geometric Nonlinear Analysis* | Y. Ko, P.-S. Lee, K.-J. Bathe | [MIT author PDF](https://web.mit.edu/kjb/www/Principal_Publications/The_MITC4%2B_shell_element_in_geometric_nonlinear_analysis.pdf), DOI [`10.1016/j.compstruc.2017.01.015`](https://doi.org/10.1016/j.compstruc.2017.01.015) | Tier 2 | TL/Green–Lagrange nonlinear MITC4+, quaternion triad update, `2x2x2` integration, analytical/FE benchmarks, distorted-mesh locking evidence. MITC4+는 assumed membrane field를 추가한 다른 element이며 graph-only target이 많음 |
|
||||
| S7 | official solver theory manual | [Nonlinear Solution Methods in Abaqus/Standard](https://docs.software.vt.edu/abaqusv2024/English/SIMACAETHERefMap/simathe-c-nonlinearsol.htm) | Dassault Systèmes | official 2024 documentation | Tier 1 | Newton Jacobian/residual/correction의 same-state 관계, full/modified/quasi-Newton 구분, residual+correction checks. Abaqus adaptive controls와 approximations는 P1이 배제하며 내부 동등성 근거가 아님 |
|
||||
| S8 | official solver benchmark | [3DNLG-1: Elastic Large Deflection Response of a Z-Shaped Cantilever Under an End Load](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEBMKRefMap/simabmk-c-3dnlg1.htm) | Dassault Systèmes / NAFEMS attribution | official 2025 documentation; NAFEMS R0024 | Tier 1 | 공개 S4/S4R input 이름, 재료/BC/load, 세 load level의 tip displacement와 moment-at-A 표. 페이지가 NAFEMS 권고 문제를 재현하지만 source independence와 FESA subset 적합성은 별도 확인 필요 |
|
||||
| S9 | official solver benchmark | [3DNLG-9: Large Elastic Deflection of a Pinched Hemispherical Shell](https://docs.software.vt.edu/abaqusv2024/English/SIMACAEBMKRefMap/simabmk-c-3dnlg9.htm) | Dassault Systèmes / NAFEMS attribution | official 2024 documentation; NAFEMS R0024 | Tier 1 | 공개 S4/S4R input 이름, point-load/symmetry 조건, 세 load level의 A/B radial displacement 표. 공식 페이지가 NAFEMS 공개값이 Abaqus로 얻어졌음을 명시하므로 Abaqus와 NAFEMS 표의 비교는 독립 검증이 아님 |
|
||||
| S10 | official benchmark catalog | [Geometric Non-linearity benchmark catalog](https://www.nafems.org/publications/glossaryofbenchmarks/nonlinear/geometric/), [R0029 record](https://www.nafems.org/publications/resource_center/r0029/) | NAFEMS | publication `R0029` / summary `R0024` | Tier 1 | 3D beam/shell geometric-nonlinear benchmark inventory와 목적. exact R0029 report는 유료여서 이번 연구에서 전체 원문·독립 source tables를 확인하지 못함 |
|
||||
| S11 | official standard | *V&V 10-2019 (R2025), Standard for Verification and Validation in Computational Solid Mechanics* | ASME | [official record](https://www.asme.org/codes-standards/find-codes-standards/standard-for-verification-and-validation-in-computational-solid-mechanics) | Tier 1 | V&V/VVUQ 공통 framework와 용어. 유료 full standard 미열람이므로 분류 수준으로만 사용하고 세부 acceptance를 귀속하지 않음 |
|
||||
| S12 | government report | *Code Verification by the Method of Manufactured Solutions* | K. Salari, P. K. Knupp, Sandia National Laboratories | [Sandia record](https://www.sandia.gov/research/publications/details/code-verification-by-the-method-of-manufactured-solutions-2000-06-01/), DOI [`10.2172/759450`](https://doi.org/10.2172/759450), `SAND2000-1444` | Tier 1 | MMS가 order-of-accuracy에 영향을 주는 coding error를 탐지할 수 있다는 방법론과 blind tests. 예제는 주로 CFD이며 shell input/target을 제공하지 않음 |
|
||||
| S13 | peer-reviewed paper + reproducible artifact | *Method of Manufactured Solutions Code Verification of Elastostatic Solid Mechanics Problems in a Commercial Finite Element Solver* | K. I. Aycock, N. Rebelo, B. A. Craven | [publisher record](https://www.sciencedirect.com/science/article/pii/S0045794919301968), DOI [`10.1016/j.compstruc.2019.106175`](https://doi.org/10.1016/j.compstruc.2019.106175), artifact DOI [`10.6084/m9.figshare.7726352.v2`](https://doi.org/10.6084/m9.figshare.7726352.v2) | Tier 2 | elastostatic small/finite-strain MMS source-generation notebook와 input artifact. 3-D solid/body-source 및 다른 constitutive cases라 현재 MITC4/CLOAD/BOUNDARY subset에 직접 실행 불가 |
|
||||
| S14 | official solver verification guidance | [About Element Verification](https://docs.software.vt.edu/abaqusv2024/English/SIMACAEVERRefMap/simaver-c-basicelemover.htm) | Dassault Systèmes | official 2024 documentation | Tier 1 | patch test만으로 shell을 충분히 검증할 수 없고 geometric-nonlinear element에 constant-strain/rigid-rotation checks가 필요하다는 vendor verification 관행. FESA acceptance 수치나 내부 등가성은 제공하지 않음 |
|
||||
| S15 | configured FEM wiki navigation | `Nonlinear Finite Element Analysis`, `MITC4 Shell Element`, `MITC Shell Kinematics`, `Green-Lagrange Strain Linearization`, `Shell Locking Phenomenon`, `Shell Element Benchmark Testing`, `Scordelis-Lo Shell Benchmark` | MultiPhysicsVault | local `C:\git\MultiPhysicsVault\wiki\` | Tier 3 | source 탐색과 용어 연결에만 사용. 핵심 주장은 P1–P6 또는 S1–S14/S16–S17 원문으로 추적함 |
|
||||
| S16 | peer-reviewed benchmark paper + institutional postprint | *Popular Benchmark Problems for Geometric Nonlinear Analysis of Shells* | K. Y. Sze, X. H. Liu, S. H. Lo | [HKU institutional record and postprint](https://hub.hku.hk/handle/10722/54269), DOI [`10.1016/j.finel.2003.11.001`](https://doi.org/10.1016/j.finel.2003.11.001) | Tier 2 | eight benchmark sets의 geometry/load와 dense tabulated load–deflection data, mesh refinement 및 equal-increment difficulty evidence. CC BY-NC-ND institutional postprint; 값은 Abaqus S4R 계산이고 vendor Updated-Lagrangian/reduced-integration/hourglass/drill 및 automatic-control 결과이므로 FESA formulation이나 독립 reference와 동일시할 수 없음 |
|
||||
| S17 | official solver verification example | [Rigid Body Motion Output Variables](https://docs.software.vt.edu/abaqusv2024/English/SIMACAEVERRefMap/simaver-c-rigidbodymotoutput.htm) | Dassault Systèmes | official 2024 documentation | Tier 1 | `xrbmshel.inp`가 shell elements에 imposed 90-degree z-axis rigid rotation을 가하고 rigid-body output을 확인함. direct-integration implicit dynamics와 vendor whole-set output test라 FESA nonlinear-static strain/internal-force objectivity artifact가 아님 |
|
||||
|
||||
## 4. Extracted Facts and Theory Summary
|
||||
|
||||
### 4.1 Total Lagrangian four-node shell boundary
|
||||
|
||||
- **Verified fact — S1/S6:** Dvorkin–Bathe 계열의 continuum-based four-node shell은
|
||||
midsurface translation과 nodal director rotation으로 shell continuum를 나타내며,
|
||||
Total Lagrangian 기술에서 초기 configuration에 대한 Green–Lagrange strain 계열과 그에
|
||||
work-conjugate한 stress를 사용해 internal virtual work를 구성한다. S6는 이 계열을
|
||||
geometric nonlinear MITC4+로 전개하고 incremental Green–Lagrange strain을 residual/tangent
|
||||
계산에 사용한다.
|
||||
- **Project decision — P1:** FESA는 하나의 고정 초기 reference를 유지하고 homogeneous
|
||||
isotropic materially linear law만 허용한다. 따라서 material state/history 없이 geometry와
|
||||
rotation에서만 비선형성이 생겨야 한다.
|
||||
- **Inference:** Formulation은 동일 trial state에서 initial-reference geometry, current
|
||||
midsurface, current director/triad, strain, materially linear stress와 internal virtual work가
|
||||
연결되는 한 계통을 제시해야 한다. 정확한 strain components, plane-stress reduction,
|
||||
thickness assumption, stress/resultant recovery는 이 연구가 확정하지 않는다.
|
||||
- **Verified fact — S1/S6:** original MITC4의 assumed covariant transverse-shear interpolation은
|
||||
thin-shell shear locking을 줄이기 위한 핵심이다. S6의 nonlinear 계산은 네 node shell에
|
||||
`2 x 2 x 2` Gauss integration을 사용한다.
|
||||
- **Project decision — P5:** 기존 승인 linear FESA-MITC4도 source `S4/S4R` 모두 하나의
|
||||
`2 x 2` midsurface × two-point-thickness 경로와 동일 MITC shear tying을 쓴다. source label은
|
||||
Abaqus S4/S4R integration 선택자가 아니다.
|
||||
- **Inference:** 기존 rule을 nonlinear trial geometry에 그대로 “호출”하는 것만으로 consistent
|
||||
TL element가 되지 않는다. 각 quadrature/tying 위치의 reference/current frame, strain variation,
|
||||
stress-resultant와 geometry/map Hessian을 재유도해야 한다. `P5` §15는 이 필요사항의 목록이지
|
||||
승인된 해답이 아니다.
|
||||
- **Applicability fact — S1/S6:** 이 shell family의 large displacement/rotation 사용은 thin-to-thick
|
||||
Reissner–Mindlin-type kinematics와 small elastic strain 가정 안에서 해석해야 한다. materially
|
||||
linear law를 큰 material strain의 물리 모델로 일반화할 evidence는 없다.
|
||||
|
||||
### 4.2 Finite rotations, director and objectivity
|
||||
|
||||
- **Verified fact — S2/S3/S5:** finite rotation은 additive Euclidean vector가 아니며,
|
||||
configuration update, interpolation과 linearization은 rotation/director가 놓인 nonlinear
|
||||
manifold를 반영해야 한다. S2는 magnitude와 무관한 singularity-free director update와 exact
|
||||
discrete linearization을, S5는 objective/path-independent director interpolation과 correct
|
||||
potential gradient/Hessian의 필요성을 제시한다.
|
||||
- **Verified fact — S4:** rotation tensor를 단순히 multiplicative하게 누적한다는 사실만으로
|
||||
path independence가 자동 보장되지 않는다. update의 interpolation/parameterization과 state
|
||||
정의를 함께 검토해야 한다.
|
||||
- **Project decision — P1:** 각 node에는 committed/trial orthonormal right-handed triad `Q`가
|
||||
있고 director는 세 번째 축이다. correction은 dimensionless이며 update는 multiplicative다.
|
||||
- **Inference:** 적절한 proper-orthogonal incremental rotation을 곱하면 한 번의 연산은 triad의
|
||||
orthonormality와 handedness를 보존할 수 있다. 그러나 left/right multiplication, spatial/body
|
||||
increment convention, exponential/quaternion map, small-angle branch, accumulated chart의
|
||||
recentering과 derivative를 고정하지 않으면 residual/tangent/BC/moment가 유일해지지 않는다.
|
||||
- **Open issue O-ROT-01:** Formulation이 `Q_trial` update의 multiplication side, increment frame,
|
||||
retraction과 first/second directional derivative를 정해야 한다. 이것은 approved “multiplicative”
|
||||
의미를 구체화하되 global DOF/public input 의미를 바꾸어서는 안 된다.
|
||||
- **Open issue O-ROT-02:** nodal director/triad에서 Gauss/tying point director와 frame을 만드는
|
||||
objective interpolation, normalization derivative 및 degenerate/opposed director의 fail-closed
|
||||
조건이 아직 없다. S5의 특정 projection-based interpolation을 FESA가 채택한다고 추론하지 않는다.
|
||||
- **Inference:** objectivity는 단지 최종 `Q^T Q=I`, `det(Q)=+1` 검사와 다르다. initial/current
|
||||
geometry와 모든 triad에 같은 finite rigid motion을 superpose했을 때 physical strain/stress,
|
||||
internal energy와 equilibrium law가 적절히 invariant/covariant해야 한다.
|
||||
|
||||
### 4.3 Global 24 DOFs, drilling and nodal moments
|
||||
|
||||
- **Verified fact — S1:** original continuum-based four-node shell은 node당 두 director rotation을
|
||||
쓰는 five-physical-DOF element로 제시된다. director 축 주위 rotation은 original physical
|
||||
shell strain이 아니다.
|
||||
- **Project decision — P1/P5:** FESA public/global field는 node당 세 `UR`을 유지하고, 기존
|
||||
linear element는 director-tangent physical pair와 director-parallel numerical drill coordinate를
|
||||
분리한다. fixed small diagonal drill stabilization은 linear 계약에서만 승인되었다.
|
||||
- **Inference:** finite rotation에서 current director에 대한 “parallel/tangent” projection 자체가
|
||||
state-dependent하다. 그러므로 physical 20-coordinate residual을 global 24-coordinate correction에
|
||||
옮기는 map의 첫 미분뿐 아니라 map의 변화가 만드는 second-derivative/geometric term까지
|
||||
consistent tangent에 필요하다.
|
||||
- **Open issue O-DRILL-01:** objective nonlinear drilling potential, rotating reference, stiffness
|
||||
scale의 committed/trial 의존성, residual과 exact Hessian이 없다. linear diagonal을 current
|
||||
coordinates에 그대로 더하면 large rigid rotation에 artificial energy를 만들 수 있다는 것은
|
||||
**inference**이며, Formulation/Numerical Review가 potential 수준에서 판정해야 한다.
|
||||
- **Verified boundary — S4/S5:** path-independent/objective shell formulations 또는 physical
|
||||
Cosserat drilling rotation은 존재하지만, 그것은 FESA의 numerical drill regularization과 다른
|
||||
물리 모델이다. 이를 근거로 FESA drill을 physical strain/load channel로 바꿀 수 없다.
|
||||
- **Open issue O-MOM-01:** fixed-global dead nodal moment의 components는 P1이 고정하지만,
|
||||
multiplicative rotation correction과 work-conjugate generalized moment, virtual work, consistent
|
||||
derivative는 아직 없다. “follower-load tangent 없음”이 “rotation-map derivative도 없음”을
|
||||
뜻한다고 추론해서는 안 된다.
|
||||
- **Open issue O-DRILL-02:** current director와 평행한 applied moment의 거부/허용 projection이
|
||||
finite state에서 어떻게 평가되는지, physical moment work와 numerical drill을 어떻게 완전히
|
||||
분리하는지 downstream 계약이 필요하다.
|
||||
|
||||
### 4.4 Full Newton and same-trial consistent tangent
|
||||
|
||||
- **Verified fact — S7:** Newton linearization은 현재 iterate에서 평가한 equilibrium residual과
|
||||
그 residual의 Jacobian을 같은 state에서 사용한다. full Newton은 매 iteration Jacobian을 다시
|
||||
형성하고 푸는 방법이며, residual과 correction을 함께 작게 확인하는 것이 일반적이다.
|
||||
- **Project decision — P1:** FESA는 residual과 algorithmically consistent tangent를 같은 trial
|
||||
identity에서 평가하고, entered iteration마다 fresh factorization/solve를 하며, correction을
|
||||
변경 없이 적용한다. iteration `1..100`, fixed increments, no line search/damping/cutback/retry다.
|
||||
- **Inference:** “material tangent + geometric stiffness”라는 이름의 합만으로 consistency가
|
||||
입증되지 않는다. 선택한 rotation retraction 아래에서 physical internal force, state-dependent
|
||||
24/20 map, drilling potential, prescribed-DOF elimination과 external work를 모두 방향미분한 결과가
|
||||
assembled residual의 Jacobian과 일치해야 한다.
|
||||
- **Inference:** fixed-global translational dead force의 magnitude/direction은 displacement와 무관하므로
|
||||
translation virtual-work 표현이 additive global translation이면 그 load contribution은 configuration
|
||||
derivative를 만들지 않는다. 이 결론은 nodal moment나 prescribed finite rotation에 자동 확장되지
|
||||
않는다.
|
||||
- **Inference / verification consequence — S7/P1:** deterministic directional-derivative test에서 동일 trial state와 동일
|
||||
rotation retraction을 사용해 `K p`를 centered residual difference와 비교해야 한다. perturbation을
|
||||
한 값으로 고정해 우연한 cancellation을 통과시키지 말고 truncation/roundoff plateau를 확인하되,
|
||||
perturbation grid와 tolerance는 Numerical Review가 정한다.
|
||||
- **Inference / symmetry boundary — S5/P1:** materially linear conservative internal potential과 conservative numerical
|
||||
drilling potential을 정확히 두 번 미분한 적절한 coordinate Hessian은 symmetry 후보가 된다.
|
||||
그러나 nodal moment work, rotation coordinate choice와 constraint reduction이 미정이므로 complete
|
||||
global tangent symmetry를 이 연구에서 요구사항 이상으로 확정하지 않는다.
|
||||
|
||||
### 4.5 Proportional loads and prescribed paths
|
||||
|
||||
- **Project decision — P1:** 모든 approved `CLOAD`와 nonzero `BOUNDARY`는 step-start에서 factor-one
|
||||
target까지 같은 scalar factor를 쓰고, factor는 fixed positive increment와 마지막 shortening만으로
|
||||
정확히 1에 도달한다. `CLOAD` force/moment는 global direction이 고정된 dead load다.
|
||||
- **Project decision — P1:** prescribed value는 factor-one absolute global-DOF target이며 Newton
|
||||
correction과 다르다. constrained component는 convergence norm에서 빠지지만 complete assembled
|
||||
residual의 constrained entry는 reaction 의미를 가진다.
|
||||
- **Open issue O-BC-01:** finite rotational `BOUNDARY` target을 `Q_start`에 상대적인 rotation vector로
|
||||
해석하는지, `Q(lambda)`를 어떤 retraction/side로 구성하는지, constrained correction과 target
|
||||
mismatch를 어떤 coordinate에서 계산하는지 Formulation이 정해야 한다.
|
||||
- **Inference:** Cartesian nodal positions를 `X + lambda (R-I)X`로 선형 보간하는 prescribed path는
|
||||
일반적으로 중간 `lambda`에서 exact rigid rotation 궤적이 아니다. 따라서 finite rigid-body
|
||||
objectivity test를 단순 proportional displacement BC로 만들면 중간 상태에 strain이 생길 수 있다.
|
||||
operator-level superposition test 또는 처음부터 rigidly transformed 된 두 독립 모델의 covariance
|
||||
비교가 더 직접적인 후보이며, exact rigid prescribed path를 새 public 의미로 추가하면 scope change다.
|
||||
- **Inference / applicability consequence — P1:** limit point, snap-through/post-buckling branch, follower pressure와
|
||||
non-proportional control이 필요한 benchmark는 첫 release의 acceptance 후보가 아니다. fixed-load
|
||||
increment가 Newton attraction radius 밖이면 deterministic failure가 맞으며, automatic cutback을
|
||||
기대할 수 없다.
|
||||
|
||||
### 4.6 Locking, integration and geometry risks
|
||||
|
||||
- **Verified fact — S6:** original MITC4는 transverse shear를 MITC 방식으로 처리하지만 membrane
|
||||
strain을 MITC4+처럼 보강하지 않는다. curved 또는 response 중 distorted mesh에서는 membrane
|
||||
locking으로 load–displacement accuracy가 크게 저하될 수 있다.
|
||||
- **Project decision — P5:** FESA `S4`와 `S4R`는 같은 original-style MITC4 path다. Abaqus S4/S4R의
|
||||
full/reduced integration, hourglass, membrane enhancement 또는 stabilization 차이를 상속하지 않는다.
|
||||
- **Inference:** `2x2x2` common rule은 S1/S6 및 linear FESA와 연결되는 강한 candidate지만,
|
||||
nonlinear strain/tangent의 각 항을 어느 위치에서 적분할지는 Formulation이 source 식으로
|
||||
확인해야 한다. one-point reduction/hourglass control을 source `S4R` 때문에 도입할 근거는 없다.
|
||||
- **Verified risk / inference — S6/P5:** thin/slender geometry, curved/distorted quads, nearly degenerate positive Jacobian과 작은
|
||||
drill scale은 locking 또는 conditioning을 악화할 수 있다. current trial geometry가 심하게
|
||||
변형되어도 TL reference mapping과 current frame/director 모두 각 required Gauss/tying/recovery
|
||||
위치에서 finite/valid해야 한다.
|
||||
- **Inference / verification consequence — S6/P1:** regular/distorted, thickness/radius 또는 thickness/length sequence를
|
||||
함께 보고, 단일 point response가 맞는 것만으로 locking-free를 주장하지 않는다. MITC4+
|
||||
convergence를 original FESA-MITC4 acceptance target으로 사용하지 않는다.
|
||||
|
||||
### 4.7 Equilibrium, reactions and transactional state
|
||||
|
||||
- **Project decision — P1/P3:** full assembled equilibrium at a trial/accepted state gives free-DOF
|
||||
residual and constrained reaction. stable source/component identity와 deterministic assembly/reduction
|
||||
order를 보존해야 한다.
|
||||
- **Inference:** accepted state 검증은 free residual norm만이 아니라 fixed-global resultant force와
|
||||
moment balance를 함께 확인해야 한다. global moment balance는 한 fixed origin에 대한 nodal-force
|
||||
moment, nodal couple와 reactions를 모두 포함해야 하며 exact sign/identity는 Formulation/Numerical
|
||||
Review가 정한다.
|
||||
- **Project decision — P1/P3:** trial state와 output candidate는 완전히 검증된 뒤 atomic commit된다.
|
||||
failure는 prior committed state와 prior authoritative HDF5를 보존하고 current-run live log는 남긴다.
|
||||
- **Inference / verification consequence — P1/P3:** nonconvergence, nonfinite state/recovery, factorization/solve failure와
|
||||
output-finalization failure를 서로 다른 injected failure point로 시험해야 한다. 성공 increment만
|
||||
frame과 일대일이어야 하며 trial rotation/director가 committed state를 alias하면 안 된다.
|
||||
|
||||
## 5. Candidate Benchmarks and Artifact Readiness
|
||||
|
||||
후보 우선순위는 `A`(required portfolio의 직접 후보), `B`(외부 solution/reference candidate),
|
||||
`C`(known-limit characterization 또는 future method)이다. 아래 수치나 source table은 아직 FESA
|
||||
acceptance target/tolerance로 승인된 것이 아니다.
|
||||
|
||||
### B-01 — Small-displacement linear limit (`A`)
|
||||
|
||||
- **Exact candidate artifact:** 현재 read-only `reference/shell/shell.inp`,
|
||||
`reference/shell/shell displacements.csv`, `shell reactions.csv`, `shell stresses.csv`; 별도로
|
||||
`reference/shellR/shellR.inp`와 대응 CSV가 존재한다. 두 input 모두 `*Step, nlgeom=NO`다.
|
||||
- **Artifact gap:** 동일 source identity와 supported four-value nonlinear `STATIC`을 사용하는
|
||||
approved `nlgeom=YES` input 및 nonlinear accepted-frame CSV는 없다. 기존 pair를 rename/rewrite하거나
|
||||
nonlinear reference라고 재분류해서는 안 된다.
|
||||
- **Target quantities:** 충분히 작은 response에서 accepted factor-one global `U`, physical rotation/director,
|
||||
reaction, physical strain/stress/resultant의 linear procedure/baseline 접근; geometric part가 사라지는
|
||||
tangent limit; source-row identity.
|
||||
- **Cannot verify:** finite rotation, nonlinear load–displacement path, nonlinear convergence, objective
|
||||
drilling, rollback 또는 Abaqus nonlinear agreement.
|
||||
- **Assumptions/limits:** existing center deflection scale이 geometry에 비해 작은지는 model length와
|
||||
dimensionless ratio로 다시 확인해야 한다. `shellR` artifact 존재는 FESA reduced integration 또는
|
||||
nonlinear readiness 근거가 아니다.
|
||||
- **Numerical Review questions:** nonlinear variant를 test-owned input으로 승인할지; 어느 linear
|
||||
HDF5/CSV quantities를 baseline으로 삼을지; geometric perturbation 크기와 case-specific limit
|
||||
tolerance는 무엇인지; external comparison이 아니라 cross-procedure regression으로 분류할지.
|
||||
|
||||
### B-02 — Element patch and constant-state continuation (`A`)
|
||||
|
||||
- **Exact candidate artifact/gap:** 기존 exact linear unit-test concepts는
|
||||
`tests/unit/elements/mitc4_shell_test.cpp`의 membrane/bending/shear/twist/rigid tests다. finite-state
|
||||
patch input/expected data artifact는 없음.
|
||||
- **Target quantities:** constant membrane/bending/shear states의 nodal residual, strain/stress/resultant,
|
||||
patch interface equilibrium; zero-increment state에서 linear test로의 reduction; regular/rotated/distorted
|
||||
mesh에서 component/sign covariance.
|
||||
- **Cannot verify:** global Newton lifecycle, full large-deflection accuracy, curved-shell membrane locking,
|
||||
external reference agreement.
|
||||
- **Assumptions/limits:** analytical state가 chosen nonlinear shell kinematics에 정확히 representable한지
|
||||
Formulation derivation 후 확인해야 한다. all-constrained manufactured state는 solver convergence를
|
||||
exercise하지 않는다.
|
||||
- **Numerical Review questions:** 어떤 exact states가 admissible한지, drill coordinate를 어떻게 zero로
|
||||
유지할지, element vs assembly blocking 분할과 invariant tolerance.
|
||||
|
||||
### B-03 — Tangent directional derivative (`A`)
|
||||
|
||||
- **Exact candidate artifact/gap:** external artifact 없음. Formulation이 정한 retraction을 쓰는
|
||||
deterministic generated trial-state test가 필요하다.
|
||||
- **Target quantities:** 여러 regular/distorted elements와 assembled patch에서 translation/rotation
|
||||
direction `p`에 대한 complete residual difference와 `K_T p`; material, geometric, 24/20-map,
|
||||
drilling, load-work contribution을 선택적으로 isolate한 error trend.
|
||||
- **Cannot verify:** 물리 solution accuracy, mesh convergence 또는 benchmark response.
|
||||
- **Assumptions/limits:** centered difference의 두 perturbed states가 같은 committed base와 load factor를
|
||||
공유해야 한다. finite-difference noise 때문에 한 epsilon의 absolute comparison은 부적절하다.
|
||||
- **Numerical Review questions:** perturbation schedule, norm/scaling, expected asymptotic region과 blocking
|
||||
tolerance; constrained DOF와 nodal-moment case 포함 여부; complete tangent symmetry의 expected status.
|
||||
|
||||
### B-04 — Finite rigid superposition/objectivity and triad invariants (`A`)
|
||||
|
||||
- **Exact candidate artifact/gap:** S17 public Abaqus verification에는 shell rigid-body-motion input
|
||||
`xrbmshel.inp`가 있으나 local stored artifact가 없고 FESA subset/목적이 일치하지 않는다.
|
||||
S17은 direct-integration implicit-dynamic rigid-body output test이지 nonlinear-static physical
|
||||
strain/internal-force objectivity test가 아니다.
|
||||
FESA operator-level superposition case도 아직 없음.
|
||||
- **Target quantities:** arbitrary proper rigid rotation과 translation을 initial/current geometry 및 nodal
|
||||
triads에 superpose하기 전후 physical strain/stress/energy invariance, internal force/tangent covariance,
|
||||
`Q^T Q`, `det(Q)`, director-third-axis identity; rigid state의 zero physical residual.
|
||||
- **Cannot verify:** deformational accuracy, nonlinear load path, reaction sign 또는 external solver agreement.
|
||||
- **Assumptions/limits:** proportional Cartesian BC는 exact rigid intermediate path가 아니므로 사용하지
|
||||
않는다. numerical drill이 physical rigid motion에 energy를 만들지 않는 map이 먼저 정의되어야 한다.
|
||||
- **Numerical Review questions:** state-level 또는 solved-model covariance 중 무엇을 blocking할지;
|
||||
rotation magnitudes/axes, force/tangent transform와 invariant tolerances; drill residual을 physical
|
||||
residual과 어떻게 분리할지.
|
||||
|
||||
### B-05 — Equilibrium/reaction and symmetry pair (`A`)
|
||||
|
||||
- **Exact candidate artifact/gap:** exact local nonlinear input/expected rows 없음. one-element/patch와
|
||||
mirrored multi-element model을 새 test-owned candidate로 정의해야 한다.
|
||||
- **Target quantities:** accepted free residual, constrained reaction, global resultant force/moment balance;
|
||||
mirrored node/source mapping 아래 displacement, triad/director, reactions와 physical output의 parity;
|
||||
deterministic row/order identity.
|
||||
- **Cannot verify:** absolute large-deflection accuracy 또는 tangent consistency 단독.
|
||||
- **Assumptions/limits:** mirror는 orientation/connectivity와 pseudovector moment/rotation 변환을 올바르게
|
||||
다뤄야 한다. 단순 component equality가 아니라 signed mapped equality가 필요하다.
|
||||
- **Numerical Review questions:** fixed balance origin, nodal couple 포함식, blocking quantities/tolerances,
|
||||
mirror connectivity rule, symmetry와 objectivity 중 요구조건의 최소 blocking 조합.
|
||||
|
||||
### B-06 — Commit/rollback and deterministic event sequence (`A`)
|
||||
|
||||
- **Exact candidate artifact/gap:** external physics artifact는 필요하지 않다. repository에는 nonlinear
|
||||
transactional-state failure harness가 아직 없다.
|
||||
- **Target quantities:** success 시 committed state/load factor/frame의 bijection; iteration-100 pass/fail
|
||||
boundary; nonconvergence, nonfinite residual/tangent/correction/recovery, factorization/solve 및 HDF5
|
||||
finalization failure 후 prior displacement/triad/director/reaction/recovery/final HDF5 보존; live log의
|
||||
entered-iteration cardinality; repeated/thread configurations의 stable event/order.
|
||||
- **Cannot verify:** shell physical accuracy나 external reference agreement.
|
||||
- **Assumptions/limits:** failure injection은 production semantics를 바꾸지 않는 test seam이어야 한다.
|
||||
- **Numerical Review questions:** floating reproducibility 수준, state snapshot 비교량, output failure를
|
||||
commit 전 어느 validation boundary에 둘지, incomplete current increment가 log에 남길 최소 evidence.
|
||||
|
||||
### B-07F — End-shear cantilever with dense tabulated path (`A/B`)
|
||||
|
||||
- **Exact candidate artifact:** S16 §3.1/Table 2a/Fig. 2의 public institutional postprint.
|
||||
`E=1.2e6`, `nu=0`, `L=10`, `b=1`, `h=0.1`, `P0=EI/L^2=1`, `Pmax=4P0`와
|
||||
`16 x 1` S4R model의 40 equal increments에서 horizontal/vertical tip deflections를
|
||||
`P/Pmax=0.05..1.00`에 tabulate한다.
|
||||
- **Artifact gap:** machine-readable nodes/elements, exact nodal force distribution, `.inp`와 stored
|
||||
FESA/reference CSV가 없다.
|
||||
- **Target quantities:** Table 2a의 signed `Utip/Wtip` path, tip force factor, root reactions,
|
||||
current geometry/director와 Newton iteration identity. Point dead force라 O-MOM-01을 기다리지 않는
|
||||
large-rotation global-solve 후보다.
|
||||
- **Cannot verify:** curved-shell membrane locking, nodal moment work, tangent derivative, objectivity 또는
|
||||
rollback 단독. S16 값은 Abaqus S4R 결과이며 독립 analytical solution이 아니다.
|
||||
- **Assumptions/limits:** paper의 S4R는 FESA와 다른 Updated-Lagrangian/reduced-integration/hourglass/drill
|
||||
model이다. equality는 오직 동일 physical quantity의 external numerical comparison 후보이며 internal
|
||||
compatibility를 뜻하지 않는다. 논문의 default automatic NINC/NITER가 아니라 Table 2a 생성에 쓴
|
||||
equal `NINC*=40` path만 first-release fixed-step 후보와 가까운 evidence다.
|
||||
- **Numerical Review questions:** postprint geometry에서 exact mesh/connectivity/load distribution을
|
||||
재구성해도 benchmark identity를 보존하는가; Table 2a 어느 rows/components를 blocking할지;
|
||||
FESA fixed Full Newton/no-line-search에서 40 increments가 traversable한지; stored artifact provenance와
|
||||
`docs/TOLERANCE.md` family를 어떻게 정할지.
|
||||
|
||||
### B-07M — Pure-moment cantilever to a circular arc/full circle, MES (`A/B`)
|
||||
|
||||
- **Exact candidate artifact:** S6 §3.1/Fig. 5–7/Eq. (27)의 `16 x 1` MITC4/MITC4+ cantilever와
|
||||
analytical circular-arc solution. S16 §3.2/Table 3a/Fig. 3은 `E=1.2e6`, `nu=0`, `L=12`,
|
||||
`b=1`, `h=0.1`, `Mmax=2*pi*EI/L`과 `M/Mmax=0.05..1.00`의 analytical 및 S4R tip
|
||||
deflections를 tabulate한다.
|
||||
- **Artifact gap:** machine-readable node/element/input, exact nodal moment distribution과 stored CSV가
|
||||
없다. FESA-approved CLOAD nodal-moment work가 아직 미정이다.
|
||||
- **Target quantities:** published analytical tip-displacement functions, final circular geometry/director,
|
||||
load-factor path, root reactions, Newton iterations, objectivity under a superposed rigid transform.
|
||||
- **Cannot verify:** point-force behavior, curved initial geometry, membrane-locking performance,
|
||||
Abaqus agreement, numerical drilling accuracy.
|
||||
- **Assumptions/limits:** thin strip가 beam analytical assumptions에 충분히 접근하는 mesh/thickness가
|
||||
필요하고, tip moment를 node들에 배분하면 analytical end resultant와 work-equivalent해야 한다.
|
||||
S16의 dense S4R columns는 analytical columns의 보조 convergence evidence이지 FESA internal-equivalence
|
||||
target이 아니다. S16은 equal `NINC*=80`을 썼으며 default automatic increment counts는 FESA
|
||||
fixed-step behavior의 acceptance evidence가 아니다.
|
||||
- **Numerical Review questions:** finite-rotation nodal-moment work가 확정되기 전 blocking 가능한가;
|
||||
exact geometry/mesh/section/load distribution과 analytical quantity projection; full-circle state를
|
||||
fixed-step/no-cutback Full Newton으로 안전하게 도달시킬 increment와 tolerance.
|
||||
|
||||
### B-08 — NAFEMS 3DNLG-1 Z-shaped cantilever (`B`)
|
||||
|
||||
- **Exact public candidate artifact:** S8의 `n3g1x33x_s4.inp`와 `n3g1x33x_s4r.inp`.
|
||||
페이지는 `t=1.7`, `E=2.0e5`, `nu=0.3`, built-in end, concentrated `P=4000`, `1 x 72`
|
||||
S4/S4R mesh와 source tables를 명시한다. local stored artifact/CSV는 없음.
|
||||
- **Target quantities:** load `104.5`, `1263.0`, `4000.0`에서 tip displacement 및 section A moment;
|
||||
accepted path, root reactions, mesh/source identity.
|
||||
- **Cannot verify:** curved-shell or distorted-mesh membrane locking, pure rigid objectivity, tangent derivative,
|
||||
rollback. source S4 result 일치는 formulation/integration/stabilization equivalence를 뜻하지 않는다.
|
||||
- **Assumptions/limits:** public input의 keyword, node/element orientation, output/moment definition을 FESA
|
||||
subset과 대조해야 한다. NAFEMS original R0029의 independent-source details는 paywall gap이다.
|
||||
- **Numerical Review questions:** exact public input을 그대로 지원할 수 있는지 또는 adaptation이
|
||||
필요한지; moment-at-A를 FESA authoritative output에서 동일 quantity/frame으로 얻을 수 있는지;
|
||||
source table 중 independent target을 식별할 수 있는지; 어떤 quantities가 blocking/warning인지.
|
||||
|
||||
### B-09 — NAFEMS 3DNLG-9 pinched hemisphere (`B`)
|
||||
|
||||
- **Exact public candidate artifact:** S9의 S4 `n3g9xe4x.inp`, S4R `n3g9xf4x.inp`.
|
||||
page는 `E=6.825e7`, `nu=0.3`, symmetry constraints, diametrical inward/outward point load
|
||||
`P=100`과 source tables를 제공한다. S16 §3.4/Table 5a는 closely related hemisphere의
|
||||
`P/Pmax=0.05..1.00` dense A/B displacement table을 제공한다. local stored artifact/CSV는 없음.
|
||||
- **Target quantities:** `P=40,60,100`에서 points A/B radial displacement, load–displacement path,
|
||||
symmetry, reactions와 curved-shell mesh trend.
|
||||
- **Cannot verify:** independent Abaqus verification—S9 자체가 NAFEMS published values가 Abaqus로
|
||||
얻어졌다고 경고한다—또는 tangent/rollback/pure moment work.
|
||||
- **Assumptions/limits:** symmetry shorthand, spherical geometry/directors, exact node identity와 radial
|
||||
projection이 supported subset에 맞아야 한다. original MITC4의 membrane-locking 위험 때문에
|
||||
MITC4+ 또는 higher-order 결과 수준을 기대해서는 안 된다. S16 dense values 역시 Abaqus S4R로
|
||||
계산되었으므로 independent-source gap을 닫지 않는다.
|
||||
- **Numerical Review questions:** R0029의 other-source 결과를 합법적으로 확인할 수 있는지;
|
||||
exact public deck subset compatibility; regular/distorted/mesh sequence와 target rows; known-locking
|
||||
limitation을 acceptance와 characterization 중 어디에 둘지.
|
||||
|
||||
### B-10 — Original-MITC4 locking/distortion characterization (`C`)
|
||||
|
||||
- **Exact candidate artifact:** S6 Fig. 14–16의 cylindrical shell bending geometry와
|
||||
`a/R=1/100, 1/1000, 1/10000`, regular/distorted `12 x 12` meshes; Fig. 17–20의 hemispherical
|
||||
shell, regular/distorted `8 x 8`, `12 x 12` meshes. 논문 PDF의 geometry/material/load 설명은 공개다.
|
||||
- **Artifact gap:** machine-readable inputs/curves가 없고 fine MITC9 reference는 논문 graph뿐이다.
|
||||
cylindrical case의 distributed edge moment는 현재 input scope와 맞지 않는다.
|
||||
- **Target quantities:** thickness와 distortion에 따른 displacement-curve trend, rank/conditioning,
|
||||
original MITC4와 reference curve의 qualitative separation.
|
||||
- **Cannot verify:** exact blocking reference comparison, FESA MITC4+ behavior, current input-path acceptance.
|
||||
- **Assumptions/limits:** characterization-only. S6는 original MITC4가 thin distorted cases와 일부
|
||||
large-response meshes에서 membrane lock함을 보여 주므로 실패 경향을 숨기지 않는다.
|
||||
- **Numerical Review questions:** point-load-compatible hemisphere만 optional study로 남길지; graph
|
||||
digitization을 금지하고 qualitative known limitation으로만 쓸지; performance adequacy의 최소 범위.
|
||||
|
||||
### B-11 — Shell MMS / exact-solution expansion (`C`)
|
||||
|
||||
- **Exact public candidate artifact:** S13의 Figshare source-term notebook와 solid-mechanics examples.
|
||||
- **Artifact gap:** FESA TL MITC4 shell kinematics에 대한 manufactured midsurface/director field,
|
||||
compatible nodal CLOAD/BOUNDARY-only source, analytical resultants와 convergence data가 없다.
|
||||
- **Target quantities:** 향후 shell-specific MMS를 만들 경우 spatial order, residual/source balance,
|
||||
strain/stress/resultant error norms와 mesh refinement rate. 현재는 B-07M analytical circle을 MES
|
||||
(method of exact solutions) 후보로 우선한다.
|
||||
- **Cannot verify:** current feature를 그대로 실행할 수 없음; S13의 3-D body source와 material cases는
|
||||
current input/material scope 밖이다.
|
||||
- **Assumptions/limits:** shell MMS를 위해 distributed/body source 또는 새로운 BC meaning을 추가하면
|
||||
approved scope change다. all-boundary prescribed manufactured state는 global nonlinear solve를 충분히
|
||||
exercise하지 않는다.
|
||||
- **Numerical Review questions:** current release에서 MMS를 nonblocking gap으로 둘지; nodal-load-only
|
||||
admissible exact state를 유도할 수 있는지; spatial convergence study가 acceptance에 필요한지.
|
||||
|
||||
## 6. Verification Relevance
|
||||
|
||||
| evidence class | candidates | 검증하는 것 | 검증하지 못하는 것 |
|
||||
| --- | --- | --- | --- |
|
||||
| code verification | B-01, B-02, B-03, B-04, B-05, B-06 | linearization, coordinate map, objectivity/covariance, equilibrium/reaction, state lifecycle, deterministic order | 실제 구조물의 물리 validity 전부 |
|
||||
| exact/MES comparison | B-07M | large-rotation kinematics, moment work, analytical response path | general curved shell, point force, drilling accuracy |
|
||||
| solution verification / benchmark comparison | B-07F, B-08, B-09 | assembled nonlinear response, path, curvature, nodal dead load, mesh behavior | 내부 formulation equivalence, tangent consistency, rollback |
|
||||
| known-limit characterization | B-10 | original MITC4 membrane-locking/distortion sensitivity를 드러냄 | blocking exact target 또는 MITC4+ 성능 |
|
||||
| MMS method candidate | B-11 | 향후 equation/source implementation과 spatial order | current input scope에서 즉시 실행 가능한 gate |
|
||||
| reference comparison | Stage-4에서 승인할 stored nonlinear input/CSV | stable source/component mapping과 `docs/TOLERANCE.md` gate | formulation identity, objectivity, state integrity |
|
||||
| validation | 현재 exact candidate 없음 | — | experimental reality agreement. 이번 release gate를 verification과 validation으로 혼동하지 않음 |
|
||||
|
||||
한 benchmark의 nodal displacement 일치로 전체 기능을 승인해서는 안 된다. 최소 blocking portfolio는
|
||||
B-01~B-06의 독립 invariant/software checks와, point-dead-load B-07F 또는 exact subset이 확인된
|
||||
B-08/B-09 중 적어도 하나의 large-response problem을 조합하는 방향이 타당하다. O-MOM-01 해소
|
||||
후 analytical B-07M을 추가하면 finite-moment work evidence가 강화된다. 이는
|
||||
**research recommendation**이며 exact blocking set과 tolerance는 Numerical Review 소유다.
|
||||
|
||||
## 7. Applicability Limits
|
||||
|
||||
| axis | applicable | not established / excluded |
|
||||
| --- | --- | --- |
|
||||
| nonlinearity | fixed-reference Total Lagrangian geometric nonlinearity | Updated Lagrangian, corotational, material nonlinearity, finite-strain constitutive validation |
|
||||
| element | four-node FESA-MITC4 mapping for source S4/S4R; Reissner–Mindlin-type director shell | MITC4+, MITC9, physical drilling/MITC4-D, continuum-shell 또는 Abaqus S4/S4R internal behavior |
|
||||
| material/section | homogeneous isotropic materially linear shell; user-consistent units | composite, plasticity, hyperelasticity, thickness stretch/material history |
|
||||
| kinematics | large displacement/finite rotation with small elastic strain applicability | singular/degenerate director interpolation, sharp folds/intersections/hinges without separate evidence |
|
||||
| loads | proportional fixed-global nodal force and moment; prescribed global targets | follower pressure/force, distributed/body/edge load, non-proportional path, arc-length/control displacement |
|
||||
| solver path | fixed increments, Full Newton, fresh tangent/solve, no correction modification | modified/quasi-Newton, line search, damping, adaptive growth/cutback/retry, limit-point traversal guarantee |
|
||||
| integration | source-backed `2x2x2` candidate and existing FESA common S4/S4R convention | source-label-selected Abaqus integration, one-point reduction/hourglass or undocumented selective integration |
|
||||
| locking | transverse-shear MITC mitigation | general locking-free claim; distorted curved original MITC4 has membrane-locking risk |
|
||||
| outputs/reference | accepted committed states; exact stable source/component matching after Stage-4 contract | trial HDF5 history, vendor internal variables, inferred units/coordinates, artifact row averaging/normalization |
|
||||
| verification | analytical/invariant/patch/benchmark/software-failure portfolio | one-value validation claim, automatic Abaqus/Midas equivalence, current linear artifacts as nonlinear reference |
|
||||
|
||||
## 8. Open Issues and Source Disagreements
|
||||
|
||||
| id | type | issue / conflict | downstream acceptance question |
|
||||
| --- | --- | --- | --- |
|
||||
| O-ROT-01 | formulation | multiplicative side/frame/retraction, accumulated chart/recentering과 first/second derivative 미정 | Formulation이 하나의 objective state/update convention을 완전 선형화할 수 있는가? |
|
||||
| O-ROT-02 | formulation/numerical | nodal triad/director의 Gauss/tying interpolation과 normalization derivative 미정 | opposed/degenerate director validation 및 objectivity test가 무엇인가? |
|
||||
| O-MAP-01 | formulation | nonlinear `24 global -> 20 physical + 4 drill` map과 map Hessian 미정 | complete global residual/tangent가 directional-derivative gate를 통과하는가? |
|
||||
| O-DRILL-01 | formulation/numerical | objective drilling potential, scale/state dependence와 exact Hessian 미정 | six physical rigid modes를 보존하며 pure drill만 regularize하는가? |
|
||||
| O-DRILL-02 | formulation/numerical | finite state에서 director-parallel applied moment의 판정과 physical moment/numerical drill 분리 미정 | drilling-direction load가 physical work나 stabilization에 섞이지 않고 결정적으로 거부되는가? |
|
||||
| O-MOM-01 | formulation | fixed-spatial nodal moment의 multiplicative rotation work/conjugacy 미정 | no-follower 계약을 지키면서 residual/tangent와 B-07M을 정의할 수 있는가? |
|
||||
| O-BC-01 | formulation/numerical | absolute prescribed finite rotation의 factor path와 constrained correction 좌표 미정 | factor endpoints, intermediate `Q`, reaction work와 rollback identity가 유일한가? |
|
||||
| O-SYM-01 | numerical | complete tangent symmetry가 conservative internal/drill/moment 선택 후에야 판정 가능 | symmetry를 blocking invariant로 둘지, 어떤 scaled norm을 쓸지? |
|
||||
| O-REF-01 | reference readiness | exact stored nonlinear `.inp`/CSV가 repository에 없음 | B-08 또는 B-09의 exact deck/rows를 합법적으로 저장·승인할지, 아니면 다른 artifact를 선택할지? |
|
||||
| O-REF-02 | source access | NAFEMS R0029 full report는 paid/private; 공개 Abaqus 3DNLG-9 값은 독립 NAFEMS evidence가 아님 | independent target/provenance를 추가 확보할 수 있는가? 확보 못하면 claim을 어떻게 제한할지? |
|
||||
| O-TOL-01 | numerical | tangent, objectivity, `Q` invariant, balance, symmetry, endpoint arithmetic tolerance 미정 | scale-aware case-specific gate를 Stage-4 전에 모두 고정할 수 있는가? |
|
||||
| O-BENCH-01 | scope/numerical | B-07F는 exact deck 부재/vendor-result 경계, B-07M은 nodal moment work, B-09는 curved locking/subset, B-08은 moment output identity gap이 있음 | large-response blocking benchmark를 어떤 exact artifact/quantity로 선택할지? |
|
||||
| O-STEP-01 | numerical | no-cutback Full Newton이 published benchmark load intervals에서 수렴한다는 evidence 없음 | fixed increment를 benchmark마다 어떻게 정하고, deterministic nonconvergence와 formulation failure를 구분할지? |
|
||||
| O-MMS-01 | method | public MMS artifact는 3-D solid/body-source이고 shell/CLOAD subset과 불일치 | first release에서 nonblocking으로 남길지, scope-preserving exact nodal-load case가 가능한지? |
|
||||
|
||||
명시적 source disagreement/비교 경계는 다음과 같다.
|
||||
|
||||
1. S1/S6의 nonlinear shell은 node당 five physical DOFs를 쓰지만 P1은 six global DOFs와
|
||||
numerical drill을 요구한다. 이 차이는 구현 detail이 아니라 O-MAP-01/O-DRILL-01의 정식화 gap이다.
|
||||
2. S6의 MITC4+는 membrane assumed strain을 추가하고 original MITC4보다 distorted nonlinear
|
||||
mesh에서 더 좋은 결과를 보인다. FESA는 original-style MITC4이므로 그 성능을 상속하지 않는다.
|
||||
3. Abaqus S4와 S4R의 공개 결과/inputs는 benchmark evidence 후보지만 FESA source mapping과
|
||||
Abaqus integration, stabilization, rotation 또는 output recovery의 동일성을 뜻하지 않는다.
|
||||
4. S7의 Abaqus production algorithm에는 adaptive cutback 등 P1이 의도적으로 제외한 control이
|
||||
있다. Newton의 일반 same-state Jacobian evidence만 사용하며 runtime-control 동등성을 주장하지 않는다.
|
||||
|
||||
## 9. Downstream Handoff
|
||||
|
||||
### 9.1 Formulation Agent에 전달할 evidence와 미결정
|
||||
|
||||
1. S1/S6을 출발점으로 fixed-initial-reference TL shell의 kinematic/virtual-work 계통을 다시
|
||||
유도하되, materially linear law와 existing physical MITC shear/`2x2x2` boundary만 보존한다.
|
||||
2. S2–S5를 근거로 committed/trial `Q`, director, chosen multiplicative retraction, interpolation,
|
||||
first/second variation을 하나의 objective/path-defined convention으로 제시한다.
|
||||
3. O-MAP-01의 exact global 24-DOF residual/tangent와 state-dependent map Hessian을 완성한다.
|
||||
`docs/linear-static-mitc4-shell/formulation.md` §15는 gap inventory로만 사용한다.
|
||||
4. O-DRILL-01/O-DRILL-02의 objective numerical drilling potential과 exact residual/Hessian,
|
||||
physical recovery separation, rigid-mode preservation을 정의한다. physical drilling 모델로 scope를
|
||||
바꾸지 않는다.
|
||||
5. fixed-global force와 moment의 external virtual work, O-MOM-01 nodal-moment conjugacy/derivative,
|
||||
O-BC-01 prescribed finite-rotation path와 constrained correction을 명시한다.
|
||||
6. same-trial complete residual과 algorithmic tangent에 material/geometric/map/drill/load-work terms가
|
||||
빠짐없이 대응함을 trace한다. 이 연구의 benchmark formula를 FESA governing equation으로 복사하지 않는다.
|
||||
|
||||
### 9.2 Numerical Review Agent에 전달할 benchmark/reference evidence
|
||||
|
||||
1. B-01~B-06을 각기 독립 blocking 후보로 검토하고, quantities, norms, scales, perturbation study,
|
||||
invariant/balance/rollback tolerance를 `O-TOL-01` 해소와 함께 고정한다.
|
||||
2. B-07F는 O-MOM-01과 독립인 point-dead-load large-rotation 후보로 먼저 검토하되 S16의
|
||||
vendor S4R values를 independent/formulation-equivalent target으로 부르지 않는다. B-07M
|
||||
pure-moment MES는 O-MOM-01이 해결된 뒤에만 blocking 여부를 정하고, analytical equation,
|
||||
mesh/section/load distribution과 target projection을 별도로 재현·검토한다.
|
||||
3. public exact filenames가 있는 B-08 `n3g1x33x_s4.inp`/`_s4r.inp`와 B-09
|
||||
`n3g9xe4x.inp`/`n3g9xf4x.inp`의 keyword subset, stable identities, units/coordinates, target row
|
||||
definitions와 provenance를 검사한다. 이 단계에서는 실행·생성·rename하지 않는다.
|
||||
4. `reference/shell/`와 `reference/shellR/`는 `nlgeom=NO` linear artifacts다. B-01 baseline 이상의
|
||||
nonlinear-readiness를 부여하지 말고 O-REF-01을 exact stored nonlinear artifact gap으로 유지한다.
|
||||
5. B-10은 original MITC4 known-limit characterization으로 분류하고 MITC4+ curves를 FESA target으로
|
||||
쓰지 않는다. B-11 MMS는 current scope compatibility가 입증되지 않으면 nonblocking gap이다.
|
||||
6. selected external reference만 stable row identity와 `docs/TOLERANCE.md` family-scale policy로
|
||||
비교한다. missing/extra/duplicate/nonfinite precheck와 blocking/warning family를 artifact별로 정한다.
|
||||
7. fixed increment/no-cutback 조건에서 benchmark가 실제로 traversable한지 O-STEP-01을 먼저 판정한다.
|
||||
convergence failure를 임의 tolerance 완화나 hidden retry로 숨기지 않는다.
|
||||
|
||||
### 9.3 Coordinator에 반환하는 gate 의미
|
||||
|
||||
- Research quality gate는 통과한다: approved gaps에 직접 대응하는 Tier 1/2 evidence, applicability
|
||||
limits, exact public/local candidate identities, artifact gaps와 downstream acceptance questions가 있다.
|
||||
- 이 `passed`는 formulation 또는 nonlinear reference readiness 통과를 뜻하지 않는다.
|
||||
O-ROT/O-MAP/O-DRILL/O-MOM/O-BC는 Formulation gate, O-TOL/O-REF/O-BENCH/O-STEP은 Numerical
|
||||
Review gate에서 해소해야 한다.
|
||||
- requirements, code, tests, CMake, I/O, phase 또는 reference artifact는 이 stage에서 변경하지 않는다.
|
||||
|
||||
## 10. Self-Audit and Research Quality Gate
|
||||
|
||||
| audit item | result | evidence |
|
||||
| --- | --- | --- |
|
||||
| approved requirement trace | pass | RQ와 Sections 4–9가 NSNR-003/041/074/006/048/018/063/011/019/030/034를 직접 다룸 |
|
||||
| key theory claim sourcing | pass | TL/MITC4 S1/S6, rotations S2–S5, Newton S7, V&V/MMS S11–S13, tabulated benchmark evidence S16 |
|
||||
| fact/decision/inference/open separation | pass | Section 4의 각 claim label과 Section 8 gap IDs |
|
||||
| benchmark exactness | pass | B-01~B-06, B-07F/B-07M, B-08~B-11마다 exact artifact 또는 explicit artifact gap, target, cannot-verify, limit, Numerical Review question 기재 |
|
||||
| nonlinear artifact honesty | pass | P6/B-01에서 `reference/shell*`의 `nlgeom=NO`와 nonlinear gap을 명시 |
|
||||
| compatibility restraint | pass | S4/S4R/MITC4+ 및 Abaqus/NAFEMS 경계를 Sections 3, 7, 8에 명시; internal equivalence claim 없음 |
|
||||
| tolerance restraint | pass | source가 공개한 benchmark load/geometry만 후보로 기록; 새로운 reference/invariant tolerance를 만들지 않음 |
|
||||
| source access/licensing limits | pass | NAFEMS/ASME paywall, publisher access, public author copy/CC BY와 graph-only limits 기록 |
|
||||
| downstream sufficiency | pass | exact formulation and Numerical Review action lists와 owner별 open issue 제공 |
|
||||
| ownership | pass | 이 artifact만 Research Agent 소유; external solver/reference 실행·변경 없음 |
|
||||
|
||||
검색했지만 확보하지 못한 핵심 evidence는 (1) 공개·독립·machine-readable NAFEMS R0029 target
|
||||
source, (2) FESA subset에 이미 맞는 stored nonlinear S4/S4R input/CSV, (3) original FESA-MITC4의
|
||||
objective 24-DOF drilling/finite nodal-moment 정식화다. 이 부재를 source compatibility 주장이나
|
||||
새 numerical value로 메우지 않았다.
|
||||
@@ -1,186 +0,0 @@
|
||||
# Translation Displacement Comparison Report
|
||||
|
||||
## 1. Metadata and scope
|
||||
|
||||
- feature_id: `nonlinear-static-newton-raphson`
|
||||
- report_id: `TRANSLATION-REPORT-001`
|
||||
- date: `2026-08-26`
|
||||
- owner_agent: `implementation-agent` (bounded diagnostic dispatch)
|
||||
- dispatch coordination SHA-256: `D7CE6264EE3FD20FB6CD74CF1FC28E05EEEEFA67B25AF737D2DF989059A72D6F`
|
||||
- status: `translation-diagnostic-pass-not-a-gate`
|
||||
- tolerance source: `docs/TOLERANCE.md`
|
||||
|
||||
This focused report recomputes only global translational displacement components
|
||||
`U1/U2/U3` for the existing coarse `reference/shellNL` case and the added fine
|
||||
`reference/shellNL-meshfine` case. It is diagnostic evidence for the observed
|
||||
mesh sensitivity; it does not create or replace the canonical Stage 6
|
||||
`reference-comparison.md`. In particular, it is not Step 12 implementation
|
||||
evidence and does not change any workflow gate.
|
||||
|
||||
The two meshes are compared separately to their own read-only Abaqus CSV
|
||||
artifacts. No coarse-to-fine node interpolation, row pairing, averaging, or
|
||||
direct FESA-to-FESA error was used.
|
||||
|
||||
## 2. Artifact inventory and accepted-frame identity
|
||||
|
||||
All paths below are relative to the feature worktree. SHA-256 and byte counts
|
||||
were recomputed before comparison.
|
||||
|
||||
| mesh | artifact | path | bytes | SHA-256 |
|
||||
| --- | --- | --- | ---: | --- |
|
||||
| coarse | input | `reference/shellNL/shellNL.inp` | 4,778 | `4BF3ECB0F7F1E8462C573E993DBC97AC5D920C91CF6F23AD4C6891D77FFBADA2` |
|
||||
| coarse | translation CSV | `reference/shellNL/shellNL displacements.csv` | 7,542 | `4E0F99CA9372B1ADF7FAF102F43BC0B887DC743FDEDA378E4342D2CF8E0C0786` |
|
||||
| coarse | FESA HDF5 | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shellNL/shellnl-s4-final-441600152250700-0/shellNL_results.h5` | 934,602 | `9744814BEBF33486F526F821EDC7D96F072F34E988D70A00AC7AA063570FFA40` |
|
||||
| fine | input | `reference/shellNL-meshfine/shellNL-meshfine.inp` | 56,516 | `40DF1CE77311C8D799564A21A60F3BDEBB8148D52CAE22B7292FDFAD32018220` |
|
||||
| fine | translation CSV | `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | 111,184 | `740819FF8AED0E279961581F7CDBFA12784CFBA3A488C35A652E80103F64433F` |
|
||||
| fine | FESA HDF5 | `.harness/build-ninja-msvc-debug/reference/meshfine-diagnostic/run-1787669003801/shellNL-meshfine_results.h5` | 10,547,651 | `81A3C431E2977D2482D212877C3C306FFBB19CD1F0C47FBF1C936AE06CC93ACA` |
|
||||
|
||||
For both HDF5 artifacts, `/steps/Step-1/accepted_frames` has ten accepted rows.
|
||||
The unique row satisfying `is_factor_one=1` and `load_factor=1.0` is
|
||||
`frame_index=9`, `increment_index=10`, and `iteration_count=2`. Translation
|
||||
values were projected only from
|
||||
`/steps/Step-1/frames/9/nodal/displacement`, columns `[UX, UY, UZ]`:
|
||||
|
||||
| mesh | HDF5 node rows | displacement shape | CSV wide rows | exact CSV Frame |
|
||||
| --- | ---: | --- | ---: | --- |
|
||||
| coarse | 49 | `[49, 6]` | 49 | `Increment 10: Step Time = 1.000` |
|
||||
| fine | 729 | `[729, 6]` | 729 | `Increment 10: Step Time = 1.000` |
|
||||
|
||||
## 3. Source identity and prechecks
|
||||
|
||||
The comparison key is
|
||||
|
||||
```text
|
||||
(accepted_state=factor-one, canonical_instance_name, source_node_label, component)
|
||||
```
|
||||
|
||||
`canonical_instance_name` is matched case-insensitively; the CSV/HDF5 source
|
||||
spelling itself is not rewritten. CSV columns were selected after trimming only
|
||||
surrounding header whitespace. The `U-U1/U-U2/U-U3` columns map respectively to
|
||||
HDF5 `UX/UY/UZ`. Row order is not part of the identity and was not used for
|
||||
matching.
|
||||
|
||||
| mesh | component rows | duplicate CSV wide/component/HDF5 keys | nonfinite CSV/HDF5 values | missing HDF5 keys | extra HDF5 keys | precheck |
|
||||
| --- | ---: | --- | --- | ---: | ---: | --- |
|
||||
| coarse | 147 | `0 / 0 / 0` | `0 / 0` | 0 | 0 | pass |
|
||||
| fine | 2,187 | `0 / 0 / 0` | `0 / 0` | 0 | 0 | pass |
|
||||
|
||||
Each CSV contains only the exact factor-one `Frame` value shown above. Thus the
|
||||
row prechecks required before numerical tolerance evaluation pass for the
|
||||
translation projection in each mesh.
|
||||
|
||||
## 4. Applied tolerance policy
|
||||
|
||||
`U1/U2/U3` remain one global-length, blocking translation family within each
|
||||
case. The component rows in Section 6 are diagnostics only: they use the same
|
||||
case-family scale and near-zero band below and do not introduce a component
|
||||
scale, component-specific tolerance, or a new approved family.
|
||||
|
||||
For the reference values `r_i` and FESA values `f_i`, `docs/TOLERANCE.md` is
|
||||
applied exactly:
|
||||
|
||||
\[
|
||||
S=\max_i|r_i|,\qquad B=0.01S,\qquad e_i=|f_i-r_i|.
|
||||
\]
|
||||
|
||||
- If `|r_i| <= B`, the row passes iff `e_i <= B`.
|
||||
- Otherwise, the row passes iff `e_i / |r_i| <= 0.05`.
|
||||
- The whole family also requires `RMS(e_i) / S <= 0.01`.
|
||||
- There is no independent absolute-error gate, `max(1,S)` floor, zero clamp,
|
||||
row omission, or averaging. A zero-scale family would require exact FESA
|
||||
zero; neither translation family has zero reference scale.
|
||||
|
||||
## 5. Translation-family results
|
||||
|
||||
| mesh | rows | `S` | `B=0.01S` | near-zero / significant rows | row failures | max absolute error | max significant-row relative error | RMS error | `L2(error)` | relative RMS | verdict |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- |
|
||||
| coarse | 147 | `2.3740820300000001e-05` | `2.3740820300000003e-07` | 122 / 25 | 0 | `1.9037855439354404e-07` | `8.5711169439298945e-03` | `2.4530813178127803e-08` | `2.9742030342848264e-07` | `1.0332757195473908e-03` | pass |
|
||||
| fine | 2,187 | `2.5795705400000001e-05` | `2.5795705400000002e-07` | 1,626 / 561 | 0 | `1.6193812501096337e-07` | `6.2777164841928829e-03` | `5.8615647876386634e-09` | `2.7411825664926473e-07` | `2.2723025777921402e-04` | pass |
|
||||
|
||||
Both sets have zero row failures and relative RMS values below the common
|
||||
`0.01` threshold. This is a translation-only diagnostic pass; it is not a
|
||||
full external-reference verdict for the nonlinear-static feature.
|
||||
|
||||
## 6. Component diagnostics under the unchanged family scale
|
||||
|
||||
The `near-zero/significant` counts and every row decision below use the Section 5
|
||||
family band `B`, not a component-derived scale. A dash for maximum relative
|
||||
error means all rows of that component were near-zero and were therefore judged
|
||||
only by the approved absolute-band rule.
|
||||
|
||||
### 6.1 Coarse mesh
|
||||
|
||||
| component | rows | near-zero / significant | row failures | max absolute error | max significant-row relative error | RMS error | `L2(error)` | worst row `(node; fesa; reference; abs error)` |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- |
|
||||
| U1 | 49 | 49 / 0 | 0 | `5.9371608358817413e-12` | — | `1.7563955953584068e-12` | `1.2294769167508847e-11` | `12; -8.7994083858817417e-12; -2.8622475500000000e-12; 5.9371608358817413e-12` |
|
||||
| U2 | 49 | 49 / 0 | 0 | `5.9379769034414602e-12` | — | `1.7566506185832881e-12` | `1.2296554330083018e-11` | `19; 8.7996068934414599e-12; 2.8616299900000001e-12; 5.9379769034414602e-12` |
|
||||
| U3 | 49 | 24 / 25 | 0 | `1.9037855439354404e-07` | `8.5711169439298945e-03` | `4.2488614702881049e-08` | `2.9742030292016737e-07` | `2; -2.3550441745606457e-05; -2.3740820300000001e-05; 1.9037855439354404e-07` |
|
||||
|
||||
### 6.2 Fine mesh
|
||||
|
||||
| component | rows | near-zero / significant | row failures | max absolute error | max significant-row relative error | RMS error | `L2(error)` | worst row `(node; fesa; reference; abs error)` |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- |
|
||||
| U1 | 729 | 729 / 0 | 0 | `5.6550975712048108e-12` | — | `1.5513648050863109e-12` | `4.1886849737330394e-11` | `27; -1.1143569120481096e-13; 5.5436618799999999e-12; 5.6550975712048108e-12` |
|
||||
| U2 | 729 | 729 / 0 | 0 | `5.6547834814404039e-12` | — | `1.5512360377367428e-12` | `4.1883373018892053e-11` | `16; -1.1132282144040392e-13; 5.5434606599999999e-12; 5.6547834814404039e-12` |
|
||||
| U3 | 729 | 168 / 561 | 0 | `1.6193812501096337e-07` | `6.2777164841928829e-03` | `1.0152527787009038e-08` | `2.7411825024924402e-07` | `2; -2.5633767274989038e-05; -2.5795705400000001e-05; 1.6193812501096337e-07` |
|
||||
|
||||
## 7. Deterministically ordered largest absolute-error rows
|
||||
|
||||
Rows are listed by descending absolute error, then source node label and
|
||||
component for a deterministic display. `part-1-1` below is the canonical
|
||||
case-insensitive instance identity.
|
||||
|
||||
| mesh | rank | key `(instance, node, component)` | FESA | reference | absolute error | applied rule and metric |
|
||||
| --- | ---: | --- | ---: | ---: | ---: | --- |
|
||||
| coarse | 1 | `(part-1-1, 2, U3)` | `-2.3550441745606457e-05` | `-2.3740820300000001e-05` | `1.9037855439354404e-07` | relative; `8.0190386005130586e-03` |
|
||||
| coarse | 2 | `(part-1-1, 35, U3)` | `-1.2104431681576916e-05` | `-1.2190867900000000e-05` | `8.6436218423083233e-08` | relative; `7.0902432158323394e-03` |
|
||||
| coarse | 3 | `(part-1-1, 39, U3)` | `-1.2104431681576916e-05` | `-1.2190867900000000e-05` | `8.6436218423083233e-08` | relative; `7.0902432158323394e-03` |
|
||||
| fine | 1 | `(part-1-1, 2, U3)` | `-2.5633767274989038e-05` | `-2.5795705400000001e-05` | `1.6193812501096337e-07` | relative; `6.2777164841928829e-03` |
|
||||
| fine | 2 | `(part-1-1, 21, U3)` | `-2.3863834908375246e-05` | `-2.3782464300000001e-05` | `8.1370608375244783e-08` | relative; `3.4214540322150206e-03` |
|
||||
| fine | 3 | `(part-1-1, 69, U3)` | `-2.3863834908375246e-05` | `-2.3782464300000001e-05` | `8.1370608375244783e-08` | relative; `3.4214540322150206e-03` |
|
||||
|
||||
## 8. Mesh trend interpretation
|
||||
|
||||
The fine-mesh translation relative RMS divided by the coarse-mesh translation
|
||||
relative RMS is
|
||||
|
||||
\[
|
||||
\frac{2.2723025777921402\times10^{-4}}
|
||||
{1.0332757195473908\times10^{-3}}
|
||||
=0.21991251074664606.
|
||||
\]
|
||||
|
||||
This is a `78.008748925335397%` reduction in the separately measured
|
||||
reference-normalized translation RMS. It is consistent with the hypothesis
|
||||
that the coarse-case discrepancy is mesh-sensitive, and the fine case also
|
||||
passes the same row/RMS policy.
|
||||
|
||||
It is not an observed order of convergence, a proof of monotonic convergence,
|
||||
or a solution-accuracy claim outside these translation rows: the two models have
|
||||
different meshes and distinct external-reference outputs, and no common-mesh
|
||||
interpolation or mesh-size-rate study was performed.
|
||||
|
||||
## 9. Explicit exclusions and no-change assertion
|
||||
|
||||
This report deliberately excludes:
|
||||
|
||||
- all reaction quantities;
|
||||
- `UR1/UR2/UR3` rotations;
|
||||
- all stress quantities, including the user-noted `reference/shell` element-label
|
||||
ordering change;
|
||||
- Newton convergence lifecycle and iteration-log acceptance beyond identifying
|
||||
the accepted factor-one HDF5 frame;
|
||||
- `USER-DECISION-004` disposition;
|
||||
- Step 11 and Step 12 status, Physics Evaluation, and Release readiness.
|
||||
|
||||
No source, test, CMake, comparator, tolerance policy, phase file, canonical
|
||||
reference-comparison report, declared input, or reference artifact was modified
|
||||
for this report. The report also does not create `implementation-report.md`,
|
||||
`build-test.md`, or `reference-comparison.md`.
|
||||
|
||||
## 10. Handoff
|
||||
|
||||
Within this narrow scope there is no artifact, identity, finite-value, or
|
||||
translation-tolerance blocker. The report is handed to the Coordinator as
|
||||
translation-only diagnostic evidence; gate ownership and all excluded work remain
|
||||
unchanged.
|
||||
@@ -1,323 +0,0 @@
|
||||
# MITC4 비선형 정적 해석 검증과 한계
|
||||
|
||||
본 문서는 당시 revision의 검증·판정 기록이다. 본문에 남긴 원본 보고서 이름과 SHA-256은
|
||||
통합 전 자료의 식별자이며 정리된 현재 파일의 byte hash를 뜻하지 않는다. 원문은 Git
|
||||
`858e87b`의 해당 기능 폴더에서 확인할 수 있다. 현재 진입점과 대응 기록은 [README](README.md)를 따른다.
|
||||
|
||||
아래 날짜·revision·명령·수치는 당시 실제 실행 기록이다. 문서 정리에서 solver를 다시 실행하지 않았다.
|
||||
현재 계약은 [요구사항](requirements.md), [정식화](formulation.md), [I/O](io.md), [공통 tolerance](../TOLERANCE.md)를 따른다. [과거 release 판정](release.md)의 재검증 경계도 유지한다.
|
||||
|
||||
<a id="build-test"></a>
|
||||
|
||||
<a id="build-test--nonlinear-static-newton-raphson-build-and-test-report"></a>
|
||||
## Nonlinear Static Newton-Raphson Build and Test Report
|
||||
|
||||
<a id="build-test--metadata"></a>
|
||||
### Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| owner_agent | `implementation-agent` |
|
||||
| working directory | `C:\git\FESADev\.worktrees\nonlinear-static-newton-raphson` |
|
||||
| configuration | `windows-msvc-ninja-debug`, x64 Debug |
|
||||
| compiler | MSVC `cl.exe` from VS 18, toolset `14.51.36231` |
|
||||
| generator | Ninja |
|
||||
| dependency configuration | `FESA_GTEST_SOURCE_DIR=C:/git/googletest`; MKL `2026.1`; TBB `2023.1`; HDF5 `2.1.1` |
|
||||
| final classification | none; all commands passed |
|
||||
|
||||
<a id="build-test--fresh-command-log"></a>
|
||||
### Fresh command log
|
||||
|
||||
| stage | command | exit | duration | output tail |
|
||||
| --- | --- | ---: | ---: | --- |
|
||||
| configure | `cmake --preset windows-msvc-ninja-debug` | 0 | 1.066 s | `Configuring done`; `Generating done`; build files written to `.harness/build-ninja-msvc-debug` |
|
||||
| build | `cmake --build --preset windows-msvc-ninja-debug` | 0 | 0.113 s | `ninja: no work to do.` |
|
||||
| discovery | `ctest --preset windows-msvc-ninja-debug --show-only=json-v1` | 0 | 0.219 s | 302 tests discovered |
|
||||
| focused control/log | `ctest --preset windows-msvc-ninja-debug -R "^(NonlinearConvergence|NewtonIterationLog)\." --output-on-failure` | 0 | 0.471 s | 14/14 passed |
|
||||
| focused procedure/writer | `ctest --preset windows-msvc-ninja-debug -R "^(NonlinearStaticProcedure|NonlinearHdf5ResultsWriter)\." --output-on-failure` | 0 | 2.524 s | 7/7 passed |
|
||||
| nonlinear reference | `ctest --preset windows-msvc-ninja-debug -R "^NonlinearStaticReference\." --output-on-failure` | 0 | 905.404 s | 9/9 passed |
|
||||
| extended reference | `ctest --preset windows-msvc-ninja-debug -R "^(NonlinearStaticReference|ReferenceTolerance|Mitc4Reference)\." --output-on-failure` | 0 | 930.617 s | 9/9 matched tests passed |
|
||||
| full CTest | `ctest --preset windows-msvc-ninja-debug --output-on-failure` | 0 | 956.498 s | 302/302 passed; integration 16, unit 256, reference 30 |
|
||||
|
||||
The full CTest output reported no failed-test inventory. The build emitted no compiler/linker
|
||||
output beyond `ninja: no work to do.`; the build tree audit found no new `warning C####` or
|
||||
`: warning:` record. The only diagnostic setup issue was that standalone HDF5 inspection tools
|
||||
need Intel `libmmd.dll` on `PATH`; this did not affect the staged test executables, CMake build, or
|
||||
CTest and is not a product failure.
|
||||
|
||||
<a id="build-test--results-and-handoff"></a>
|
||||
### Results and handoff
|
||||
|
||||
The selected `.harness/config.json` preset was used throughout. All commands were run from the
|
||||
repository root in an x64 VsDevCmd environment. The final status is
|
||||
`pass-for-physics-evaluation`; no Harness Python command was required because this Step did not
|
||||
change Python, hooks, or agent configuration.
|
||||
|
||||
This Step changed documentation and its own phase status only. It did not modify C++ production,
|
||||
tests, CMake, Harness configuration, tolerance, reference artifacts, or output data. The immutable
|
||||
reference artifact audit before and after comparison was identical; see `reference-comparison.md`.
|
||||
|
||||
<a id="reference-comparison"></a>
|
||||
|
||||
<a id="reference-comparison--nonlinear-static-newton-raphson-reference-comparison"></a>
|
||||
## Nonlinear Static Newton-Raphson Reference Comparison
|
||||
|
||||
<a id="reference-comparison--verdict"></a>
|
||||
### Verdict
|
||||
|
||||
`blocking-pass-with-review-only-findings`. FESA HDF5 is the authoritative solver output. The
|
||||
Abaqus CSV files are read-only external comparison evidence; the observed agreement does not imply
|
||||
Abaqus S4 internal formulation, integration, stabilization, or recovery equivalence.
|
||||
|
||||
Overall handoff status: `pass-for-physics-evaluation`. This handoff classification records that
|
||||
all blocking comparisons passed; the detailed verdict above remains
|
||||
`blocking-pass-with-review-only-findings` because the six local RF/RM findings are review-only.
|
||||
|
||||
The literal execution order was `ARTIFACT CHECK -> COMPARE -> CLASSIFY -> REPORT`.
|
||||
|
||||
The `COMPARE` commands were
|
||||
`ctest --preset windows-msvc-ninja-debug -R "^NonlinearStaticReference\." --output-on-failure`
|
||||
(exit 0, 905.404 s, 9/9 passed), followed by
|
||||
`ctest --preset windows-msvc-ninja-debug -R "^(NonlinearStaticReference|ReferenceTolerance|Mitc4Reference)\." --output-on-failure`
|
||||
(exit 0, 930.617 s, 9/9 matched tests passed). The fresh full CTest run then passed 302/302;
|
||||
its command and output tail are recorded in `build-test.md`.
|
||||
|
||||
<a id="reference-comparison--artifact-check"></a>
|
||||
### Artifact check
|
||||
|
||||
Every input, displacement CSV, reaction CSV, and stress-inventory CSV was readable, finite where
|
||||
required, unique by declared source key, and identical before and after all copied-input executions.
|
||||
|
||||
| case / role | exact path | bytes | pre/post UTC mtime | SHA-256 |
|
||||
| --- | --- | ---: | --- | --- |
|
||||
| fine primary input | `reference/shellNL-meshfine/shellNL-meshfine.inp` | 56,516 | `2026-08-25T13:53:49.1919675Z` | `40DF1CE77311C8D799564A21A60F3BDEBB8148D52CAE22B7292FDFAD32018220` |
|
||||
| fine U | `reference/shellNL-meshfine/shellNL-meshfine displacements.csv` | 111,184 | `2026-08-25T14:06:00.1262830Z` | `740819FF8AED0E279961581F7CDBFA12784CFBA3A488C35A652E80103F64433F` |
|
||||
| fine local reaction | `reference/shellNL-meshfine/shellNL-meshfine reactions.csv` | 108,951 | `2026-08-25T14:05:06.2950127Z` | `AEB01C98C596792B0E5F2B86A81945CAB0BEB0C6969CFC6738C6F81DF1F94363` |
|
||||
| fine stress inventory | `reference/shellNL-meshfine/shellNL-meshfine stresses.csv` | 1,036,869 | `2026-08-25T14:04:24.2027682Z` | `6D6213AB5DB9D6B1F5FBD641367D08BACC805967B6C5A95BCE0E1A5395377782` |
|
||||
| coarse companion input | `reference/shellNL/shellNL.inp` | 4,778 | `2026-08-23T16:36:23.9302881Z` | `4BF3ECB0F7F1E8462C573E993DBC97AC5D920C91CF6F23AD4C6891D77FFBADA2` |
|
||||
| coarse U | `reference/shellNL/shellNL displacements.csv` | 7,542 | `2026-08-23T16:36:23.9282815Z` | `4E0F99CA9372B1ADF7FAF102F43BC0B887DC743FDEDA378E4342D2CF8E0C0786` |
|
||||
| coarse local reaction | `reference/shellNL/shellNL reactions.csv` | 7,443 | `2026-08-23T16:36:23.9292877Z` | `001CB1541A9E94424E5E650509D46BC8724970DF4DE47184D9DB09C7938AB069` |
|
||||
| coarse stress inventory | `reference/shellNL/shellNL stresses.csv` | 54,720 | `2026-08-23T16:36:23.9302881Z` | `5500E5114B1C44887528E30CEC054A1EB0F68BE3F4B8CE81FA59FC74A881483F` |
|
||||
| linear control input | `reference/shell/shell.inp` | 4,770 | `2026-08-23T16:36:23.9272805Z` | `4005851E1AB22FD3A16AC17A8D5DA3E051233F69F37419079F3553AD134ECFCF` |
|
||||
| linear U | `reference/shell/shell displacements.csv` | 5,592 | `2026-08-23T16:36:23.9262810Z` | `C81D94E0B4A849F87AA0F79C83A79B94D5661AC79E44ED826919AB432C87746B` |
|
||||
| linear reaction inventory | `reference/shell/shell reactions.csv` | 5,524 | `2026-08-23T16:36:23.9262810Z` | `0E34EEC27E700C3C0C744C1DAFD8A3B95EFEF34B8616FE96665876586FE82D41` |
|
||||
| linear stress inventory | `reference/shell/shell stresses.csv` | 43,502 | `2026-08-23T16:36:23.9272805Z` | `2B75A5B0DEB045A283C9BB7E9B1153B79F7537FF487214BF4A23316B59B660A7` |
|
||||
|
||||
Fine and coarse required nonlinear CSV rows had exact `Frame=Increment 10: Step Time = 1.000`.
|
||||
The HDF5 `/steps/Step-1/accepted_frames` table had exactly one factor-one row: frame 9, increment
|
||||
10, load factor 1.0, two Newton iterations. Reference copies and generated artifacts were confined
|
||||
to these build-local directories:
|
||||
|
||||
| case | copied input | generated results / log |
|
||||
| --- | --- | --- |
|
||||
| fine | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shellNL-meshfine/shellnl-meshfine-s4-final-72767400538200-0/shellNL-meshfine.inp` | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shellNL-meshfine/shellnl-meshfine-s4-final-72767400538200-0/shellNL-meshfine_results.h5`, SHA-256 `2E9817E173D73FD91C2D34864B69A1EC37483CB25951FB7CCE85895A6C87D2C6`; `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shellNL-meshfine/shellnl-meshfine-s4-final-72767400538200-0/shellNL-meshfine_log.txt`, SHA-256 `1DB6FE4AAA2F1443ACC7F9B3F919CC8DD873C90392121DAB6509F1693435DA27` |
|
||||
| coarse | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shellNL/shellnl-s4-final-73175241456500-1/shellNL.inp` | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shellNL/shellnl-s4-final-73175241456500-1/shellNL_results.h5`, SHA-256 `130E2E7B73B022F216A7A34C88D58114A62595ADD556A0D202B8A7FAC7391F39`; `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shellNL/shellnl-s4-final-73175241456500-1/shellNL_log.txt`, SHA-256 `3D5C4F1B20384655F9012ADE842B99E3B06B3799FC9AB16DD6FD141E18B77906` |
|
||||
| linear | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shell/shell-s4-linear-limit-72742739390700-2/shell.inp` | `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shell/shell-s4-linear-limit-72742739390700-2/shell_results.h5`, SHA-256 `8AEE34D5BC80382D7E6DE85C51F0F8BCBF451CD5F5C7B8DDA6C585EB22B31763`; `.harness/build-ninja-msvc-debug/reference/nonlinear-static-reference/shell/shell-s4-linear-limit-72742739390700-2/shell_log.txt`, zero bytes, SHA-256 `E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855` |
|
||||
|
||||
<a id="reference-comparison--compare-and-classify"></a>
|
||||
### Compare and classify
|
||||
|
||||
Rows were matched by `(case_id, accepted_state, canonical_instance_name, source_node_label,
|
||||
component)`, never CSV order. Required HDF5 projections were factor-one
|
||||
`/steps/Step-1/frames/9/nodal/displacement`, `generalized_internal_force`,
|
||||
`generalized_external_force`, `generalized_residual`, `reaction`, `/model/nodal_constraint_mask`,
|
||||
and `/global/equilibrium`; the linear control uses `/steps/Step-1/frames/0/nodal/displacement`.
|
||||
All required source keys, components, uniqueness and finite checks passed before tolerance.
|
||||
|
||||
External families use `docs/TOLERANCE.md`: reference-only scale, near-zero band `0.01*S`, row
|
||||
relative limit `0.05`, and family RMS limit `0.01`. `rows passed` is the deterministic per-row
|
||||
decision count; U is blocking and UR is warning-only.
|
||||
|
||||
| family | disposition | rows passed | scale | max abs | max relative | relative RMS | result |
|
||||
| --- | --- | ---: | ---: | ---: | ---: | ---: | --- |
|
||||
| fine.translation | blocking | 2187/2187 | 2.57957054e-05 | 1.6193812501e-07 | 6.27771648e-03 | 2.27230258e-04 | pass |
|
||||
| fine.rotation | warning-only | 2187/2187 | 6.58704994e-06 | 3.0109969916e-08 | 3.54510604e-02 | 4.68253850e-04 | pass |
|
||||
| coarse.translation | blocking | 147/147 | 2.37408203e-05 | 1.9037855439e-07 | 8.57111694e-03 | 1.03327572e-03 | pass |
|
||||
| coarse.rotation | warning-only | 147/147 | 7.60725743e-06 | 6.8828551252e-08 | 4.69071871e-02 | 2.97713732e-03 | pass |
|
||||
| linear.translation | blocking | 147/147 | 2.37408203e-05 | 1.9037853492e-07 | 8.57111604e-03 | 1.03327567e-03 | pass |
|
||||
| linear.rotation | warning-only | 147/147 | 7.60725743e-06 | 6.8828549627e-08 | 4.69071860e-02 | 2.97713730e-03 | pass |
|
||||
|
||||
Worst absolute rows were fine U `PART-1-1/node 2/U3`, fine UR
|
||||
`PART-1-1/node 442/UR1`, coarse U `PART-1-1/node 2/U3`, coarse UR
|
||||
`PART-1-1/node 37/UR1`, linear U `PART-1-1/node 2/U3`, and linear UR
|
||||
`PART-1-1/node 44/UR1`. No warning-only family failed.
|
||||
|
||||
The eight blocking internal families are independent of Abaqus CSV tolerance.
|
||||
|
||||
| family | rows | numerator | scale | metric | gate | result |
|
||||
| --- | ---: | ---: | ---: | ---: | --- | --- |
|
||||
| fine.global_force_balance | 3 | 2.6775524023e-07 | 1.2773012379e+05 | 2.09625758e-12 | `<=1e-8` | pass |
|
||||
| fine.global_moment_balance | 3 | 1.3258637157e-04 | 4.8292847478e+05 | 2.74546602e-10 | `<=1e-8` | pass |
|
||||
| fine.accepted_free_force_residual | 1875 | 3.8659904671e-03 | 1.0000000000e+05 | 3.86599047e-08 | `<=1e-2` | pass |
|
||||
| fine.accepted_free_moment_residual | 1875 | 1.3760745787e-06 | 0 | exact-zero typed `<=1e-3` | exact-zero branch | pass |
|
||||
| coarse.global_force_balance | 3 | 8.2512269735e-07 | 1.0000000439e+05 | 8.25122661e-12 | `<=1e-8` | pass |
|
||||
| coarse.global_moment_balance | 3 | 4.1788609354e-05 | 2.9558678960e+05 | 1.41375091e-10 | `<=1e-8` | pass |
|
||||
| coarse.accepted_free_force_residual | 75 | 3.1462885132e-02 | 1.0000000000e+05 | 3.14628851e-07 | `<=1e-2` | pass |
|
||||
| coarse.accepted_free_moment_residual | 75 | 3.3292052422e-06 | 0 | exact-zero typed `<=1e-3` | exact-zero branch | pass |
|
||||
|
||||
The constrained-reaction resultant remains a distinct review summary: fine force
|
||||
`[1.2306822228e-12, -3.5943123478e-12, 1.0000000000e+05]`, moment
|
||||
`[2.7057467378e-11, -5.6934368331e-10, -1.3258637157e-04]`; coarse force
|
||||
`[7.9591888635e-12, 7.2906680693e-12, 1.0000000000e+05]`, moment
|
||||
`[-1.7826096155e-10, -2.5829649530e-10, -4.1788609352e-05]`.
|
||||
|
||||
Local reaction RF/RM source-key/inventory/finite prechecks passed, but the following direct
|
||||
row/RMS findings remain review-only and therefore do not change the blocking classification.
|
||||
|
||||
| review family | rows passed | relative RMS | worst absolute row | finding |
|
||||
| --- | ---: | ---: | --- | --- |
|
||||
| coarse in-plane RF | 4/48 | 1.1437709953e-01 | node 3/RF1, 5.3914239451e-01 | review-only failure |
|
||||
| coarse RF3 | 4/24 | 4.8448360241e-02 | node 31/RF3, 7.1995422354e+02 | review-only failure |
|
||||
| coarse physical RM1/RM2 | 32/48 | 2.7464126167e-02 | node 22/RM1, 1.0484921048e+03 | review-only failure |
|
||||
| fine in-plane RF | 12/208 | 1.1971372918e-01 | node 1/RF2, 1.5298653299e-01 | review-only failure |
|
||||
| fine RF3 | 92/104 | 5.3476362434e-03 | node 9/RF3, 4.6176964624e+01 | review-only row failure |
|
||||
| fine physical RM1/RM2 | 112/208 | 3.3719303859e-03 | node 52/RM2, 3.1549617088e+01 | review-only row failure |
|
||||
|
||||
`RM3` and stress were not numerically compared. Artifact inventory, byte size, timestamp, and
|
||||
SHA-256 equality before/after all runs prove that no reference artifact changed.
|
||||
|
||||
<a id="physics-evaluation"></a>
|
||||
|
||||
<a id="physics-evaluation--nonlinear-static-newton-raphson-physics-evaluation"></a>
|
||||
## Nonlinear Static Newton-Raphson Physics Evaluation
|
||||
|
||||
<a id="physics-evaluation--1-metadata"></a>
|
||||
### 1. Metadata
|
||||
|
||||
| key | value |
|
||||
| --- | --- |
|
||||
| feature_id | `nonlinear-static-newton-raphson` |
|
||||
| source reference comparison report | `docs/nonlinear-static-newton-raphson/verification.md` |
|
||||
| source reference comparison SHA-256 | `22867B0F2E3C06C5AB908485D94160CA33CBAF1274EE099847979FA511ECC241` |
|
||||
| source reference model | `docs/nonlinear-static-newton-raphson/reference-model.md` |
|
||||
| source reference model SHA-256 | `B2E6845AB59A32F78261B7A47506C27F7BF4B61401B34BC5DE3DAD4F03D6ADDA` |
|
||||
| status | `pass-for-release-agent` |
|
||||
| owner_agent | `physics-evaluation-agent` |
|
||||
| date | `2026-08-28` |
|
||||
|
||||
이 평가는 승인된 물리 acceptance scope와 이미 생성된 accepted-state evidence만 사용한다.
|
||||
Abaqus 또는 다른 reference solver를 실행하지 않았고, 외부 solver의 내부 정식화·적분·안정화·
|
||||
결과 복구 동등성을 주장하지 않는다.
|
||||
|
||||
<a id="physics-evaluation--2-input-evidence"></a>
|
||||
### 2. Input Evidence
|
||||
|
||||
<a id="physics-evaluation--21-gate-entry-audit"></a>
|
||||
#### 2.1 Gate-entry audit
|
||||
|
||||
- `implementation-report.md`와 `build-test.md`의 Stage 6 owner classification은
|
||||
`pass-for-physics-evaluation`이며 full CTest `302/302`, nonlinear reference `9/9` 통과를
|
||||
기록한다.
|
||||
- Corrected required source `reference-comparison.md`는 overall handoff status를
|
||||
`pass-for-physics-evaluation`로 명시한다. Detailed verdict
|
||||
`blocking-pass-with-review-only-findings`는 모든 blocking numerical family가 통과하고 six
|
||||
local RF/RM findings만 review-only라는 세부 분류로 함께 유지된다. 두 status는 서로
|
||||
모순되지 않으며 `PHYS-STATUS-001`은 해소되었다.
|
||||
- `requirements.md` metadata의 `status: draft`, `approved_by: pending user re-approval` 및
|
||||
`FESA-REQ-NSNR-069`의 historical `draft` 표시는 내용상 physics blocker가 아니다.
|
||||
당시 Authoritative `coordination.md` Stage 1 record는 당시 requirements SHA-256
|
||||
`89C1AB5F1BEDB7C5F6AD0726ED62F0982181EA8746EDE4661183FD3D18A2408E`가
|
||||
`2026-08-27` 사용자에게 명시적으로 재승인되었고 Stage 1이 `passed`임을 기록한다.
|
||||
따라서 이 stale metadata를 승인 부재로 재해석하지 않는다.
|
||||
|
||||
<a id="physics-evaluation--22-solver-outputs-and-logs"></a>
|
||||
#### 2.2 Solver outputs and logs
|
||||
|
||||
| case | checked authoritative/generated evidence | SHA-256 / observed identity |
|
||||
| --- | --- | --- |
|
||||
| `shellnl-meshfine-s4-final` | build-local `shellNL-meshfine_results.h5` | `2E9817E173D73FD91C2D34864B69A1EC37483CB25951FB7CCE85895A6C87D2C6`; accepted frames 10; unique factor-one frame 9/increment 10; 2 iterations per increment |
|
||||
| `shellnl-meshfine-s4-final` | build-local `shellNL-meshfine_log.txt` | `1DB6FE4AAA2F1443ACC7F9B3F919CC8DD873C90392121DAB6509F1693435DA27`; 20 entered-iteration records; each increment continues once and accepts on iteration 2 |
|
||||
| `shellnl-s4-final` | build-local `shellNL_results.h5` | `130E2E7B73B022F216A7A34C88D58114A62595ADD556A0D202B8A7FAC7391F39`; accepted frames 10; unique factor-one frame 9/increment 10; 2 iterations per increment |
|
||||
| `shellnl-s4-final` | build-local `shellNL_log.txt` | `3D5C4F1B20384655F9012ADE842B99E3B06B3799FC9AB16DD6FD141E18B77906`; 20 entered-iteration records; each increment continues once and accepts on iteration 2 |
|
||||
| `shell-s4-linear-limit` | build-local `shell_results.h5`, `shell_log.txt` | HDF5 `8AEE34D5BC80382D7E6DE85C51F0F8BCBF451CD5F5C7B8DDA6C585EB22B31763`; zero-byte log `E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855` |
|
||||
|
||||
HDF5는 `reference-comparison.md`에 적힌 build-local exact path에서 직접 읽었다. Optional FESA
|
||||
debug CSV view는 선언되거나 필요하지 않아 사용하지 않았다. Factor-one
|
||||
`nodal/displacement`, `global/equilibrium`, `global/energy`, direct shell stress와
|
||||
`accepted_frames`를 확인했다.
|
||||
|
||||
<a id="physics-evaluation--23-read-only-reference-evidence"></a>
|
||||
#### 2.3 Read-only reference evidence
|
||||
|
||||
Canonical reference bundle은 `reference-comparison.md`가 inventoried한 12개 exact file을 사용했다.
|
||||
|
||||
- `reference/shellNL-meshfine/`: input, displacement, reaction, stress inventory
|
||||
- `reference/shellNL/`: input, displacement, reaction, stress inventory
|
||||
- `reference/shell/`: linear input, displacement, reaction inventory, stress inventory
|
||||
|
||||
각 SHA-256은 `reference-model.md`와 `reference-comparison.md` inventory에 일치한다. 비교량은
|
||||
fine/coarse/linear `U1/U2/U3` blocking, `UR1/UR2/UR3` warning-only, fine/coarse local
|
||||
`RF1/RF2/RF3`와 physical spatial `RM1/RM2` review-only다. `RM3`와 stored element-corner
|
||||
stress는 numerical comparison에서 제외되었다.
|
||||
|
||||
Reference model의 목적은 중앙 `DOF 3=-100000` fixed-global dead load를 받고 둘레의 all-six
|
||||
DOF가 고정된 `10 x 10`, thickness `0.5` square plate의 coarse/fine nonlinear response와
|
||||
linear-limit source identity를 검증하는 것이다. Nonlinear cases는 `0.1` 간격으로 factor one까지
|
||||
진행한다.
|
||||
|
||||
<a id="physics-evaluation--3-physics-checks"></a>
|
||||
### 3. Physics Checks
|
||||
|
||||
| physics check | result | evidence and interpretation |
|
||||
| --- | --- | --- |
|
||||
| global equilibrium | `pass` | Fine normalized force `2.09625758e-12`, moment `2.74546602e-10`; coarse force `8.25122661e-12`, moment `1.41375091e-10`. 네 값 모두 approved inclusive `<=1e-8`다. HDF5 `/global/equilibrium`은 `location=global-balance-error`, current arm, global origin `[0,0,0]`, spatial moment 의미를 가진다. |
|
||||
| reaction consistency | `pass` | Applied `F3=-100000`에 대해 constrained-reaction resultant `F3`는 fine/coarse 모두 약 `+100000`이고 다른 force components는 roundoff 수준이다. Applied-plus-reaction force/moment와 accepted free force/moment residual이 각각 blocking gate를 통과했다. Local RF/RM six-family discrepancy는 승인 계약상 review-only nodal redistribution evidence이며 global reaction/resultant identity를 대체하지 않는다. |
|
||||
| displacement direction | `pass` | Downward load에 대해 node 2 final `U3`는 fine `-2.56338e-5`, coarse `-2.35504e-5`; reference도 각각 `-2.57957054e-5`, `-2.37408203e-5`다. HDF5 path는 factor `0.1..1.0`에서 fine `-2.56338e-6 .. -2.56338e-5`, coarse `-2.35504e-6 .. -2.35504e-5`로 부호 반전·jump·rollback 없이 진행한다. |
|
||||
| symmetry / expected zero | `pass` | Center node 2의 factor-one `U1/U2`와 rotations는 fine/coarse에서 약 `1e-17` 이하로, centered load와 symmetric all-edge constraint의 expected-zero response와 일치한다. Fresh physics-focused CTest에서 finite rigid objectivity, zero internal force, rigid translation nullspace와 no-moment tangent symmetry checks가 통과했다. |
|
||||
| element force balance | `covered-by-approved-invariants` | 승인 HDF5에는 standalone element nodal-action balance dataset이 없고 external element-force comparison도 요구되지 않는다. 대신 complete element residual/tangent same-trial identity, patch recovery, stable assembly covariance tests와 accepted global/free equilibrium gate가 문서화된 expectation을 충족한다. 별도 element-force output을 invent하지 않았다. |
|
||||
| stress/strain | `pass-sanity-evidence` | HDF5 direct fixed-reference Gauss stress는 finite다. Element 1/GP1의 `[S11,S22,S12]`는 fine bottom `[-264846,-77843.6,914.879]`, middle `[1.94695,0.530775,-0.0224511]`, top `[264850,77844.8,-914.925]`; coarse도 bottom/top sign이 반대이고 middle이 작아 centered plate bending sign/thickness pattern과 일치한다. Stored CSV는 corner/SPOS-SNEG identity로 위치가 달라 numerical stress comparison이 승인되지 않았으므로 이를 tolerance pass로 재분류하지 않는다. |
|
||||
| rigid body mode | `pass` | 둘레 all-six-DOF support가 global rigid-body motion을 제거하고, accepted path에 비정상 large translation 또는 singular/nonfinite 증상이 없다. Fresh focused tests에서 proper triad/director, finite rigid objectivity, zero internal force, rigid nullspace와 invalid branch rejection을 확인했다. |
|
||||
| energy/residual | `pass-sanity-evidence` | Factor-one physical strain energy는 fine `1.28169`, coarse `1.17752`로 finite positive이며 near-linear relation `0.5*100000*abs(U3_center)`와 일치한다. 이는 secondary sanity evidence이고 승인 energy convergence gate는 아니다. Fine/coarse accepted free force/moment residual은 NSNR-069 blocking gate를 통과했고 log에는 nonfinite/failed accepted state가 없다. |
|
||||
| model coverage | `pass` | Fine 729-node/676-element primary, coarse 49-node/36-element companion, linear control과 internal linear-limit/tangent/objectivity/patch/rollback portfolio가 승인 NSNR-030 scope를 덮는다. Stored response는 weak geometric-nonlinear regime이고 original-style MITC4의 curved/distorted membrane-locking risk는 알려진 한계지만 Numerical Review가 이번 release의 additional benchmark/convergence gate로 승인하지 않았으므로 model-coverage gap을 새로 만들지 않는다. |
|
||||
|
||||
Fresh physics-focused verification command:
|
||||
|
||||
```powershell
|
||||
ctest --preset windows-msvc-ninja-debug -R '^(NonlinearMitc4Shell|NonlinearMitc4Recovery|NonlinearMitc4Residual|NonlinearMitc4Tangent|NonlinearMitc4Objectivity|NonlinearMitc4Patch|FiniteRotation|NonlinearStaticProcedure)\.' --output-on-failure
|
||||
```
|
||||
|
||||
Result: `23/23` passed, exit `0`, total real time `5.12 s`.
|
||||
|
||||
<a id="physics-evaluation--4-failure-classification"></a>
|
||||
### 4. Failure Classification
|
||||
|
||||
- blocking classification: 없음
|
||||
- resolved finding: `PHYS-STATUS-001`; corrected `reference-comparison.md`가 required overall
|
||||
`pass-for-physics-evaluation` handoff와 detailed
|
||||
`blocking-pass-with-review-only-findings` verdict의 관계를 명시했다.
|
||||
- observed failures: `equilibrium-failure`, `reaction-inconsistency`,
|
||||
`displacement-direction-failure`, `symmetry-failure`, `stress-location-failure`,
|
||||
`element-force-inconsistency`, `rigid-body-mode-suspected`, `nonfinite-result`,
|
||||
`model-coverage-gap`, `upstream-contract`, `environment` 모두 없음.
|
||||
|
||||
<a id="physics-evaluation--5-evaluation-verdict"></a>
|
||||
### 5. Evaluation Verdict
|
||||
|
||||
- verdict: `pass-for-release-agent`
|
||||
- physics evidence disposition: documented equilibrium, reaction, displacement, symmetry/objectivity,
|
||||
stress/strain sanity, rigid-body, residual/path and model-coverage checks show no physical failure.
|
||||
- pass disposition: documented physical expectations passed and no physics/model-coverage/I/O/upstream
|
||||
blocker remains.
|
||||
- release meaning: this verdict authorizes Release Agent evaluation through Coordinator only. It is
|
||||
not Release approval, publish/deploy/package/tag authorization, or external-solver equivalence.
|
||||
|
||||
<a id="physics-evaluation--6-handoff-recommendation"></a>
|
||||
### 6. Handoff Recommendation
|
||||
|
||||
- handoff: `Release Agent`, always through `Coordinator Agent`
|
||||
- recommendation: Release Agent는 current approved hashes, Stage 6
|
||||
`pass-for-physics-evaluation`, 이 문서의 `pass-for-release-agent`, known limitations와
|
||||
review-only findings를 사용해 release readiness만 audit한다.
|
||||
- boundary: Physics Evaluation Agent는 release readiness, final release checklist, release notes,
|
||||
publish/deploy/package/tag를 승인하지 않는다.
|
||||
|
||||
<a id="physics-evaluation--8-open-issues"></a>
|
||||
### 8. Open Issues
|
||||
|
||||
| id | severity | issue | gate effect |
|
||||
| --- | --- | --- | --- |
|
||||
| `PHYS-META-001` | nonblocking | `requirements.md`의 draft/pending metadata가 authoritative Coordinator/user reapproval record와 stale함 | 현재 hash의 explicit approval로 physics authority는 해소됨; Release traceability audit에서 투명하게 유지 |
|
||||
| `PHYS-LOCAL-001` | nonblocking | six local RF/RM families have review-only discrepancies | approved disposition 유지; global force/moment balance와 free residual을 blocking evidence로 사용 |
|
||||
| `PHYS-STRESS-001` | nonblocking | stored corner/SPOS-SNEG stress와 FESA direct Gauss recovery 위치가 다르고 fine optional stress row 하나의 node label이 malformed | stress numerical comparison 제외 유지; artifact를 repair하지 않음 |
|
||||
| `PHYS-LIMIT-001` | known limitation | stored cases are weak geometric-nonlinear plate responses; original MITC4 has known curved/distorted membrane-locking risk | approved current portfolio에서는 blocker 아님; broader claim 금지 |
|
||||
Reference in New Issue
Block a user