diff --git a/docs/superpowers/specs/2026-08-08-linear-static-3d-euler-beam-design.md b/docs/superpowers/specs/2026-08-08-linear-static-3d-euler-beam-design.md index 422c765..79636fe 100644 --- a/docs/superpowers/specs/2026-08-08-linear-static-3d-euler-beam-design.md +++ b/docs/superpowers/specs/2026-08-08-linear-static-3d-euler-beam-design.md @@ -44,6 +44,7 @@ authoritative HDF5 파일 `results.h5`에 기록하는 FESA V0 파이프라인 - 절점당 자유도 `[UX, UY, UZ, URX, URY, URZ]` - 축, 두 방향 굽힘, Saint-Venant 비틀림 - nodal concentrated load와 prescribed displacement +- formulation의 constant local line-load equivalent nodal vector kernel - nonzero prescribed displacement를 포함한 자유/구속 partition - deterministic COO-to-CSR sparse assembly - MKL PARDISO factorization과 substitution의 분리 @@ -58,7 +59,7 @@ authoritative HDF5 파일 `results.h5`에 기록하는 FESA V0 파이프라인 - 다중 analysis step과 step 간 load/BC propagation - instance translation/rotation, nested assembly, dependent/independent mesh 차이 - `I12 != 0`, taper, offset, release, curved beam, warping -- distributed load용 Abaqus `*DLOAD` 입력 +- distributed load용 Abaqus `*DLOAD` 입력과 Domain load object 생성 - 기하·재료비선형, dynamics, contact, thermal effects - transverse shear stress와 torsional shear stress recovery - beam stress에 대한 Abaqus reference comparison @@ -75,7 +76,7 @@ authoritative HDF5 파일 `results.h5`에 기록하는 FESA V0 파이프라인 | ---: | --- | --- | | 0 | `requirements-baseline` | `docs/requirements/linear-static-3d-euler-beam.md` | | 1 | `research-evidence` | `docs/research/linear-static-3d-euler-beam-research.md` | -| 2 | `formulation-alignment` | 승인 범위와 정렬된 기존 beam formulation | +| 2 | `formulation-alignment` | `docs/formulations/3d-isoparametric-euler-beam-formulation.md` | | 3 | `numerical-review` | `docs/numerical-reviews/linear-static-3d-euler-beam-review.md` | | 4 | `io-contract` | `docs/io-definitions/linear-static-3d-euler-beam-io.md` | | 5 | `reference-model-contract` | `docs/reference-models/linear-static-3d-euler-beam-reference-models.md` | @@ -176,13 +177,15 @@ V0에서는 velocity, acceleration, temperature, iteration history를 할당하 ```cpp Matrix localStiffness() const; Matrix globalStiffness() const; -Vector localEquivalentLoad() const; +Vector localEquivalentLoad(const ConstantLocalLineLoad& load) const; BeamRecovery recover(const Vector& globalElementDisplacement) const; ``` 요소는 equation ID를 소유하지 않는다. `BeamRecovery`는 endpoint equilibrium end action, endpoint section resultant, Gauss-point generalized strain/resultant, section-point -`S11`을 구분한다. +`S11`을 구분한다. `localEquivalentLoad`는 정식화의 constant local line-load vector를 +검증하기 위한 element kernel이지만 V0 `.inp` parser는 `*DLOAD`를 생성하지 않으므로 +CLI 해석에서는 호출되지 않는다. ### 4.6 LinearSolver 계약 @@ -199,7 +202,9 @@ public: `MklPardisoSolver`는 factorization 상태를 소유하고 같은 matrix에 여러 RHS substitution을 수행할 수 있다. singularity와 invalid CSR은 구조화된 diagnostic으로 -반환한다. +반환한다. V0는 constrained `Kff`를 real symmetric positive definite matrix로 +factorize하며, positive-definite factorization 실패를 unconstrained, singular 또는 +invalid model diagnostic으로 분류한다. ## 5. Matrix, Vector 및 SparseMatrix @@ -250,18 +255,28 @@ column index, values를 소유하고 0-based indexing을 사용한다. PARDISO a Keyword와 parameter는 case-insensitive이고 label identity는 원문 값을 보존한다. Comment line은 `**`로 시작한다. +`*BOUNDARY`는 `target, first_dof, last_dof[, value]` 형식만 지원하고 DOF 범위는 +1부터 6까지다. value가 없으면 0으로 해석한다. `*CLOAD`는 +`target, dof, magnitude` 형식만 지원하고 DOF 범위는 1부터 6까지다. target은 source +node label 또는 node set이며 assembly-level set의 `INSTANCE` parameter를 해석한다. + ### 6.2 General beam section mapping `*BEAM GENERAL SECTION, SECTION=GENERAL`의 data는 `A, I11, I12, I22, J` 순서로 읽는다. +- `MATERIAL` parameter는 필수이며 해당 `*MATERIAL`의 isotropic `*ELASTIC` data는 + 정확히 `E, nu`를 제공해야 한다. - `I12`는 0이어야 한다. - Abaqus first beam section axis `n1`을 FESA local `y`로 둔다. - `t x n1`을 FESA local `z`로 둔다. - `Iy = I11`, `Iz = I22`로 매핑한다. - `E`와 Poisson ratio `nu`로 `G = E / (2(1 + nu))`를 계산한다. - `E`, `G`, `A`, `Iy`, `Iz`, `J`는 양수여야 한다. -- beam length와 projected guide-vector norm은 승인된 tolerance보다 커야 한다. +- `coordinate_scale = max(1, norm(X1), norm(X2))`에 대해 + `L > 1e-12 * coordinate_scale`이어야 한다. +- guide vector는 0이 아니어야 하며 + `norm(a_perp) > 1e-12 * max(1, norm(a))`이어야 한다. 이 축 계약은 Abaqus의 right-handed `(t, n1, n2)` section system 및 현재 formulation의 `(x, y, z)` system과 일치한다. @@ -389,6 +404,11 @@ Authoritative output은 `results.h5` 하나다. 최소 schema는 다음과 같 coordinate convention, element formulation을 기록한다. Node/element group은 stable internal ID와 instance/source label mapping을 함께 저장한다. +Abaqus `.inp` 자체에는 단위 선언이 없으므로 일반 solver run의 unit-system label은 +`user-consistent-unspecified`로 기록한다. Reference comparison에서는 별도 +`metadata.json`이 선언한 단위계를 authoritative unit label로 사용하며, solver가 입력 +파일만 보고 SI를 추론하지 않는다. + - displacement: `[node_count, 6]` - reaction: `[node_count, 6]` - end force: `[element_count, 2, 6]` @@ -524,4 +544,3 @@ gate evidence와 known limitations를 확인한다. 통과한다. 7. Physics sanity가 pass한다. 8. Release report에 지원 subset과 모든 V0 제한사항이 기록된다. -