docs: consolidate solver knowledge and preserve formulation originals

This commit is contained in:
KOKO\Mimi
2026-10-17 22:34:12 +09:00
parent 149e7e2de8
commit d76602a0f1
19 changed files with 1740 additions and 380 deletions
+62 -28
View File
@@ -1,38 +1,72 @@
# MITC4 비선형 정적 해석
# MITC4 비선형 정적 Newton 해석
## 목적과 현재 범위
## 목적과 경계
유한회전 total chart, 같은 trial의 residual/tangent, Newton·증분·rollback를 구현한 기능이다. 역사적 기능 검증과 현재 통합 회귀의 범위를 구분한다.
최근 dev 통합 회귀는 [전체 현황](../tracking/status.md)에 연결하며, 과거 release 판정은
[release.md](release.md)에 남긴다. 문서 정리는 새 기능 검증이나 재승인을 뜻하지 않는다.
등방 선형탄성 MITC4의 기하 비선형 정적 응답을 full Newton으로 계산한다.
재료 비선형·contact·arc length·line search·자동 cutback은 이 기능에 포함하지 않는다.
고정 global dead nodal force/moment와 factor-one prescribed target을 공통 load factor로 증가시킨다.
후속 pressure 확장은 [shell pressure](../shell-surface-pressure-load/README.md)를 따른다.
공통 소유권·실행은 [solver-core](../solver-core/README.md), 자세한 수식은 [정식화](formulation.md)다.
## 계약과 재사용 Handoff
## 채택한 수식과 이유
- [요구사항·acceptance](requirements.md): 지원·제외와 기존 요구사항 ID.
- [정식화](formulation.md): 수식·가정·부호·좌표계·복구 위치.
- [I/O](io.md): 입력 subset·진단·source identity·결과 schema.
- [Reference 모델](reference-model.md): 원본과 비교량·행 identity·적용 범위.
- [독립 수치 검토](numerical-review.md): 검산·위험·반례와 수정 확인.
- [검증·물리 결과](verification.md): 실제 실행한 명령·수치·실패·미실행·한계.
- [연구 근거](research.md): 정식화에 필요한 출처와 적용 경계.
고정 reference의 Total Lagrangian geometry와 finite rotation-vector total chart를 사용한다.
초기 director/frame에서 같은 trial의 기하·strain·internal force·consistent tangent를 계산한다.
Rotation-vector generalized moment와 global spatial moment는 일의 짝이 다르다.
반력의 공개 moment 복구에서 chart 변환을 적용하며 성분명 변경으로 대체하지 않는다.
Physical MITC strain·constitutive response와 objective numerical drilling potential을 분리한다.
Drilling scale은 초기 상태에서 정하고 trial마다 다시 tuning하지 않는다.
평형 residual은 internal minus external이며 follower load가 있으면 tangent는
`Kint-dFext/dq`다. Unsymmetric tangent를 대칭화하지 않는다.
공통 소유권은 [ARCHITECTURE](../ARCHITECTURE.md)를 따른다. Element는 local 계산,
Assembly는 결정적 reduction, Procedure는 trial/commit, Recovery는 물리 의미,
Writer는 직렬화를 담당한다. 새 기능에서 기존 stage/phase 실행 계획을 재사용하지 않는다.
현재 공개 API는 `include/fesa/`, 실제 구현은 `src/fesa/`와 대응 검사를 확인한다.
## 입력과 결과 대응
## 사용법
`*STEP,NLGEOM=YES` 아래 단일 `*STATIC`을 사용한다.
Data는 `initial_increment,time_period,minimum_increment,maximum_increment` 네 양수다.
`time_period=1.0`이며 initial increment가 고정 h다. 최소·최대 값은 호환성 metadata다.
h의 ordinal multiple과 마지막 exact factor one을 사용하고 실패 시 increment를 줄여 재시도하지 않는다.
`S4|S4R`, centered `*SHELL SECTION`, `*ELASTIC`, identity instance와 DOF 1–6 BC를 사용한다.
`*CLOAD`는 global dead load이며 aggregate drilling-direction moment는 거부한다.
Composite·offset·instance transform·amplitude·MPC·restart·다중 step은 범위 밖이다.
환경 준비·build·CTest·CLI 기본 사용은 [operations](../operations.md), 입력과 결과의
공통 계약은 [contracts](../contracts.md)를 따른다. 이 기능의 keyword·option 허용 범위는
위 I/O 계약을 확인한다. 과거 보고서의 machine 경로·임시 command를 현재 기본값으로 쓰지 않는다.
HDF5 nonlinear schema `1`은 `Step-1`의 accepted frame과 load factor를 보존한다.
각 `/steps/Step-1/frames/<k>`에 displacement, reaction 및 4 GP physical shell recovery가 있다.
Bottom/middle/top stress 위치를 보존하며 nodal stress로 평균하지 않는다.
실패 iteration은 accepted frame이 아니며 Newton log와 최종 HDF5는 서로 다른 수명이다.
## 개발 과정과 주의사항
| Reference bundle | 대응과 의미 |
| --- | --- |
| `reference/shell/` | linear-limit 회귀, 비선형 응답 evidence 아님 |
| `reference/shellNL/` | 49 nodes·36 S4의 factor-one final displacement |
| `reference/shellNL-meshfine/` | 729 nodes·676 S4의 factor-one final displacement |
| `reference/shellNL-meshfine_02/` | 별도 후속 final-state 비교, 앞 사례의 단순 대체 아님 |
기존 단계별 계획·coordination은 완료된 실행 운영 기록이어서 제거했다. 승인된 요구사항·
수식·검토·실제 검증 결과는 위 문서에 보존한다. Git `858e87b`의 이전 경로는 당시 원문을
조회하는 용도로만 사용하며 현행 작업 지침이 아니다.
각 bundle의 같은 stem `displacements.csv`에서 frame·instance·source node를 맞춘다.
U1–3는 blocking, UR1–3는 warning-only다. Constrained local RF1–3와 spatial RM1–2는 review-only다.
RM3와 stress는 external comparison family를 만들지 않는다.
Fine optional stress의 malformed node label `ss`는 비차단 inventory 문제이며 원본을 보정하지 않는다.
Family의 reference-only `S=max(abs(ref))`에 대해 near-zero `abs(ref)<=0.01*S`는
error `<=0.01*S`, 나머지는 relative error `<=5%`, family RMS/S `<=1%`를 함께 검사한다.
Zero-scale은 exact zero다. Blocking·warning·review의 수치와 판정 영향을 구분한다.
내부 accepted free residual·force/moment 평형의 normalized 기준은 `1e-10`이다.
- 실패한 trial·candidate는 기존 accepted state와 최종 결과를 변경하지 않아야 한다.
- 같은 trial의 기하·내력·하중·접선을 사용하고 generalized rotation moment와 spatial moment를 구분한다.
- [수정·실패 기록](lessons.md)에 원인과 검증 결과를 보존한다.
## 구현과 상태 수명
[NonlinearMitc4Shell](../../include/fesa/elements/nonlinear_mitc4_shell.h)은 immutable evaluator다.
`EvaluateInternalResidualAndTangent`는 한 trial의 내력·접선·물리 복구를 함께 돌려준다.
[Kernel 구현](../../src/fesa/elements/nonlinear_mitc4_shell.cpp)은 accepted state를 소유하지 않는다.
[NonlinearStaticProcedureExecutor](../../include/fesa/analysis/nonlinear_static_procedure.h)의
`Execute`가 증분·trial·수렴·commit을 소유한다.
[Procedure 구현](../../src/fesa/analysis/nonlinear_static_procedure.cpp)은 최대 100 Newton iterations를 허용한다.
Domain→non-owning model→stable full/free DOF→local trial response→ordered assembly→tangent solve 흐름이다.
수렴과 내부 검증을 마친 상태만 accepted collection에 추가한다.
실패 trial은 이전 accepted state와 기존 final HDF5를 오염시키지 않아야 한다.
## 검증에서 배운 점과 남은 경계
기존 nonlinear reference와 rollback·finite rotation·tangent·equilibrium 검증 기록이 있다.
이는 새 revision의 build/test 통과를 의미하지 않으며 이번 작업은 문서 정리만 수행한다.
Reaction은 단일 global 합만 맞춰 local reaction 정확성을 대체할 수 없다.
큰 자세 변화와 원점 이동에서 spatial moment balance를 함께 확인해야 한다.
외부 U 통과는 warning UR 또는 review RF/RM의 수치 일치를 뜻하지 않는다.
현재 prescribed path와 단일재료 shell 사례가 arbitrary nonlinear 모델의 수렴을 보장하지 않는다.