139 lines
11 KiB
Markdown
139 lines
11 KiB
Markdown
# Hex8 입출력과 내부 전달 계약
|
||
|
||
권위 있는 field/enum/shape·지원 입력·진단/실패 의미는 [PRD](PRD.md)의
|
||
FEM-REQ-HEX8-008–011,016–020,022–023다. Public CLI·path/lease/exit는
|
||
[공통 계약](../contracts.md), tolerance는 [TOLERANCE](../TOLERANCE.md)를 따른다.
|
||
이 문서는 그 계약을 구현 경계까지 상세화한다. Physics 선택은 [ADR](ADR.md)를 따른다.
|
||
|
||
## Source 입력과 실패 경계
|
||
|
||
Solid HHT의 [승인된 high+low 계산](precision-proposal.md)은 내부 전체 물리 상태를
|
||
accepted history와 다음 trial에 유지한다. 공식 HDF5의 기존 field·shape·Float64 dtype은
|
||
변경하지 않으며 값은 전체 물리량의 round-to-Float64 observable이다. Self-check는
|
||
직렬화가 그 반올림과 일치하는지 확인한다. 내부 gate PASS를 rounded 배열 자체의
|
||
동일 gate PASS로 해석하지 않는다. 로그에 내부 산술을 명시하고 직렬화 비유한 값·
|
||
overflow는 실패로 처리해 기존 final을 보존한다. Restart는 지원하지 않는다.
|
||
|
||
기존 single Part/identity Instance/set/target subset을 재사용하고 source spelling/location/
|
||
instance/label과 internal index를 구분한다. C3D8의8 distinct nodes와 SOLID SECTION의 elset/
|
||
material 연결, constant E/nu 및 procedure별 density capability를 검증한다. Blank section row는
|
||
허용하되 thickness/material orientation·다른 solid type를 default로 흡수하지 않는다.
|
||
|
||
실제 BC/CLOAD 성분은 DOF1–3이다. 사용자 승인된 호환 예외로 supported displacement BC의
|
||
exact-zero DOF4–6(생략0 포함)만 source/location warning/no-op으로 처리한다. Mixed1–6 range는
|
||
1–3을 적용하고4–6만 경고하며 회전 equation/state를 만들지 않는다. 비영 회전 BC와 모든
|
||
회전 CLOAD는 거부하고 unsupported BC 옵션·DOF범위 밖 의미를 이 예외로 수용하지 않는다.
|
||
Static 비영 prescribed는 absolute target이며 nonlinear의
|
||
factor가 force/target 모두에 적용된다. Frequency는 homogeneous BC, dynamic은 exact-zero BC와
|
||
initial q/v0만 허용한다. Unused node·mixed element·alias element·unknown set/material/source
|
||
identity·bad density/geometry·unsupported meaningful keyword는 model/input failure다.
|
||
|
||
TABULAR amplitude는 canonical name uniqueness를 검증하며 raw name/location을 보존한다.
|
||
TIME=STEP TIME/VALUE=RELATIVE/DEFINITION=TABULAR의 생략 default와 명시 동일 값만 지원한다.
|
||
One/many rows의 pair를 flatten해 finite time>=0/strict increasing/value finite를 검사한다.
|
||
Knot 원 값·linear interpolation·end hold를 사용한다. Curve 없는 CLOAD는 initial0+부터 constant다.
|
||
다른 curve를 사용하는 load block은 미리 하나의 base vector로 합치지 않는다. Static/BC amplitude,
|
||
TOTAL TIME/SMOOTH STEP/smoothing option을 fail-closed로 거부한다.
|
||
|
||
STATIC DIRECT는 h/T/INC의 fixed schedule을 지원하며 nonlinear load factor는 n*h/T다.
|
||
기존 일반 STATIC fixed-factor subset도 유지한다. DYNAMIC DIRECT h/T/INC는 integer n과
|
||
binary64 n*h로 대응한다. FREQUENCY의 N은 source mode request이며 LANCZOS/SIM option 표기와
|
||
실제 generalized MKL FEAST를 metadata/diagnostic에서 구분한다. Provided PRESELECT/무해한
|
||
output/restart 요청은 명시된 no-op이고 required 공식 결과를 삭제하는 selector가 아니다.
|
||
|
||
## T2/T3와 이후 절차의 typed 경계
|
||
|
||
다음 class/method 이름은 구현 계획용 초기 interface다. 같은 행동/배열 크기·소유권을 유지하는
|
||
repository-conforming 이름 조정은 허용하며 physics/schema 수정은 아니다.
|
||
|
||
- `Hex8Element`는 기존 Element interface의 linear `ComputeStiffness`와 `Recover`를 제공한다.
|
||
Create 입력은 internal element index, source/local layout, 기준 좌표8×3, 기존 isotropic
|
||
elastic material와 optional density다. 생성에 아직 없는 Solid Domain/section 타입을 요구하지
|
||
않아 T2/T3를 분리한다. Layout은8 source-order nodes×UX/UY/UZ다.
|
||
- Explicit `EvaluateLinear(u)`/`EvaluateNonlinear(u)`는 immutable element의 local u[24]를 받아
|
||
f[24], Kmat/Kgeo/Kt[24,24], strain energy와8 typed integration-point rows를 반환한다.
|
||
Linear은 새 체적 평균 energy의 zero Hessian material=K0/geo=0,
|
||
nonlinear은 같은 trial의 체적 평균 Green energy 미분이다. `ComputeMass()`는
|
||
local consistent24×24 Matrix contribution이며 absent density이면 실패한다.
|
||
- Typed Solid point row는 internal element index, point ID1–8, natural/reference coordinate3,
|
||
Cauchy stress6·infinitesimal/Green tensor strain6를 가진다. Identity/상수 coordinates를 trial마다
|
||
다른 source row로 만들지 않는다. 저장 strain은 실제 kinematics의 strain이며 평균된
|
||
대체 strain이 아니다. 응력은 같은 point의 deviatoric strain과 요소 전체의 reference-volume
|
||
평균 trace에 의존한다. 비선형은 PK2를 실제 F/J로 Cauchy 변환하며 평균 Cauchy pressure를
|
||
가정하지 않는다. Generic recovery variant의 Solid payload는 별도 type이다.
|
||
- Semantic Domain은 Solid element/section/material/density·amplitude 정의를 소유한다.
|
||
DOF profile은 `kSolidStructural`에 해당하는3-component 구조이며 `FullDof`, free/constrained,
|
||
generic `ElementScatter`, sparse pattern의 기존 공개 의미를 유지한다. 동작별 node component
|
||
count를 조회해6으로 고정된 loops를 Solid branch에서 제거한다.
|
||
- Matrix assembly는 local layout+24×24 contribution의 stable ordered reduction이다. Mass/stiffness
|
||
storage는 같은 full-space pattern이며 free restriction은 실제 constraint mask를 사용한다.
|
||
Runtime factory 연결은 Domain material/coords를 Hex8 Create에 전달하는 단일 owner가 수행한다.
|
||
- Static/eigen/dynamic executor는 procedure별 typed outcome/state를 반환한다. Accepted frames는
|
||
source identity·3N physical arrays·8점 result·physical scalars와 validation evidence를 소유한다.
|
||
Eigen은 modes/vector/all-pair check/Gram을 소유하고 static displacement frame으로 위장하지 않는다.
|
||
- Trial은 accepted history의 독립 값이며 invalid geometry/finite/recovery/iteration failure는
|
||
commit하지 않는다. Static force/correction·dynamic force/rate channels의 raw norm/scale/branch/
|
||
unit/pass와 increment/iteration을 기록한다. 필요한 failure evidence는 Status/로그까지 전달한다.
|
||
Shared Shell4-channel logger에 dummy rotation/moment convergence를 만들지 않는다.
|
||
- Central prepared outcome·writer/CLI 연결은 T7의 한 owner다. Vendor objects는 private adapter에
|
||
두고 공개 Matrix/Vector/Result/Status 경계를 유지한다.
|
||
|
||
## HDF5 metadata와 결과 attribute
|
||
|
||
Model/accepted/eigen compound field 집합과 순서·dtype는 PRD017 그대로다. New Solid schema1과
|
||
procedure/element/integration/mass attributes로 식별하고 기존 file contract는 유지한다.
|
||
Required strings는 UTF-8, numeric은 explicit little-endian U64/U8/F64다.
|
||
Metadata의 추가 공개 의미는 다음과 같다.
|
||
|
||
| attribute | 값/의미 |
|
||
| --- | --- |
|
||
| `source_input_identity` | 실제 읽은 원본 byte identity; 기존 공통 hashing 의미 |
|
||
| `source_step_name` | 입력 raw step 이름; storage key Step-1과 별도 |
|
||
| `unit_system_label` | `user-consistent-unspecified` |
|
||
| `coordinate_convention` | `global-cartesian; reference-strain; current-cauchy-stress` |
|
||
| `component_order` | `node-major; UX,UY,UZ` |
|
||
|
||
Physical dataset은 `component_names`와 `unit_dimensions`를 UTF-8 string으로 기록한다.
|
||
각 frame dataset에는 `frame_index:U64`, `increment_index:U64` 및 해당 `time:F64` 또는
|
||
`load_factor:F64`, `coordinate_system=global-cartesian`, 필요한 `location`을 붙인다.
|
||
Result array의 leading node/element inventory와 component list를 self-check한다.
|
||
|
||
| quantity | component_names / unit_dimensions / 필요한 의미 |
|
||
| --- | --- |
|
||
| displacement | `U1,U2,U3` / `length` |
|
||
| reaction/residual | `RF1,RF2,RF3` 또는 `R1,R2,R3` / `force`; reaction은 constrained projection |
|
||
| stress | `S11,S22,S33,S12,S13,S23` / `force/length^2`; `stress_measure=cauchy`, `location=integration-point` |
|
||
| strain | `E11,E22,E33,E12,E13,E23` / `dimensionless`; `strain_measure=infinitesimal` 또는 `green-lagrange`, `shear_convention=tensor` |
|
||
| velocity | `V1,V2,V3` / `length/time` |
|
||
| physical/algorithmic acceleration | `A1,A2,A3` / `length/time^2`; 각각 `acceleration_kind=physical`/`algorithmic` |
|
||
| strain/kinetic energy, work, balance error | `scalar` / `force*length`; 각 계산 정의를 별도 `definition` attribute로 기록 |
|
||
| linear/angular momentum | `P1,P2,P3` 또는 `L1,L2,L3` / `mass*length/time` 또는 `mass*length^2/time`; angular origin은 global0 |
|
||
| lambda/frequency | `eigenvalue` 또는 `frequency` / `1/time^2` 또는 `1/time`; 서로 다른 eigen table field |
|
||
| mode vectors | `UX,UY,UZ` / `mass-normalized`; `normalization=phi^T*M*phi=1` |
|
||
|
||
Strain-energy definition은 linear `0.5*u^T*K0*u`, nonlinear `sum(W*detJ0)`다.
|
||
K0는 승인된 mean-trace energy의 zero Hessian이고 nonlinear Wg는
|
||
`mu*dev(Eg):dev(Eg)+0.5*kappa*theta_bar^2`다. 같은 theta_bar를8점의 reference 가중치로
|
||
계산하므로 그 합은 요소 체적 항 `0.5*kappa*V*theta_bar^2`와 같다. 기존 attribute 문자열과
|
||
field/schema/dtype은 유지하며 새 energy 의미는 HEX8-ADR-009 및 정식화를 따른다.
|
||
Kinetic은 `0.5*v^T*M*v`, work는 `sum(0.5*(F_old+F_new)*delta_u)`이며 initial0이다.
|
||
Balance error는 `T+U-T0-U0-Wext`이고 HHT numerical dissipation을0으로 보정하지 않는다.
|
||
Constrained mask/prescribed 의미·point ordering은 model inventory에서 확인한다.
|
||
|
||
## 출력 candidate와 self-check
|
||
|
||
Writer는 완결된 accepted state만 받는다. Dtype/정확한 compound member/order·shape·source
|
||
IDs·finite·flags·frame/increment/time/factor·physical3 component·eigen norm/검증량을 확인한다.
|
||
Write 후 readback 값을 candidate와 대조하고 close까지 성공한 뒤 atomic replace한다.
|
||
잘못된 payload, 임시 write/readback/close/replace 실패에서 기존 final HDF5를 보존한다.
|
||
File 존재와 이번 실행 성공은 별개이며 CLI native exit와 stored source identity를 확인한다.
|
||
|
||
## Comparison projection
|
||
|
||
Quantity/key/family와 원본 준비 상태는 [reference-model](reference-model.md)에 있다.
|
||
Static은 final factor-one source increment를 FESA final accepted frame에 대응한다. Dynamic은
|
||
integer increment0..N과 decimal source time을 n*h에 대응한다. RF는 constrained projection,
|
||
S는 element/IntPt와6 global Cauchy component다. 좌표는 보조검사이고 ID 추정에 쓰지 않는다.
|
||
Modal Value는 원본이 제공되면 quantity/units/mode/step을 확인하며 최저10 eigenvalues를
|
||
singleton families로 비교한다. Missing 원본·nonfinite/identity/completeness 오류는 미실행/실패다.
|