chore: remove retired workflow and historical material

This commit is contained in:
KOKO\Mimi
2026-10-17 22:39:47 +09:00
parent 4bd19f5bf0
commit 774b80099c
768 changed files with 0 additions and 54164 deletions
-639
View File
@@ -1,639 +0,0 @@
# Shell Surface Pressure Load I/O Definition
## 1. Metadata
- feature_id: `shell-surface-pressure-load`
- source_requirement: `docs/shell-surface-pressure-load/requirements.md`
- source_research: `docs/shell-surface-pressure-load/research.md`
- source_formulation: `docs/shell-surface-pressure-load/formulation.md`
- source_numerical_review: `docs/shell-surface-pressure-load/numerical-review.md`
- source_reference_model: `docs/shell-surface-pressure-load/reference-model.md`
- status: `ready-for-implementation-planning`
- owner_agent: `io-definition-agent`
- date: `2026-08-31`
- authoritative_output: input lexical sibling `<stem>_results.h5`
- linear_schema_version: `0`
- nonlinear_schema_version: `1`
- external_tolerance_authority: `docs/TOLERANCE.md`
이 문서는 `S4`/`S4R` shell의 named element surface에 작용하는 uniform
surface-based pressure의 입력, semantic identity, validation, authoritative HDF5와
reference projection만 정의한다. Abaqus 2025 keyword/modeling documentation은
`*SURFACE`와 `*DSLOAD`의 외부 입력 의미 근거로만 사용한다. FESA가 Abaqus의 full input
compatibility, element 내부 알고리즘, 적분, stabilization, load linearization 또는 output
생성 절차와 동등하다는 주장은 하지 않는다.
## 2. Abaqus Input Scope
### 2.1 Compatibility boundary
승인된 추가 입력은 assembly-level
`*SURFACE, TYPE=ELEMENT, NAME=<surface-name>`와 step-level `*DSLOAD`의
`<surface-name>, P, <uniform-magnitude>`뿐이다. Surface member는 identity instance의
`S4` 또는 `S4R` element를 `SPOS` 또는 `SNEG`로 선택한다. Linear static은 reference
configuration, `*STEP, NLGEOM=YES` nonlinear static은 current-configuration follower
pressure와 external tangent를 사용한다.
이 문서가 명시하지 않은 `*SURFACE`, `*DSLOAD`, element, load, procedure 또는 scope
variant는 지원하지 않는다. Unknown model-affecting keyword도 fail-closed다. 기존 output
request allowlist만 결과를 바꿀 수 없다는 전제에서 warning 후 no-op이다.
### 2.2 Keyword support table
`supported`는 이 feature의 valid input에서 parse하고 semantic model에 반영한다.
`unsupported`는 명확한 non-success diagnostic으로 거부한다.
`ignored-with-warning`은 requested result를 바꿀 수 없는 기존 output-control syntax만
건너뛴다.
| keyword | policy | purpose / required subset | unsupported behavior |
| --- | --- | --- | --- |
| `*HEADING` | `supported` | 기존 heading block; 해석 의미 없음 | parameter 또는 잘못된 keyword line은 `input-syntax` |
| `*INCLUDE` | `unsupported` | 이 feature는 single physical input source만 허용 | 모든 parameter/data form을 `unsupported-keyword`로 거부; include를 열지 않음 |
| `*PART`, `*END PART` | `supported` | 기존 part topology/material/section wrapper | nested/mismatched wrapper 거부 |
| `*NODE` | `supported` | positive source label와 finite global `X,Y,Z` | duplicate/nonfinite/cardinality error 거부 |
| `*NSET` | `supported` | 기존 node-set subset 및 `GENERATE` | unresolved/duplicate-incompatible/cross-scope target 거부 |
| `*ELEMENT` | `supported` | 이 feature의 pressure target은 `TYPE=S4|S4R`, four-node connectivity | 다른 target type 또는 잘못된 connectivity 거부 |
| `*ELSET` | `supported` | 기존 element-set subset 및 `GENERATE`; assembly form은 explicit `INSTANCE=<name>`; CAE의 result-neutral `INTERNAL` flag 허용 | 그 밖의 parameter와 unresolved/cyclic/ambiguous/cross-scope membership 거부 |
| `*MATERIAL` | `supported` | 기존 named material | duplicate/empty name 거부 |
| `*ELASTIC` | `supported` | 기존 finite linear isotropic `E, nu` | unsupported material form/nonfinite data 거부 |
| `*SHELL SECTION` | `supported` | 기존 finite positive thickness, material와 `ELSET` mapping | missing/incompatible reference 거부 |
| `*ASSEMBLY`, `*END ASSEMBLY` | `supported` | identity-instance topology와 assembly surface scope | nested assembly 또는 malformed scope 거부 |
| `*INSTANCE`, `*END INSTANCE` | `supported` | existing identity instance only | transform data, nested instance 또는 unknown part 거부 |
| `*SURFACE` | `supported` | 아래 §2.3의 assembly-level element surface만 지원 | 다른 scope/type/parameter/member form은 fail-closed |
| `*BOUNDARY` | `supported` | 기존 essential DOF 1–6 constraint subset | unsupported target/DOF/data form 거부 |
| `*CLOAD` | `supported` | 기존 nodal generalized concentrated-load subset | 기존 allowlist 밖 form 거부; pressure alias로 사용하지 않음 |
| `*DLOAD` | `unsupported` | 이 feature의 `*DSLOAD P`와 다른 element-face load | 언제나 `unsupported-keyword`; `P n`을 `P`로 변환하지 않음 |
| `*DSLOAD` | `supported` | 아래 §2.4의 named-surface uniform `P` | parameter, 다른 load label/distribution/cardinality는 fail-closed |
| `*STEP`, `*END STEP` | `supported` | exactly one static step; `NLGEOM`은 §2.5만 | 두 번째 step, propagation/restart 의미 거부 |
| `*STATIC` | `supported` | 기존 linear 또는 approved full-Newton static control data | dynamics/contact/thermal/perturbation procedure 거부 |
| `*OUTPUT` | `ignored-with-warning` | 기존 `FIELD|HISTORY` allowlist; mandatory HDF5를 변경하지 않음 | allowlist 밖 model-affecting parameter는 거부 |
| `*NODE OUTPUT` | `ignored-with-warning` | variable data를 warning 후 no-op | mandatory nodal output을 제거/추가하지 않음 |
| `*ELEMENT OUTPUT` | `ignored-with-warning` | variable data를 warning 후 no-op | mandatory MITC4 recovery를 제거/추가하지 않음 |
| `*PREPRINT`, `*RESTART`, `*TRANSVERSE SHEAR STIFFNESS`, `*CONTACT OUTPUT` | `ignored-with-warning` | 기존, result-neutral allowlist만 | 해석 의미를 바꾸는 variant는 거부 |
### 2.3 Exact `*SURFACE` grammar
지원 keyword line의 EBNF는 다음과 같다. Token 비교는 ASCII case-insensitive다.
```text
surface_keyword := "*SURFACE" "," type_parameter "," name_parameter
| "*SURFACE" "," name_parameter "," type_parameter
type_parameter := "TYPE" "=" "ELEMENT"
name_parameter := "NAME" "=" surface_name
surface_name := name_token_without_dot
surface_member := direct_member "," side
| elset_member "," side
direct_member := instance_name "." positive_element_label
elset_member := assembly_elset_name
side := "SPOS" | "SNEG"
```
Normative restrictions:
1. `*SURFACE`는 `*ASSEMBLY`와 `*END ASSEMBLY` 사이이며 어떤 `*INSTANCE` block 밖에
있어야 한다. Part-level 또는 instance-block-level `*SURFACE`는 이번 subset에서
`unsupported-surface-scope`다.
2. Keyword parameter는 `TYPE=ELEMENT`와 `NAME=<name>` 각각 하나뿐이다. Parameter order는
위 두 순서 모두 허용하지만 duplicate, flag parameter와 `TRIM`, `COMBINE`,
`PROPERTY`, `REGION TYPE` 등 추가 parameter는 거부한다.
3. 각 data line은 정확히 두 개의 nonempty field다. Side는 `SPOS` 또는 `SNEG`뿐이다.
4. Direct member는 정확히 `<instance-name>.<positive-decimal-element-label>`이다. Assembly
scope의 bare element label, `<part>.<label>`, `<instance>.<elset>`, 두 개 이상의 dot과
quoted token은 지원하지 않는다.
5. ELSET member는 assembly scope에서 이미 선언되고 `INSTANCE=<instance-name>`으로 하나의
identity instance에 결속된 flat `ELSET` 이름이다. Surface가 여러 data line에서 서로
다른 instance-bound ELSET 또는 direct member를 사용해 여러 instance를 포함할 수 있다.
Reference input에 있는 `INTERNAL` flag는 source provenance에 보존하되 membership 의미를
바꾸지 않는다. Mixed-instance set, nested/cyclic set, part-local set의 암묵적 승격은
지원하지 않는다.
6. Direct member와 ELSET expansion은 모두 최종 stable facet
`(part, instance, element label, source type, side)`로 변환된다. Element label은 instance
안에서 해석하며 다른 instance의 같은 numeric label과 합치지 않는다.
7. Surface name은 assembly namespace에서 case-insensitive unique다. Surface declaration은
하나 이상의 valid unique facet으로 resolve되어야 한다.
지원 예:
```text
*ELSET, ELSET=_Surf-1_SPOS, INTERNAL, INSTANCE=Part-1-1, GENERATE
1, 676, 1
*SURFACE, TYPE=ELEMENT, NAME=Surf-1
_Surf-1_SPOS, SPOS
*SURFACE, NAME=Direct-Surface, TYPE=ELEMENT
Part-1-1.1, SNEG
```
### 2.4 Exact `*DSLOAD P` grammar
```text
dsload_keyword := "*DSLOAD"
dsload_row := surface_name "," "P" "," finite_pressure
finite_pressure := sign? decimal (exponent)?
sign := "+" | "-"
decimal := digits ("." digits?)? | "." digits
exponent := ("E" | "e") sign? digits
```
- `*DSLOAD` keyword line에는 parameter를 허용하지 않는다. `AMPLITUDE`, `FOLLOWER`, `OP`,
`REF NODE`와 unknown parameter는 모두 `unsupported-dsload-parameter`다.
- Data line은 정확히 세 개의 nonempty field다. 첫 field는 assembly-level named surface,
두 번째는 `P`, 세 번째는 C-locale decimal/scientific notation의 finite `double`이다.
- `NaN`, `Inf`, `Infinity`, hexadecimal, locale comma와 Fortran `D` exponent는 지원하지
않는다. Overflow/underflow parse failure도 거부한다. Positive, `+0`, `0`, `-0`, negative
finite 값은 허용한다. Signed zero의 raw token은 identity/diagnostic에 보존하지만 physical
magnitude는 exact zero이며 validation을 우회하지 않는다.
- Magnitude 단위는 model-consistent `force/length^2`다. FESA가 SI 또는 다른 단위계를
추론·변환하지 않는다.
- 한 `*DSLOAD` 아래 여러 data line을 허용하고, step 안에 여러 `*DSLOAD` keyword를
허용한다. 각 valid data line은 서로 distinct하며 동일한 surface/type/magnitude의 완전
duplicate도 deduplicate하지 않고 source order에서 additive하게 한 번씩 적용한다.
### 2.5 Procedure and configuration syntax
- 정확히 하나의 `*STEP`/`*END STEP`만 허용한다.
- `*STEP`에서 `NLGEOM` 생략 또는 `NLGEOM=NO`는 linear static reference-configuration
pressure다. `NLGEOM=YES`는 approved nonlinear full-Newton current-configuration follower
pressure다. 다른 `NLGEOM` 값과 다른 step parameter는 기존 승인 subset 밖이면 거부한다.
- `*STATIC`은 해당 step의 유일한 procedure keyword다. `*DSLOAD`는 이 static procedure의
history data이며 step 밖에서는 거부한다.
- Linear pressure의 external tangent는 zero다. Nonlinear pressure는 current `X+u`에서
force와 exact external tangent를 함께 만든다. Syntax가 이 physics를 override하지 못한다.
## 3. Syntax Policy
### 3.1 Lines, commas, comments and whitespace
- Keyword line은 첫 non-whitespace character가 `*`이고 comment line은 첫
non-whitespace characters가 `**`다. Blank line과 whole-line comment는 semantic order에
포함하지 않고 건너뛰되 source physical line number는 유지한다.
- Inline comment syntax는 지원하지 않는다. Data field 안의 `**`는 comment가 아니라
malformed data다.
- Keyword parameter와 data field는 comma-separated다. Field 바깥의 leading/trailing space와
horizontal tab은 trim한다. 이름/label 내부 공백, quote와 escape는 이번 subset에서
허용하지 않는다.
- Keyword, parameter name, enum, surface/set/part/instance name lookup은 ASCII
case-insensitive이고 canonical lookup key는 uppercase다. Raw trimmed spelling, source file,
physical line와 data ordinal은 그대로 보존한다. Numeric source label은 값과 raw digit
token을 모두 보존한다.
### 3.2 Continuation, line length and encoding
- 각 physical line은 CR/LF를 제외하고 최대 `256` ASCII byte다. Input subset은 printable
7-bit ASCII와 horizontal tab만 허용한다. NUL, non-ASCII byte와 invalid control character는
`invalid-input-character`다. HDF5에는 보존된 ASCII text를 valid UTF-8로 기록한다.
- Keyword parameter continuation만 지원한다. Physical keyword line의 마지막 non-whitespace
character가 comma일 때 바로 다음 non-comment/nonblank physical line을 같은 keyword의
parameter continuation으로 읽는다. Continuation 도중 새 `*` line, EOF, comment/blank
interruption 또는 empty continued parameter는 거부한다.
- Data-line continuation은 지원하지 않는다. `S4`/`S4R`, surface member와 DSLOAD row는 한
physical line 안에 완결되어야 한다.
- `*INCLUDE`는 지원하지 않으므로 recursive source stack, relative include path와 include
cycle은 이 feature contract에 없다. 발견 즉시 fail-closed한다.
### 3.3 Names, labels and empty fields
- `name_token_without_dot`은 정규식 `[A-Za-z_][A-Za-z0-9_-]{0,79}`를 만족한다.
Instance, part, ELSET와 surface name은 이 feature가 새로 소비하는 identity에서 이 bounded
form을 사용한다. Dot은 direct-member qualification separator 하나로만 사용한다.
- Element/node label은 positive base-10 integer이고 existing internal index/equation index와
별개다. Parse 범위 밖, zero, negative와 duplicate source label은 거부한다.
- Split 과정은 empty field를 잃지 않는다. 이 feature가 추가한 keyword parameter,
`surface_member`와 `dsload_row`에는 empty field가 하나라도 있으면 cardinality failure다.
Keyword-line terminal empty field는 §3.2 continuation marker로만 허용한다.
- 기존 keyword의 optional data field 의미는 기존 contract를 유지하며 이 feature가 새
empty-field default를 추가하지 않는다.
## 4. Model Data Mapping
### 4.1 Existing model data
| input | semantic mapping | validation / units |
| --- | --- | --- |
| `*NODE` | Domain-owned node; `(instance, source node label)`와 stable internal node index | finite global Cartesian coordinates `[L]`; duplicate source identity 금지 |
| `*ELEMENT, TYPE=S4|S4R` | Domain-owned four-node shell definition; part/instance, source label/type/connectivity 보존 | four existing nodes; source type preserved even though both select FESA-MITC4 |
| `*NSET`, `*ELSET` | scope-qualified ordered set membership | case-insensitive name, stable source membership, missing/cyclic/cross-scope failure |
| `*MATERIAL`, `*ELASTIC` | Domain-owned named linear isotropic elasticity | finite `E:[F/L^2]`, dimensionless `nu`; existing admissibility rules |
| `*SHELL SECTION` | Domain-owned shell section and material/ELSET references | finite positive thickness `[L]`; exact references required |
| part/assembly/instance wrappers | part definition과 identity-instance relation | instance transform/nested assembly는 unsupported |
### 4.2 Domain-owned element-surface contract
Successful mapping 뒤 Domain은 각 named surface를 ordered immutable semantic object로
소유한다. C++ type/API를 지정하지 않으며 필요한 semantic fields는 다음과 같다.
| field | meaning |
| --- | --- |
| `surface_name_raw`, `surface_name_canonical` | source spelling과 uppercase lookup key |
| `declaration_file`, `declaration_line`, `declaration_ordinal` | stable declaration identity |
| `scope` | exact value `assembly` |
| `facet_ordinal` | resolved unique inventory의 zero-based stable order |
| `part_name_raw/canonical`, `instance_name_raw/canonical` | identity instance가 참조하는 part와 source instance identity |
| `element_label`, `element_label_raw`, `source_element_type` | positive source label와 exact `S4|S4R`; internal index와 분리 |
| `side` | exact canonical `SPOS|SNEG`; side multiplier는 formulation의 `+1|-1` |
| `member_file`, `member_line`, `member_ordinal` | 최초 contributing surface data member source |
| `member_kind`, `elset_name_raw/canonical` | `direct|elset`와 expansion provenance |
Resolution은 모든 member target을 검증한 뒤 candidate inventory에 commit한다. Facet order는
`(instance declaration ordinal, numeric element label, SPOS before SNEG)`의 stable order다.
각 facet은 최초 contributing member identity를 보존하고, set/container/thread iteration
order는 facet order를 바꾸지 않는다.
Duplicate rule은 다음과 같다.
- 같은 surface에서 exact same `(instance, element label, side)`가 direct/ELSET overlap 또는
여러 member로 다시 나타나면 하나의 facet으로 normalize하고 stable
`duplicate-surface-member-normalized` warning을 최초 identity 뒤에 기록한다. Pressure를 두
번 적용하지 않는다.
- 같은 surface에서 같은 `(instance, element label)`가 `SPOS`와 `SNEG` 양쪽으로 나타나면
unsupported double-sided/conflicting membership이므로 fail-closed한다.
- Case-insensitive duplicate surface name declaration은 merge하지 않고 fail-closed한다.
- Empty surface, unsupported source type, missing/ambiguous instance/element/set와 cross-scope
target은 fail-closed한다.
Domain은 parse/map 성공 뒤 가능한 한 immutable하며 surface와 element의 stable source label을
internal collection index나 equation index로 대체하지 않는다.
## 5. History Data Mapping
### 5.1 Step, constraints and load records
`*STEP`, `*STATIC`, `*BOUNDARY`, `*CLOAD`, `*DSLOAD`는 history data다. Successful mapping 뒤
sole Step은 existing procedure/control/constraint/concentrated-load data와 함께 ordered
uniform pressure records를 소유한다.
각 pressure record의 최소 semantic fields는 다음과 같다.
| field | meaning |
| --- | --- |
| `step_name_raw/canonical` | sole source step identity; output path는 `Step-1` |
| `load_ordinal` | 전체 step load data의 stable source order에서 zero-based ordinal |
| `surface_name_raw/canonical` | assembly surface reference source spelling/lookup key |
| `load_type` | exact canonical `P` |
| `magnitude`, `magnitude_raw` | unscaled signed finite pressure `[F/L^2]`와 source token |
| `source_file`, `keyword_line`, `data_line`, `data_ordinal` | keyword/data provenance |
Multiple valid pressure records는 같아 보여도 distinct이고 `load_ordinal` 순서에서 additive다.
Surface facet과 load record의 Cartesian product가 각 active contribution identity를 만든다.
Analysis step load factor `lambda`는 source magnitude에 exactly once 적용한다. `lambda=0` 또는
`p=0`도 surface/model/current-geometry validation을 생략하지 않는다.
### 5.2 Output requests
`*OUTPUT`, `*NODE OUTPUT`, `*ELEMENT OUTPUT` allowlist는 warning 후 no-op이며 아래 mandatory
HDF5를 선택·제거하지 않는다. Pressure-only field request, pressure integration-point output,
history output과 CSV writer는 없다. Unknown output request가 해석 결과를 바꿀 가능성이
있으면 ignored-with-warning가 아니라 fail-closed다.
## 6. Internal Model Contract
이 절은 semantic relation만 정의하고 C++ class/API/file ownership을 정하지 않는다.
| semantic object | required meaning / ownership |
| --- | --- |
| node | Domain owns source `(part,instance,node label)`, coordinates, stable internal index |
| element | Domain owns source `(part,instance,element label,type)`, ordered four-node connectivity, material/section identities |
| node/element set | Domain owns scope-qualified case-insensitive name and deterministic expanded source membership |
| material/section | Domain owns named finite linear-elastic material and shell section/material/set linkage |
| element surface | Domain owns §4.2 immutable named surface and ordered unique facets |
| boundary condition | Step owns existing source target, DOF range/value and source order |
| concentrated load | Step owns existing nodal target/component/magnitude and source order |
| uniform pressure load | Step owns §5.1 surface reference, signed `P` magnitude and load ordinal |
| step/procedure | Domain/Step definition owns sole static procedure and linear/nonlinear configuration identity |
| output request | parsed warning/no-op record only; mandatory result set는 procedure가 결정 |
`AnalysisModel`은 current step에서 active elements, facets, pressure records, other loads,
constraints, properties/materials를 Domain/Step lifetime 안에서 참조하는 non-owning view다.
Domain 또는 surface inventory를 복사하거나 재정렬하지 않는다.
각 active `(load_ordinal, facet_ordinal)`은 formulation의 element-local `24x1` pressure force와,
nonlinear이면 `24x24` external tangent candidate를 만든다. Candidate의 finite/geometry/dimension
검증이 끝난 뒤
`(load_ordinal, facet_ordinal, instance declaration ordinal, element label, local row[,column])`
순서로 stable full-space external generalized load/tangent에 reduce한다. Parallel producer는
global storage를 직접 갱신하지 않는다. Full-space completion 뒤에만 free/constrained projection을
수행한다. `r=f_int-f_ext`, nonlinear `K=K_int-K_ext`이며 constrained residual은 reaction,
free residual은 accepted-equilibrium evidence다.
## 7. Authoritative HDF5 Schema
### 7.1 Version and filename decision
새 HDF5 dataset 또는 schema version은 추가하지 않는다. Pressure는 새로운 recovery quantity가
아니라 existing external load이며 기존 result chain에서 관측 가능하다.
- Linear static: current schema `0`, `<stem>_results.h5`.
- Nonlinear static: current schema `1`, `<stem>_results.h5`.
- CLI operand/output derivation과 `<stem>_log.txt` procedure log contract는 변경하지 않는다.
- 기존 pressure 없는 input은 동일 schema, row order와 mandatory result를 유지한다.
- `/metadata/feature_id`는 기존 writer identity
`linear-static-mitc4-shell` 또는 `nonlinear-static-newton-raphson`을 유지한다. Pressure
feature를 표시하려고 값을 바꾸거나 새 metadata를 만들지 않는다.
- `/metadata/source_input_identity`가 exact input content identity를, `/model/elements`가 source
instance/label/type을 보존한다. Surface/load-only model dataset은 추가하지 않는다.
Successful candidate만 same-directory temporary HDF5에 완성, flush, checked close/reopen/self-
check 후 final path에 atomic publish한다. 실패 candidate는 accepted state나 final HDF5로
commit하지 않으며 prior valid final을 보존하거나 prior final이 없으면 misleading final을
남기지 않는다.
### 7.2 Common dataset conventions
- Numeric value dtype는 little-endian IEEE `float64`; identity index는 little-endian
`uint64`, mask는 `uint8`, text는 variable-length UTF-8다.
- Node row `r`는 `/model/nodes.internal_node_id=r`로 join한다. Source comparison은 그 row의
`instance_name`와 numeric `source_label`을 사용하며 HDF5 row order만으로 외부 row를
맞추지 않는다.
- `N`은 node count, `E`는 shell element count, `F`는 committed accepted frame count다.
- Schema-v0 field numeric dataset의 common attributes는 `component_names`,
`component_unit_dimensions`, `coordinate_system`, `location`, `step_name=Step-1`,
`frame_index=0`이다. Schema version은 `/metadata@schema_version=0`이 authoritative다.
- Schema-v1 model/frame numeric dataset은 `schema_version=1`, `component_names`,
`component_unit_dimensions`, `coordinate_system`, `location`을 가진다. Frame dataset은
`step_name=Step-1`, `frame_index`, `increment_index`, `load_factor`, `is_factor_one`도 가진다.
### 7.3 Linear static schema `0`
Sole `/steps/Step-1/frames/0`은 completed linear final state이며 procedure load factor 의미는
`1.0`이다. Schema `0`은 별도 `load_factor` attribute/dataset을 저장하지 않으므로 이를
새로 발명하지 않는다.
| path | shape / dtype | components, units, coordinates, location | pressure meaning / requirement |
| --- | --- | --- | --- |
| `/metadata` | group | attrs: `schema_version=0`, `feature_id=linear-static-mitc4-shell`, `solver_version`, `source_input_identity`, `unit_system_label=user-consistent-unspecified`, `coordinate_convention`, `internal_formulation=FESA-MITC4`, `integration_rule`, `step_name=Step-1`, `frame_index=0` | source/procedure identity; mandatory |
| `/model/nodes` | `[N]` compound | `internal_node_id:uint64`, `instance_name:utf8`, `source_label:utf8`, `coordinates:float64[3]`; global Cartesian, length | nodal source identity join; mandatory |
| `/model/elements` | `[E]` compound | internal element ID, source instance/label/type, four internal node IDs, section/material IDs; formulation `FESA-MITC4` | S4/S4R source identity unchanged; mandatory |
| `/model/shell/materials` | `[M]` compound | material ID/name, `E:[F/L^2]`, `nu:[1]` | unchanged material identity |
| `/model/shell/sections` | `[S]` compound | section/source/material IDs, thickness `[L]`; centered single layer | unchanged section identity |
| `/model/shell/nodal_director` | `[N,3] float64` | `D1,D2,D3`; `1,1,1`; global Cartesian; initial director | unchanged |
| `/model/shell/nodal_frame` | `[N,3,3] float64` | `X,Y,Z`, axes `A,B,D`; dimensionless; global Cartesian | unchanged |
| `/model/nodal_constraint_mask` | `[N,6] uint8` | order `[UX,UY,UZ,URX,URY,URZ]`; `0=free,1=constrained` | full/free/constrained identity |
| `/model/prescribed_displacement` | `[N,6] float64` | `[UX,UY,UZ,URX,URY,URZ]`; `[L,L,L,1,1,1]`; global Cartesian | existing prescribed target |
| `/model/shell/midsurface_locations` | `[4,2] float64` | `XI,ETA`; shell-natural; midsurface location | fixed four Gauss rows |
| `/model/shell/section_positions` | `[3] float64` | `ZETA`, `BOTTOM,MIDDLE,TOP`; shell-natural | unchanged recovery positions |
| `/steps/Step-1/frames/0/nodal/displacement` | `[N,6] float64` | `UX,UY,UZ,URX,URY,URZ`; `[L,L,L,1,1,1]`; global Cartesian; nodal | pressure solution response; mandatory |
| `/steps/Step-1/frames/0/nodal/reaction` | `[N,6] float64` | `RF1,RF2,RF3,RM1,RM2,RM3`; `[F,F,F,F*L,F*L,F*L]`; global Cartesian; nodal | full residual, constrained entries physical reaction; pressure included |
| `/steps/Step-1/frames/0/element/shell/local_frame` | `[E,4,3,3] float64` | `X,Y,Z`, axes `E1,E2,E3`; dimensionless; global Cartesian; shell-local-frame | unchanged MITC4 recovery identity |
| `/steps/Step-1/frames/0/element/shell/generalized_strain` | `[E,4,8] float64` | `E11,E22,G12,K11,K22,K12,G13,G23`; `[1,1,1,1/L,1/L,1/L,1,1]`; shell-local; midsurface | unchanged |
| `/steps/Step-1/frames/0/element/shell/section_resultant` | `[E,4,8] float64` | `N11,N22,N12,M11,M22,M12,Q13,Q23`; `[F/L,F/L,F/L,F,F,F,F/L,F/L]`; shell-local; midsurface | unchanged |
| `/steps/Step-1/frames/0/element/shell/stress` | `[E,4,3,3] float64` | `S11,S22,S12`; `[F/L^2,F/L^2,F/L^2]`; shell-local; section-position | unchanged; external stress comparison 없음 |
| `/steps/Step-1/frames/0/global/energy` | `[1] float64` | `PHYSICAL_STRAIN_ENERGY`; `F*L`; global/global | existing strain energy; pressure-only energy 없음 |
| `/steps/Step-1/frames/0/global/equilibrium` | `[6] float64` | `FORCE_1..3,MOMENT_1..3`; `[F,F,F,F*L,F*L,F*L]`; global Cartesian; `global-origin` | applied pressure와 constrained reaction balance 포함 |
| `/steps/Step-1/frames/0/global/verification_metrics` | `[3] float64` | `FREE_RESIDUAL_NORMALIZED,FORCE_BALANCE_NORMALIZED,MOMENT_BALANCE_NORMALIZED`; dimensionless; global/verification | existing linear free residual/force/moment evidence |
| `/diagnostics` | `[D]` compound | `severity,code,file,line,keyword,entity_identity,message` | sorted successful warnings; mandatory even when empty |
Schema `0`은 `external_force`, `internal_force`, full free residual을 별도 nodal dataset으로
저장하지 않는다. Pressure를 위해 이를 추가하지 않는다. Full residual-derived reaction,
global equilibrium와 verification metrics가 existing authoritative projection이다.
### 7.4 Nonlinear static schema `1`
`/steps/Step-1/accepted_frames`의 committed row만 frame group을 가진다. Factor zero는
`/metadata@factor_zero_is_frame=0`, `factor_zero_load_factor=0.0`인 baseline metadata이고
accepted frame이 아니다. Successful final row는 unique `load_factor=1.0` 및
`is_factor_one=1`이다.
| path | shape / dtype | components, units, coordinates, location | pressure meaning / requirement |
| --- | --- | --- | --- |
| `/metadata` | group | attrs: `schema_version=1`, `feature_id=nonlinear-static-newton-raphson`, `solver_version`, `source_input_identity`, `unit_system_label=user-consistent-unspecified`, `coordinate_convention`, `analysis_procedure=nonlinear-static-full-newton`, `internal_formulation=FESA-MITC4-total-lagrangian`, `integration_rule`, `step_name=Step-1`, accepted-frame indexing, factor-zero attrs | source/procedure identity; mandatory |
| `/model/nodes` | `[N]` compound | `internal_node_id:uint64`, `instance_name:utf8`, `source_label:utf8`, `coordinates:float64[3]`; attrs schema `1`, `X,Y,Z`, length, global Cartesian, nodal-reference | reference identity join |
| `/model/elements` | `[E]` compound | internal ID, instance/source label/type/formulation, node IDs, section/material IDs; schema `1` | S4/S4R source identity unchanged |
| `/model/shell/materials` | `[M]` compound | material ID/name, `E`, `nu`; schema `1`; `[F/L^2,1]`; model-material | unchanged |
| `/model/shell/sections` | `[S]` compound | section/source/material IDs, thickness; schema `1`, length, model-shell-section, centered single layer | unchanged |
| `/model/shell/nodal_director` | `[N,3] float64` | `D1,D2,D3`; dimensionless; global Cartesian; nodal-initial-director | unchanged |
| `/model/shell/nodal_frame` | `[N,3,3] float64` | `X,Y,Z`, axes `A,B,D`; dimensionless; global Cartesian; nodal-initial-frame | unchanged |
| `/model/nodal_constraint_mask` | `[N,6] uint8` | semantic order `[UX,UY,UZ,URX,URY,URZ]`; schema `1`; dimensionless; global Cartesian; nodal-constraint | free/constrained projection identity |
| `/model/prescribed_displacement_start` | `[N,6] float64` | `UX..URZ`; `[L,L,L,1,1,1]`; global Cartesian; nodal-prescribed-start; `load_factor=0` | baseline constraint state |
| `/model/prescribed_displacement_target` | `[N,6] float64` | same; nodal-prescribed-target; `load_factor=1` | factor-one target |
| `/model/shell/midsurface_locations` | `[4,2] float64` | `XI,ETA`; dimensionless; shell-natural; midsurface-location | stable GP identity |
| `/model/shell/section_positions` | `[3] float64` | `ZETA`, `BOTTOM,MIDDLE,TOP`; shell-natural; section-position | stable section identity |
| `/steps/Step-1/accepted_frames` | `[F]` compound | `frame_index:uint64, increment_index:uint64, load_factor:float64, iteration_count:uint64, is_factor_one:uint8`; schema `1` | accepted frame selector |
| `/steps/Step-1/frames/<k>/nodal/displacement` | `[N,6] float64` | `UX,UY,UZ,URX,URY,URZ`; `[L,L,L,1,1,1]`; global Cartesian; nodal | pressure solution response and reference source |
| `/steps/Step-1/frames/<k>/nodal/triad` | `[N,3,3] float64` | `X,Y,Z`; dimensionless; global Cartesian; nodal-triad | accepted current orientation |
| `/steps/Step-1/frames/<k>/nodal/director` | `[N,3] float64` | `D1,D2,D3`; dimensionless; global Cartesian; nodal-director | accepted current director |
| `/steps/Step-1/frames/<k>/nodal/generalized_internal_force` | `[N,6] float64` | `FI1,FI2,FI3,MI_PHI1,MI_PHI2,MI_PHI3`; `[F,F,F,F*L,F*L,F*L]`; global Cartesian; nodal | full-space `f_int` |
| `/steps/Step-1/frames/<k>/nodal/generalized_external_force` | `[N,6] float64` | `FE1,FE2,FE3,ME_PHI1,ME_PHI2,ME_PHI3`; same units; global Cartesian; nodal | full-space `f_ext`; pressure contribution의 rotational entries는 exact zero |
| `/steps/Step-1/frames/<k>/nodal/generalized_residual` | `[N,6] float64` | `RU1,RU2,RU3,RPHI1,RPHI2,RPHI3`; same units; global Cartesian; nodal | `r=f_int-f_ext`; mask와 함께 accepted free residual을 reconstruct |
| `/steps/Step-1/frames/<k>/nodal/reaction` | `[N,6] float64` | `RF1,RF2,RF3,RM1,RM2,RM3`; same units; global Cartesian; nodal | constrained residual; rotational values는 spatial physical moment projection |
| `/steps/Step-1/frames/<k>/element/shell/local_frame` | `[E,4,3,3] float64` | `X,Y,Z`, axes `E1,E2,E3`; dimensionless; global Cartesian; shell-local-frame | unchanged MITC4 recovery |
| `/steps/Step-1/frames/<k>/element/shell/generalized_strain` | `[E,4,8] float64` | `E11,E22,G12,K11,K22,K12,G13,G23`; `[1,1,1,1/L,1/L,1/L,1,1]`; shell-local; midsurface | unchanged |
| `/steps/Step-1/frames/<k>/element/shell/section_resultant` | `[E,4,8] float64` | `N11,N22,N12,M11,M22,M12,Q13,Q23`; `[F/L,F/L,F/L,F,F,F,F/L,F/L]`; shell-local; midsurface | unchanged |
| `/steps/Step-1/frames/<k>/element/shell/stress` | `[E,4,3,3] float64` | `S11,S22,S12`; `[F/L^2,F/L^2,F/L^2]`; shell-local; section-position | unchanged; external stress comparison excluded |
| `/steps/Step-1/frames/<k>/global/energy` | `[1] float64` | `PHYSICAL_STRAIN_ENERGY`; `F*L`; global/global | existing physical strain energy; pressure-only energy 없음 |
| `/steps/Step-1/frames/<k>/global/equilibrium` | `[6] float64` | `FORCE_1..3,MOMENT_1..3`; `[F,F,F,F*L,F*L,F*L]`; global Cartesian; `global-balance-error` | current `X+u` arm과 spatial moment의 applied-plus-constrained-reaction balance error |
| `/diagnostics` | `[D]` compound | `severity,code,file,line,keyword,entity_identity,message`; schema `1` | sorted successful warnings; mandatory even when empty |
모든 frame numeric dataset은 §7.2의 schema-v1 frame attributes를 가진다. Accepted free
residual은 새 summary dataset이 아니라 `generalized_residual`을
`nodal_constraint_mask==0`으로 project한 finite generalized force/moment channels다. Pressure
rotational generalized external contribution이 exact zero여도 reaction의 physical moment와
`global/equilibrium` moment는 nodal force arm 때문에 nonzero일 수 있다.
## 8. FESA HDF5 to Reference CSV Comparison Mapping
### 8.1 Immutable artifacts and accepted frame
| role | exact path | disposition |
| --- | --- | --- |
| input | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure.inp` | required read-only |
| displacement | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure displacements.csv` | required blocking/warning source |
| reaction | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure reactions.csv` | `review-only`; verdict family 없음 |
| stress | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure stresses.csv` | `excluded`; comparator family 없음 |
Comparator는 schema `1` HDF5의 `/steps/Step-1/accepted_frames`에서
`load_factor==1.0 && is_factor_one==1`인 row가 정확히 하나인지 검사한다. 그 row의 exact
`frame_index=k`를 사용해
`/steps/Step-1/frames/<k>/nodal/displacement`를 읽는다. Step path는 exact `Step-1`이어야 하며
다른 accepted factor-one row, missing frame group 또는 frame attribute/table 불일치는 tolerance
전 실패다.
### 8.2 Deterministic node/component projection
1. `/model/nodes`는 exactly `729` rows여야 한다. `internal_node_id`는 unique `0..728`이고
displacement first dimension과 일치해야 한다. 각 displacement row는 동일 internal ID의
model node에 join한다.
2. HDF5 source key는 raw `instance_name`, numeric-parsed raw `source_label`이다. Expected
instance는 `Part-1-1`, labels는 `1..729` exactly once다.
3. CSV parser는 raw header와 raw text cell을 report에 보존한다. Header recognition에서만
leading/trailing ASCII whitespace를 trim하며 trimmed header set은 exact
`Frame`, `Part Instance Name`, `Node Label`, `U-U1`, `U-U2`, `U-U3`, `UR-UR1`,
`UR-UR2`, `UR-UR3`이어야 한다. Duplicate/unknown extra/missing header는 precheck failure다.
4. Text identity cell도 comparison key를 만들 때만 ASCII trim한다. Instance는 ASCII
case-insensitive하게 canonicalize하되 HDF5/CSV raw spelling을 모두 보존한다. Node Label은
positive decimal numeric source label로 parse한다. Frame은 trimmed exact observed text
`Increment 10: Step Time = 1.000` 하나뿐이어야 한다.
5. Raw wide rows는 exactly `729`이고 key
`(Frame, canonical instance, numeric node label)`는 unique다. CSV file order를 HDF5 row
order와 맞추지 않는다.
6. Wide row를 아래 logical component row로 deterministic하게 expand한다. Order는
`(numeric node label ascending, component table order)`이며 matching identity는
`(case_id, Step-1, factor-one frame, canonical instance, node label, logical component)`다.
| HDF5 column index/name | CSV column | logical component | units / coordinates | family / disposition |
| --- | --- | --- | --- | --- |
| `0 / UX` | `U-U1` | `U1` | length, global Cartesian | `pressure_nodal_translation_blocking` / `blocking` |
| `1 / UY` | `U-U2` | `U2` | length, global Cartesian | same / `blocking` |
| `2 / UZ` | `U-U3` | `U3` | length, global Cartesian | same / `blocking` |
| `3 / URX` | `UR-UR1` | `UR1` | dimensionless radian convention, global component | `pressure_nodal_rotation_warning` / `warning-only` |
| `4 / URY` | `UR-UR2` | `UR2` | same | same / `warning-only` |
| `5 / URZ` | `UR-UR3` | `UR3` | same | same / `warning-only` |
Expected translation logical rows are `729*3=2,187`; expected rotation logical rows are
`729*3=2,187`. 두 disposition은 같은 family로 합치지 않는다.
### 8.3 Prechecks and tolerance
다음 순서의 precheck가 모두 통과한 뒤에만 tolerance를 계산한다.
1. exact required artifact path/readability와 case/input pairing;
2. HDF5 `/metadata@schema_version=1`, source identity, exact `Step-1`, unique factor-one accepted
frame와 matching frame attributes;
3. required dataset existence, dtype/rank/shape/attribute/component order;
4. HDF5 node internal/source identity uniqueness와 exact instance/node inventory;
5. CSV trimmed header set, exact factor-one Frame text, instance/node wide-row inventory;
6. missing/extra/duplicate HDF5 or CSV source key/component와 cardinality `729/2,187/2,187`;
7. every HDF5/CSV required numeric value의 finite C-locale parse.
Wrong case, step, frame, factor, instance, node 또는 component는 row omission, averaging,
duplicate collapse, fallback index와 zero clamp로 보정하지 않는다. Shared identity/schema
precheck failure는 warning family만 관련되어도 comparison non-success다. Shared prechecks가
통과한 뒤 translation row/RMS failure는 blocking verdict를 실패시키고 rotation row/RMS
failure는 deterministic warning만 남긴다.
각 family는 변경 없이 `docs/TOLERANCE.md`를 사용한다. Reference-only
`S=max(abs(reference))`, `B=0.01*S`; `abs(reference)<=B` row는
`abs(fesa-reference)<=B`, 나머지는 relative error `<=0.05`; family
`RMS(error)/S<=0.01`을 모두 통과해야 한다. Boundary는 inclusive다. Independent absolute
gate, `max(1,S)`, floor, clamp와 calibration은 없다. `S=0`이면 FESA family도 exact zero만
통과한다.
Reaction CSV는 local distribution의 optional review-only inventory이며 HDF5
`nodal/reaction`과 numerical verdict family를 만들지 않는다. Stress CSV는 excluded이며
`element/shell/stress` comparator를 만들지 않는다. Internal reaction/free residual/global
equilibrium evidence는 각각 approved internal gate로 유지된다.
## 9. Validation and Deterministic Diagnostics
### 9.1 Ordered validation pipeline
Validation은 다음 순서를 고정한다. 앞 단계 실패 시 뒤 단계의 partial semantic state나
pressure contribution을 commit하지 않는다.
1. ASCII/line-length/keyword continuation, comma split, empty-field, cardinality와 finite numeric
lexical validation;
2. keyword parameter allowlist, wrapper/scope와 sole-step/static procedure placement;
3. case-insensitive part/instance/set/surface name uniqueness와 visibility;
4. direct target resolution, flat assembly ELSET expansion, missing/ambiguous/cyclic/cross-scope
target rejection;
5. source `S4|S4R`, four-node connectivity, `SPOS|SNEG`와 unique/conflicting membership rules;
6. nonempty immutable surface candidate commit;
7. step-level `DSLOAD` surface reference, `P`, finite signed magnitude, record/source order와
approved linear/nonlinear procedure;
8. finite model units/configuration prerequisites와 full scatter/dimension identity;
9. formulation/numerical-review의 reference/current geometry gate
`tau_J=1.0e-12`, finite force/tangent/local contribution;
10. stable full-space reduction finite check, free/constrained projection와 accepted state/result
recovery;
11. complete HDF5 candidate self-check와 atomic finalization.
### 9.2 Failure categories and stable diagnostic fields
| category / example code family | stage and disposition | CLI category |
| --- | --- | --- |
| `input-syntax`, `invalid-cardinality`, `invalid-number`, `invalid-input-character` | lexical/data failure | `3=input` |
| `unsupported-keyword`, `unsupported-parameter`, `unsupported-surface-scope`, `unsupported-load-type`, `unsupported-procedure` | approved subset 밖; fail-closed | `3=input` |
| `duplicate-name`, `missing-reference`, `ambiguous-reference`, `cyclic-elset`, `cross-scope-target`, `empty-surface` | semantic target failure | `4=model` |
| `unsupported-element-type`, `unsupported-surface-side`, `conflicting-surface-membership`, `invalid-connectivity` | facet/model failure | `4=model` |
| `nonfinite-model-value`, `invalid-reference-surface-geometry` | pre-analysis model validation | `4=model` |
| `invalid-current-surface-geometry`, `nonfinite-pressure-contribution`, `nonfinite-pressure-tangent`, `invalid-scatter`, `invalid-reduction` | trial/assembly failure; candidate 폐기 | `5=solver` |
| `hdf5-write-failure`, `hdf5-finalization-failure` | prior final preservation / no partial final | `6=HDF5` |
각 diagnostic은 existing external fields
`severity`, `code`, `file`, `line`, `keyword`, `entity_identity`, `message`를 가진다. Pressure
failure의 semantic identity는 가능한 항목을 omission 없이 deterministic field order로
`entity_identity`에 보존한다:
```text
surface_raw; surface_canonical; load_type; part_raw; instance_raw;
element_label; source_element_type; side; member_ordinal; load_ordinal
```
Lexical failure처럼 아직 알 수 없는 downstream field만 empty다. Keyword line과 data line이
다르면 `line`은 실제 failing data line이고 message가 keyword declaration line을 포함한다.
Raw spelling과 canonical lookup key를 모두 유지한다. Diagnostics는
`(file source order, line, member/load ordinal, code, entity identity)`의 stable order로
stderr와 successful-output `/diagnostics`에 기록한다.
Same-side surface duplicate normalization만 warning이며 unique facet 하나를 만든다. Identical
DSLOAD row는 warning/normalization 대상이 아니라 legal distinct additive record다. Conflicting
side duplicate, duplicate surface declaration 또는 ambiguous target은 error다. Unsupported
variant를 silently ignore하거나 `CLOAD`/`DLOAD`/다른 surface 의미로 변환하지 않는다.
## 10. Requirement Traceability and Downstream Handoff
### 10.1 Requirement-to-I/O trace
| requirement | I/O decision / verification owner |
| --- | --- |
| `FESA-REQ-SHELL-PRESSURE-001` | §§2.3–2.5 exact `SURFACE`/`DSLOAD P` grammar; Stage 6 parser/semantic tests |
| `FESA-REQ-SHELL-PRESSURE-002` | §2.4 signed finite scalar `[F/L^2]`; numeric boundary tests |
| `FESA-REQ-SHELL-PRESSURE-003` | §4.2 deterministic direct/ELSET facet identity/order; semantic tests |
| `FESA-REQ-SHELL-PRESSURE-004` | §§2.2, 4.2 only source `S4|S4R`, `SPOS|SNEG`; rejection tests |
| `FESA-REQ-SHELL-PRESSURE-005` | §§5–6 preserve signed `P`/side without abs/clamp; analytical sign tests |
| `FESA-REQ-SHELL-PRESSURE-006` | §4.2 source connectivity/type/side identity; formulation geometry tests |
| `FESA-REQ-SHELL-PRESSURE-007` | §2.5 linear reference configuration and schema `0`; linear patch tests |
| `FESA-REQ-SHELL-PRESSURE-008` | §2.5 nonlinear current configuration, schema `1`; objectivity tests |
| `FESA-REQ-SHELL-PRESSURE-009` | §6 force/tangent semantic path and nonlinear external tangent; FD tests |
| `FESA-REQ-SHELL-PRESSURE-010` | §5.1 exact-once load factor; factor `0,0.5,1` tests |
| `FESA-REQ-SHELL-PRESSURE-011` | §6 local candidate→stable full-space→projection; assembly tests |
| `FESA-REQ-SHELL-PRESSURE-012` | §§6–7 residual/reaction/free projection; reaction/equilibrium tests |
| `FESA-REQ-SHELL-PRESSURE-013` | §§4.2, 5.1, 6, 9 deterministic identity/reduction/result/diagnostic order tests |
| `FESA-REQ-SHELL-PRESSURE-014` | §2.2 allowlist and §§2.3–2.5 fail-closed matrix |
| `FESA-REQ-SHELL-PRESSURE-015` | §§4.2, 9 missing/ambiguous/empty/duplicate/scope rules; negative tests |
| `FESA-REQ-SHELL-PRESSURE-016` | §§2.5, 9 procedure/nonfinite/geometry failure; atomicity tests |
| `FESA-REQ-SHELL-PRESSURE-017` | §9 stable diagnostic fields/order and §7 atomic HDF5; failure tests |
| `FESA-REQ-SHELL-PRESSURE-018` | §7 no new dataset/version; schema-v0/v1 regression tests |
| `FESA-REQ-SHELL-PRESSURE-019` | §§7.3–7.4 existing nodal/residual/reaction/equilibrium/MITC4 paths |
| `FESA-REQ-SHELL-PRESSURE-020` | §7 linear observable projection plus approved analytical suite; Stage 6 analysis tests |
| `FESA-REQ-SHELL-PRESSURE-021` | §7.4 full nonlinear vectors/free residual/global balance; Stage 6 nonlinear tests |
| `FESA-REQ-SHELL-PRESSURE-022` | §8.1 exact immutable input/CSV paths and exact stored inventory prechecks |
| `FESA-REQ-SHELL-PRESSURE-023` | §§8.1–8.3 exact HDF5 frame/node/component projection, U blocking/UR warning |
| `FESA-REQ-SHELL-PRESSURE-024` | §8 reaction review-only, stress excluded, no comparator family |
Coverage: normative requirements `24`, traced requirements `24`, gaps `0`.
### 10.2 Implementation Planning handoff through Coordinator
Stage 6 plan은 API/file design 전에 다음 acceptance items를 자기완결적 TDD Step으로 나눠야
한다.
1. Exact line/ASCII/comma/continuation/name/numeric grammar와 valid reference-style assembly
ELSET surface, direct qualified member, S4/S4R, SPOS/SNEG parser acceptance.
2. Every table-declared unsupported keyword/parameter/scope/member/load/procedure와 malformed
cardinality/numeric failure의 stable category/source diagnostic.
3. Direct/ELSET/multi-instance expansion, same-side normalization warning, conflicting-side/name/
empty/missing/ambiguous/cyclic/cross-scope failure와 immutable deterministic facet order.
4. Distinct additive pressure record/source order, exact-once factor, AnalysisModel non-owning
lifetime와 element-local→full-space→projection order.
5. Nonfinite/geometry/scatter/reduction failure, deterministic serial/parallel contribution and
diagnostic order, failed-state/final-file atomicity.
6. Existing schema `0`/`1` writer regression: no pressure-only dataset/version change; exact paths,
shapes, dtypes, attributes, source identity, frame/factor and mandatory finite quantities.
7. Exact schema-v1 HDF5→wide CSV projection, header/raw identity policy, `729`/`2,187` inventories,
all prechecks, family dispositions, boundary/zero-scale common tolerance tests.
8. Reaction CSV review-only와 stress CSV excluded; neither creates a numerical verdict family.
Private data layout, exact diagnostic code spelling within the normative category families and test
file ownership are Stage 6 implementation-planning decisions. They may not change supported syntax,
public compatibility, physics/sign, source identity, ordering, HDF5 schema, failure category,
reference disposition 또는 tolerance.
### 10.3 Open issues and stop condition
- Critical user question: 없음.
- Blocking I/O gap: 없음.
- Accepted limitation: stored external case는 S4/SPOS/positive `P` nonlinear displacement만
검증한다. S4R, sign reversal, linear pressure, objectivity와 tangent는 approved blocking
internal tests가 담당하며 새로운 reference artifact를 만들지 않는다.
- This document stops at I/O definition. Parser/C++ API implementation, implementation plan,
reference execution/comparison, physics/release verdict는 수행하지 않았다.
@@ -1,52 +0,0 @@
# Shell 표면 압력 수정과 시행착오
아래는 당시 실패 재현·원인·수정·검증 기록이다. 임시 shell/Hook/phase 복구 명령은 현재 실행 절차가 아니다.
<a id="corrections"></a>
<a id="corrections--shell-surface-pressure-load-correction-report"></a>
## Shell Surface Pressure Load Correction Report
<a id="corrections--1-metadata"></a>
### 1. Metadata
- feature_id: `shell-surface-pressure-load`
- source failure report: `phases/shell-surface-pressure-load/step1-output.json`, `phases/shell-surface-pressure-load/step2-output.json`, `.harness/build/Testing/Temporary/LastTest.log`
- source implementation plan: `docs/shell-surface-pressure-load/README.md`
- status: `corrected-for-implementation-rerun`
- date: `2026-09-01`
- normalized failure: `harness-parallel-duplicate-full-verification-timeout`
- attempt count: `2`
<a id="corrections--2-failure-triage"></a>
### 2. Failure Triage
- classification: `harness`
- first failed command: `python scripts/execute.py shell-surface-pressure-load`
- failed target or test: 제품 test 실패가 아니라 Implementation Agent가 실행한 unfiltered full CTest와 automatic Stop whole-project CTest의 중복 실행으로 인한 Harness outer timeout
- evidence tail: Step 2 agent full CTest PID `21572`가 `12:44:03`에 시작되었고, agent command가 `12:45:41`에 반환되기 전에 Codex Stop-hook `stop_validation.py` PIDs `21496`/`20712`가 시작되었다. 별도 Stop full CTest PID `8816`은 `12:46:01`에 시작되었으며 최종 test PID `21964`가 실행되는 동안 Harness는 pipe EOF를 기다렸다. 같은 형태의 overlap이 두 번의 1800초 timeout/slowdown을 만들었다.
<a id="corrections--3-root-cause-summary"></a>
### 3. Root Cause Summary
Root cause는 implementation defect, test defect 또는 CMake registration issue가 아니다. Pending Step 문서가 Implementation Agent에게 whole-project `cmake --build`와 unfiltered full CTest를 직접 실행하도록 요구하면서 `.codex/hooks.json`의 automatic Stop도 동일한 whole-project 검증을 수행했다. 장시간 reference tests가 병렬로 중복 실행되어 Executor가 Codex process와 pipe 종료를 기다리다 timeout됐다. 따라서 Step 2 output의 `exitCode: 124`는 product test failure가 아니라 Harness orchestration timeout이다.
<a id="corrections--5-verification-evidence"></a>
### 5. Verification Evidence
<a id="corrections--step-12-evidence-audit"></a>
#### Step 1/2 evidence audit
| Step | RED evidence | focused evidence | whole-project evidence | audit decision |
| --- | --- | --- | --- | --- |
| Step 1 | 신규 surface/DSLOAD semantic mapping 부재로 targeted RED가 실제 관찰됨 | parser/domain focused tests `36/36 passed` | MSVC Debug build passed, full CTest `310/310 passed` in `954.19 sec`; feature commit `ca3e4bc`, output commit `d5fc316` 존재 | feature/test evidence는 신뢰 가능하며 outer 1800초 timeout은 Harness overlap으로 분리 |
| Step 2 | invalid pressure input/diagnostic negative-contract assertions의 expected RED가 실제 관찰됨 | Step 2 targeted/focused verification passed | `.harness/build/Testing/Temporary/LastTest.log` LastWrite `2026-09-01 13:11:27`, `Test Passed.` 321, `Test Failed.` 0, CTest error marker 0; feature commit `c3b671d`, output commit `adebfae` 존재 | `exitCode: 124`는 test failure가 아니라 overlapping agent/Stop full CTest timeout |
<a id="corrections--correction-verification"></a>
#### Correction verification
- targeted reproducer: 실행하지 않음. 요구된 correction은 기존 두 overlap의 PID/timestamp 및 output/log evidence를 감사하는 문서/phase-instruction 교정이며 Harness/build/test 실행은 명시적으로 금지되었다.
- config-resolved full MSVC build/test: 이번 correction에서 실행하지 않음. 다음 Implementation Agent는 focused commands까지만 수행하고 automatic Stop이 exactly one whole-project validation을 소유한다.
- Stop result: 이번 correction turn에서는 Stop/Harness를 실행하지 않음.
- Harness Python pytest: hook/script/config를 변경하지 않았으므로 해당 없음.
- static verification: pending Step 3–7에서 agent-owned unfiltered full CTest와 target 없는 whole-project build가 제거되고, focused/reference commands와 automatic Stop 책임이 남는지 `rg` 및 `git diff --check`로 확인한다.
@@ -1,254 +0,0 @@
# Shell Surface Pressure Load Numerical Review
## 1. Metadata
- feature_id: `shell-surface-pressure-load`
- source_formulation: `docs/shell-surface-pressure-load/formulation.md`
- source_requirements: `docs/shell-surface-pressure-load/requirements.md`
- source_research: `docs/shell-surface-pressure-load/research.md`
- status: `pass-for-io-definition`
- owner_agent: `numerical-review-agent`
- date: `2026-08-30`
- reviewed_requirement_range: `FESA-REQ-SHELL-PRESSURE-001`–`FESA-REQ-SHELL-PRESSURE-024`
- external_tolerance_authority: `docs/TOLERANCE.md`
## 2. Review Verdict
**Verdict: `pass-for-io-definition`.**
Blocking formulation defect, research gap, reference-artifact gap 또는 critical user decision은 없다.
Pressure virtual work, discrete force, exact current-area derivative, residual/tangent sign과
reference/current geometry 구분은 서로 일관된다. S4/S4R 공통 `2x2` rule은 FESA-owned
discrete pressure force와 tangent를 정확히 적분하고, 기존 full unsymmetric nonlinear tangent
solver와 호환된다. 이 verdict는 Stage 5가 I/O contract를 정의할 수 있다는 뜻이며 구현,
reference agreement 또는 release approval이 아니다.
## 3. Critical Findings
### 3.1 Confirmed defects
없음.
### 3.2 Independently confirmed findings
1. Connectivity-positive area vector `a=g_xi x g_eta`, `s=+1` for `SPOS`, `s=-1` for
`SNEG`와 `f_i=-lambda*p*s*integral(N_i*a)`의 조합은 positive `P`가 selected normal의
반대 방향으로 작용하게 한다. `p` 또는 `s` 하나만 반전하면 force, moment와 nonlinear
tangent가 반전하고 둘을 함께 반전하면 원래 부호다.
2. `delta W_p=sum(delta u_i dot f_i)`는 식 (4)의 surface virtual work와 동일하다.
`sum N_i=1`로 nodal resultant 식 (23)이, `x_h=sum N_i*x_i`로 current/reference arm을
쓰는 moment 식 (22)가 직접 따른다. 승인된 midsurface/no-offset 범위에서는 pressure가
nodal rotation에 의존하지 않으므로 rotational force entries와 tangent rows/columns가
exact zero인 계약이 맞다.
3. `Da[d]=sum_j(-N_j,xi*[g_eta]_x+N_j,eta*[g_xi]_x)d_j`의 cross/skew 부호가 맞다.
따라서 external derivative 식 (14)는 `df_ext/du`이고, `r=f_int-f_ext`에 대한 pressure
residual directional derivative는 `-K_ext*d`, Newton tangent는 `K_int-K_ext`다.
4. 식 (14)의 open-facet element operator는 일반적으로 nonsymmetric이다. Silent
symmetrization, symmetric-triangle storage 또는 SPD 가정은 금지한다. Existing nonlinear
path는 full CSR과 oneMKL PARDISO `mtype=11`을 사용하므로 이 계약을 수용한다.
5. Bilinear surface mapping에서 `a`는 `xi,eta`의 affine vector다. `N_i*a`와 식 (19)의
scalar component는 각 natural coordinate에서 차수가 최대 2이므로 tensor-product
`2x2` Gauss rule은 force와 exact derivative를 적분한다. 이는 Abaqus S4/S4R 내부
integration과의 동등성 주장이 아니다.
6. Reference geometry는 analysis 시작 전, nonlinear current geometry는 매 trial에서 같은
chord/mean/corner/Gauss 규칙으로 검사한다. Connectivity reorder, normal flip, absolute-area
repair 또는 reference-normal dot test가 없으므로 proper large rigid rotation을 허용하면서
fold, local inversion, collapse와 nonfinite geometry를 fail closed한다.
### 3.3 Open questions
Critical open question은 없다. 직접 적용 가능한 public S4/S4R follower-pressure target이
없다는 `research.md`의 `OI-01`은 analytical/tangent/internal-equilibrium suite와 exact stored
case로 보완되는 disclosed nonblocking limitation이다.
## 4. Numerical Risk Assessment
| risk label | assessment | blocking evidence / disposition |
| --- | --- | --- |
| `rigid_body_modes` | Pressure는 support 또는 artificial stiffness가 아니다. Unconstrained patch의 six rigid modes를 regularization으로 숨기면 안 된다. | supported patch solution과 별도로 unconstrained singular behavior 및 pressure rigid-translation action을 검사한다. |
| `patch_test` | Stored case만으로 sign, S4R 또는 exact resultant를 분리할 수 없다. | Flat/distorted S4/S4R의 resultant, moment, side/sign, reaction과 mesh subdivision test가 blocking이다. |
| `symmetry` | `K_ext`는 일반적으로 nonsymmetric이고 global closure 조건이 우연히 symmetry를 만들 수 있다. | 독립 식 (14) matrix oracle, nonsymmetric open-patch precondition과 full-matrix assembly가 blocking이다. Symmetrization 금지. |
| `positive_definiteness` | `K_int-K_ext`는 follower loading에서 positive definite일 필요가 없다. | Existing unsymmetric tangent solver를 사용하며 pivot perturbation, SPD fallback 또는 hidden regularization을 허용하지 않는다. |
| `hourglass` | Pressure force/tangent는 S4/S4R 모두 `2x2`라 pressure under-integration mode를 만들지 않는다. | Existing MITC4 drilling/hourglass policy는 변경하지 않는다. Source `S4R`은 reduced pressure integration을 뜻하지 않는다. |
| `shear_locking` | Existing MITC4 internal kinematics의 위험이며 external pressure interpolation의 결함이 아니다. | Existing shell evidence를 보존하고 pressure kernel을 locking correction으로 바꾸지 않는다. |
| `volumetric_locking` | Pressure kernel에는 volumetric constitutive mode가 없다. | `N/A`; material/section scope를 확장하지 않는다. |
| `distortion` | Warped/distorted bilinear patch는 pointwise vector area와 consistent tangent가 필요하다. | Mean, four corners와 four Gauss points의 dimensionless validity 및 distorted analytical/FD tests가 blocking이다. 추가 calibrated distortion portfolio는 요구하지 않는다. |
| `singular_jacobian` | Collapsed, folded, inverted 또는 nonfinite surface에서는 normal/area와 force가 유효하지 않다. | §6.1의 strict `tau_J` gate를 force/tangent 평가 전에 적용하고 failed candidate를 commit하지 않는다. |
| `conditioning` | Near-collapse와 extreme aspect ratio는 normalization 및 tangent conditioning을 악화한다. | Chord-relative gate와 finite-first checks를 사용한다. Absolute length floor, `max(1,...)` 또는 clamp는 금지한다. |
| `convergence` | Force와 tangent의 common sign error는 FD만 통과할 수 있고, tangent omission은 full Newton 수렴을 악화한다. | Independent sign/resultant oracle, external-force 및 residual FD, accepted free residual과 global balance를 모두 통과해야 한다. |
## 5. Consistency Checks
| check | result | independent evidence |
| --- | --- | --- |
| units and dimensions | pass | `p:[F/L^2]`, `a:[L^2]`, `f:[F]`, translational `K_ext:[F/L]`; generalized rotational force의 단위는 `[F L]`이고 값은 exact zero다. |
| matrix/vector dimensions | pass | `q_e,f_e`는 `24x1`, `E_i`는 `3x24`, `K_ij`는 `3x3`, `K_e`는 `24x24`; four translation blocks와 exact-zero rotational blocks가 일치한다. |
| signs | pass | `SPOS/SNEG`, positive/negative `p`, external force, reaction, `r=f_int-f_ext`, `K=K_int-K_ext`가 하나의 sign chain을 이룬다. |
| DOF ordering and constraints | pass | Global nodal order `[UX,UY,UZ,URX,URY,URZ]`; full-space stable assembly 후 free/constrained projection; constrained residual은 reaction, free residual은 equilibrium evidence다. |
| coordinates and transforms | pass | Geometry/force/reaction/balance는 global Cartesian; pressure mapping에는 physical in-plane inverse Jacobian이 필요 없다. 기존 MITC4 local frame, `B`와 recovery transform은 변경하지 않는다. |
| kinematic / `B` operator | pass | New load kinematics는 midsurface positional mapping과 식 (9)–(10)뿐이다. `B_MITC4`는 internal strain용이며 pressure force/tangent에 혼합되지 않는다. |
| constitutive contract | pass | Pressure는 `D`, stress update, thickness와 material state에 독립이다. Existing linear-isotropic MITC4 internal force/tangent/recovery를 변경하지 않는다. |
| Jacobian / geometry | pass with fixed decision | `ell_e`, mean area, corner/Gauss signed projection과 finite checks가 충분하며 final `tau_J=1.0e-12`를 §6.1에서 고정한다. |
| integration | pass | S4/S4R force와 tangent 모두 fixed-order four-point `2x2`, `w_q=1`; polynomial exactness와 same-rule consistency 확인. |
| tangent symmetry | pass | General nonsymmetry가 예상되며 full unsymmetric solver path와 일치한다. Symmetric storage 또는 averaging은 계약 위반이다. |
| output locations | pass | Nodal global displacement/rotation, full residual/reaction, factor-one global balance와 existing MITC4 result locations만 사용한다. Pressure-only recovery row는 없다. |
| deterministic identity | pass | Stable `(load source order, facet order, instance, element label, source type, side, local row[,column])`, exact-once local completion, fixed reduction, full-space-before-projection 계약이 완전하다. |
## 6. Verification Readiness
### 6.1 Geometry validity decision
Final single threshold is
\[
\boxed{\tau_J=1.0\times10^{-12}}.
\]
Formulation 식 (20)–(21)의 모든 strict inequality에 동일 값을 사용한다. 즉
`||bar(a)||/ell_e^2 > tau_J`와 four corners plus four Gauss points의
`a(z) dot bar(n)/ell_e^2 > tau_J`가 모두 필요하다. 값이 threshold와 같으면 fail이다.
모든 coordinate, chord, tangent, area, normalized mean, integrand, accumulated vector/matrix는
finite여야 하고 `ell_e=0`은 즉시 fail이다. 이 값은 double roundoff보다 약 4,500배 큰
dimensionless guard이며 별도 aspect-ratio calibration gate를 만들지 않는 최소 fail-closed
선택이다. Stored Abaqus value에 맞춰 조정하지 않았고 absolute length floor도 없다.
### 6.2 Analytical arithmetic decisions
Configuration `c`에서 다음 unclamped scales를 쓴다.
\[
A_\Sigma=\sum_qw_q\|a_c(q)\|_2,\qquad
F_\Sigma=|\lambda p|A_\Sigma,
\]
\[
M_\Sigma=|\lambda p|\sum_qw_q
\|x_h(q)-O\|_2\|a_c(q)\|_2,\qquad
K_\Sigma=F_\Sigma/\ell_e.
\]
- Natural nodes와 four Gauss points에서 `|sum_i N_i-1|<=1e-14` 및
`|sum_i N_i,xi|, |sum_i N_i,eta|<=1e-14`; nodal Kronecker values는 exact `0/1`이다.
- 식 (23) resultant error는 `||error||_2/F_Sigma<=1e-12`, 식 (22) moment error는
`||error||_2/M_Sigma<=1e-12`다.
- Side/sign reversal, double reversal, `lambda={0,0.5,1}` proportionality, flat analytical
force/reaction과 mesh/order invariance도 해당 `F_Sigma` 또는 `M_Sigma`로 `<=1e-12`다.
- Scale이 exact zero이면 expected와 computed vector가 모두 exact zero여야 한다. `p=0`은
force/tangent exact zero지만 geometry/model validation을 우회하지 않는다.
- Rotation entries와 tangent rotation rows/columns은 exact zero다. Rigid-translation tangent
action은 direction의 maximum nodal translation을 `ell_e`로 scaling한 뒤
`||K_ext*d||_2/F_Sigma<=1e-12`; `F_Sigma=0`이면 exact zero다.
### 6.3 Centered directional tangent decision
Nonzero deterministic translational direction `d`에 대해
`D=max_i||d_i||_2`와 `dhat_i=ell_e*d_i/D`를 사용한다. Dimensionless perturbation is
\[
\boxed{h=1.0\times10^{-5}},\qquad u^\pm=u\pm h\,\hat d.
\]
Both perturbed surfaces must independently pass §6.1. Define
\[
d_{FD}=\frac{f^{ext}(u^+)-f^{ext}(u^-)}{2h},\quad
d_A=K^{ext}(u)\hat d,\quad
S_D=\max(\|d_{FD}\|_2,\|d_A\|_2).
\]
If `S_D>0`, require `||d_FD-d_A||_2/S_D<=1e-8`; if `S_D=0`, both actions must be
exact zero. The pressure-residual check independently compares centered `D(-f_ext)` with
`-K_ext*dhat` by the same rule. A nonzero-pressure non-rigid direction must have `S_D>0` so an
accidentally zero oracle cannot pass. S4/S4R, SPOS/SNEG와 positive/negative `p`를 각각 다룬다.
`p=0`, rigid translation and rotation-only directions use their stated zero rules rather than this
relative branch. This fixed centered rule reflects the quadratic current-area mapping and is not
selected from stored reference results.
### 6.4 Objectivity and current-area decisions
- Translation test uses finite `||c||_2<=10*ell_e`. Force/area invariance and tangent invariance
must pass normalized `<=1e-12` using `F_Sigma`, `A_Sigma`, `K_Sigma`; zero scales require exact zero.
- Proper rigid rotation uses an independently constructed orthogonal `Q`, `det(Q)=+1`, including a
`120 deg` non-coordinate-axis rotation. Require force covariance, vector-area covariance, scalar
area invariance and `T K T^T` tangent covariance `<=1e-12` with the same unclamped scales.
The rotated geometry must remain valid; reference-global-normal comparison is forbidden.
- A planar current patch with homogeneous in-plane scale `gamma=1.25` must produce area and total
pressure resultant magnitude factors `gamma^2` within `<=1e-12`; pressure scalar and source
identity remain unchanged.
- The open distorted-patch tangent oracle must use a case whose independent 식 (14) has nonzero
antisymmetric part, compare every full-matrix entry by `K_Sigma` within `<=1e-12`, and demonstrate
that no symmetrization occurred.
### 6.5 Assembly, reaction, residual and global equilibrium
Blocking assembly tests cover unique facet exact-once application, distinct load-record addition,
fixed Gauss/contribution order, serial/parallel stable reduction, shuffled declaration/member order,
full-space-before-projection, nonfinite rejection and failed-candidate atomicity.
Accepted factor-one global equilibrium preserves the existing nonlinear contract. With current
`x=X+u` and global origin `0`, form applied/reaction nodal force contributions `a_F,I`, `c_F,I` and
current-arm plus spatial physical moment contributions `a_M,I`, `c_M,I`. Pressure has no separate
nodal moment. Define
\[
e_F=\sum_I(a_{F,I}+c_{F,I}),\quad
S_F=\max(\sum_I\|a_{F,I}\|_2,\sum_I\|c_{F,I}\|_2),
\]
\[
e_M=\sum_I(a_{M,I}+c_{M,I}),\quad
S_M=\max(\sum_I\|a_{M,I}\|_2,\sum_I\|c_{M,I}\|_2).
\]
Both `||e_F||_2/S_F<=1e-8` and `||e_M||_2/S_M<=1e-8` are blocking. Exact-zero scale
requires exact-zero balance; there is no absolute floor, `max(1,S)` or clamp.
Accepted free translation-force and rotation-moment residual channels remain separate and
finite-first. For a nonzero matching external scale, the existing infinity-norm relative gate is
`<=1e-2`. For an exact-zero external scale, the existing typed absolute infinity-norm gate is
`<=1e-3` force or force-length. Both channels must pass; neither global balance nor local reaction
distribution substitutes for this evidence.
### 6.6 Evidence classes and requirement traceability
| evidence class | classification | readiness / requirement trace |
| --- | --- | --- |
| input/surface/source identity | `blocking-internal` | Exact grammar/semantic projection remains Stage 5-owned; stable scope/failure contracts cover `001`–`004`, `013`–`017`. |
| sign/resultant/moment/reaction patches | `blocking-internal` | §6.2 and flat/distorted S4/S4R portfolio cover `005`–`007`, `010`–`012`, `020`. |
| current geometry/objectivity/tangent | `blocking-internal` | §§6.1, 6.3–6.4 cover `008`–`009`, `016`, `021`. |
| deterministic assembly/output preservation | `blocking-internal` | Exact identity/order/atomicity and unchanged existing result meanings cover `011`, `013`, `017`–`019`. |
| factor-one free residual/global balance | `blocking-internal` | §6.5 covers `012`, `019`, `021`. |
| stored `U1/U2/U3` | `blocking` external | Exact required input/CSV, source rows and common tolerance are ready for `022`–`023`; success remains Implementation-owned. |
| stored `UR1/UR2/UR3` | `warning-only` external | Same identity/precheck and common tolerance, deterministic warning disposition for `023`. |
| reaction CSV | `review-only` | Optional inventory only; internal reaction/equilibrium remains blocking under `012`, `021`, `024`. |
| stress CSV | `excluded` | No comparison family; existing stress recovery remains unchanged under `019`, `024`. |
Coverage: normative requirements `24`, reviewed requirements `24`, numerical/reference readiness
gaps `0`.
## 7. Required Revisions
### Formulation Agent
없음.
### Research Agent
없음. Public follower-pressure benchmark absence remains a disclosed nonblocking gap and does not
justify an invented target or extra portfolio.
## 8. Downstream Handoff
Coordinator를 통해 I/O Definition Agent에 전달한다.
- Preserve logical source facet `(instance, element label, source element type, side)`, distinct
load source order and exact-once semantics; final diagnostic representation is I/O-owned.
- Preserve global nodal component order, pressure rotational zero contract, source node identity,
`r=f_int-f_ext`, constrained reaction/free residual distinction and current-arm factor-one balance.
- Preserve the exact external logical families and row contract in `reference-model.md`; I/O owns
the final authoritative dataset projection.
- Do not add a pressure-only result quantity unless Stage 5 finds binding evidence; none was found
in this review.
- Internal thresholds in §6 are test gates only. They do not modify `docs/TOLERANCE.md` and must
not be calibrated to Abaqus output.
@@ -1,185 +0,0 @@
# Shell Surface Pressure Load Reference Model Contract
## 1. Metadata
- feature_id: `shell-surface-pressure-load`
- case_id: `shellnl-meshfine-pressure-s4-follower`
- source_requirements: `docs/shell-surface-pressure-load/requirements.md`
- source_formulation: `docs/shell-surface-pressure-load/formulation.md`
- source_numerical_review: `docs/shell-surface-pressure-load/numerical-review.md`
- status: `pass-for-io-definition`
- owner_agent: `numerical-review-agent`
- date: `2026-08-30`
- tolerance_authority: `docs/TOLERANCE.md`
- artifact_policy: `read-only-exact-existing-paths`
## 2. Reference Acceptance Scope
이 contract의 required acceptance artifacts는 exact stored nonlinear input 하나와 nodal
displacement CSV 하나뿐이다. External comparison은 accepted `Step-1` factor-one frame의
global nodal translation `U1/U2/U3`를 `blocking`, rotation `UR1/UR2/UR3`를
`warning-only`로 분류한다. Abaqus 값은 observable numerical reference이며 FESA pressure
formulation, quadrature, tangent 또는 recovery의 내부 동등성 evidence가 아니다.
Reaction CSV는 존재하는 optional `review-only` inventory이고 stress CSV는 `excluded`다.
README, metadata, provenance, Abaqus version, canonical rename 또는 추가 reference case를
요구하지 않는다. Final HDF5 dataset projection은 Stage 5 I/O Definition Agent가 소유한다.
## 3. Reference Case Inventory
### 3.1 Exact artifacts
| role | exact path | bytes | SHA-256 | observed inventory | status |
| --- | --- | ---: | --- | --- | --- |
| required input | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure.inp` | 56,665 | `53718ccc9b41c23fcc1b509a51d66f1347e87aca43a74f1d6cec4d2085f4b90e` | 1,498 lines; 729 finite unique nodes; 676 unique S4 elements; no bad connectivity reference | `present-readable-required` |
| required comparison CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure displacements.csv` | 111,182 | `2fe53f98eac9f04779100721c3edf8049eb1dbfe733ebcbd819aeeed03b81198` | 729 wide data rows; six displacement/rotation components; zero duplicate node keys; zero nonfinite component values | `present-readable-required` |
| optional reaction CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure reactions.csv` | 108,923 | `a2347f4e88e4b73c75abe7c23e96bcc696c16c1975e2440b3ad9bf7ecda5f2b6` | 729 rows, zero duplicate node keys, zero nonfinite RF/RM values | `present-review-only` |
| excluded stress CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure stresses.csv` | 1,036,876 | `bc06f3324cc5d6655ded2939b3e1cb9d55a0359fa0d272a6958399464218a128` | 5,408 rows, 676 element labels, 729 node labels, zero duplicate full keys, zero nonfinite S values | `present-excluded` |
Required artifact gaps: `0`. 어떤 artifact도 생성, rename, rewrite 또는 수정하지 않았다.
### 3.2 Exact input-observed case identity
| field | exact observed value |
| --- | --- |
| part / instance | `Part-1` / `Part-1-1`, identity instance |
| nodes | labels `1..729`, count `729`, unique and finite |
| elements | source type `S4`, labels `1..676`, count `676`, four valid node references each |
| section / material | `Set-1`: shell thickness `0.5`, `5` section points; `Material-1`: `E=2.1e+11`, `nu=0.3` |
| surface | `Surf-1`, `TYPE=ELEMENT`, internal member set `_Surf-1_SPOS`, elements `1..676`, side `SPOS` |
| constraints | assembly `Set-2`, DOFs `1..6` constrained |
| step | `Step-1`, `NLGEOM=YES`, one `*STATIC` step; data `0.1, 1.0, 0.001, 0.1` |
| load | one `*DSLOAD` record: `Surf-1, P, 1e+06` |
CSV의 single observed frame text는
`Increment 10: Step Time = 1.000`, instance text는 `PART-1-1`이다. 이 case는
S4/SPOS/positive uniform pressure/current-configuration nonlinear response만 포함한다. S4R,
SNEG, negative/zero pressure, isolated tangent sign, linear reference configuration과 analytical
force/moment exactness를 대신하지 않으며, 이 항목들은 `numerical-review.md`의 internal tests가
담당한다.
## 4. Source Identity and Component Contract
### 4.1 Accepted frame and row identity
Logical case/frame identity is
`(case_id, Step-1, unique accepted load_factor=1.0 frame, source instance, source node label)`.
Reference wide-row key는 raw CSV의
`(Frame, Part Instance Name, Node Label)`이다. `Frame`은 위 single factor-one text여야 하고,
instance는 source identity `Part-1-1`과 case-insensitive하게 대응하되 양쪽의 원문 identity는
보존한다. Node identity는 numeric source label이며 row position 또는 internal index로
대응하지 않는다.
### 4.2 Logical components and disposition
| logical quantity | reference column | FESA logical component | units / coordinates | expanded row identity | classification |
| --- | --- | --- | --- | --- | --- |
| nodal translation | `U-U1` | `UX` | length, global Cartesian | accepted frame + instance + node + `U1` | `blocking` |
| nodal translation | `U-U2` | `UY` | length, global Cartesian | accepted frame + instance + node + `U2` | `blocking` |
| nodal translation | `U-U3` | `UZ` | length, global Cartesian | accepted frame + instance + node + `U3` | `blocking` |
| nodal rotation | `UR-UR1` | `URX` | dimensionless radian convention, global component | accepted frame + instance + node + `UR1` | `warning-only` |
| nodal rotation | `UR-UR2` | `URY` | dimensionless radian convention, global component | accepted frame + instance + node + `UR2` | `warning-only` |
| nodal rotation | `UR-UR3` | `URZ` | dimensionless radian convention, global component | accepted frame + instance + node + `UR3` | `warning-only` |
Expected raw wide rows: `729`. Expected blocking logical rows: `729*3=2,187`. Expected
warning-only logical rows: `729*3=2,187`. Components with different blocking disposition are not
placed in one comparison family.
Reaction values are not a displacement-family source and remain local `review-only`. Stress values
have no feature comparator family and are `excluded`.
## 5. Row Prechecks
Prechecks run before any numerical tolerance and use the exact existing files.
1. **Artifact/case:** both required paths must exist, be readable and be paired with case
`shellnl-meshfine-pressure-s4-follower`. Wrong input/reference case or substituted filename fails
before tolerance.
2. **Step/frame/load factor:** FESA must expose exactly one accepted `Step-1` frame at
`load_factor=1.0`; the CSV must contain only the exact observed factor-one Frame text. Missing,
extra, duplicate or wrong step/frame/factor fails before tolerance.
3. **Wide-row inventory:** exact source keys are one row for each
`(PART-1-1,node label 1..729)`. Missing, extra or duplicate keys, wrong instance, nonnumeric/out-of-
range node labels or row-order-based matching fail before tolerance.
4. **Components:** all six logical component columns must be present exactly once. Missing, extra,
duplicate or unknown required component identity fails the affected family before value checks.
5. **Finite values:** every required U/UR value and matched FESA value must be finite. `NaN`, `Inf`,
absent cells and parse failures are precheck failures; they are not zero and cannot be clamped.
6. **Cardinality after expansion:** blocking and warning families must each contain exactly 2,187
one-to-one rows. Averaging, duplicate collapse, node-station collapse, missing-row omission or
component substitution is prohibited.
Per `docs/TOLERANCE.md`, a required artifact/schema/identity precheck failure makes the comparison
non-success before family arithmetic. After successful shared prechecks, a `blocking` family failure
changes the blocking verdict; a `warning-only` row or RMS failure records a deterministic warning
without changing it. Warning rows are always inventoried and reported; they may not be silently
omitted because of their disposition.
## 6. Tolerance and Blocking/Warning Policy
The external policy is reproduced unchanged from `docs/TOLERANCE.md`; no threshold is calibrated to
this case.
Comparison families:
- `pressure_nodal_translation_blocking`: same case, `Step-1` accepted factor-one frame, length,
global Cartesian, components `U1/U2/U3`, disposition `blocking`.
- `pressure_nodal_rotation_warning`: same case/frame, dimensionless global rotations, components
`UR1/UR2/UR3`, disposition `warning-only`.
For each family, using reference values only,
\[
S=\max_i|r_i|,\qquad B=0.01S,\qquad e_i=|f_i-r_i|.
\]
- If `|r_i|<=B`, row pass requires `e_i<=B`.
- If `|r_i|>B`, row pass requires `e_i/|r_i|<=0.05`.
- All rows and family RMS must pass:
`sqrt(sum_i(e_i^2)/n)/S<=0.01`.
- Boundaries are inclusive.
- There is no independent absolute-error gate, arbitrary floor, `max(1,S)`, averaging or zero
clamp.
- If `S=0`, every FESA family value must be exact zero. Otherwise record
`zero-reference-scale-nonzero-error`; do not emit a nonfinite metric.
- Blocking row/RMS failure fails the blocking comparison. Warning-only row/RMS failure emits a
deterministic warning and does not change the blocking numerical verdict.
Internal analytical, geometry, tangent, free-residual and global-balance checks use
`numerical-review.md` §6, not this external policy.
## 7. Open Issues and I/O Handoff
### 7.1 Open issues
- Critical user question: 없음.
- Required artifact blocker: 없음.
- Accepted limitation: the single stored case supplies S4/SPOS/positive-`P` nonlinear displacement
evidence only. S4R, sign reversal, current-area objectivity and tangent consistency remain
blocking internal tests rather than invented reference cases.
- Optional reaction/stress artifacts remain immutable. Their presence does not expand the approved
acceptance boundary.
### 7.2 I/O handoff through Coordinator
I/O Definition Agent receives only these logical contracts:
- accepted `Step-1`, unique factor-one frame identity;
- stable source instance `Part-1-1`, source node labels `1..729` and logical component identity;
- `U1/U2/U3 -> UX/UY/UZ` blocking and `UR1/UR2/UR3 -> URX/URY/URZ` warning-only;
- exact 729-wide-row / 2,187-row-per-family inventory, precheck ordering and common tolerance;
- reaction CSV `review-only`, stress CSV `excluded`;
- immutable exact artifact paths and hashes.
Final HDF5 dataset paths, schema projection and comparator serialization remain Stage 5-owned and
are intentionally not defined here.
## 8. Immutable Artifact Rule
Reference input and CSV files must not be renamed, rewritten, reordered, normalized, regenerated,
zero-clamped, repaired or supplemented to obtain a pass. The comparison implementation must adapt
deterministically to the exact current filenames, wide CSV layout, padded exported headers and raw
source identities while retaining the original artifacts byte-for-byte.
@@ -1,86 +0,0 @@
# Shell Surface Pressure Load 릴리스 준비 보고서
본 문서는 당시 revision의 검증·판정 기록이다. 본문에 남긴 원본 보고서 이름과 SHA-256은
통합 전 자료의 식별자이며 정리된 현재 파일의 byte hash를 뜻하지 않는다. 원문은 Git
`858e87b`의 해당 기능 폴더에서 확인할 수 있다. 현재 진입점과 대응 기록은 [README](README.md)를 따른다.
## 1. Metadata
- feature_id: `shell-surface-pressure-load`
- status: `ready-for-release`
- date: `2026-09-01`
- audited_head: `e5e8ccc8ff84a97e64ab2bc1889b5ab7aaae1c77`
- physics_evaluated_commit: `1eb4dce885175b78b8229b095f14cac102ea93df`
- workflow_basis: Gates 1–7 Coordinator-audited passed
- authoritative_output: input lexical sibling `<stem>_results.h5`
- tolerance_authority: `docs/TOLERANCE.md`
- source_docs: `requirements.md`, `research.md`, `formulation.md`, `numerical-review.md`, `reference-model.md`, `io.md`, `implementation-plan.md`
- source_reports: `implementation-report.md`, `build-test.md`, `reference-comparison.md`, `corrections.md`, `physics-evaluation.md`
본 판정은 FESA 기능 전달 workflow의 내부 release readiness에 한정한다. Publish, deploy,
package, tag, merge, commit, push 또는 외부 배포 권한을 부여하지 않는다.
## 6. Known Limitations
1. 입력은 assembly-level `TYPE=ELEMENT` surface와 uniform `DSLOAD P`의 승인 subset뿐이다.
`*DLOAD`, `P n`, `PNU`, `HP`, `VP`, `SP`, `TRVEC`, `TRSHR`, nonuniform/user pressure,
`AMPLITUDE`, `FOLLOWER`, `OP`, `REF NODE`, `*INCLUDE`와 승인되지 않은 parameter는 지원하지 않는다.
2. Surface는 single-sided `SPOS|SNEG` four-node `S4`/`S4R`만 지원한다. Node/edge/double-sided,
analytical/contact surface, part-level surface, implicit/mixed-instance ELSET, transformed instance,
S3/S8/solid/continuum-shell/membrane/beam/rigid element는 범위 밖이다.
3. 단일 linear static 또는 단일 approved `NLGEOM=YES` full-Newton static step만 지원한다.
Dynamics, thermal, contact, buckling perturbation, cavity/pipe pressure와 multiple-step propagation은 제외된다.
4. 기존 linear isotropic elastic MITC4 material/section만 사용한다. Material nonlinearity,
composite/hyperelastic/plastic section, surface offset, thickness-face arm/correction 및 pressure
distributed couple은 지원하지 않는다.
5. Pressure는 midsurface translational generalized force를 만든다. Rotational pressure entries는
exact zero이며 physical global moment는 force arm으로 평가한다. Invalid/collapsed/folded current
surface는 `tau_J=1.0e-12` gate에서 fail-closed한다.
6. Authoritative output은 기존 `<stem>_results.h5`뿐이며 surface/load 또는 pressure-only dataset은
추가되지 않는다. CSV는 product output이 아니다.
7. Stored external case는 `S4`, `SPOS`, positive `P=1e6`, `NLGEOM=YES` nonlinear displacement만
직접 검증한다. `S4R`, `SNEG`, negative/zero pressure, linear path, objectivity와 tangent는
passing blocking internal tests로 보완되며 별도 external reference case는 없다.
8. `UR1/UR2/UR3` external comparison은 contract상 `warning-only`다. 이번 evidence에서는 모두
통과했지만 향후 warning-only mismatch는 blocking U verdict를 바꾸지 않는다.
9. Reaction CSV는 `review-only`, stress CSV는 `excluded`다. Local reaction distribution이나
stress agreement을 external acceptance로 주장하지 않으며 internal residual/equilibrium gate를 사용한다.
10. 직접 적용 가능한 public S4/S4R follower-pressure benchmark가 없다는 연구 한계가 있다.
Analytical/kernel/solution tests와 exact stored case로 보완했으며 실험 validation을 주장하지 않는다.
11. FESA는 독립 solver다. Abaqus를 포함한 다른 solver의 내부 formulation, quadrature,
stabilization, tangent 또는 result-generation equivalence를 주장하지 않는다.
Deferred must requirement, unresolved defect, accepted blocking risk 또는 release-blocking open item은 없다.
## 8. Release Verdict
**Verdict: `ready-for-release`.**
필수 upstream gate, full build/test, blocking reference comparison과 physics evaluation이 모두
통과했다. Must requirement `24/24`가 release scope, acceptance criterion, implementation/test
또는 applicable reference evidence와 최종 disposition에 연결되고, known limitations가
release notes에 포함되었다. Missing/failed/stale required evidence, unresolved defect,
missing comparison file, tolerance conflict 또는 physics blocker는 없다.
이 verdict는 FESA 내부 feature delivery closure recommendation이며 외부 release 행위를
승인하지 않는다.
## 9. Handoff Recommendation
Coordinator Agent는 Gate 8을 `passed`로 기록하고 `shell-surface-pressure-load` workflow를
내부적으로 closure하는 것을 권고한다. 추가 Correction, Implementation, Physics Evaluation
또는 upstream decision return은 필요하지 않다. Publish, deploy, package, tag, merge, commit,
push 또는 external release는 별도 명시적 권한 없이는 수행하지 않는다.
## 11. Open Issues
- Missing evidence: 없음.
- Contradictory upstream verdict/status/value: 없음. Archival pre-gate metadata와 compact
trace shorthand는 Coordinator 승인 및 actual passing evidence로 교차 확인되었다.
- Unresolved defects or failed corrections: 없음. Harness duplicate-verification timeout correction은
이후 automatic Stop full `362/362 PASS`로 해소되었다.
- Missing declared comparison files or mappings: 없음.
- Release documentation gap: 없음.
- Blockers: 없음.
현재 build·reference·물리 실행 기록은 [검증 보고서](verification.md)에 통합했다. 과거 readiness와 현재 재검증 필요를 구분하며 이 정리는 새로운 release 감사가 아니다.
@@ -1,630 +0,0 @@
# Shell Surface Pressure Load Feature Requirement Specification
## 1. Metadata
- feature_id: `shell-surface-pressure-load`
- title: `S4/S4R Element-Surface Uniform Pressure Load`
- status: `draft-for-coordinator-gate-review`
- owner_agent: `requirement-agent`
- date: `2026-08-30`
- requirement_range: `FESA-REQ-SHELL-PRESSURE-001`–`FESA-REQ-SHELL-PRESSURE-024`
- parent_need: 승인된 Abaqus `.inp` subset에서 shell element surface pressure를 선형 및 기하비선형 정적 해석에 재현 가능하고 검증 가능하게 적용한다.
- tolerance_authority: `docs/TOLERANCE.md`
- authoritative_output: input lexical sibling `<stem>_results.h5`
- reference_case: `reference/shellNL-meshfine-pressure/`
## 2. 목적과 기대 동작
FESA는 `*SURFACE, TYPE=ELEMENT`로 정의한 S4/S4R shell의 `SPOS` 또는 `SNEG`
면에 `*DSLOAD`의 uniform pressure load type `P`를 적용한다. 양의 pressure는 선택된
surface normal의 반대 방향으로 작용하고 음의 pressure는 그 방향을 반전한다. 선형 정적
해석에서는 reference configuration을, `NLGEOM=YES` 비선형 정적 해석에서는 current
configuration의 follower load와 그 external-load tangent를 사용한다.
이 기능은 Abaqus 내부 요소 정식화나 적분 절차의 동등성을 목표로 하지 않는다. Abaqus
문서는 입력 의미와 외부 observable behavior의 근거이고, FESA formulation과 구현은 후속
gate에서 독립적으로 정의한다. Abaqus 문서상 surface pressure의 단위는 force/area이고,
surface-based 양의 pressure는 local surface normal의 반대 방향이다. 또한 pressure는
기하비선형 해석에서 surface와 함께 회전하는 follower load이며, deformed surface에 대한
load 의존성이 Jacobian contribution을 만든다.
근거:
- [Abaqus Distributed Loads](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEPRCRefMap/simaprc-c-loaddistributed.htm)
- [Abaqus Pressure Load Stiffness](https://docs.software.vt.edu/abaqusv2025/English/SIMACAETHERefMap/simathe-c-pressloadsolids.htm)
- [Abaqus Surface Normal and SPOS/SNEG](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEGSARefMap/simagsa-c-cntsurfaces.htm)
## 3. In Scope
- Case-insensitive `*SURFACE, TYPE=ELEMENT, NAME=<surface-name>` syntax와 surface data의
`<element-or-elset>, SPOS|SNEG` 조합
- Case-insensitive `*DSLOAD` data의 `<surface-name>, P, <uniform-magnitude>` 조합
- S4와 S4R source element type, 4절점 shell connectivity, 절점당
`[UX, UY, UZ, URX, URY, URZ]`
- Part/instance/assembly source identity를 보존하는 named element surface resolution
- 양수, zero, 음수의 finite pressure magnitude와 model-consistent force/area 단위
- 단일 승인 linear static step의 reference-configuration pressure
- 단일 승인 `*STATIC, NLGEOM=YES` step의 current-configuration follower pressure와
external-load tangent
- Stable full-DOF load assembly, reaction/free residual, global equilibrium과 deterministic order
- 기존 HDF5 result quantities와 stored reference displacement comparison
## 4. Out of Scope
- `*DLOAD` element/element-set face load와 `P n` label
- `PNU`, `HP`, `VP`, `SP`, `TRVEC`, `TRSHR`, nodal pressure, user subroutine 또는
spatially varying pressure
- `AMPLITUDE`, `FOLLOWER`, `OP`, `REF NODE` 등 이번 subset에서 승인하지 않은
`*DSLOAD` parameter
- `TYPE=NODE`, analytical surface, edge surface, double-sided surface, surface smoothing 또는
contact surface behavior. 서로 다른 member가 각각 `SPOS` 또는 `SNEG`를 선택하는 것은 허용한다.
- S3, S8, solid, continuum-shell, membrane, beam과 rigid element pressure
- Dynamics, thermal, contact, buckling perturbation, multiple step propagation, cavity/pipe pressure
- Surface offset, thickness-side pressure correction, pressure-induced new stress/strain/energy
output 또는 새 HDF5 dataset
- Abaqus 내부 정식화·적분·stabilization·load linearization과의 동등성 주장
- Reference artifact 생성, rename, 보정, zero-clamp 또는 stress reference comparison
## 5. Analysis Definition
| 항목 | 승인 계약 |
| --- | --- |
| analysis type | 단일 linear static 또는 승인된 full-Newton nonlinear static `NLGEOM=YES` |
| elements | FESA MITC4가 선택되는 Abaqus source `S4`, `S4R`; source type identity 보존 |
| nodal DOFs | global `[UX, UY, UZ, URX, URY, URZ]`; pressure resultant는 shell surface에 작용하는 external generalized load |
| material model | 기존 MITC4가 지원하는 linear isotropic elastic shell material/section; 이 기능은 material 범위를 확장하지 않음 |
| boundary conditions | 기존 essential displacement/rotation constraint subset; reference case는 `Set-2` DOF 1–6 고정 |
| loads | named element surface에 작용하는 uniform scalar pressure `P` |
| coordinate system | Surface normal은 source connectivity가 정한 element positive normal에서 파생; nodal/resultant/equilibrium output은 global Cartesian |
| units | Pressure `force/length^2`; nodal force `force`; nodal moment `force*length`; translation `length`; rotation dimensionless (radian convention) |
| linear configuration | Reference nodal coordinates와 reference surface area/normal |
| nonlinear configuration | Accepted/trial current coordinates `X+u`, current area/normal, current-surface follower direction |
## 6. Normative Requirements
```yaml
id: FESA-REQ-SHELL-PRESSURE-001
statement: "The FESA solver shall accept the approved case-insensitive sequence *SURFACE, TYPE=ELEMENT, NAME=<name> with SPOS or SNEG data followed by step-level *DSLOAD data <surface-name>, P, <magnitude>."
category: input
rationale: "입력 노출 범위를 surface-based pressure로 한정하고 *DLOAD와 구분한다."
source: user
priority: must
verification_method: test
acceptance_criteria: "S4와 S4R의 최소 valid input이 각각 syntax와 semantic mapping을 통과하고, surface name, side, source location, DSLOAD source order와 magnitude가 loss 없이 보존된다."
tolerance: "Keyword/label/type/cardinality exact; numerical tolerance N/A because this is a discrete input contract."
trace_to:
parent_need: "Approved surface-based uniform pressure input"
downstream_agents: ["I/O Definition Agent", "Implementation Planning Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-002
statement: "The FESA solver shall represent each approved DSLOAD P entry as one uniform finite scalar pressure with model-consistent force-per-area units."
category: input
rationale: "Magnitude 의미와 단위를 formulation 및 비교 전에 고정한다."
source: standard
priority: must
verification_method: test
acceptance_criteria: "Positive, exact-zero, and negative finite magnitudes are preserved exactly once as scalar load data; NaN and infinity are rejected before analysis."
tolerance: "Parsed finite double value exact; pressure dimension force/length^2 exact."
trace_to:
parent_need: "Uniform pressure magnitude"
downstream_agents: ["Research Agent", "I/O Definition Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-003
statement: "The FESA solver shall resolve a named element surface to a unique deterministic ordered list of source instance, source element label, and selected side identities."
category: functional
rationale: "Source surface와 internal index의 혼동 및 불안정한 조립을 방지한다."
source: docs
priority: must
verification_method: test
acceptance_criteria: "Direct element and ELSET-backed entries resolve to the same stable identity inventory; repeated execution produces byte-identical identity and order evidence."
tolerance: "Identity, membership, multiplicity, and order exact."
trace_to:
parent_need: "Stable semantic target resolution"
downstream_agents: ["I/O Definition Agent", "Implementation Planning Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-004
statement: "The FESA solver shall support only S4 and S4R four-node shell members on SPOS or SNEG within an approved pressure surface while preserving each source element type and label."
category: constraint
rationale: "승인된 element/face matrix를 명시하고 S4/S4R source identity를 보존한다."
source: user
priority: must
verification_method: test
acceptance_criteria: "S4 and S4R valid cases pass; every other element type or face token in the surface fails closed; S4/S4R source types remain distinguishable in model/output identity."
tolerance: "Supported inventory and source identity exact."
trace_to:
parent_need: "Bounded shell pressure scope"
downstream_agents: ["Research Agent", "I/O Definition Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-005
statement: "The FESA solver shall apply positive DSLOAD P opposite the selected surface normal and shall reverse that load direction for a negative magnitude."
category: physics
rationale: "Pressure sign을 selected surface normal과 명확히 연결한다."
source: standard
priority: must
verification_method: analysis
acceptance_criteria: "A flat one-element test demonstrates positive and negative equal-magnitude resultants that are equal and opposite; no magnitude absolute-value conversion or direction clamp occurs."
tolerance: "Direction sign exact; resultant comparison uses a Numerical Review-approved scale-aware analytical tolerance in force units."
trace_to:
parent_need: "Abaqus-aligned pressure sign"
downstream_agents: ["Research Agent", "Formulation Agent", "Numerical Review Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-006
statement: "The FESA solver shall derive the SPOS normal from source connectivity and shall use its inverse for SNEG before applying the pressure sign rule."
category: physics
rationale: "SPOS/SNEG와 connectivity normal 관계를 고정한다."
source: standard
priority: must
verification_method: test
acceptance_criteria: "For unchanged connectivity, switching SPOS to SNEG reverses every pressure resultant component; reversing connectivity changes the positive normal consistently without changing stable source identity."
tolerance: "Normal/side orientation sign exact; finite vector comparison uses Numerical Review-approved geometry tolerance."
trace_to:
parent_need: "Deterministic surface-side semantics"
downstream_agents: ["Research Agent", "Formulation Agent", "Numerical Review Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-007
statement: "The FESA solver shall evaluate linear-static surface pressure from the reference configuration."
category: physics
rationale: "선형 load가 displacement에 따라 회전하거나 면적이 변하지 않도록 한다."
source: user
priority: must
verification_method: analysis
acceptance_criteria: "A linear flat and distorted patch produces the reference-area/reference-normal resultant and remains independent of any candidate displacement supplied only for test instrumentation."
tolerance: "Global force units and reference coordinates required; Numerical Review approves the scale-aware analytical tolerance before implementation."
trace_to:
parent_need: "Reference-configuration linear pressure"
downstream_agents: ["Formulation Agent", "Numerical Review Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-008
statement: "The FESA solver shall evaluate NLGEOM=YES pressure as a follower load normal to the current surface using current coordinates X+u."
category: physics
rationale: "Large rotation에서 pressure direction과 area가 current configuration을 따르도록 한다."
source: standard
priority: must
verification_method: analysis
acceptance_criteria: "Rigidly rotating a loaded patch rotates the global pressure resultant by the same rotation while preserving scalar pressure and source identity; a fixed-global CLOAD-equivalent response is rejected."
tolerance: "Global force units/current coordinates required; objectivity and resultant use Numerical Review-approved invariant tolerance."
trace_to:
parent_need: "Current-configuration follower pressure"
downstream_agents: ["Research Agent", "Formulation Agent", "Numerical Review Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-009
statement: "The FESA solver shall include the displacement derivative of the nonlinear follower pressure in the external-load contribution to the Newton tangent."
category: numerical
rationale: "Residual과 tangent의 pressure dependence를 일치시킨다."
source: standard
priority: must
verification_method: analysis
acceptance_criteria: "Directional finite-difference checks of the external pressure force against the assembled external tangent pass for nondegenerate distorted S4 and S4R patches, including SPOS/SNEG and positive/negative magnitude cases."
tolerance: "Force and force/length tangent units in global coordinates; Numerical Review fixes perturbation and norm tolerances before implementation."
trace_to:
parent_need: "Consistent external follower-load tangent"
downstream_agents: ["Formulation Agent", "Numerical Review Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-010
statement: "The FESA solver shall scale each active pressure magnitude exactly once by the analysis step load factor."
category: numerical
rationale: "Incremental nonlinear loading의 double scaling과 미적용을 방지한다."
source: derived
priority: must
verification_method: test
acceptance_criteria: "At load factors 0, 0.5, and 1.0 with fixed configuration, the external pressure resultant is respectively 0, one-half, and the full reference magnitude, with identical source membership."
tolerance: "Load-factor identity exact; force proportionality uses Numerical Review-approved roundoff tolerance."
trace_to:
parent_need: "Existing static step load lifecycle"
downstream_agents: ["Formulation Agent", "Implementation Planning Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-011
statement: "The FESA solver shall assemble all pressure contributions into the stable full-DOF external generalized load before free/constrained projection."
category: functional
rationale: "Pressure, constraint elimination, reaction과 free residual의 일관성을 보존한다."
source: docs
priority: must
verification_method: test
acceptance_criteria: "Mixed constrained/free patch tests show one full-space contribution per resolved source face, stable reduction order, correct reduced RHS participation, and no direct global sparse or shared-vector writes by parallel producers."
tolerance: "Full-DOF indices/order/cardinality exact; finite summed values required."
trace_to:
parent_need: "End-to-end load assembly"
downstream_agents: ["Formulation Agent", "Implementation Planning Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-012
statement: "The FESA solver shall include assembled pressure loads in the full residual used to distinguish constrained reactions from free-equilibrium residuals."
category: physics
rationale: "Pressure가 reaction 및 equilibrium evidence에 누락되지 않도록 한다."
source: docs
priority: must
verification_method: analysis
acceptance_criteria: "A fully constrained flat patch recovers reactions equal and opposite to the analytical pressure resultant, and mixed-constraint cases retain separate constrained reaction and free residual identities."
tolerance: "Force/force-length in global coordinates; linear analytical tolerance and nonlinear accepted-free-residual gate are fixed/confirmed by Numerical Review."
trace_to:
parent_need: "Reaction and free-equilibrium correctness"
downstream_agents: ["Numerical Review Agent", "Physics Evaluation Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-013
statement: "The FESA solver shall preserve deterministic surface resolution, pressure application, floating reduction, result-row, and diagnostic order for identical input."
category: constraint
rationale: "Thread scheduling과 container order가 observable evidence를 바꾸지 않게 한다."
source: docs
priority: must
verification_method: test
acceptance_criteria: "Repeated serial and approved parallel executions produce identical source order, sparse/load structure, result-row order, diagnostic order, and comparison verdict."
tolerance: "Discrete order and identities exact; floating reduction sequence exact."
trace_to:
parent_need: "Deterministic solver behavior"
downstream_agents: ["I/O Definition Agent", "Implementation Planning Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-014
statement: "The FESA solver shall fail closed on unsupported SURFACE or DSLOAD parameters, load labels, distributions, target kinds, surface sides, or element types."
category: input
rationale: "승인 subset 밖의 의미를 silent no-op이나 다른 load로 해석하지 않는다."
source: user
priority: must
verification_method: test
acceptance_criteria: "Each declared out-of-scope variant returns a structured non-success input/model diagnostic before analysis and produces no pressure contribution."
tolerance: "Unsupported inventory and failure category exact."
trace_to:
parent_need: "Fail-closed unsupported variants"
downstream_agents: ["I/O Definition Agent", "Implementation Planning Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-015
statement: "The FESA solver shall fail closed when a pressure surface or DSLOAD reference is missing, unresolved, ambiguous, empty, duplicated incompatibly, malformed, or inconsistent with its source scope."
category: input
rationale: "잘못된 target resolution을 평균, 추측 또는 omission으로 숨기지 않는다."
source: docs
priority: must
verification_method: test
acceptance_criteria: "Focused negative cases reject unknown names, cross-scope collisions, empty surfaces, duplicate conflicting side membership, malformed data cardinality, and unresolved instance/ELSET members with deterministic source locations."
tolerance: "Identity/cardinality/failure exact."
trace_to:
parent_need: "Valid stable surface identity"
downstream_agents: ["I/O Definition Agent", "Implementation Planning Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-016
statement: "The FESA solver shall fail closed on a pressure load used with an unapproved procedure, nonfinite intermediate contribution, or invalid current surface geometry."
category: numerical
rationale: "Invalid physics/numerics를 clamp, fallback 또는 partial result로 숨기지 않는다."
source: user
priority: must
verification_method: test
acceptance_criteria: "Unsupported procedure, nonfinite magnitude/contribution/tangent, and zero or invalid current surface measure each produce the appropriate deterministic non-success diagnostic before state/output commit."
tolerance: "Finite predicate and procedure identity exact; invalid-geometry scale criterion is fixed by Numerical Review."
trace_to:
parent_need: "Fail-closed invalid procedure and geometry"
downstream_agents: ["Numerical Review Agent", "I/O Definition Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-017
statement: "The FESA solver shall report pressure input, mapping, model, and numerical failures with stable source identity and deterministic diagnostics without publishing a failed candidate as a successful final HDF5 result."
category: output
rationale: "오류 추적성과 failure atomicity를 유지한다."
source: docs
priority: must
verification_method: test
acceptance_criteria: "Diagnostics identify file, line, keyword, surface/load identity and failure category where applicable; a failed run preserves the prior valid final output or leaves no misleading final output."
tolerance: "Diagnostic identity/order and final-file state exact."
trace_to:
parent_need: "Deterministic diagnostics and atomic failure"
downstream_agents: ["I/O Definition Agent", "Implementation Planning Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-018
statement: "The FESA solver shall retain the existing versioned HDF5 results contract as the sole authoritative output for this feature unless the Stage-5 I/O gate proves an additional contract necessary."
category: output
rationale: "Load 기능만으로 speculative pressure dataset을 추가하지 않는다."
source: user
priority: must
verification_method: inspection
acceptance_criteria: "Successful linear and nonlinear pressure runs contain the existing mandatory model, nodal, element, residual/equilibrium, metadata and diagnostic datasets appropriate to their procedure, and no CSV or new pressure-only dataset is treated as authoritative."
tolerance: "Dataset/schema identity exact; numerical tolerance N/A for authority classification."
trace_to:
parent_need: "Preserve authoritative HDF5 output"
downstream_agents: ["I/O Definition Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-019
statement: "The FESA solver shall expose pressure effects through existing nodal displacement, reaction/generalized residual, global equilibrium, and existing element result quantities with their approved units, coordinates, and stable source identities."
category: output
rationale: "Pressure correctness가 existing observable result chain에서 검증 가능해야 한다."
source: docs
priority: must
verification_method: demonstration
acceptance_criteria: "HDF5 inspection confirms global nodal [UX,UY,UZ,URX,URY,URZ], full residual/reaction meaning, factor-one nonlinear global equilibrium identity, and unchanged existing element result identities; all required values are finite."
tolerance: "Units/coordinate/component/source identity exact; quantity values use their requirement-specific analytical, internal, or external tolerance."
trace_to:
parent_need: "Observable end-to-end pressure response"
downstream_agents: ["I/O Definition Agent", "Physics Evaluation Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-020
statement: "The FESA solver shall pass analytical linear pressure checks for magnitude, sign, SPOS/SNEG reversal, negative magnitude reversal, total resultant, reaction, and mesh/order invariance."
category: verification
rationale: "Stored nonlinear reference가 직접 검증하지 않는 linear 및 sign 경계를 차단한다."
source: derived
priority: must
verification_method: analysis
acceptance_criteria: "Numerical Review approves at least one flat S4 and one S4R patch, a distorted patch, and mesh/order variants; every declared invariant passes before reference comparison."
tolerance: "Force/force-length/global coordinate analytical tolerances are scale-aware and fixed by Numerical Review; no docs/TOLERANCE.md substitution."
trace_to:
parent_need: "Independent analytical verification"
downstream_agents: ["Numerical Review Agent", "Implementation Planning Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-021
statement: "The FESA solver shall pass nonlinear pressure checks for follower objectivity, current-area/resultant behavior, external-tangent consistency, accepted free residual, and factor-one global force and moment balance."
category: verification
rationale: "Reference displacement만으로 검출하기 어려운 follower/load-tangent 공통 오류를 차단한다."
source: derived
priority: must
verification_method: analysis
acceptance_criteria: "Approved objectivity and tangent checks pass; factor-one accepted free residual passes the existing nonlinear convergence contract; global applied-plus-constrained-reaction force and moment balance, about global origin using current X+u arms and spatial physical moments, each has normalized error <=1e-8."
tolerance: "Global force/moment normalized <=1e-8; tangent/objectivity tolerances fixed by Numerical Review; units and global origin exact."
trace_to:
parent_need: "Independent nonlinear follower-pressure verification"
downstream_agents: ["Numerical Review Agent", "Physics Evaluation Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-022
statement: "The FESA solver shall use reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure.inp and reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure displacements.csv as the exact read-only required reference input and comparison CSV."
category: verification
rationale: "기존 pressure model과 실제 acceptance CSV를 최소 exact contract로 고정한다."
source: benchmark
priority: must
verification_method: reference-comparison
acceptance_criteria: "The input is read at its existing path and resolves 729 nodes, 676 S4 elements, Part-1-1, Surf-1 covering elements 1–676 on SPOS, NLGEOM=YES, and DSLOAD P=1e6; the required CSV has 729 finite factor-one node rows and remains unmodified."
tolerance: "Artifact path/name and inventory exact; Git diff shows no reference modification."
trace_to:
parent_need: "Stored nonlinear pressure reference"
downstream_agents: ["Numerical Review Agent", "Implementation Planning Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-023
statement: "The FESA solver shall compare factor-one HDF5 nodal displacement to the required CSV by deterministic source node identity and component, treating U1/U2/U3 as blocking and UR1/UR2/UR3 as warning-only."
category: verification
rationale: "Reference row order나 internal index에 의존하지 않는 observable comparison을 만든다."
source: docs
priority: must
verification_method: reference-comparison
acceptance_criteria: "CSV (Frame, Part Instance Name, Node Label, component) maps one-to-one to HDF5 (Step-1, unique accepted load_factor=1.0 frame, source instance, source node label, UX/UY/UZ/URX/URY/URZ); missing, extra, duplicate, nonfinite, wrong-frame or wrong-component required rows fail before tolerance."
tolerance: "Translation blocking family and rotation warning-only family each use docs/TOLERANCE.md; identity/component/frame prechecks exact."
trace_to:
parent_need: "Deterministic external displacement acceptance"
downstream_agents: ["Numerical Review Agent", "I/O Definition Agent"]
status: draft
```
```yaml
id: FESA-REQ-SHELL-PRESSURE-024
statement: "The FESA solver shall exclude local reaction and stress CSV values from the blocking or warning-only acceptance boundary for this feature while preserving declared internal equilibrium and existing result obligations."
category: constraint
rationale: "Review-only reaction distribution과 formulation-dependent stress를 pressure acceptance로 오인하지 않는다."
source: docs
priority: must
verification_method: inspection
acceptance_criteria: "reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure reactions.csv is inventoried only as optional review evidence; reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure stresses.csv is excluded; neither missing file nor numerical mismatch changes the feature verdict, and no comparator family is created for stress."
tolerance: "Disposition exact; internal equilibrium follows FESA-REQ-SHELL-PRESSURE-012 and -021; external numerical tolerance N/A for excluded quantities."
trace_to:
parent_need: "Minimal reference acceptance boundary"
downstream_agents: ["Numerical Review Agent", "I/O Definition Agent"]
status: draft
```
## 7. Input Requirements Summary
- Required model data: named `TYPE=ELEMENT` surface with S4/S4R `SPOS|SNEG` members.
- Required history data: step-level `*DSLOAD` with exactly surface name, `P`, finite uniform scalar.
- Keyword and enum tokens are case-insensitive; stable original label/source identity is retained.
- Surface definitions resolve before load application; ambiguity, empty membership, incompatible
duplicate membership and unsupported variants fail closed.
- `*DLOAD` is not an alias for `*DSLOAD` and remains unsupported by this feature.
## 8. Output Requirements Summary
- Authoritative result: lexical sibling `<stem>_results.h5`; nonlinear log remains the existing
procedure log, not a result substitute.
- This feature requires no new authoritative dataset. Pressure effects must be visible in existing
nodal displacement, reaction/generalized residual, global equilibrium and element result paths.
- Global nodal component order is `[UX,UY,UZ,URX,URY,URZ]`; translations use length, rotations are
dimensionless, force uses force, and physical moment uses force-length.
- Source instance/node/element labels and deterministic row order remain stable.
- CSV is only an external reference/debug view and never official solver output.
## 9. Verification Quantities
| quantity | units / coordinates / identity | acceptance role |
| --- | --- | --- |
| nodal displacement `U1/U2/U3` | length; global Cartesian; factor-one `(instance,node,component)` | external `blocking` |
| nodal rotation `UR1/UR2/UR3` | dimensionless radian convention; global components; same identity | external `warning-only` |
| constrained reaction | force/force-length; global full-DOF source node identity | internal physics/equilibrium; local CSV optional review only |
| accepted free residual | force/force-length generalized channels; stable free mask | nonlinear `blocking-internal` through existing convergence contract |
| global equilibrium | force `[3]`, force-length moment `[3]`; global origin `[0,0,0]`, current `X+u` arms | nonlinear factor-one `blocking-internal`, normalized `<=1e-8` |
| total applied pressure resultant | force and force-length about declared origin; global | analytical linear/nonlinear invariant |
| element internal force/resultant | existing MITC4 result identity, units, coordinates unchanged | preservation/physics evidence; no new external family |
| stress | existing MITC4 stress output unchanged | pressure reference comparison excluded |
| strain | existing MITC4 generalized strain output unchanged | preservation only; no feature-specific comparison |
| energy | N/A | no new authoritative energy quantity; follower behavior is checked by force/tangent/equilibrium evidence |
## 10. Tolerance Policy
External displacement/rotation comparison은 `docs/TOLERANCE.md`를 그대로 사용한다.
- Family `pressure_nodal_translation_blocking`: one model/case, Step-1 factor-one accepted frame,
length, global Cartesian, components `U1/U2/U3`, `blocking`.
- Family `pressure_nodal_rotation_warning`: same case/frame, dimensionless rotation, global
components `UR1/UR2/UR3`, `warning-only`.
- 각 family에서 reference-only `S=max(abs(reference))`, near-zero band `0.01*S`, non-near-zero
relative error `<=0.05`, family `RMS(error)/S<=0.01`을 함께 적용한다.
- 별도 absolute-error gate와 `max(1,S)`를 사용하지 않는다. `S=0`이면 FESA도 exact zero여야 한다.
- Required row의 missing, extra, duplicate, nonfinite, identity/component/frame mismatch는 tolerance
전에 실패한다.
- Internal global force/moment balance는 각각 normalized `<=1e-8`이다. Analytical patch,
geometry, objectivity와 tangent finite-difference의 구체적 scale/perturbation tolerance는
Numerical Review Agent가 기존 solver practice와 formulation scale을 사용해 구현 전에
확정한다. 이는 사용자 결정이 아니며 external family tolerance로 대체하지 않는다.
## 11. Reference Case Requirements
### Required acceptance artifacts
| role | exact path | requirement |
| --- | --- | --- |
| input | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure.inp` | required, read-only |
| blocking/warning CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure displacements.csv` | required, read-only, 729 finite factor-one rows |
Reference input inventory는 S4 676개, node 729개, instance `Part-1-1`, surface `Surf-1`,
element 1–676의 `SPOS`, `*STEP, NLGEOM=YES`, `*DSLOAD`의 `Surf-1, P, 1e+06`이다.
### HDF5 projection and matching
- FESA source: `/steps/Step-1/frames/<unique-load-factor-1.0>/nodal/displacement`, component
order `[UX,UY,UZ,URX,URY,URZ]`, source node rows from `/model/nodes`.
- CSV source: `Frame`, `Part Instance Name`, `Node Label`, `U-U1`, `U-U2`, `U-U3`,
`UR-UR1`, `UR-UR2`, `UR-UR3`.
- Match key: `(factor-one frame, case-insensitive stable source instance identity, numeric source
node label, logical component)`; value columns map `U1/U2/U3/UR1/UR2/UR3` to
`UX/UY/UZ/URX/URY/URZ`.
- Exact one-to-one inventory precheck precedes `docs/TOLERANCE.md`.
### Non-required inventory artifacts
- `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure reactions.csv`: 729-row optional
local review inventory; not a blocking/warning required CSV.
- `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure stresses.csv`: 5,408-row optional
inventory; excluded from numerical comparison.
이 기능은 canonical filename, README, metadata, provenance, Abaqus version 또는 추가 CSV를
readiness 조건으로 요구하지 않는다. 모든 reference artifact는 current exact path/name에서
read-only로 사용한다.
## 12. Requirement Verification Matrix
| id | category | source | priority | verification method | compact acceptance evidence | tolerance | intended gate / owner | status |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| `FESA-REQ-SHELL-PRESSURE-001` | input | user | must | test | valid SURFACE+DSLOAD S4/S4R mapping | discrete exact | Gate 5/6 · I/O, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-002` | input | standard | must | test | finite uniform scalar and units | parsed/dimension exact | Gate 2/5/6 · Research, I/O, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-003` | functional | docs | must | test | deterministic source surface inventory | identity/order exact | Gate 5/6 · I/O, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-004` | constraint | user | must | test | only S4/S4R and SPOS/SNEG | inventory exact | Gate 2/5/6 · Research, I/O, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-005` | physics | standard | must | analysis | positive/negative direction reversal | sign exact; analytical scale-aware | Gate 2–4/6 · Research, Formulation, Numerical Review, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-006` | physics | standard | must | test | connectivity/SPOS/SNEG reversal | sign exact; geometry tolerance downstream | Gate 2–4/6 · Research, Formulation, Numerical Review, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-007` | physics | user | must | analysis | linear reference-area/normal invariant | analytical tolerance downstream | Gate 3/4/6 · Formulation, Numerical Review, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-008` | physics | standard | must | analysis | current-surface follower objectivity | invariant tolerance downstream | Gate 2–4/6 · Research, Formulation, Numerical Review, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-009` | numerical | standard | must | analysis | external tangent finite difference | norm/perturbation downstream | Gate 3/4/6 · Formulation, Numerical Review, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-010` | numerical | derived | must | test | exact-once load-factor scaling | factor exact; roundoff downstream | Gate 3/6 · Formulation, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-011` | functional | docs | must | test | stable full-DOF assembly/projection | index/order exact | Gate 3/6 · Formulation, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-012` | physics | docs | must | analysis | reactions and free residual include pressure | internal tolerance downstream | Gate 4/6/7 · Numerical Review, Implementation, Physics | draft |
| `FESA-REQ-SHELL-PRESSURE-013` | constraint | docs | must | test | repeated serial/parallel deterministic evidence | discrete/reduction exact | Gate 5/6 · I/O, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-014` | input | user | must | test | unsupported variant fail-closed | failure exact | Gate 5/6 · I/O, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-015` | input | docs | must | test | invalid/unresolved/ambiguous surface fail | identity/failure exact | Gate 5/6 · I/O, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-016` | numerical | user | must | test | invalid procedure/nonfinite/geometry fail | finite/procedure exact; geometry downstream | Gate 4–6 · Numerical Review, I/O, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-017` | output | docs | must | test | deterministic diagnostic and atomic failure | identity/file-state exact | Gate 5/6 · I/O, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-018` | output | user | must | inspection | existing HDF5 remains sole authority | schema/authority exact | Gate 5/6 · I/O, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-019` | output | docs | must | demonstration | existing observable result chain finite | units/coords/id exact | Gate 5–7 · I/O, Implementation, Physics | draft |
| `FESA-REQ-SHELL-PRESSURE-020` | verification | derived | must | analysis | S4/S4R linear patch/sign/resultant suite | analytical tolerance downstream | Gate 4/6 · Numerical Review, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-021` | verification | derived | must | analysis | nonlinear objectivity/tangent/residual/balance | global balance `<=1e-8`; others downstream | Gate 4/6/7 · Numerical Review, Implementation, Physics | draft |
| `FESA-REQ-SHELL-PRESSURE-022` | verification | benchmark | must | reference-comparison | exact input/required CSV inventory read-only | path/inventory exact | Gate 4/6 · Numerical Review, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-023` | verification | docs | must | reference-comparison | one-to-one U blocking/UR warning mapping | `docs/TOLERANCE.md`; precheck exact | Gate 4–6 · Numerical Review, I/O, Implementation | draft |
| `FESA-REQ-SHELL-PRESSURE-024` | constraint | docs | must | inspection | reaction review-only, stress excluded | disposition exact | Gate 4–6 · Numerical Review, I/O, Implementation | draft |
Matrix coverage: normative IDs `24`, matrix rows `24`, orphan normative IDs `0`, matrix-only IDs `0`.
## 13. Open Questions, Assumptions, and Risks
### Critical user decisions
없음. 승인된 physics, supported scope, external tolerance, authoritative output과 reference
acceptance boundary를 바꾸는 미결정 사항이 없다.
### Downstream specialist decisions (사용자 질문 아님)
- Formulation Agent: surface quadrature, equivalent nodal vector와 follower-load linearization을
독립 FESA formulation으로 고정한다.
- Numerical Review Agent: analytical patch, degenerate/current geometry, objectivity 및 tangent
finite-difference의 scale-aware tolerance와 perturbation을 고정하고, exact reference artifact
readiness와 internal gate를 재확인한다.
- I/O Definition Agent: 승인 syntax/semantic mapping, diagnostic representation과 existing HDF5
projection을 최종 확정한다. 새 authoritative output이 필요하다는 evidence가 없으면 추가하지 않는다.
### Assumptions and risks
- ASSUMPTION-001: S4와 S4R은 기존 FESA MITC4 formulation을 선택하되 source type은 보존한다.
- ASSUMPTION-002: Zero pressure는 valid no-load scalar이며 surface/model validation을 우회하지 않는다.
- RISK-001: Conventional shell의 element-based `*DLOAD P` sign과 surface-based `*DSLOAD P`
sign을 혼합하면 방향 오류가 생긴다. 이 기능은 후자만 지원한다.
- RISK-002: Follower pressure를 fixed-global nodal load로 근사하면 large rotation과 external
tangent가 틀린다.
- RISK-003: Reference displacement만 맞추고 global equilibrium/tangent를 생략하면 공통-mode
오류를 놓칠 수 있다.
## 14. Downstream Handoff
- Research Agent: Abaqus pressure sign/follower evidence, shell-normal convention과 독립 FESA
pressure verification sources의 applicability limit를 조사한다. Abaqus 내부 동등성을
주장하지 않는다.
- Formulation Agent: `FESA-REQ-SHELL-PRESSURE-005`–`012`, `020`–`021`을 구현 가능한
pressure virtual-work, load vector 및 external tangent 계약으로 변환한다.
- Numerical Review Agent: exact input/displacement artifact, source identity/component/family,
common external tolerance와 internal analytical/tangent/equilibrium tolerance를 검토한다.
Reaction CSV는 review-only, stress CSV는 excluded로 유지한다.
- I/O Definition Agent: `*SURFACE`/`*DSLOAD` subset, fail-closed diagnostics, stable semantic target,
existing HDF5 projection과 CSV row mapping을 정의한다.
- Coordinator Agent: 이 문서의 Gate 1 evidence를 검토한 뒤에만 다음 owner를 dispatch한다.
Stage 1 경계에서 code, formulation, C++ API, reference artifact 또는 tolerance policy는 변경하지
않았다.
@@ -1,231 +0,0 @@
# Shell Surface Pressure Load Research Brief
## 1. Metadata
- feature_id: `shell-surface-pressure-load`
- source_requirement: `docs/shell-surface-pressure-load/requirements.md`
- requirement_range: `FESA-REQ-SHELL-PRESSURE-001`–`FESA-REQ-SHELL-PRESSURE-024`
- status: `draft-for-coordinator-gate-review`
- owner_agent: `research-agent`
- date: `2026-08-30`
- research_scope: `*SURFACE, TYPE=ELEMENT` + `*DSLOAD` uniform `P` on S4/S4R `SPOS|SNEG`, linear reference-configuration pressure, nonlinear current-configuration follower pressure와 external-load tangent
- source_policy: Project contract와 stored artifact가 범위/acceptance를 지배하며, Abaqus 문서는 observable input/behavior만, FEM 문헌은 formulation-neutral theory와 verification risk만 뒷받침한다.
- non_equivalence_statement: 이 문서는 Abaqus의 내부 shell formulation, pressure quadrature, stabilization, load-vector 또는 tangent 구현과 FESA의 동등성을 주장하지 않는다.
## 2. Research Questions
| id | 질문 | binding requirements |
| --- | --- | --- |
| `RQ-01` | 승인 syntax에서 element-based named surface와 `DSLOAD P`의 정확한 observable 의미는 무엇인가? | `001`–`004`, `014`–`015` |
| `RQ-02` | S4/S4R shell connectivity, `SPOS/SNEG`, selected surface normal과 pressure 부호는 어떻게 연결되는가? | `004`–`006`, `020` |
| `RQ-03` | Uniform pressure의 단위, 총 resultant와 work-equivalent nodal generalized force를 뒷받침하는 일반 FEM 원리는 무엇인가? | `002`, `007`, `011`–`012`, `020` |
| `RQ-04` | 선형 reference-configuration pressure와 기하비선형 current-configuration follower pressure를 어떤 evidence로 구분하는가? | `007`–`008`, `021` |
| `RQ-05` | Configuration-dependent pressure force가 Newton tangent에 기여하는 이유와 symmetry 위험은 무엇인가? | `009`, `016`, `021` |
| `RQ-06` | S4/S4R load verification에서 Abaqus element 특성과 generic surface-load theory의 적용 한계는 무엇인가? | `004`, `008`–`009`, `020`–`021` |
| `RQ-07` | 어떤 독립/저결합 benchmark 조합이 sign, resultant, objectivity, tangent, equilibrium, determinism과 stored reference를 각각 검증하는가? | `012`–`013`, `016`, `020`–`024` |
| `RQ-08` | Exact stored nonlinear case가 직접 증명하는 것과 증명하지 못하는 것은 무엇인가? | `022`–`024` |
## 3. Source Inventory
### 3.1 Project and stored evidence
| source_id | source_type | title | author_or_org | URL_or_path | access_date | reliability_tier | primary_or_secondary | notes / limits |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| `SRC-PRJ-REQ` | approved feature baseline | Shell Surface Pressure Load Feature Requirement Specification | FESA Requirement Agent / Coordinator | `docs/shell-surface-pressure-load/requirements.md` | 2026-08-30 | `Project Primary` | primary | 범위, acceptance, tolerance disposition의 binding source. 이 연구가 변경하지 않는다. |
| `SRC-PRJ-CONTRACT` | project contracts | `AGENTS.md`, `PRD.md`, `ARCHITECTURE.md`, `ADR.md`, `TOLERANCE.md`, `SOLVER_AGENT_DESIGN.md` | FESA project | repository paths | 2026-08-30 | `Project Primary` | primary | Independent solver, deterministic full-space load/reaction, unsymmetric nonlinear solver capability, HDF5 authority와 common external tolerance를 고정한다. |
| `SRC-LOCAL-REF` | stored reference bundle | `shellNL-meshfine-pressure` | FESA project / existing Abaqus export | `reference/shellNL-meshfine-pressure/` | 2026-08-30 | `Stored Reference` | primary artifact | `.inp`와 CSV가 target/input 값을 제공하지만 formulation derivation이나 Abaqus version/provenance는 제공하지 않는다. Read-only. |
### 3.2 Tier 1 authoritative manuals
모든 공식 문서 URL은 Dassault Systèmes SIMULIA Abaqus 2025 online documentation이며 access date는 `2026-08-30`이다.
| source_id | source_type | exact title / section | author_or_org | URL | reliability_tier | primary_or_secondary | evidence supplied | limitation |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| `SRC-ABA-DSLOAD` | official keyword manual | `*DSLOAD` | Dassault Systèmes SIMULIA | https://docs.software.vt.edu/abaqusv2025/English/SIMACAEKEYRefMap/simakey-r-dsload.htm | `Tier 1` | primary | Step-level history data; pressure data line is surface name, `P`, reference magnitude. | Abaqus syntax 전체가 넓으며 FESA allowlist/fail-closed 세부는 `SRC-PRJ-REQ`가 지배한다. |
| `SRC-ABA-SURFACE-KEY` | official keyword manual | `*SURFACE` | Dassault Systèmes SIMULIA | https://docs.software.vt.edu/abaqusv2025/English/SIMACAEKEYRefMap/simakey-r-surface.htm | `Tier 1` | primary | `NAME`, `TYPE=ELEMENT`, element/ELSET와 face identifier data 형식. | 허용 가능한 전체 surface type을 설명하므로 FESA 승인 subset과 동일하지 않다. |
| `SRC-ABA-ELEM-SURFACE` | official modeling manual | Element-Based Surface Definition, especially “Creating Surfaces on Structural, Surface, and Rigid Elements” | Dassault Systèmes SIMULIA | https://docs.software.vt.edu/abaqusv2025/English/SIMACAEMODRefMap/simamod-c-deformablesurf.htm | `Tier 1` | primary | S4 계열의 `SPOS/SNEG`, single-sided surface, orientation consistency와 distributed-load orientation risk. | Contact 등 다른 surface consumer도 포함한다. FESA는 single-sided pressure subset만 승인한다. |
| `SRC-ABA-DISTLOAD` | official analysis manual | Distributed Loads, “Surface Tractions and Pressure Loads” and “Follower Surface Loads” | Dassault Systèmes SIMULIA | https://docs.software.vt.edu/abaqusv2025/English/SIMACAEPRCRefMap/simaprc-c-loaddistributed.htm | `Tier 1` | primary | Surface pressure 단위 `force/area`, `DSLOAD surface,P,magnitude`, 양의 pressure는 surface normal 반대, nonlinear follower/current-surface behavior, `DLOAD`와 `DSLOAD` 구분. | 많은 load type/procedure를 다루므로 feature allowlist의 근거가 아니라 observable convention 근거다. |
| `SRC-ABA-SHELL-NORMAL` | official element guide | Shell normals and shell surfaces | Dassault Systèmes SIMULIA | https://docs.software.vt.edu/abaqusv2025/English/SIMACAEGSARefMap/simagsa-c-shlnormal.htm | `Tier 1` | primary | 3-D shell positive normal은 connectivity node order의 right-hand rule, top=`SPOS`, bottom=`SNEG`; element-based와 surface-based pressure sign 차이 경고. | Abaqus element-based `DLOAD` sign은 이 feature의 `DSLOAD` sign이 아니다. |
| `SRC-ABA-SHELL-CHOICE` | official element guide | Choosing a Shell Element | Dassault Systèmes SIMULIA | https://docs.software.vt.edu/abaqusv2025/English/SIMACAEELMRefMap/simaelm-c-shellelem.htm | `Tier 1` | primary | S4/S4R은 4-node general-purpose finite-membrane-strain shell; large rotation capability; S4 full, S4R reduced integration 및 hourglass risk. | Abaqus element internal formulation 차이는 FESA pressure kernel 또는 quadrature 선택 근거가 아니다. |
| `SRC-ABA-PRESSURE-THEORY` | official theory manual | Pressure load stiffness | Dassault Systèmes SIMULIA | https://docs.software.vt.edu/abaqusv2025/English/SIMACAETHERefMap/simathe-c-pressloadsolids.htm | `Tier 1` | primary | Current surface virtual work, current area-vector representation, displacement-dependent equivalent nodal load와 Jacobian contribution. | 3-D solid surface derivation이다. Generic surface kinematics evidence로만 사용하며 S4/S4R 구현 동등성을 뜻하지 않는다. |
| `SRC-ABA-SHELL-PRESSURE` | official theory manual | Shear flexible small-strain shell elements, “Pressure load stiffness” | Dassault Systèmes SIMULIA | https://docs.software.vt.edu/abaqusv2025/English/SIMACAETHERefMap/simathe-c-shearflexshells.htm | `Tier 1` | primary | Shell surface virtual work와 load stiffness, uniform magnitude/free-edge 가정 아래 symmetric form을 설명한다. | 대상이 S4R5/S8R5/S9R5/S8R 등 small-strain shell이며 S4/S4R이 아니다. FESA tangent symmetry나 algorithm 선택 근거로 사용할 수 없다. |
### 3.3 Tier 2 theory sources and Tier 3 navigation
| source_id | source_type | title | author_or_org | URL_or_DOI_or_ISBN | access_date | reliability_tier | primary_or_secondary | notes / access limits |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| `SRC-FEM-HIBBITT79` | peer-reviewed short communication | Some Follower Forces and Load Stiffness, *International Journal for Numerical Methods in Engineering* 14(6), 937–941 (1979) | H. D. Hibbitt | https://doi.org/10.1002/nme.1620140613 | 2026-08-30 | `Tier 2` | primary | Follower forces depend on displacement and contribute load stiffness needed by Newton/eigenvalue methods. Publisher metadata/abstract accessible; full text may require subscription. |
| `SRC-FEM-SR84` | peer-reviewed paper | Displacement Dependent Pressure Loads in Nonlinear Finite Element Analyses, *Computers & Structures* 18(6), 1099–1114 (1984) | K. Schweizerhof, E. Ramm | https://doi.org/10.1016/0045-7949(84)90154-8 | 2026-08-30 | `Tier 2` | primary | Body-/space-attached classification, conservativeness conditions, curved-surface pressure load stiffness와 numerical examples. Publisher full text is access-limited; abstract/metadata used. |
| `SRC-FEM-LOGAN` | textbook, stored project reference | A First Course in the Finite Element Method, 4th ed., Sections 3.10, 6.2–6.3, Appendix E | Daryl L. Logan; Nelson/Thomson | ISBN `0-534-55298-6`; vault source `.raw/AFirstCourseInTheFiniteElementMethod/` | 2026-08-30 | `Tier 2` | secondary textbook | 동일 interpolation/work statement로 distributed traction을 consistent nodal force로 바꾸며 resultant/reaction 검증을 연결한다. Copyrighted local reference; 장문 인용하지 않는다. |
| `SRC-VAULT-SYNTH` | configured wiki synthesis | `[[Finite Element Load Vector Assembly]]`, `[[Nonlinear Finite Element Analysis]]`, `[[Abaqus Surface and Assembly Modeling]]`, `[[Basic Shell Mathematical Model]]`, `[[Abaqus Loads and Predefined Fields]]` | MultiPhysicsVault | `C:/git/MultiPhysicsVault/wiki/` | 2026-08-30 | `Tier 3` | secondary navigation | Source discovery와 terminology routing에만 사용했다. Core claims는 위 official/publisher/project sources로 재검증했다. Follower-pressure tangent의 S4/S4R-specific coverage는 vault gap이다. |
Source count: `Project Primary/Stored Reference 3`, public `Tier 1 8`, `Tier 2 3`, vault `Tier 3 1`. Tier 1은 모두 official manual, Tier 2는 peer-reviewed primary 2건과 textbook 1건이다.
## 4. Extracted Facts and Key-Claim Evidence
### 4.1 Key-claim evidence table
| claim_id | verified fact / inference | evidence | direct applicability | limitation | requirement trace |
| --- | --- | --- | --- | --- | --- |
| `CL-01` | **Verified fact:** `*SURFACE`는 named model region이고 `TYPE=ELEMENT` data line은 element/ELSET와 face identifier를 받는다. `*DSLOAD`는 step history data이고 pressure line은 surface name, `P`, magnitude다. | `SRC-ABA-SURFACE-KEY`, `SRC-ABA-DSLOAD` | 승인 syntax와 model/history 분리 | FESA가 지원할 optional parameters는 requirements allowlist가 제한한다. | `001`, `003`, `014`, `015` |
| `CL-02` | **Verified fact:** S4 계열 structural surface는 `SPOS`와 `SNEG` single-sided face를 가진다. Double-sided/edge surface는 oriented distributed surface load와 다른 범주다. | `SRC-ABA-ELEM-SURFACE` | S4/S4R selected-side target | Abaqus가 지원하는 다른 structural element/surface type은 FESA scope가 아니다. | `004`, `006`, `014` |
| `CL-03` | **Verified fact:** 3-D shell positive normal은 connectivity node order의 right-hand rule이며 `SPOS`는 positive side, `SNEG`는 negative side다. | `SRC-ABA-SHELL-NORMAL`, `SRC-ABA-ELEM-SURFACE` | Connectivity/side reversal tests | Adjacent normals가 inconsistent하면 oriented surface load가 부정확할 수 있다; diagnostic 정책은 후속 I/O/Numerical Review 소유다. | `005`, `006`, `015` |
| `CL-04` | **Verified fact:** Surface-based positive pressure는 local selected surface normal의 반대 방향이고 단위는 force/area다. **Binding inference:** scalar magnitude의 부호를 반전하면 force direction도 반전한다; magnitude absolute-value 처리는 허용되지 않는다. | `SRC-ABA-DISTLOAD`, `SRC-PRJ-REQ` | `DSLOAD P` sign/magnitude contract | Abaqus shell element-based `DLOAD P`는 다른 sign convention이므로 근거로 혼합하면 안 된다. | `002`, `005`, `020` |
| `CL-05` | **Verified fact:** `DLOAD`는 element/ELSET + element-face label 방식이고 `DSLOAD`는 named surface + `P` 방식이다. | `SRC-ABA-DISTLOAD`, `SRC-ABA-DSLOAD` | `*DLOAD` fail-closed exclusion | Abaqus 전체 capability가 아니라 FESA subset의 명시적 구분이다. | `001`, `014` |
| `CL-06` | **Verified fact:** Distributed surface traction은 interpolation/work-equivalence를 통해 compatible nodal terms로 변환된다. Consistent load는 원 distributed load와 같은 virtual work를 수행해야 한다. | `SRC-FEM-LOGAN`, `SRC-VAULT-SYNTH` | Pressure generalized force와 total resultant/reaction check의 이론적 근거 | 이 사실만으로 quadrature order, drilling moment 또는 FESA element API는 결정되지 않는다. | `007`, `011`, `012`, `020` |
| `CL-07` | **Binding fact:** Linear static pressure는 reference coordinates, reference area/normal에서 평가한다. **Theory consistency:** geometrically linear kinematics에서는 load geometry가 displacement로 갱신되지 않는다. | `SRC-PRJ-REQ`; nonlinear contrast `SRC-ABA-DISTLOAD`, `SRC-ABA-PRESSURE-THEORY` | Linear patch expectation | Abaqus와 동일 quadrature를 뜻하지 않는다. | `007`, `020` |
| `CL-08` | **Verified fact:** Geometrically nonlinear follower surface load는 surface와 함께 회전한다. Pressure normal과 area measure는 current surface에 의존한다. | `SRC-ABA-DISTLOAD`, `SRC-ABA-PRESSURE-THEORY`, `SRC-FEM-HIBBITT79` | Rigid-rotation objectivity/current-area checks | Material/element internal response와 독립적으로 load kernel을 먼저 검증해야 한다. | `008`, `021` |
| `CL-09` | **Verified fact:** Current coordinates로 정의된 pressure virtual work를 nodal displacement에 대해 선형화하면 external load/Jacobian contribution이 생긴다. | `SRC-ABA-PRESSURE-THEORY`, `SRC-FEM-HIBBITT79`, `SRC-FEM-SR84` | Directional finite-difference tangent check | FESA residual sign, matrix assembly sign과 exact discrete expression은 Formulation Agent가 정한다. | `009`, `021` |
| `CL-10` | **Verified fact with disagreement boundary:** Pressure follower load가 자동으로 nonconservative/nonsymmetric인 것은 아니다. Conservativeness와 symmetry는 load attachment, loaded boundary/free-edge treatment와 global assembly 조건에 의존한다. Abaqus small-strain shell page는 uniform pressure/free-edge effects neglect 조건의 symmetric form을 기술한다. | `SRC-FEM-SR84`, `SRC-ABA-SHELL-PRESSURE` | Unsymmetric capability를 유지하고 symmetry를 검증 대상으로 삼을 이유 | `SRC-ABA-SHELL-PRESSURE`는 S4/S4R 대상이 아니므로 FESA에서 tangent를 강제 symmetrize할 근거가 아니다. | `009`, `016`, `021` |
| `CL-11` | **Verified fact:** S4/S4R은 four-node general-purpose finite-membrane-strain shells이며 large rotation에 사용 가능하다. S4와 S4R의 Abaqus internal integration/hourglass 차이는 존재한다. | `SRC-ABA-SHELL-CHOICE` | Source-type coverage와 두 source type 모두의 test 필요성 | FESA는 두 source type을 existing MITC4로 매핑한다. Abaqus 내부 element equivalence를 주장하지 않는다. | `004`, `020`, `021` |
| `CL-12` | **Inference from surface measure:** Surface tangent cross product/area vector가 영 또는 비유한이면 unit normal과 pressure direction은 유효하지 않다. Scale-aware invalid-geometry 기준이 필요하다. | `SRC-ABA-PRESSURE-THEORY`; `SRC-PRJ-REQ` | Degenerate/current geometry fail-closed test | Exact threshold는 이 연구가 정하지 않으며 Numerical Review가 승인한다. | `016` |
| `CL-13` | **Verified local fact:** Stored input은 `S4` 676개, node 729개, instance `Part-1-1`, `Surf-1` element 1–676 `SPOS`, `NLGEOM=YES`, `DSLOAD Surf-1,P,1e+06`이다. Required displacement CSV는 factor-one 729 node rows와 six components를 가진다. | `SRC-LOCAL-REF`, `SRC-PRJ-REQ` | Exact end-to-end nonlinear reference candidate | S4R/SNEG/negative pressure/tangent를 직접 분리 검증하지 않는다. | `022`, `023` |
| `CL-14` | **Binding project fact:** Stored displacement `U1/U2/U3`는 blocking, `UR1/UR2/UR3`는 warning-only다. Reaction CSV는 review-only이고 stress CSV는 excluded다. | `SRC-PRJ-REQ`, `SRC-PRJ-CONTRACT`, `SRC-LOCAL-REF` | Reference acceptance boundary | Research가 새 family/tolerance를 만들지 않는다. | `023`, `024` |
| `CL-15` | **Binding project fact:** HDF5가 authoritative output이며 external comparison은 stable source identity/component one-to-one precheck 뒤 `docs/TOLERANCE.md`를 사용한다. | `SRC-PRJ-CONTRACT`, `SRC-PRJ-REQ` | Downstream reference-model/I/O handoff | Analytical/objectivity/tangent tolerance는 external common tolerance로 대체하지 않는다. | `018`, `019`, `023` |
### 4.2 Observable Abaqus contract versus FESA-owned formulation
| observable contract backed by Abaqus sources | FESA-owned decision left downstream |
| --- | --- |
| `SURFACE, TYPE=ELEMENT, NAME=...`와 element/ELSET + `SPOS/SNEG`; `DSLOAD` data의 surface + `P` + magnitude | Semantic record layout, source-order retention, exact duplicate/ambiguity diagnostics |
| Shell connectivity-derived positive normal, `SPOS/SNEG` side | FESA MITC4 surface interpolation, normal/area evaluation and geometry validity scale |
| Positive surface pressure acts opposite selected surface normal; force/area units | Discrete equivalent nodal generalized-force expression, numerical integration rule |
| NLGEOM pressure is current-surface follower loading | Trial/committed state integration and exact residual sign convention |
| Configuration dependence contributes load stiffness/Jacobian | Exact external tangent expression, assembly sign, symmetry treatment |
The second column cannot be inferred from Abaqus result agreement and must be finalized independently by Formulation and Numerical Review.
## 5. Theory Summary for Formulation Handoff
### 5.1 Pressure virtual work and equivalent nodal force
Generic surface-loading theory represents external virtual work as a surface integral of virtual displacement against traction. For uniform pressure, traction direction is tied to the oriented surface normal and magnitude has force/area units. After inserting the same surface displacement interpolation used by the element, the work-equivalent nodal generalized force is obtained. This establishes three formulation invariants without selecting a final formula:
1. A rigid virtual translation must recover the total pressure resultant.
2. A rigid virtual rotation must recover the total moment about the declared origin.
3. Element-local contributions must assemble exactly once into the full generalized load before free/constrained projection.
`SRC-ABA-PRESSURE-THEORY` gives a current-surface area-vector representation and `SRC-FEM-LOGAN` gives the work-equivalence principle. The Formulation Agent still owns interpolation details, quadrature and DOF embedding.
### 5.2 Sign map
Let the connectivity-derived positive shell normal be the orientation reference. The binding observable sign map is:
| selected side | selected surface normal | positive `P` resultant direction | negative `P` direction |
| --- | --- | --- | --- |
| `SPOS` | positive shell normal | opposite positive normal | reversed |
| `SNEG` | negative shell normal | opposite negative normal | reversed |
This table is an input/behavior contract, not a finalized residual equation. Residual and tangent signs must be stated together in `formulation.md`.
### 5.3 Linear configuration
For the approved linear procedure the binding baseline freezes surface geometry at reference coordinates. Thus pressure direction and surface measure do not vary with displacement and there is no displacement derivative of the external pressure force in that procedure. Flat and distorted reference patches should recover the analytical area-vector resultant independent of any test-only candidate displacement.
### 5.4 Nonlinear current configuration and objectivity
For `NLGEOM=YES`, the load must remain normal to and integrated over the current surface. A superposed rigid rotation must rotate the global force resultant by the same rotation without changing scalar pressure or source identity. A deformation that changes surface area may change total resultant magnitude even when the scalar pressure remains constant. These two effects distinguish follower pressure from a fixed-global `CLOAD` approximation.
### 5.5 External-load linearization and symmetry risk
Because current surface position, tangent directions and oriented area depend on displacement, the external force derivative is part of a consistent Newton tangent. A directional finite-difference derivative of external force is the formulation-independent verification oracle for the assembled external tangent action.
Pressure load stiffness must not be presumed symmetric or nonsymmetric solely from the word “follower.” Literature distinguishes conservative and nonconservative cases, and the official Abaqus small-strain shell theory states extra assumptions for its symmetric form. FESA already permits an unsymmetric nonlinear tangent path; Formulation must derive the discrete operator, and Numerical Review must inspect its symmetry properties and boundary assumptions rather than imposing Abaqus's internal choice.
## 6. Candidate Benchmarks
No new artifact is created in this stage. `candidate artifact` marked `to-be-authored` means a later approved implementation plan may add a test input; it is not an existing reference target.
| benchmark_id | candidate / artifact | verifies | target quantities | applicability | cannot verify / limits | requirements |
| --- | --- | --- | --- | --- | --- | --- |
| `BM-01` | Flat single-element S4 and S4R pressure patch; `to-be-authored` | uniform magnitude, unit/sign, `SPOS/SNEG`, positive/negative/zero reversal | total applied force, constrained reaction, moment about patch centroid, source side identity | Planar nondegenerate quad; linear reference configuration; fully constrained or statically determinate support | Nonlinear follower tangent, curved geometry, displacement accuracy | `002`, `004`–`007`, `012`, `020` |
| `BM-02` | Distorted coplanar S4/S4R quad; `to-be-authored` | surface mapping/integration resultant and connectivity reversal | analytical area-vector force/moment, reaction | Convex nondegenerate distorted four-node patch, uniform pressure | Warped/nonplanar exact solution and material response | `006`–`007`, `016`, `020` |
| `BM-03` | Same flat region as one/multiple faces with shuffled declaration/member order; `to-be-authored` | mesh resultant invariance, exact-once membership, deterministic semantic/reduction order | global force/moment, reaction, stable source order, repeated-run diagnostic/order evidence | Linear uniform pressure; equivalent geometry and BC | Floating value bitwise equality is implementation/order contract, not continuum accuracy | `003`, `010`–`013`, `020` |
| `BM-04` | Planar prescribed trial geometry under rigid rotation and independent homogeneous in-plane area change; `to-be-authored` | current normal objectivity and current-area response | rotated force vector, force norm versus current planar area, source identity | Initially/currently planar nondegenerate S4/S4R patch; nonlinear load evaluation isolated from internal element force | Warped-surface vector-area behavior, full equilibrium convergence and tangent | `008`, `016`, `021` |
| `BM-05` | Directional centered finite-difference external-force check on distorted current patch; `to-be-authored` | external tangent consistency | `(f_ext(u+εq)-f_ext(u-εq))/(2ε)` versus assembled external-tangent action | Nondegenerate distorted S4 and S4R; both sides and pressure signs; perturbation remains valid | Cannot detect a common sign error if force and tangent share it; pair with `BM-01/04`. `ε` and norm tolerance remain Numerical Review decisions. | `009`, `016`, `021` |
| `BM-06` | Supported nonlinear pressure patch solved to factor one; `to-be-authored` | integration into Newton residual, convergence and global physics | accepted free residual, applied+reaction force and moment balance, load-factor scaling | Existing full-Newton procedure, linear elastic MITC4, valid supports | Does not isolate load tangent from internal tangent; pair with `BM-05`. | `010`–`012`, `019`, `021` |
| `BM-07` | Exact stored case: `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure.inp` and `... displacements.csv` | end-to-end parsing, surface resolution, nonlinear pressure response and accepted HDF5 displacement projection | `U1/U2/U3` blocking, `UR1/UR2/UR3` warning-only; exact row identity | 729-node/676-S4 model, `SPOS`, positive `P=1e6`, `NLGEOM=YES`, linear elastic shell | No S4R, SNEG, negative/zero pressure, isolated tangent, independent analytical truth or stress acceptance. Abaqus version/provenance absence is not a readiness failure. | `022`–`024` |
| `BM-08` | Focused unsupported/invalid input matrix; `to-be-authored` | fail-closed capability boundary | failure category, source location, zero contribution, output atomicity | `*DLOAD`, unsupported DSLOAD label/parameter, node/double/edge surface, wrong element, ambiguous/empty surface, nonfinite magnitude | Numerical accuracy or formulation | `014`–`017` |
### Stored artifact inventory
| role | exact artifact | observed research-stage evidence | disposition |
| --- | --- | --- | --- |
| input | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure.inp` | SHA-256 `53718ccc9b41c23fcc1b509a51d66f1347e87aca43a74f1d6cec4d2085f4b90e`; S4, `Surf-1/SPOS`, `NLGEOM=YES`, `DSLOAD P=1e+06` spot-checked | required read-only |
| displacement | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure displacements.csv` | SHA-256 `2fe53f98eac9f04779100721c3edf8049eb1dbfe733ebcbd819aeeed03b81198`; header and factor-one node rows spot-checked | required external comparison |
| reaction | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure reactions.csv` | Header contains `RF1/RF2/RF3/RM1/RM2/RM3` | optional review-only |
| stress | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure stresses.csv` | Header contains element/node/section-point `S11/S22/S33/S12` | excluded from feature numerical comparison |
## 7. Verification Relevance
| evidence class | relevant candidates | purpose | acceptance boundary |
| --- | --- | --- | --- |
| code verification | `BM-01`–`BM-05`, `BM-08` | Sign, geometry mapping, exact-once scale, current-surface force and tangent derivative를 작은 독립 oracle로 검증 | Numerical Review가 analytical/geometry/finite-difference scale-aware tolerance를 확정한다. |
| solution verification | `BM-03`, `BM-06` | Mesh/order invariance, nonlinear convergence, accepted free residual과 global balance | Requirement의 internal blocking contract; external common tolerance로 대체하지 않는다. |
| external reference comparison | `BM-07` | FESA authoritative HDF5 displacement를 existing Abaqus CSV observable과 비교 | `U` blocking, `UR` warning-only; `docs/TOLERANCE.md`; row precheck exact |
| validation | 없음 | 실제 실험/물리 시스템과의 validation은 이 numerical load feature 범위가 아니다. | Correctness를 validation으로 과장하지 않는다. |
| physics evaluation preparation | `BM-01`, `BM-04`, `BM-06` | 방향, reaction, rigid rotation, force/moment equilibrium 공통-mode 오류 탐지 | Gate 7 owner가 Implementation evidence 이후 판단한다. |
Reference displacement 단독 일치는 sign/tangent/common-mode error를 배제하지 못하므로 `BM-01`, `BM-04`, `BM-05`, `BM-06`을 대체할 수 없다.
## 8. Applicability Limits
| dimension | applicable evidence | excluded / caution |
| --- | --- | --- |
| deformation | Linear: reference geometry. Nonlinear: current geometry, large rotation and valid current surface. | Material nonlinearity, dynamics, contact, buckling perturbation은 이 feature 범위 밖이다. |
| element | FESA source types S4/S4R mapped to existing MITC4; four-node shell surface. | S3/S8, continuum shell, membrane, solid, beam/pipe, Abaqus internal S4/S4R formulation equivalence 없음. |
| material/section | Existing linear isotropic elastic shell material/section. | Hyperelastic, plastic, composite, thickness/offset pressure correction 없음. |
| load | Uniform finite scalar `DSLOAD P`; positive/zero/negative; single-sided `SPOS/SNEG`. | `DLOAD`, `PNU`, `HP`, `VP`, `SP`, `TRVEC`, `TRSHR`, amplitude/user distributions, double/edge/node surfaces 제외. |
| geometry | Nondegenerate oriented four-node surface; flat/distorted patches and stored curved/deformed response. | Self-intersection, zero/near-zero current area, inconsistent normals require fail-closed criteria; threshold downstream. |
| coordinates | Surface orientation from source connectivity; assembled quantities and balance in global Cartesian; nonlinear moments use current `X+u` arms. | Local shell stress/result conventions are not new pressure acceptance quantities. |
| units | Pressure `force/length²`, nodal force `force`, physical moment `force·length`, displacement `length`, rotation dimensionless. | No implicit SI assumption; model-consistent unit system required. |
| solver behavior | Linear static and approved full-Newton nonlinear static; unsymmetric tangent capability retained. | This research does not choose symmetric tangent, quadrature or solver backend. |
| reference | Exact stored S4 positive-SPOS nonlinear case; current filenames/paths. | Reaction distribution review-only, stress excluded, no S4R or sign reversal evidence. |
## 9. Requirement Traceability
| requirement IDs | research disposition | evidence / gap |
| --- | --- | --- |
| `001`–`002` | covered | `CL-01`, `CL-04`; official keyword/load units plus binding subset |
| `003` | project-contract only; benchmark supplied | `BM-03`; external literature does not define FESA deterministic identity order |
| `004`–`006` | covered | `CL-02`–`CL-04`, `CL-11`; S4/S4R and side/sign evidence |
| `007`–`009` | covered for formulation handoff | `CL-06`–`CL-10`; exact discrete formulation remains Gate 3 |
| `010`–`013` | project-contract plus verification candidates | `BM-03`, `BM-06`; no external tolerance invented |
| `014`–`017` | boundary covered; diagnostics downstream | official distinction plus `BM-08`; exact failure categories/I/O representation remain Gate 5 |
| `018`–`019` | project-contract only | `CL-15`; research found no need for new authoritative output |
| `020`–`021` | covered with bounded benchmark portfolio | `BM-01`–`BM-06`; perturbation/geometry/objectivity tolerance remains Numerical Review |
| `022`–`024` | covered | `CL-13`–`CL-15`, `BM-07`, exact artifact inventory |
Traceability gaps: normative requirement IDs `0`. Downstream-owned numerical detail gaps are listed below and are not silent research gaps.
## 10. Open Issues and Source Disagreements
| issue_id | classification | evidence / search performed | owner / disposition |
| --- | --- | --- | --- |
| `OI-01` | missing public benchmark evidence, nonblocking | Abaqus 2025 Verification/Benchmark Guide searches for S4/S4R + `DSLOAD`/follower/pressure stiffness did not locate a directly applicable case with downloadable target values. Available shell verification hits concerned curvature/contact/submodeling, not this load contract. | Numerical Review uses analytical patches plus exact stored case; no invented public target. |
| `OI-02` | formulation choice, nonblocking | Generic/current-surface linearization can yield nonsymmetric contributions; conservative/global boundary conditions may restore symmetry; Abaqus small-strain shell manual documents a symmetric form under uniform/free-edge assumptions. | Formulation derives FESA operator. Numerical Review examines symmetry/free-edge implications. No user decision unless approved physics/scope changes. |
| `OI-03` | numerical acceptance detail, nonblocking | Sources establish area-vector degeneracy and tangent derivative but not a FESA scale-aware invalid-geometry threshold, finite-difference perturbation or norm tolerance. | Numerical Review fixes these before implementation. |
| `OI-04` | implementation detail, nonblocking | Sources support work equivalence but do not choose FESA quadrature or S4/S4R-specific load integration. | Formulation owns quadrature and discrete consistency; no Abaqus internal equivalence claim. |
| `OI-05` | reference limitation, accepted | Stored bundle contains no Abaqus version/provenance. Requirements/project contracts explicitly state these are not readiness conditions. | Preserve exact artifacts read-only; do not escalate or create metadata. |
Critical user question: 없음. 승인 scope, physics, tolerance, authoritative output 또는 reference acceptance를 변경해야 하는 source conflict는 발견되지 않았다.
## 11. Downstream Handoff
### 11.1 To Formulation Agent through Coordinator
- Use `CL-03`–`CL-10` as the evidence boundary for connectivity/side sign, work-equivalent surface force, reference/current configuration and external-load linearization.
- State pressure force and residual signs together; do not import element-based `DLOAD` shell sign.
- Derive FESA's own interpolation, numerical integration and tangent. Do not cite Abaqus result agreement as internal equivalence.
- Resolve `OI-02` and `OI-04`: discrete tangent symmetry/free-edge assumptions, quadrature and generalized DOF embedding.
- Preserve full-space assembly, exact-once load-factor scaling and existing reaction/free-residual meaning from the binding requirements.
### 11.2 To Numerical Review Agent through Coordinator
- Review `BM-01`–`BM-06` as the minimum independent suite before relying on `BM-07`.
- Fix scale-aware tolerances for analytical area/resultant, geometry validity, rigid-rotation objectivity and directional finite-difference tangent; do not substitute `docs/TOLERANCE.md` for these internal checks.
- Keep exact stored paths and disposition: displacement `U` blocking, `UR` warning-only, reaction CSV review-only, stress CSV excluded.
- Confirm one-to-one source identity/component/frame precheck and `docs/TOLERANCE.md` only for the external displacement families.
- Carry `OI-01` as a disclosed public-benchmark gap, not as permission to invent targets or modify reference artifacts.
Research stops here. No formulation, C++ API, implementation, reference solver execution, reference artifact modification or Gate 3 decision was performed.
@@ -1,339 +0,0 @@
# Shell 표면 압력 검증과 한계
본 문서는 당시 revision의 검증·판정 기록이다. 본문에 남긴 원본 보고서 이름과 SHA-256은
통합 전 자료의 식별자이며 정리된 현재 파일의 byte hash를 뜻하지 않는다. 원문은 Git
`858e87b`의 해당 기능 폴더에서 확인할 수 있다. 현재 진입점과 대응 기록은 [README](README.md)를 따른다.
아래 날짜·revision·명령·수치는 당시 실제 실행 기록이다. 문서 정리에서 solver를 다시 실행하지 않았다.
현재 계약은 [요구사항](requirements.md), [정식화](formulation.md), [I/O](io.md), [공통 tolerance](../TOLERANCE.md)를 따른다. [과거 release 판정](release.md)의 재검증 경계도 유지한다.
<a id="build-test"></a>
<a id="build-test--shell-surface-pressure-load--빌드테스트-보고서"></a>
## Shell Surface Pressure Load — 빌드·테스트 보고서
<a id="build-test--메타데이터"></a>
### 메타데이터
- feature_id: `shell-surface-pressure-load`
- 상태: agent 소유 focused 검증 통과
- `.harness/config.json`은 없었으므로 Step 7이 지정한 direct CMake 명령을 사용했다.
- 선택 환경: root CMake project, Visual Studio 18 2026 generator, x64, Debug,
C++17, MSVC 19.51.36252.0 (tool path 14.51.36231), MSBuild 18.8.2.
- 의존성: GoogleTest `C:/git/googletest`, MKL 2026.1, TBB 2023.1, HDF5 2.1.1.
<a id="build-test--red-사전검사와-이전-tdd-증거"></a>
### RED 사전검사와 이전 TDD 증거
시작 시 `implementation-report.md`, `build-test.md`,
`reference-comparison.md`가 모두 없었다. 이는 Step 7이 요구한
evidence-state RED다. Steps 1–6의 실행 기록을 감사하여 각 production/test/CMake
변경마다 expected RED와 GREEN/focused VERIFY가 있음을 확인했다. Step 1/2의
outer Harness timeout은 `corrections.md`가 기록한 full CTest와 Stop의 중복 실행이며,
제품 실패나 RED 누락이 아니다. `evidence-gap`은 없다.
<a id="build-test--agent-소유-명령-기록"></a>
### Agent 소유 명령 기록
duration은 command runner가 관측한 wall-clock 시간이다. Agent는 targetless
whole-project build 또는 unfiltered full CTest를 실행하지 않았다.
| ID | 명령 | exit | duration | 결과 / 의미 있는 tail |
| --- | --- | ---: | ---: | --- |
| `V-CONFIG` | `cmake --fresh -S . -B .harness/build -G "Visual Studio 18 2026" -A x64 "-DFESA_GTEST_SOURCE_DIR=C:/git/googletest" "-DMKL_DIR=C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl" "-DTBB_DIR=C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb" "-DHDF5_DIR=C:/Program Files/HDF_Group/HDF5/2.1.1/cmake"` | 0 | 7.5 s | `CXX compiler identification is MSVC 19.51.36252.0`; configure/generate 완료. |
| `V-BUILD` | `cmake --build .harness/build --config Debug --target fesa_unit_tests fesa_integration_tests fesa_reference_tests` | 0 | 5.9 s | 세 test executable이 `.harness/build/tests/Debug`에 link됨. |
| `V-SHOW` | `ctest --test-dir .harness/build -C Debug --show-only=json-v1` | 0 | 1.7 s | 유효한 `ctestInfo` JSON; 후속 audit에서 362 tests 확인. |
| `V-FOCUSED` | `ctest --test-dir .harness/build -C Debug --output-on-failure -R "^(InpSyntax|ShellSurfacePressureInput|ShellSurfacePressureDomain|ShellSurfacePressureKernel|SurfacePressureAssembly|LinearShellSurfacePressure|NonlinearShellSurfacePressure|ShellSurfacePressureApplication|ShellSurfacePressureReference)\."` | 0 | 15.8 s | `100% tests passed`, 64/64; unit 37, integration 18, reference 9. |
| `V-REFERENCE` (사전) | `ctest --test-dir .harness/build -C Debug --output-on-failure -R "^ShellSurfacePressureReference\."` | 0 | 2.9 s | 9/9 통과. |
| `V-CLI-BUILD` | `cmake --build .harness/build --config Debug --target fesa_cli` | 0 | 2.7 s | `.harness/build/src/fesa/Debug/fesa.exe` link 완료. |
| `V-CLI-RUN` | `fesa.exe .harness/build/reference/shell-surface-pressure-load/shellNL-meshfine-pressure.inp` | 0 | 약 10 m 56 s | FESA만 실행. factor-one increment 10이 accepted되고 schema-1 HDF5/log가 atomic publish됨. 마지막 log는 `combined_pass=1`, `transition=accepted`. |
| `V-REFERENCE` (생성 결과) | 같은 `^ShellSurfacePressureReference\.` 명령 | 0 | 2.7 s | 새 root execution-directory HDF5를 선택하여 9/9 통과. |
| inventory | CTest JSON suite/count 및 staged DLL audit | 0 | 1.9 s | 362 discovered, 모든 named suite nonzero, runtime closure 확인. |
<a id="build-test--발견focused-결과"></a>
### 발견·focused 결과
| suite | 발견 수 | 결과 |
| --- | ---: | --- |
| `InpSyntax` | 5 | 통과 |
| `ShellSurfacePressureInput` | 15 | 통과 |
| `ShellSurfacePressureDomain` | 3 | 통과 |
| `ShellSurfacePressureKernel` | 11 | 통과 |
| `SurfacePressureAssembly` | 3 | 통과 |
| `LinearShellSurfacePressure` | 5 | 통과 |
| `NonlinearShellSurfacePressure` | 10 | 통과 |
| `ShellSurfacePressureApplication` | 3 | 통과 |
| `ShellSurfacePressureReference` | 9 | 통과 |
| 선택 합계 | 64 | 64 passed, 0 failed |
선택된 test 중 skip, zero-discovery, failure는 없다.
<a id="build-test--경고와-runtime-closure"></a>
### 경고와 runtime closure
configure/build 출력에는 compiler/linker warning이 없다. `CMAKE_HAVE_LIBC_PTHREAD`
probe의 실패 표시는 Windows configure probe 결과일 뿐 `/W4 /WX` warning이 아니다.
| 실행 파일 directory | staged DLL |
| --- | --- |
| `.harness/build/src/fesa/Debug` | `hdf5.dll`, `libiomp5md.dll`, `libmmd.dll`, `mkl_core.3.dll`, `mkl_def.3.dll`, `mkl_intel_thread.3.dll`, `tbb12_debug.dll` |
| `.harness/build/tests/Debug` | `hdf5.dll`, `libiomp5md.dll`, `libmmd.dll`, `mkl_core.3.dll`, `mkl_def.3.dll`, `mkl_intel_thread.3.dll`, `tbb12_debug.dll` |
test discovery/execution뿐 아니라 copied nonlinear input을 CLI로 실제 완료했으므로,
MKL/TBB/HDF5 runtime staging도 실행으로 확인됐다.
<a id="build-test--stop-소유권-분류-변경-없음"></a>
### Stop 소유권, 분류, 변경 없음
`.codex/hooks.json`의 Stop은 `scripts/hooks/stop_validation.py`에 연결되어 있다.
이 훅이 agent turn 종료 시 단 한 번의 targetless whole-project MSVC x64 Debug build와
unfiltered CTest를 소유한다. 이 Step은 hook entry point를 수동 호출하거나 중복 full
verification을 실행하지 않았다.
- agent-owned classification: `passed`
- 실패 classification: 없음 (`configure`, `compile`, `link`, `test`,
`reference-comparison`, `artifact`, `environment`, `regression` 모두 없음)
- automatic Stop disposition: Harness phase completed locally at
`2026-09-01 17:43:57`. The single automatic Stop whole-project MSVC x64
Debug build passed. It ran `cmake --build .harness/build --config Debug`,
then `ctest --test-dir .harness/build -C Debug --show-only=json-v1` with
nonzero discovery, and `ctest --test-dir .harness/build -C Debug
--output-on-failure`; the final full CTest result was `362/362 PASS`,
`0 failed`.
- automatic Stop evidence sources:
`phases/shell-surface-pressure-load/step7-output.json`,
`.harness/build/Testing/Temporary/LastTest.log`, and phase/commit metadata
`2c91462`, `bf2339c`, `c4d1e2a`. Classification: `pass`; failed tests:
none. Duration: not separately preserved in committed report; completion
timestamp and LastTest log are authoritative.
- Step 7은 source/header/test/CMake/Harness/tolerance/upstream contract/reference artifact를
변경하지 않았고, 세 Gate 6 보고서 및 허용된 Step 7 status/summary만 변경한다.
physics evaluation과 release readiness는 이 보고서 범위 밖이다.
<a id="reference-comparison"></a>
<a id="reference-comparison--shell-surface-pressure-load--reference-comparison-보고서"></a>
## Shell Surface Pressure Load — Reference Comparison 보고서
<a id="reference-comparison--메타데이터와-gate-6-판정"></a>
### 메타데이터와 Gate 6 판정
- feature_id: `shell-surface-pressure-load`
- case_id: `shellnl-meshfine-pressure-s4-follower`
- FESA authoritative output: schema-1
`.harness/build/reference/shell-surface-pressure-load/shellNL-meshfine-pressure_results.h5`
- 실행 모드: 요구 input의 byte-identical copy에 대한 FESA-only 실행
- tolerance authority: 변경하지 않은 `docs/TOLERANCE.md`
- deterministic classification: `passed`
- blocking verdict: pass
- warning-only verdict: pass (UR warning 없음)
이 문서는 Coordinator에 `pass-for-physics-evaluation`만 권고한다. Abaqus 내부 알고리즘
동등성, Physics Gate 7 또는 release readiness를 주장하지 않는다.
<a id="reference-comparison--artifact-check와-불변성"></a>
### ARTIFACT CHECK와 불변성
아래 source artifact는 FESA-only 실행 전후에 size, SHA-256 및 기록 timestamp가 모두
동일했다. Reference artifact의 rename, rewrite, 보정 또는 생성은 없었다.
| 용도 | 정확한 source path | bytes | SHA-256 |
| --- | --- | ---: | --- |
| required input | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure.inp` | 56,665 | `53718ccc9b41c23fcc1b509a51d66f1347e87aca43a74f1d6cec4d2085f4b90e` |
| required displacement CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure displacements.csv` | 111,182 | `2fe53f98eac9f04779100721c3edf8049eb1dbfe733ebcbd819aeeed03b81198` |
| review-only reaction CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure reactions.csv` | 108,923 | `a2347f4e88e4b73c75abe7c23e96bcc696c16c1975e2440b3ad9bf7ecda5f2b6` |
| excluded stress CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure stresses.csv` | 1,036,876 | `bc06f3324cc5d6655ded2939b3e1cb9d55a0359fa0d272a6958399464218a128` |
유일하게 copy한 source artifact는 다음 exact input이다.
```text
.harness/build/reference/shell-surface-pressure-load/
shellNL-meshfine-pressure.inp
```
copy의 size/SHA-256은 required input과 정확히 일치한다. Source history와 실행 command를
감사했으며 `abaqus.exe`, `abaqus.bat`, Nastran 또는 다른 reference solver invocation은
없었다. source/path text의 `abaqus` parser 명칭은 실행 증거가 아니다.
<a id="reference-comparison--fesa-생성물과-frame-선택"></a>
### FESA 생성물과 frame 선택
| 생성물 | bytes | SHA-256 | 검증 증거 |
| --- | ---: | --- | --- |
| copied input | 56,665 | `53718ccc9b41c23fcc1b509a51d66f1347e87aca43a74f1d6cec4d2085f4b90e` | source와 exact match |
| `shellNL-meshfine-pressure_results.h5` | 10,547,430 | `74f35e3e59edd05460733b1d6367994c7f4a1e847b366f2efad6fbecc03796f3` | atomic publish된 schema-1 HDF5 |
| `shellNL-meshfine-pressure_log.txt` | 40,786 | `8555ff365dcf1f066813d0cce6440c3d56c9840baf8246696daa7b2e7b0061a1` | factor-one increment accepted |
`Step-1`에는 load factor 0.1부터 1.0까지 accepted frame 10개가 있다. factor-one
entry는 frame index 9, increment 10, `load_factor=1.0`, `is_factor_one=1`의 정확히
하나이며, selected dataset은
`/steps/Step-1/frames/9/nodal/displacement`다.
<a id="reference-comparison--compare-사전검사와-row-projection"></a>
### COMPARE 사전검사와 row projection
비교기는 `/model/nodes`와 factor-one final nodal displacement를 사용한다. Key는 row
position 또는 internal index가 아니라 `(Step-1 factor-one accepted frame, instance,
source node label, component)`다.
| 사전검사 | 결과 |
| --- | --- |
| exact source artifact를 읽을 수 있음 | pass |
| schema / Step / accepted factor-one frame | pass: schema 1, `Step-1`, factor-one 1개 |
| HDF5 `/model/nodes` inventory | pass: finite/unique `(Part-1-1, label)` 729개 |
| displacement CSV wide-row inventory | pass: finite/unique `(PART-1-1, label)` 729개 |
| identity normalization | pass: comparison key에서만 instance ASCII case normalize; stored identity 보존 |
| component projection | pass: U1/U2/U3 -> UX/UY/UZ, UR1/UR2/UR3 -> URX/URY/URZ |
| U logical rows | pass: 정확히 2,187 |
| UR logical rows | pass: 정확히 2,187 |
| missing / extra / duplicate / nonfinite | 없음; tolerance 전에 fail-closed precheck |
| reaction/stress disposition | reaction review-only, stress excluded; comparison family를 생성하지 않음 |
생성 HDF5가 존재한 뒤 `ShellSurfacePressureReference`를 다시 실행하여 9/9가 통과했다.
이는 exact artifact audit, schema/frame selection, cardinality, identity match,
precheck-before-tolerance, family policy와 deterministic repeat comparison을 확인한다.
<a id="reference-comparison--공통-tolerance와-per-family-결정"></a>
### 공통 tolerance와 per-family 결정
Reference만으로 family scale과 near-zero band를 계산했다.
\[
S=\max |r_i|,\qquad B=0.01S.
\]
`abs(reference) <= B`이면 `abs(fesa-reference) <= B`, 나머지는 relative error
`<= 0.05`를 적용하고 family relative RMS도 `<= 0.01`이어야 한다. 별도의 absolute
gate, `max(1,S)`, clamp, average, row omission은 사용하지 않았다.
| family | 영향 | components | rows | S | B | near-zero pass | relative pass | max abs. error / row | max applicable relative error / row | relative RMS | verdict |
| --- | --- | --- | ---: | ---: | ---: | ---: | ---: | --- | --- | ---: | --- |
| `pressure_nodal_translation_blocking` | blocking | U1, U2, U3 | 2,187 | `5.51545573e-3` | `5.51545573e-5` | 1,582/1,582 | 605/605 | `9.96028671352255e-7`, `(Part-1-1, 2, U3)` | `3.12464512172274e-3`, `(Part-1-1, 419, U3)` | `5.18831997081359e-5` | pass |
| `pressure_nodal_rotation_warning` | warning-only | UR1, UR2, UR3 | 2,187 | `1.64645887e-3` | `1.64645887e-5` | 995/995 | 1,192/1,192 | `3.29623883250936e-6`, `(Part-1-1, 250, UR2)` | `3.81566175195545e-2`, `(Part-1-1, 286, UR2)` | `3.10406152731217e-4` | pass |
결정적인 4,374개의 모든 row decision이 통과했다. max absolute-error row와 max
applicable-relative-error row는 별도로 기록하며 서로 다른 source row일 수 있다.
두 family RMS도 모두 `0.01` 미만이다. U는 blocking으로 pass했고, UR은 warning-only
contract를 유지하며 이번 결과는 pass여서 deterministic warning도 없다.
<a id="reference-comparison--내부-blocking-evidence"></a>
### 내부 blocking evidence
최종 nonlinear log는 factor-one increment 10 / iteration 3에서
`combined_pass=1`, `transition=accepted`를 기록했다. 이 internal evidence는 external
CSV tolerance와 독립적이며 reaction CSV로 대체하지 않는다.
| internal family | rows | numerator / stored evidence | scale 또는 branch | metric / gate | 결과 |
| --- | ---: | --- | --- | --- | --- |
| accepted free translation-force residual | free DOF 1,875 | infinity norm `9.06582420157065e-6` | external/internal scale `1.47929199940215e5` | `6.12848863188238e-11 <= 1e-2` | pass |
| accepted free rotation-moment residual | free DOF 1,875 | infinity norm `1.3758908607997e-6` | exact-zero external-scale branch | `1.3758908607997e-6 <= 1e-3` | pass |
| global force balance | 3 | `[-5.04652281563267e-6, -3.33100482574622e-6, -3.02493572235107e-6]` | applied + masked constrained reaction, current arm | approved normalized gate `<=1e-8`, focused nonlinear test가 실행 | pass |
| global moment balance | 3 | `[1.21226185001433e-6, 7.79749825596809e-7, -1.57924777074714e-5]` | spatial physical moment, current arm | approved normalized gate `<=1e-8`, 같은 focused test가 실행 | pass |
<a id="physics-evaluation"></a>
<a id="physics-evaluation--shell-surface-pressure-load-물리-평가"></a>
## Shell Surface Pressure Load 물리 평가
<a id="physics-evaluation--1-metadata"></a>
### 1. Metadata
- feature_id: `shell-surface-pressure-load`
- source reference comparison report: `docs/shell-surface-pressure-load/verification.md`
- source reference model: `docs/shell-surface-pressure-load/reference-model.md`
- status: `pass-for-release-agent`
- date: `2026-09-01`
- evaluated commit: `1eb4dce885175b78b8229b095f14cac102ea93df`
이 판정은 승인된 물리 기대와 기존 Gate 6 evidence에 한정한다. Abaqus 내부 formulation,
integration, stabilization 또는 result recovery와의 동등성을 주장하지 않으며 release
readiness를 승인하지 않는다.
<a id="physics-evaluation--2-input-evidence"></a>
### 2. Input Evidence
<a id="physics-evaluation--21-gate와-artifact"></a>
#### 2.1 Gate와 artifact
`reference-comparison.md`는 명시적으로 `pass-for-physics-evaluation` handoff를 권고하고,
blocking `U1/U2/U3` 2,187/2,187 rows와 warning-only `UR1/UR2/UR3` 2,187/2,187 rows가
모두 통과했음을 기록한다. Physics Gate는 그 tolerance 판정을 재승인하지 않고, 통과한
비교 결과를 물리 plausibility의 선행 조건으로만 사용했다.
| evidence | exact path / identity | read-only 확인 |
| --- | --- | --- |
| solver HDF5 | `.harness/build/reference/shell-surface-pressure-load/shellNL-meshfine-pressure_results.h5` | schema `1`, 10 accepted frames, unique factor-one frame `9` / increment `10`; SHA-256 `74f35e3e59edd05460733b1d6367994c7f4a1e847b366f2efad6fbecc03796f3` |
| nonlinear log | `.harness/build/reference/shell-surface-pressure-load/shellNL-meshfine-pressure_log.txt` | factor-one iteration `3`: `combined_pass=1`, `transition=accepted`; SHA-256 `8555ff365dcf1f066813d0cce6440c3d56c9840baf8246696daa7b2e7b0061a1` |
| required input | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure.inp` | 56,665 bytes, SHA-256 `53718ccc9b41c23fcc1b509a51d66f1347e87aca43a74f1d6cec4d2085f4b90e` |
| required Abaqus CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure displacements.csv` | 729 finite wide rows; SHA-256 `2fe53f98eac9f04779100721c3edf8049eb1dbfe733ebcbd819aeeed03b81198` |
| optional Abaqus CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure reactions.csv` | `review-only`; SHA-256 `a2347f4e88e4b73c75abe7c23e96bcc696c16c1975e2440b3ad9bf7ecda5f2b6` |
| excluded Abaqus CSV | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure stresses.csv` | `excluded`; SHA-256 `bc06f3324cc5d6655ded2939b3e1cb9d55a0359fa0d272a6958399464218a128` |
| test record | `.harness/build/Testing/Temporary/LastTest.log` | existing automatic Stop evidence에서 full CTest `362/362 PASS`; 관련 physics test의 개별 pass 기록 확인 |
| optional FESA debug CSV views | 없음 | 요구되거나 생성된 debug CSV가 없으며 official output으로 사용하지 않음 |
확인한 authoritative quantities는 factor-one global nodal displacement, generalized external/
internal force, generalized residual, constrained reaction, global equilibrium, physical strain
energy, 기존 MITC4 generalized strain/section resultant/stress다. Model purpose는 729-node,
676-element `S4` square shell의 `SPOS`, positive `P=1e6`, `NLGEOM=YES` current-surface follower
pressure response를 end-to-end로 확인하고, stored case가 직접 포함하지 않는 sign, S4R,
linear, objectivity와 tangent 경계를 승인 internal tests로 보완하는 것이다.
<a id="physics-evaluation--3-physics-checks"></a>
### 3. Physics Checks
| physics check | status | evidence와 판정 |
| --- | --- | --- |
| global equilibrium | `pass` | Factor-one applied force sum은 `[8.626e-12, -7.311e-12, -1.0000000000000016e8]`이고 constrained reaction force sum은 `[-5.047e-6, -3.331e-6, 9.999999999999714e7]`이다. HDF5 stored balance를 approved current-arm scales로 다시 normalize하면 force `6.758e-14`, moment `3.725e-14`로 둘 다 `<=1e-8`이다. |
| reaction consistency | `pass` | Constrained DOF에서 `/nodal/reaction`과 `generalized_residual`은 exact 일치했다. Pressure resultant의 `-Z` `1.0e8`에 대해 masked constrained reaction은 `+Z` `9.999999999999714e7`이며, tiny `X/Y`와 moment remainder는 위 global balance gate 안이다. |
| displacement direction | `pass` | Reference connectivity의 `SPOS` vector area는 `+Z`, positive pressure resultant는 `-Z`다. Factor-one HDF5의 729개 `UZ`는 모두 nonpositive이며 625개 free nodes는 negative, 104개 constrained boundary nodes는 exact zero다. Center node의 `UZ=-5.514459701328648e-3`로 load 방향과 deformation mode가 일치한다. |
| pressure sign, resultant, and moment | `pass` | Current configuration의 quadrature vector-area oracle은 expected force `[-1.723e-12, 2.450e-11, -1.0000000000000025e8]`를 주며 HDF5 applied resultant와의 normalized error는 `8.94e-16`이다. Current-arm applied moment oracle error는 승인 `M_Sigma` 기준 `1.32e-16`이다. Existing `ShellSurfacePressureKernel.PartitionsUnityAndIntegratesPlanarResultantAndMoment`와 `ReversesExactlyForSposSnegAndNegativeMagnitude`도 full CTest 기록에서 pass했다. |
| symmetry and expected zero | `pass` | Feature-blocking exact-zero contract인 pressure generalized external rotational entries는 factor-one HDF5에서 exact zero다. Zero pressure/factor geometry validation test도 pass했다. Stored square patch의 mirror symmetry는 보조 sanity로만 확인했으며 `UX/UY/UZ` mirror mismatch의 최대 절대값은 `1.63e-16`, `1.09e-16`, `8.89e-17` 이하다. 별도 외부 symmetry tolerance를 만들지 않았다. |
| nonlinear follower objectivity and current-area behavior | `pass` | HDF5 resultant는 factor-one current `X+u` vector-area oracle과 위 roundoff 수준으로 일치했다. Current scalar area/reference scalar area ratio는 `1.0000006316335197`로 finite하다. Stored symmetric case만으로 reference/current path를 분리하지 않고, existing tests `UsesCurrentAreaAndNormalForFollowerForce`, `IsTranslationAndRigidRotationObjective`, `IsObjectiveUnderRigidMotionAndTracksCurrentArea`, `MatchesCenteredFiniteDifferenceForForceAndResidualSigns`의 pass evidence로 rigid rotation covariance, `gamma=1.25` area/resultant scaling, follower direction과 external tangent sign을 보완했다. |
| element force balance | `not-separately-applicable` | 이 feature는 pressure-only element force row나 element end-action balance contract를 정의하지 않는다. 대신 HDF5에서 `generalized_internal_force - generalized_external_force - generalized_residual`은 element assembly 이후 nodal full space에서 exact zero이고 global resultant/moment gate가 pass했다. Existing MITC4 section resultants는 finite이며 별도 pressure comparator를 만들지 않았다. |
| stress/strain | `pass-sanity-only` | Factor-one `generalized_strain`, `section_resultant`, `stress`의 component names, units, `shell-local` coordinate system과 `midsurface`/`section-position` location은 `io.md`와 일치하고 모든 값이 finite다. 관측 range는 strain `[-9.842e-4, 1.801e-3]`, section resultant `[-4.595e6, 8.646e6]`, stress `[-1.036e8, 1.039e8]`이다. Feature-specific stress sign/reference expectation은 없고 stress CSV는 `excluded`이므로 그 이상의 pass를 주장하지 않는다. |
| rigid body mode | `pass-no-symptom` | Stored case는 104 boundary nodes의 DOF 1–6을 구속하고 625 interior nodes가 자유다. 모든 accepted frame이 finite하게 수렴했고 factor-one maximum translation은 `5.514e-3`로 10-unit span 대비 `5.514e-4`이며 unbounded translation, near-zero-stiffness 또는 impossible displacement 증상이 없다. Pressure가 support를 제공한다는 주장은 하지 않는다. |
| energy/residual | `pass` | 모든 HDF5 numeric dataset과 required U/UR rows는 finite다. Factor-one free translation residual은 `9.06582420157065e-6 / 1.47929199940215e5 = 6.12849e-11 <=1e-2`; zero-external-scale rotation residual은 `1.3758908607997e-6 <=1e-3`이다. Existing `PHYSICAL_STRAIN_ENERGY=86418.04713575779`는 finite positive 보조 evidence이며 pressure-only energy gate로 사용하지 않았다. HDF5 diagnostics는 result-neutral ignored-keyword warning 4개뿐이고 error/nonfinite diagnostic은 없다. |
| model coverage | `pass` | Stored case의 declared inventory `729 nodes / 676 S4 / SPOS / positive P / NLGEOM=YES`와 unique factor-one frame이 모두 확인됐다. Stored case가 직접 다루지 않는 `S4R`, `SNEG`, negative/zero magnitude, linear reference configuration, exact resultant/moment, current-area objectivity와 tangent는 Numerical Review가 지정한 internal portfolio에서 해당 named tests가 pass했다. 승인 범위 밖의 추가 reference portfolio는 요구하지 않는다. |
<a id="physics-evaluation--4-failure-classification"></a>
### 4. Failure Classification
- failure classification: `none`
- 다음 분류는 발생하지 않았다: `equilibrium-failure`, `reaction-inconsistency`,
`displacement-direction-failure`, `symmetry-failure`, `stress-location-failure`,
`element-force-inconsistency`, `rigid-body-mode-suspected`, `nonfinite-result`,
`model-coverage-gap`, `upstream-contract`, `environment`.
`element force balance`의 `not-separately-applicable`과 stress의 `pass-sanity-only`는 upstream
contract가 의도적으로 pressure-only element/stress acceptance family를 만들지 않은 데 따른
범위 표시이며 failure 또는 evidence gap이 아니다.
<a id="physics-evaluation--5-evaluation-verdict"></a>
### 5. Evaluation Verdict
**Verdict: `pass-for-release-agent`.**
문서화된 pressure 방향/부호, resultant/moment, reaction/equilibrium, exact-zero와 보조 symmetry,
nonlinear follower objectivity/current-area, residual/nonfinite 및 declared model coverage가 모두
물리적으로 일관된다. Release Agent가 release readiness를 별도로 audit할 수 있다. 이 verdict는
release approval, publish 권한 또는 reference tolerance의 재승인이 아니다.
<a id="physics-evaluation--6-handoff-recommendation"></a>
### 6. Handoff Recommendation
- handoff target: `Release Agent`
- route: 항상 `Coordinator Agent`를 통해 전달
- recommendation: Gate 8은 requirements-to-physics traceability, known limitations와 release
evidence를 독립 audit한다. Physics Evaluation Agent는 Gate 8을 시작하거나 승인하지 않는다.
<a id="physics-evaluation--8-open-issues"></a>
### 8. Open Issues
- missing physical expectations: 없음.
- incomplete model coverage: 없음. Stored-case 한계는 승인 internal tests로 보완되며 추가
reference case는 계약상 요구되지 않는다.
- contradictory sign conventions: 없음.
- unavailable energy/residual evidence: 없음. Existing energy와 residual HDF5/log evidence를
사용했으며 새 pressure-only energy quantity는 요구되지 않는다.
- blockers: 없음.