feat: implement phase 1 solver baseline

This commit is contained in:
NINI
2026-05-01 02:59:28 +09:00
parent 10f1436e0f
commit c5be1f988c
13 changed files with 1960 additions and 84 deletions
+18
View File
@@ -146,3 +146,21 @@
**이유**: 사용자가 첫 reference case로 `references/quad_01.inp``references/quad_01_displacements.csv`를 제공했다. CSV는 사람이 검토하기 쉽고, 초기 parser/solver 검증 harness에서 HDF5 writer가 완성되기 전에도 `U` field 비교를 자동화하기 좋다.
**트레이드오프**: CSV는 HDF5보다 metadata 표현력이 약하다. 따라서 Abaqus version, unit note, unsupported keyword note, tolerance는 `references/README.md`, case manifest, 또는 추후 metadata 파일에 보강해야 한다. `quad_01.inp`처럼 `S4R`, `Part/Assembly/Instance`, `NLGEOM=YES`를 포함하는 reference input은 저장 reference로 보존하되 Phase 1 parser 지원 범위를 자동으로 확장하지 않는다.
---
### ADR-017: CMake and CTest Phase 1 Build Harness
**결정**: Phase 1의 기본 빌드 및 테스트 harness는 CMake와 CTest를 사용한다. `scripts/validate_workspace.py``CMakeLists.txt`를 발견하면 configure, build, CTest 순서로 검증을 수행한다.
**이유**: FESA의 핵심 구현 언어는 C++17 이상이고, Phase 1은 외부 solver library 없이도 core/parser/DOF/result/comparator/element tests를 반복 실행해야 한다. CMake/CTest는 Visual Studio/MSVC와 다른 C++ toolchain 모두에서 표준적인 최소 공통 경로를 제공한다.
**트레이드오프**: oneAPI MKL, TBB, HDF5 adapter가 추가될 때 CMake dependency discovery가 더 복잡해진다. 대신 Phase 1에서는 외부 API를 core에 노출하지 않고 deterministic test adapter로 검증을 시작할 수 있다.
---
### ADR-018: Phase 1 MITC4 Baseline Closure
**결정**: Phase 1 MITC4 baseline은 `docs/MITC4_FORMULATION.md`의 closed baseline decisions를 따른다. 핵심 결정은 midside transverse shear tying interpolation, averaged-edge local shell basis, 2x2 Gauss integration, `drilling_stiffness_scale = 1.0e-6`, 그리고 mandatory result output을 `U``RF`로 제한하는 것이다.
**이유**: MITC4 element implementation은 문서화된 baseline 없이 시작하면 reference 검증 전 수치 drift가 생기기 쉽다. Phase 1은 Abaqus S4 reference artifact가 아직 부족하므로, 작고 검증 가능한 baseline을 먼저 고정하고 element-level tests와 internal equilibrium tests로 보호한다.
**트레이드오프**: 이 baseline은 첫 구현을 안정화하기 위한 보수적 선택이며 Abaqus S4 reference 통과 후 drilling scale, warped-quadrilateral basis, stress/strain recovery, and shell resultant outputs may need refinement. `S4R`, reduced integration, and hourglass control remain out of scope.
+62 -25
View File
@@ -35,6 +35,47 @@ Non-scope:
- Thermal-stress coupling.
- Mesh quality diagnostics.
## Phase 1 Closed Baseline Decisions
The following decisions close the Phase 1 implementation gate for the first baseline C++ implementation. They are intentionally conservative and may be revised by ADR after Abaqus S4 reference cases are added.
Decisions:
- Mandatory Phase 1 result outputs are limited to nodal `U` and `RF`. Element `S`, `E`, and `SF` remain future outputs.
- In-plane membrane and bending terms use standard bilinear Reissner-Mindlin interpolation with 2x2 Gauss integration.
- Transverse shear uses MITC4 mid-side tying interpolation:
```text
gamma_xz_mitc(r, s) =
0.5 * (1 - s) * gamma_xz(0, -1)
+ 0.5 * (1 + s) * gamma_xz(0, +1)
gamma_yz_mitc(r, s) =
0.5 * (1 - r) * gamma_yz(-1, 0)
+ 0.5 * (1 + r) * gamma_yz(+1, 0)
```
- The four tying points are the midside natural-coordinate points `(0,-1)`, `(0,+1)`, `(-1,0)`, and `(+1,0)`.
- Local basis construction uses averaged opposite edges:
```text
v1 = 0.5 * ((x2 - x1) + (x3 - x4))
v2 = 0.5 * ((x4 - x1) + (x3 - x2))
e1 = normalize(v1)
e2_raw = v2 - dot(v2, e1) * e1
e2_pre = normalize(e2_raw)
e3 = normalize(cross(e1, e2_pre))
e2 = normalize(cross(e3, e1))
```
- For mildly warped quadrilaterals this is an averaged midsurface basis. Severe warpage is not diagnosed as mesh quality in Phase 1, but near-zero vectors or Jacobians are invalid/singular element diagnostics.
- Integration point order for stiffness tests is `(-g,-g)`, `(g,-g)`, `(g,g)`, `(-g,g)` conceptually, with `g = 1 / sqrt(3)`. Implementation may loop over the same set in row-major order as long as assembled stiffness is invariant.
- The default drilling stiffness scale is:
```text
drilling_stiffness_scale = 1.0e-6
```
The current baseline applies this scale to a representative `E * thickness` drilling stabilization term. The value is reported through the element options path and must be revisited after Abaqus S4 displacement references are available.
## Nodal DOFs
Each node has:
@@ -64,7 +105,7 @@ Node ordering:
- Abaqus `TYPE=S4R` is not supported in Phase 1.
## Coordinate Frames
The exact local basis construction must be completed before MITC4 implementation.
The Phase 1 local basis construction is defined by the averaged-edge algorithm in `Phase 1 Closed Baseline Decisions`.
Minimum requirements:
- Define a local shell normal from the quadrilateral geometry.
@@ -73,11 +114,10 @@ Minimum requirements:
- Document behavior for non-planar quadrilaterals.
- Use the same convention consistently for stiffness, stress/strain recovery, and result output.
Recommended Phase 1 convention:
- Use the element midsurface geometry to compute an average normal.
- Use a projected global axis to define the local 1-direction when possible, matching Abaqus convention conceptually.
- Fall back to a stable element-edge-based direction when the projected global axis is nearly parallel to the normal.
- Record the final algorithm in this document before coding.
Phase 1 convention:
- Use the element midsurface geometry to compute an average basis from opposite edges.
- Use the positive shell normal implied by the input node ordering.
- Use a right-handed local basis consistently for stiffness, reaction recovery, and future result output.
## Shape Functions
Baseline quadrilateral bilinear interpolation:
@@ -108,12 +148,12 @@ MITC4 requirement:
- Use MITC transverse shear interpolation to alleviate shear locking.
- Do not replace MITC4 with plain full-integration Reissner-Mindlin Q4.
The exact tying point equations and shear interpolation formula must be added from the selected primary source before implementation.
The Phase 1 transverse shear tying formula is the midside interpolation stated in `Phase 1 Closed Baseline Decisions`.
## Numerical Integration
Initial Phase 1 plan:
- In-plane integration: 2x2 Gauss for membrane/bending/shear stiffness unless the final formulation requires a different split.
- Thickness integration: homogeneous linear elastic section may be integrated analytically or with a documented simple rule.
Phase 1 baseline:
- In-plane integration: 2x2 Gauss for membrane, bending, MITC shear, and drilling stabilization.
- Thickness integration: homogeneous linear elastic shell section is integrated analytically using `t`, `t^3 / 12`, and shear correction `5 / 6`.
- Benchmark literature commonly reports 2x2 in-plane Gauss integration for S4/MITC4-style 4-node elements and 2-point thickness integration in comparative shell studies.
Rules:
@@ -124,6 +164,7 @@ Rules:
## Drilling DOF Stabilization
Decision:
- Phase 1 uses small artificial drilling stiffness.
- Default scale: `drilling_stiffness_scale = 1.0e-6`.
Requirements:
- Expose a parameter such as `drilling_stiffness_scale`.
@@ -132,13 +173,14 @@ Requirements:
- Include benchmark sensitivity checks if reference results are sensitive to the value.
- Report the value in result metadata.
Open default proposal:
Baseline rule:
```text
k_drill = alpha * representative_element_stiffness
k_drill = drilling_stiffness_scale * representative_element_stiffness
representative_element_stiffness = E * thickness
```
where `alpha` should be selected only after reviewing formulation sources and early reference cases.
The representative stiffness may be refined after the first Abaqus S4 reference cases are available.
## Element Outputs
Phase 1 minimum:
@@ -165,15 +207,14 @@ Before integration with the global solver:
- drilling stiffness sensitivity check.
## Pre-Implementation Gate
Do not implement `MITC4Element` until these decisions are recorded in this document or a linked ADR:
- exact transverse shear tying point equations.
- exact local shell basis algorithm for flat and non-flat quadrilaterals.
- exact default drilling stiffness scale and parameter name.
- exact integration point ordering.
- whether Phase 1 reports only `U` and `RF`, or also element stress/strain/resultant fields.
- stress/strain recovery locations if `S`, `E`, or `SF` are included in Phase 1.
Phase 1 baseline implementation may proceed because these items are now recorded above:
- transverse shear tying point equations.
- local shell basis algorithm for flat and mildly warped quadrilaterals.
- default drilling stiffness scale and parameter name.
- integration point set and ordering convention.
- Phase 1 mandatory output scope: `U` and `RF` only.
If implementation starts before all optional stress/resultant decisions are closed, limit Phase 1 mandatory outputs to `U` and `RF`.
Stress/strain recovery locations for `S`, `E`, and `SF` remain future decisions and must not be implemented as mandatory Phase 1 outputs.
## Reference Benchmarks
MITC4 baseline acceptance should include:
@@ -212,9 +253,5 @@ S4R:
- Requires reduced integration and hourglass control decisions.
## Open Decisions Before Coding
- Exact MITC4 transverse shear tying point formula.
- Exact element local basis for warped quads.
- Exact drilling stiffness default.
- Exact stress/strain recovery locations.
- Whether Phase 1 reports `S`, `E`, and `SF`, or only `U` and `RF`.
- Whether local coordinate transforms from Abaqus input are deferred or rejected.