docs: consolidate solver knowledge and preserve formulation originals
This commit is contained in:
@@ -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 모델의 수렴을 보장하지 않는다.
|
||||
|
||||
Reference in New Issue
Block a user