modify tolerance policy

This commit is contained in:
KOKO\Mimi
2026-08-18 02:29:26 +09:00
parent 123a1b6ccc
commit 624ea4872c
36 changed files with 1909 additions and 672 deletions
+47 -46
View File
@@ -12,7 +12,7 @@
- owner_agent: `io-definition-agent`
- date: `2026-08-09`
- authoritative_output: `results.h5`
- reference_baseline: `reference/cantilever beam/` at source commit `2b34d0b`
- reference_baseline: exact read-only artifacts under `reference/cantilever beam/`
이 문서는 승인된 V0의 semantic I/O contract만 정의한다. Parser, HDF5 writer,
comparison tooling의 C++ API나 구현 구조는 정의하지 않으며 Abaqus full compatibility를
@@ -336,7 +336,7 @@ CSV는 `SF1/SM1/SM2/SM3`만 제공하고 section-cut result와 비교하므로 `
0으로 만들거나 reference row로 합성하지 않는다. HDF5의 transverse end action은
unit/analytical test와 physics sanity 대상이다.
### Frame, instance, and node-station normalization
### Frame, instance, and element-endpoint normalization
- Legacy `Frame` value `Increment 1: Step Time = 1.000`은 canonical `(Step-1, frame 0)`으로
변환한다. 승인 bundle의 다른 increment/time string은 `schema-mismatch`다.
@@ -344,29 +344,27 @@ unit/analytical test와 physics sanity 대상이다.
`instance_name`과 case-insensitive lookup 후 raw identity 일치 여부를 확인한다.
- `Node Label`은 instance 안의 preserved source node label로 resolve한다. Displacement와
reaction key는 `(model_id,Step-1,0,instance_name,source_node_label,quantity,component)`다.
- Elemental-force CSV는 element label이 없으므로 HDF5 endpoint section resultants를
source node station으로 project한다. Boundary station은 유일한 incident endpoint를 쓴다.
- Interior station collapse는 정확히 두 incident B33 endpoints, 동일 section/local-axis
orientation, 일관된 chain connectivity, 해당 node의 concentrated force/moment가 없는
경우에만 허용한다. 두 positive-face section-cut 값이 아래 승인 component tolerance
안에서 먼저 일치해야 한다.
- Interior 값이 일치하면 stable internal element ID가 작은 endpoint를 deterministic
representative 선택한다. 두 값을 평균하지 않는다. 불일치는 `tolerance-failure`다.
- Reversed connectivity, local-axis discontinuity, section jump, branch 또는 loaded interior
station은 element label 없는 legacy schema로 collapse할 수 없다. 이 approved bundle
밖에서는 element-aware reference row가 필요하며 legacy projection은 `schema-mismatch`
중단한다.
- Elemental-force CSV`Element Label`은 instance 안의 preserved source element label로,
`Node Label`은 해당 B33 connectivity의 정확한 endpoint source node로 resolve한다.
- Section-resultant key는
`(model_id,Step-1,0,instance_name,source_element_label,source_node_label,quantity,component)`다.
한 element에는 connectivity와 일치하는 두 endpoint 행이 정확히 존재해야 한다.
- Missing, extra, duplicate 또는 element-connectivity-mismatched endpoint row는
`schema-mismatch`로 tolerance 전에 실패한다. Source node station collapse,
deterministic representative 선택 또는 endpoint 평균은 사용하지 않는다.
Projected canonical comparison row는 다음 fields를 가진다.
```text
model_id, step_name, frame_index, instance_name, source_node_label,
quantity, component, value, unit_dimension, coordinate_system, hdf5_dataset_path
model_id, step_name, frame_index, instance_name,
[source_element_label], source_node_label, quantity, component, value,
unit_dimension, coordinate_system, hdf5_dataset_path
```
Stable ordering은 quantity inventory order, instance declaration order, stable source node
order, component order다. Approved model ID는 `cantilever-beam-b33`; nodal quantities는
global Cartesian, section resultants는 beam local이다.
`source_element_label`은 section-resultant row에 필수이고 nodal row에는 적용하지 않는다.
Stable ordering은 quantity inventory order, instance declaration order, stable source
node/element-endpoint order, component order다. Approved model ID는 `cantilever-beam-b33`;
nodal quantities는 global Cartesian, section resultants는 beam local이다.
### Row-set precheck and tolerance
@@ -376,27 +374,32 @@ identity-mismatched row가 하나라도 있으면 tolerance 계산 전에 실패
mandatory인 `SF2/SF3` 대응 end action, generalized results와 `S11`은 계약상 비교 대상이
아니므로 extra reference row가 아니다.
Matched rows는 같은 `model_id`, step/frame, quantity, component로 group한다.
Matched rows는 같은 model/case, step/frame, logical quantity, unit dimension, coordinate
system과 blocking behavior의 component family로 group한다. B33 family는 translation
`UX/UY/UZ`, rotation `URX/URY/URZ`, reaction force `RF1/RF2/RF3`, reaction moment
`RM1/RM2/RM3`, section force `N`, section moment `T/My/Mz`다.
```text
reference_scale = max(abs(reference_value_i))
row_tolerance = absolute_floor + 1e-6 * reference_scale
row_pass = abs(fesa_value_i - reference_value_i) <= row_tolerance
S = max(abs(reference_value_i))
error_i = abs(fesa_value_i-reference_value_i)
near_zero_band = 0.01*S
if abs(reference_value_i) <= near_zero_band:
row_pass = error_i <= near_zero_band
else:
row_pass = error_i/abs(reference_value_i) <= 0.05
relative_rms = sqrt(mean(error_i^2))/S
family_pass = all(row_pass) and relative_rms <= 0.01
```
즉 exact policy는 `absolute_floor + 1e-6 * reference_scale`이다. `reference_scale`
read-only Abaqus values만 사용하고 FESA 값으로 조정하지 않는다. Scale이 zero면 relative
term은 zero다. Reference value나 작은 residue를 zero-clamp하지 않고 모든 row를 판정한다.
| approved SI component class | absolute floor |
| --- | ---: |
| displacement and rotation | `1e-9` |
| force and moment | `1e-3` |
Interior endpoint consistency도 해당 CSV quantity/component의 same Abaqus-only scale과
floor를 사용한다. Verification report는 모든 row pass/fail과 quantity별 max absolute
error, component-scale normalized error, RMS error, norm error, worst row/component를
기록한다. 이 reference tolerance는 analytical/formulation tolerance를 대체하지 않는다.
`S`는 read-only Abaqus values만 사용하고 FESA 값으로 조정하지 않는다. 독립적인
absolute-error gate와 zero clamp는 사용하지 않는다. `S=0`이면 모든 FESA 값도 exact
zero일 때 relative RMS를 0으로 기록하고 통과하며, 하나라도 nonzero이면 NaN/Inf 대신
`zero-reference-scale-nonzero-error`로 실패한다. Verification report는 모든 row의 적용
branch와 pass/fail, family identity/components, scale, near-zero band/count, max absolute
error, scale-relative RMS와 worst row/component를 기록한다. 이 reference tolerance는
analytical/formulation tolerance를 대체하지 않는다.
## CLI and Diagnostics Contract
@@ -445,17 +448,15 @@ release approval을 이 status가 의미하지 않는다.
### Resolved numerical-review handoff
`NR-O03-STATION-NORMALIZATION`approved legacy bundle에 대해 unloaded, consistently
oriented two-endpoint interior station만 collapse하고, tolerance check 후 smaller stable
element ID를 선택하는 규칙으로 구체화했다. Reversed/branched/loaded/jumped station은
element-aware reference가 없는 한 비교하지 않는다.
`NR-O03-STATION-NORMALIZATION`2026-08-18 regenerated elemental-force CSV의
`Element Label`로 해소됐다. Comparator는 `(instance, element label, endpoint node label,
component)`를 직접 대응하며 station collapse, 대표 endpoint 선택 또는 평균을 하지 않는다.
### Reference Model Agent
- Exact legacy inventory, generator `Abaqus/CAE Learning Edition 2024`, source commit
`2b34d0b`, external SI provenance와 stress comparison N/A를 계약에 고정한다.
- 추가 reference model은 canonical filenames와 metadata를 사용하며 이 legacy file을
변경하지 않는다.
- Exact legacy inventory, current row schema와 stress comparison N/A를 계약에 고정한다.
- 추가 reference case의 exact paths와 수치 비교 계약은 해당 feature requirement가 정하며,
canonical naming이나 optional metadata를 readiness 조건으로 추가하지 않는다.
### Implementation Planning Agent
@@ -467,7 +468,7 @@ element-aware reference가 없는 한 비교하지 않는다.
### Reference Verification Agent
- Artifact precheck 뒤 HDF5-to-legacy projection, node-station eligibility, row-set equality,
component-scale comparison 순서를 유지한다.
- Artifact precheck 뒤 HDF5-to-CSV source identity projection, direct element-endpoint row-set
equality, common family-scale comparison 순서를 유지한다.
- Missing/extra/nonfinite row를 무시하거나 `SF2/SF3`/stress reference row를 합성하지 않는다.