docs: consolidate solver knowledge and preserve formulation originals
This commit is contained in:
@@ -1,40 +1,70 @@
|
||||
# MITC4 선형 정적 Shell
|
||||
# MITC4 shell 선형 정적 해석
|
||||
|
||||
## 목적과 현재 범위
|
||||
## 목적과 경계
|
||||
|
||||
S4/S4R 승인 subset, director·MITC4 shear·drilling 분리와 단면력 복구를 구현한 기능이다. 역사적 기능 검증과 현재 통합 회귀의 범위를 구분한다.
|
||||
최근 dev 통합 회귀는 [전체 현황](../tracking/status.md)에 연결하며, 과거 release 판정은
|
||||
[release.md](release.md)에 남긴다. 문서 정리는 새 기능 검증이나 재승인을 뜻하지 않는다.
|
||||
4절점 shell의 작은 변형·회전 막·굽힘·횡전단 응답을 해석한다.
|
||||
Source `S4`와 `S4R`는 모두 내부 `FESA-MITC4`로 매핑한다.
|
||||
`S4R` 이름은 Abaqus reduced integration이나 hourglass 공식을 선택하지 않는다.
|
||||
중앙면 기준 일정 두께, 단층 등방 선형탄성이 대상이다.
|
||||
Composite·offset·material nonlinearity·mixed beam-shell은 이 기능 범위 밖이다.
|
||||
공통 규칙은 [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): 정식화에 필요한 출처와 적용 경계.
|
||||
각 절점의 6 global DOF에서 director 접평면의 5 physical DOF를 분리한다.
|
||||
Bilinear geometry와 canonical edge-midpoint tying으로 공변 횡전단장을 보간한다.
|
||||
이는 직접 shear interpolation의 locking을 줄이기 위한 MITC 선택이다.
|
||||
물리 stiffness는 고정 `2×2×2` 적분을 사용한다.
|
||||
Numerical drilling stiffness는 physical stiffness와 별도이며 stress/resultant/physical energy에 넣지 않는다.
|
||||
현재 구현의 scale은 physical rotary diagonal 8개의 trace 평균에 `10^-3`을 곱한다.
|
||||
이 값은 후속 eigen2에서 채택한 규칙이며 초기 최소 양의 대각 규칙을 현행으로 재사용하지 않는다.
|
||||
Centered section은 `N=A*epsilon0`, `M=D*kappa`, `Q=As*gamma0`를 쓴다.
|
||||
특히 `D=t^3*Cps/12`이며 막력과 같은 두께 계수로 바꾸지 않는다.
|
||||
|
||||
공통 소유권은 [ARCHITECTURE](../ARCHITECTURE.md)를 따른다. Element는 local 계산,
|
||||
Assembly는 결정적 reduction, Procedure는 trial/commit, Recovery는 물리 의미,
|
||||
Writer는 직렬화를 담당한다. 새 기능에서 기존 stage/phase 실행 계획을 재사용하지 않는다.
|
||||
현재 공개 API는 `include/fesa/`, 실제 구현은 `src/fesa/`와 대응 검사를 확인한다.
|
||||
## 입력과 결과 대응
|
||||
|
||||
## 사용법
|
||||
`*ELEMENT,TYPE=S4|S4R`, `*SHELL SECTION,ELSET=...,MATERIAL=...`,
|
||||
`thickness[,integration_points]`, `*ELASTIC`과 identity-instance 모델을 사용한다.
|
||||
Section의 optional integration-point 수는 source metadata이며 실제 적분법을 바꾸지 않는다.
|
||||
DOF 1–6의 지정값과 global nodal `*CLOAD`, 단일 linear `*STATIC`을 지원한다.
|
||||
Geometry·director·양의 Jacobian을 검사하며 director-parallel aggregate nodal moment는 거부한다.
|
||||
그 방향의 artificial stiffness를 physical moment 저항으로 사용하지 않는다.
|
||||
Pressure 입력은 [shell pressure](../shell-surface-pressure-load/README.md)가 추가한 별도 계약이다.
|
||||
Output 요청 allowlist는 warning no-op이며 mandatory result를 선택하거나 억제하지 못한다.
|
||||
|
||||
환경 준비·build·CTest·CLI 기본 사용은 [operations](../operations.md), 입력과 결과의
|
||||
공통 계약은 [contracts](../contracts.md)를 따른다. 이 기능의 keyword·option 허용 범위는
|
||||
위 I/O 계약을 확인한다. 과거 보고서의 machine 경로·임시 command를 현재 기본값으로 쓰지 않는다.
|
||||
결과는 `/steps/Step-1/frames/0`의 global nodal displacement/reaction과 shell recovery다.
|
||||
각 element의 4 midsurface Gauss 위치에 local frame, 8 generalized strain/resultant를 보존한다.
|
||||
Stress `[S11,S22,S12]`는 각 Gauss 위치의 bottom/middle/top에서 복구한다.
|
||||
Nodal averaging, Abaqus extrapolated stress와의 임의 대응, `S33/S13/S23` 출력은 만들지 않는다.
|
||||
|
||||
## 개발 과정과 주의사항
|
||||
| Reference | 판정 범위 |
|
||||
| --- | --- |
|
||||
| `reference/shell/shell.inp`와 `shell displacements.csv` | 49 nodes, 36 S4; global U1–3 blocking, UR1–3 warning-only |
|
||||
| 같은 폴더 reactions/stresses CSV | 검토용이며 equality gate 아님 |
|
||||
| Optional Abaqus S4R artifacts | 외부 비교에 소비하지 않음 |
|
||||
|
||||
기존 단계별 계획·coordination은 완료된 실행 운영 기록이어서 제거했다. 승인된 요구사항·
|
||||
수식·검토·실제 검증 결과는 위 문서에 보존한다. Git `858e87b`의 이전 경로는 당시 원문을
|
||||
조회하는 용도로만 사용하며 현행 작업 지침이 아니다.
|
||||
Key는 frame·instance·source node·component이며 row-set·finite·unit/location을 먼저 검사한다.
|
||||
공통 family의 reference-only `S`에 대해 near-zero `abs(ref)<=0.01*S`는 error `<=0.01*S`,
|
||||
그 밖은 relative error `<=5%`, family `RMS(error)/S<=1%`를 동시에 요구한다.
|
||||
`S=0`은 exact zero다. UR 수치 실패는 warning이며 잘못된 identity를 허용하는 의미는 아니다.
|
||||
내부 free residual·전역 force/moment balance는 normalized `1e-10` 한계다.
|
||||
|
||||
- [MITC4 시행착오와 수정 기록](../MITC4_SUPP.md)을 함께 읽는다.
|
||||
- 아래 원래 정식화의 최소 대각 drilling scale은 당시 계약이다. 현재 공변 trace-average 변경은
|
||||
[고유치 기능의 질량·stabilization](../mitc4-shell-feast-eigen2/formulation-mass-stabilization.md)을 따른다.
|
||||
물리 strain/MITC4 정의와 수치 stabilization 변경을 분리한다. S3 partial-BC 충돌의 보류도 함께 확인한다.
|
||||
- `S4R` spelling은 FESA의 적분법 선택 스위치가 아니며 section resultant의 위치·단위·두께 계수를 유지한다.
|
||||
## 구현과 데이터 흐름
|
||||
|
||||
[Mitc4Shell](../../include/fesa/elements/mitc4_shell.h)의 `Create`, `Stiffness`,
|
||||
`StrainDisplacement20`, `RecoverPhysical`가 geometry·수식·물리 복구를 담당한다.
|
||||
[실제 kernel](../../src/fesa/elements/mitc4_shell.cpp)은 physical/drilling/stabilized 행렬을 분리한다.
|
||||
Domain이 source definition과 초기 frame을 소유하며 AnalysisModel은 Domain보다 짧게 산다.
|
||||
DofManager mapping→element-local buffer→결정적 assembly→free solve→full residual 순서다.
|
||||
[ShellResultRecovery](../../src/fesa/results/shell_result_recovery.h)는 위치별 typed candidate를 생성한다.
|
||||
Procedure는 해석 상태, writer는 serialization을 소유하며 element에 equation·writer를 넣지 않는다.
|
||||
|
||||
## 검증 의미와 한계
|
||||
|
||||
과거 S4 reference는 147 blocking U rows와 평형·대칭·constitutive·physical energy 검사를 통과했다.
|
||||
그때 중심 U3는 약 `-2.35504418e-5`, normalized free residual은 약 `1.08e-14`였다.
|
||||
이는 당시 실행 evidence이며 이번 문서 정리에 따른 현재 build/test 통과 선언이 아니다.
|
||||
Patch·rigid-mode·rank·drilling 분리 검사는 한 개의 외부 plate 사례를 보완한다.
|
||||
직접 shell end-action 출력이 없어 GP 값에서 element-end 평형을 추정하지 않는다.
|
||||
Distorted/curved membrane locking, 광범위 mesh convergence, pinched cylinder 등은 미특성화다.
|
||||
전단 tying을 사용한다는 사실만으로 모든 thin/thick·곡면 정확도가 검증되었다고 말하지 않는다.
|
||||
|
||||
Reference in New Issue
Block a user