docs: consolidate solver knowledge and preserve formulation originals
This commit is contained in:
@@ -1,38 +1,78 @@
|
||||
# MITC4 질량·FEAST 고유치해석
|
||||
# MITC4 lumped mass·FEAST 고유치해석
|
||||
|
||||
## 목적과 개발 결과
|
||||
## 목적과 지원 범위
|
||||
|
||||
MITC4 consistent mass에서 유도한 nodal block lumping, 공변 drilling stabilization,
|
||||
실제 경계조건을 먼저 적용하는 finite-space reduction과 실제 MKL FEAST를 구현했다.
|
||||
사용자 승인 첫 구현 범위에서 2026-09-10 전체 417/417 PASS 기록이 있다.
|
||||
현재 통합 회귀와 이 기능 당시의 검증은 [전체 현황](../tracking/status.md)에서 구분한다.
|
||||
원형상·무응력 MITC4의 무감쇠 선형 고유진동 `K*phi=lambda*M_L*phi`를 푼다.
|
||||
Consistent moment에서 유도한 nodal block lumped mass와 실제 MKL FEAST를 사용한다.
|
||||
Prestress·nonlinear eigen·damping·acoustic·modal transient·외부 mode-shape equality는 포함하지 않는다.
|
||||
공통 실행·소유권은 [solver-core](../solver-core/README.md)를 따른다.
|
||||
수학 원문은 [전체 정식화](formulation.md), [mass·stabilization](formulation-mass-stabilization.md),
|
||||
[축소·FEAST](formulation-eigen.md)이며 [이전 유도](../mitc4-shell-feast-eigen/README.md)의 채택 경계를 구분한다.
|
||||
|
||||
## 계약과 사용법
|
||||
## 채택한 설계와 이유
|
||||
|
||||
- [PRD](PRD.md)·[ADR](ADR.md): 모드별 외부5% 수용, residual stopping, S3 후속 보류.
|
||||
- [요구사항](requirements.md#requirements): MFE2 ID·verification matrix와 이전 MFE 대응.
|
||||
- [정식화](formulation.md), [질량·stabilization](formulation-mass-stabilization.md),
|
||||
[축소·FEAST](formulation-eigen.md): 물리 질량·drill null·constraint-first 축소.
|
||||
- [I/O](io.md#io): Density/Frequency keyword·N·결과 source/mode identity·HDF5 controls.
|
||||
- [Reference](reference-model.md): Value-only 대응과 승인 first-implementation policy.
|
||||
- [내부 수치 기준](numerical-review-controls.md), [검증 사례](numerical-review-cases.md),
|
||||
[독립 수학 검산](numerical-review.md#numerical-review), [연구](research.md#research).
|
||||
- [실행 결과](implementation-verification.md), [구현 독립 검토·교훈](implementation-review.md).
|
||||
Mass는 `3×3×3` 적분의 scalar thickness moments를 row-sum하여 nodal `6×6` block으로 만든다.
|
||||
3 병진·2 director 접평면 회전 관성과 warped geometry cross coupling을 보존한다.
|
||||
Numerical drill은 analytic mass null이며 인공 drilling inertia를 넣지 않는다.
|
||||
Stabilization scale은 초기 physical rotary diagonal 8개 trace 평균의 `10^-3`이다.
|
||||
Global 실제 BC를 먼저 적용하고 analytic null과 free 공간의 교집합만 제거한다.
|
||||
Partial rotational BC를 full clamp로 대체하지 않고 finite constrained spectrum을 유지한다.
|
||||
Positive nodal mass space를 whitening하고 sparse symmetric 문제를 FEAST에 전달한다.
|
||||
완전한 interval의 c개 결과를 검증한 후 사용자 요청 lowest N만 공개한다.
|
||||
N 밖의 실패한 eigenpair를 버려 성공으로 바꾸지 않는다.
|
||||
Trace convergence만으로 개별 residual을 보장하지 못해 C-index `fpm[5]=0` residual stopping을 채택했다.
|
||||
|
||||
실행 환경·CLI는 [operations](../operations.md)를 따른다. Keyword/option 허용 범위와
|
||||
HDF5 control 값은 I/O 계약을 확인한다. 외부5% 정책을 다른 해석의 RMS1%에 확대하지 않는다.
|
||||
## 실제 입력 subset
|
||||
|
||||
## 재사용 Handoff
|
||||
`S4|S4R`, centered homogeneous shell, `*ELASTIC`과 양의 상수 `*DENSITY`를 사용한다.
|
||||
유일한 frequency step은 optional `NAME`, `NLGEOM=NO`, flag `PERTURBATION`을 허용한다.
|
||||
`*FREQUENCY`의 `EIGENSOLVER=LANCZOS`는 source 값이며 실제 FEAST mapping warning을 남긴다.
|
||||
`SIM=YES`/flag, `ACOUSTIC COUPLING=ON`은 structural-only source 의미를 보존한다.
|
||||
`NORMALIZATION=MASS`만 허용하며 실제 normalization은 derived lumped mass 기준이다.
|
||||
Data 첫 field N은 양의 checked int64, 뒤 2–7 field는 존재하면 모두 empty여야 한다.
|
||||
Nonempty zero bounds·shift, eighth field, 여러 step·preload·load·nonzero BC는 거부한다.
|
||||
Source step 이름과 canonical storage `Step-1`은 별개이며 원본 `Step-2`를 잃지 않는다.
|
||||
|
||||
질량·축소·FEAST state는 frequency의 소유다. HHT의 consistent kinetic mass를 이 lumped
|
||||
modal 질량으로 대체하지 않는다. Partial rotational BC를 full clamp로 바꾸거나 임의
|
||||
drilling inertia를 추가하지 않는다. 이전 MFE 유도의 채택 경계는 정식화 표를 따른다.
|
||||
실제 public core·private backend 경계는 [ARCHITECTURE](../ARCHITECTURE.md)에 연결한다.
|
||||
## 결과와 reference 대응
|
||||
|
||||
## 실패와 남은 범위
|
||||
HDF5는 `schema_version=0`, `eigen_schema_version=1`, procedure `linear-frequency`로 식별한다.
|
||||
`/steps/Step-1/eigen/modes`는 mode ID·raw eigenvalue·classification·cluster ID를 가진다.
|
||||
`vectors[N,node,6]`은 mass-normalized mode이며 response displacement가 아니다.
|
||||
Constrained 성분은 exact zero이고 sign은 최대 scaled global component의 stable rule로 정한다.
|
||||
Raw 작은 음수 lambda를 clamp하지 않는다. Frequency는 lambda>=0 mode subset만 생성한다.
|
||||
`verification`에는 전체 c개 residual·Gram·null 검사와 backend call/control evidence를 보존한다.
|
||||
|
||||
Trace stopping은 전체 c개의 독립 residual을 만족하지 못했고 C-index `fpm[5]=0`의
|
||||
residual stopping으로 수정했다. 초기 외부 RMS1% 불일치는 사용자 승인 후 첫 구현
|
||||
policy로 판정했으며 과거 실패 기록을 바꾸지 않았다. 최대 외부 상대차는 약4.261331%다.
|
||||
S3 public static 평형 충돌과 Abaqus Value 정확도 개선은 보류다. 실제512회 vendor 호출·
|
||||
HDF5 close-error 전체 주입 및 모든 모델의 정확도를 검증했다고 주장하지 않는다.
|
||||
| 원본 | 비교 계약 |
|
||||
| --- | --- |
|
||||
| `reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine.inp` | 유일한 source frequency step `Step-2`, N=10 |
|
||||
| 같은 폴더 `shellNL-eigen-meshfine eigenvalues.txt` | `Frame: Mode <id>: Value = ... Freq = ... (cycles/time)` |
|
||||
|
||||
Step·mode ID·Value·time^-2를 직접 대응하며 TXT Freq로 lambda를 재구성하지 않는다.
|
||||
Duplicate/missing/extra mode·malformed/nonfinite·unit/mass/backend/schema 오류는 tolerance 전에 실패한다.
|
||||
동일 Value의 서로 다른 mode는 합치거나 평균하지 않는다.
|
||||
승인된 named policy `mitc4-eigen-first-implementation`은 mode별 singleton의
|
||||
relative row error와 relative RMS를 각각 `<=5%` inclusive로 검사한다.
|
||||
Report는 policy_id와 relative_rms_tolerance를 기록한다.
|
||||
이 예외는 다른 공통 family의 row 5%·RMS 1%를 바꾸지 않는다.
|
||||
전체 c개 독립 내부 residual·Gram 등 `1e-10` 기준도 그대로다.
|
||||
|
||||
## 구현·데이터 흐름·수명
|
||||
|
||||
[Mitc4Shell::Mass](../../include/fesa/elements/mitc4_shell.h)와 [kernel](../../src/fesa/elements/mitc4_shell.cpp)이 local mass를 만든다.
|
||||
[LinearFrequencyProcedureExecutor::Execute](../../include/fesa/analysis/linear_frequency_procedure.h)는
|
||||
[실제 procedure](../../src/fesa/analysis/linear_frequency_procedure.cpp)에서 stable assembly·modal candidate를 소유한다.
|
||||
[BuildEigenReduction](../../src/fesa/analysis/eigen_reduction.h)은 constrained lift·null split·whitening을 만든다.
|
||||
[MklFeastEigenSolver::Solve](../../include/fesa/solvers/eigen/mkl_feast_eigen_solver.h)는 private vendor adapter다.
|
||||
Domain→local K/M→ordered assembly→reduced solve→global phi 복원→all-c 검증→N 선택 순서다.
|
||||
[EigenHdf5ResultsWriter](../../include/fesa/io/hdf5/eigen_hdf5_results_writer.h)는 검증 state를 직렬화한다.
|
||||
출력 close/self-check/atomic replace 실패는 candidate를 폐기하고 기존 final을 보존한다.
|
||||
|
||||
## 실제 evidence와 미해결 범위
|
||||
|
||||
2026-09-10 사용자 승인 첫 구현에서 전체 417/417 PASS와 원본 10 Value의 모드별5% 통과 기록이 있다.
|
||||
최대 외부 상대차는 약 `4.261331%`다. 이전 RMS1% 불일치 이력은 소급 PASS로 고치지 않는다.
|
||||
이 기록은 당시 revision의 evidence이며 이번 문서 정리는 새 build/test를 실행하지 않았다.
|
||||
Rational mass oracle·Jensen energy·좌표 재계산 공변성·density scaling·all-c 실패 주입이 보완 근거다.
|
||||
S3 public static 평형 충돌과 Abaqus Value 정확도 개선은 후속 보류다.
|
||||
실제 512회 vendor 호출 또는 실제 HDF5 close-error의 모든 조합을 주입한 것은 아니다.
|
||||
Retained shell/shellNL 회귀와 내부 검증 의무를 유지하며 `reference/temp` 제외 예제를 재사용하지 않는다.
|
||||
|
||||
Reference in New Issue
Block a user