9.3 KiB
Hex8 입출력과 내부 전달 계약
권위 있는 field/enum/shape·지원 입력·진단/실패 의미는 PRD의 FEM-REQ-HEX8-008–011,016–020,022–023다. Public CLI·path/lease/exit는 공통 계약, tolerance는 TOLERANCE를 따른다. 이 문서는 그 계약을 구현 경계까지 상세화한다. Physics 선택은 ADR를 따른다.
Source 입력과 실패 경계
기존 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는 nh/T다. 기존 일반 STATIC fixed-factor subset도 유지한다. DYNAMIC DIRECT h/T/INC는 integer n과 binary64 nh로 대응한다. 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의 linearComputeStiffness와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은 material=K0/geo=0, nonlinear은 같은 trial의 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로 만들지 않는다. Generic recovery variant의 Solid payload는 별도 type이다.
- Semantic Domain은 Solid element/section/material/density·amplitude 정의를 소유한다.
DOF profile은
kSolidStructural에 해당하는3-component 구조이며FullDof, free/constrained, genericElementScatter, 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)다.
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에 있다. 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 오류는 미실행/실패다.