docs: clarify linear static beam contracts
This commit is contained in:
@@ -44,6 +44,7 @@ authoritative HDF5 파일 `results.h5`에 기록하는 FESA V0 파이프라인
|
|||||||
- 절점당 자유도 `[UX, UY, UZ, URX, URY, URZ]`
|
- 절점당 자유도 `[UX, UY, UZ, URX, URY, URZ]`
|
||||||
- 축, 두 방향 굽힘, Saint-Venant 비틀림
|
- 축, 두 방향 굽힘, Saint-Venant 비틀림
|
||||||
- nodal concentrated load와 prescribed displacement
|
- nodal concentrated load와 prescribed displacement
|
||||||
|
- formulation의 constant local line-load equivalent nodal vector kernel
|
||||||
- nonzero prescribed displacement를 포함한 자유/구속 partition
|
- nonzero prescribed displacement를 포함한 자유/구속 partition
|
||||||
- deterministic COO-to-CSR sparse assembly
|
- deterministic COO-to-CSR sparse assembly
|
||||||
- MKL PARDISO factorization과 substitution의 분리
|
- MKL PARDISO factorization과 substitution의 분리
|
||||||
@@ -58,7 +59,7 @@ authoritative HDF5 파일 `results.h5`에 기록하는 FESA V0 파이프라인
|
|||||||
- 다중 analysis step과 step 간 load/BC propagation
|
- 다중 analysis step과 step 간 load/BC propagation
|
||||||
- instance translation/rotation, nested assembly, dependent/independent mesh 차이
|
- instance translation/rotation, nested assembly, dependent/independent mesh 차이
|
||||||
- `I12 != 0`, taper, offset, release, curved beam, warping
|
- `I12 != 0`, taper, offset, release, curved beam, warping
|
||||||
- distributed load용 Abaqus `*DLOAD` 입력
|
- distributed load용 Abaqus `*DLOAD` 입력과 Domain load object 생성
|
||||||
- 기하·재료비선형, dynamics, contact, thermal effects
|
- 기하·재료비선형, dynamics, contact, thermal effects
|
||||||
- transverse shear stress와 torsional shear stress recovery
|
- transverse shear stress와 torsional shear stress recovery
|
||||||
- beam stress에 대한 Abaqus reference comparison
|
- 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` |
|
| 0 | `requirements-baseline` | `docs/requirements/linear-static-3d-euler-beam.md` |
|
||||||
| 1 | `research-evidence` | `docs/research/linear-static-3d-euler-beam-research.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` |
|
| 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` |
|
| 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` |
|
| 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
|
```cpp
|
||||||
Matrix localStiffness() const;
|
Matrix localStiffness() const;
|
||||||
Matrix globalStiffness() const;
|
Matrix globalStiffness() const;
|
||||||
Vector localEquivalentLoad() const;
|
Vector localEquivalentLoad(const ConstantLocalLineLoad& load) const;
|
||||||
BeamRecovery recover(const Vector& globalElementDisplacement) const;
|
BeamRecovery recover(const Vector& globalElementDisplacement) const;
|
||||||
```
|
```
|
||||||
|
|
||||||
요소는 equation ID를 소유하지 않는다. `BeamRecovery`는 endpoint equilibrium end
|
요소는 equation ID를 소유하지 않는다. `BeamRecovery`는 endpoint equilibrium end
|
||||||
action, endpoint section resultant, Gauss-point generalized strain/resultant, section-point
|
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 계약
|
### 4.6 LinearSolver 계약
|
||||||
|
|
||||||
@@ -199,7 +202,9 @@ public:
|
|||||||
|
|
||||||
`MklPardisoSolver`는 factorization 상태를 소유하고 같은 matrix에 여러 RHS
|
`MklPardisoSolver`는 factorization 상태를 소유하고 같은 matrix에 여러 RHS
|
||||||
substitution을 수행할 수 있다. singularity와 invalid CSR은 구조화된 diagnostic으로
|
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
|
## 5. Matrix, Vector 및 SparseMatrix
|
||||||
|
|
||||||
@@ -250,18 +255,28 @@ column index, values를 소유하고 0-based indexing을 사용한다. PARDISO a
|
|||||||
Keyword와 parameter는 case-insensitive이고 label identity는 원문 값을 보존한다.
|
Keyword와 parameter는 case-insensitive이고 label identity는 원문 값을 보존한다.
|
||||||
Comment line은 `**`로 시작한다.
|
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
|
### 6.2 General beam section mapping
|
||||||
|
|
||||||
`*BEAM GENERAL SECTION, SECTION=GENERAL`의 data는
|
`*BEAM GENERAL SECTION, SECTION=GENERAL`의 data는
|
||||||
`A, I11, I12, I22, J` 순서로 읽는다.
|
`A, I11, I12, I22, J` 순서로 읽는다.
|
||||||
|
|
||||||
|
- `MATERIAL` parameter는 필수이며 해당 `*MATERIAL`의 isotropic `*ELASTIC` data는
|
||||||
|
정확히 `E, nu`를 제공해야 한다.
|
||||||
- `I12`는 0이어야 한다.
|
- `I12`는 0이어야 한다.
|
||||||
- Abaqus first beam section axis `n1`을 FESA local `y`로 둔다.
|
- Abaqus first beam section axis `n1`을 FESA local `y`로 둔다.
|
||||||
- `t x n1`을 FESA local `z`로 둔다.
|
- `t x n1`을 FESA local `z`로 둔다.
|
||||||
- `Iy = I11`, `Iz = I22`로 매핑한다.
|
- `Iy = I11`, `Iz = I22`로 매핑한다.
|
||||||
- `E`와 Poisson ratio `nu`로 `G = E / (2(1 + nu))`를 계산한다.
|
- `E`와 Poisson ratio `nu`로 `G = E / (2(1 + nu))`를 계산한다.
|
||||||
- `E`, `G`, `A`, `Iy`, `Iz`, `J`는 양수여야 한다.
|
- `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의
|
이 축 계약은 Abaqus의 right-handed `(t, n1, n2)` section system 및 현재 formulation의
|
||||||
`(x, y, z)` system과 일치한다.
|
`(x, y, z)` system과 일치한다.
|
||||||
@@ -389,6 +404,11 @@ Authoritative output은 `results.h5` 하나다. 최소 schema는 다음과 같
|
|||||||
coordinate convention, element formulation을 기록한다. Node/element group은 stable internal
|
coordinate convention, element formulation을 기록한다. Node/element group은 stable internal
|
||||||
ID와 instance/source label mapping을 함께 저장한다.
|
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]`
|
- displacement: `[node_count, 6]`
|
||||||
- reaction: `[node_count, 6]`
|
- reaction: `[node_count, 6]`
|
||||||
- end force: `[element_count, 2, 6]`
|
- end force: `[element_count, 2, 6]`
|
||||||
@@ -524,4 +544,3 @@ gate evidence와 known limitations를 확인한다.
|
|||||||
통과한다.
|
통과한다.
|
||||||
7. Physics sanity가 pass한다.
|
7. Physics sanity가 pass한다.
|
||||||
8. Release report에 지원 subset과 모든 V0 제한사항이 기록된다.
|
8. Release report에 지원 subset과 모든 V0 제한사항이 기록된다.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user