modify documents
This commit is contained in:
@@ -33,7 +33,7 @@ Feature 범위·상태는 [PRD](PRD.md), 상세 acceptance intent는 [requiremen
|
||||
- 상태: `researched-input-interpretation`; FESA 정식화·전체 입력 지원 승인과 구별.
|
||||
- 날짜: 2026-09-22
|
||||
- Owner: 메인 assistant; 근거 수집은 research-agent.
|
||||
- 근거: [Research §3 및 S4–S7](research.md)의 공식 Abaqus 2025 공개 문서와 원본 INP 대조.
|
||||
- 근거: [Research §3 및 S4–S7](research.md#research)의 공식 Abaqus 2025 공개 문서와 원본 INP 대조.
|
||||
- 해석: 무접촉 기본 application은 TRANSIENT FIDELITY/HHT-TF이고 `alpha=-0.05`, `beta=0.275625`, `gamma=0.55`다. 명시 amplitude가 없는 집중하중은 STEP이며 첫 증분부터 전체 크기다. DIRECT는 이 모델에서 고정 시간간격이고, 기본 INITIAL 의미는 초기 가속도 계산이다.
|
||||
- 영향: 이 공개 의미는 CSV fitting으로 정하지 않으며 기본값을 정하기 위한 반복 사용자 질문도 필요하지 않다. FESA 최초 old-force history, `t0-/t0+`와 frame 0, mass-null 초기화는 명시적으로 정식화해야 한다. 공개 의미만으로 reference를 생성한 solver의 내부 초기화·관성 알고리즘을 확인했다고 주장하지 않는다.
|
||||
|
||||
@@ -49,7 +49,7 @@ Feature 범위·상태는 [PRD](PRD.md), 상세 acceptance intent는 [requiremen
|
||||
|
||||
- 상태: `recommended-after-formulation-review`; 물리·구현 범위의 사용자 승인과 구별.
|
||||
- Owner: 메인 assistant; 수식 owner는 formulation-agent, 독립 검토는 numerical-review-agent.
|
||||
- 근거: [정식화](formulation.md), [관성 상세](formulation-inertia.md), [독립 검토](numerical-review.md), [Brüls–Arnold (2008) 원문 식 (5)–(8)](https://orbi.uliege.be/bitstream/2268/27088/1/pa_BrulsArnold2008_TheGeneralizedAlphaSchemeAsALinearMultistepIntegrator.pdf).
|
||||
- 근거: [정식화](formulation.md), [관성 상세](formulation-inertia.md), [독립 검토](numerical-review.md#numerical-review), [Brüls–Arnold (2008) 원문 식 (5)–(8)](https://orbi.uliege.be/bitstream/2268/27088/1/pa_BrulsArnold2008_TheGeneralizedAlphaSchemeAsALinearMultistepIntegrator.pdf).
|
||||
- 추천: `a`는 물리적 좌표 가속도, `A`는 Newmark에 쓰는 보조량으로 정의하고 `A_(n+1)=(1+alpha)a_(n+1)-alpha a_n`와 endpoint 동적 평형을 함께 푼다. `M(q)` 및 convective inertia의 정확한 미분을 접선에 포함한다.
|
||||
- 이유: 단순 current-mass 대입은 variable-mass 제조해에서 1차로 떨어졌다. 두 시점 질량의 가중은 회전하는 질량 영공간을 소실시킬 수 있다. 추천 후보는 제한된 variable-mass 및 moving-null 사례에서 2차 수렴을 보이고 일정 질량 HHT로 환원한다.
|
||||
- 영향: `A`를 physical acceleration으로 출력하지 않는다. 초기화는 전값 STEP force의 `0+` 동적 평형과 대수 일관성을 함께 만족하도록 제안한다. 원문 nonsingular-mass 수렴 결과를 실제 shell의 drilling DAE에 자동 적용하지 않으며 구현 후 별도 시간 수렴·관성·반력·에너지 검증이 필요하다.
|
||||
@@ -68,7 +68,7 @@ Feature 범위·상태는 [PRD](PRD.md), 상세 acceptance intent는 [requiremen
|
||||
- 상태: `accepted-for-current-task`; 수치 검증 설계와 실제 solver 통과를 구별.
|
||||
- Owner: 메인 assistant; 독립 수치 기준·검증 설계는 numerical-review-agent, 추가 근거는 research-agent.
|
||||
- 승인 근거: 사용자의 “numerical research 단계도 진행하세요” 요청과 프로젝트의 독립 수치 검토 원칙.
|
||||
- 결정: [수치 기준](numerical-controls.md), [검증 사례](verification-cases.md), [추가 연구](numerical-research.md), [reference 비교 계약](reference-model.md)을 작성한다. User-selected consistent mass에 대해 Newton·초기 대수조건·질량 영공간·conditioning·관성 접선·시간수렴의 반증 가능한 기준을 정의한다.
|
||||
- 결정: [수치 기준](numerical-controls.md), [검증 사례](verification-cases.md), [추가 연구](research.md#numerical-research), [reference 비교 계약](reference-model.md)을 작성한다. User-selected consistent mass에 대해 Newton·초기 대수조건·질량 영공간·conditioning·관성 접선·시간수렴의 반증 가능한 기준을 정의한다.
|
||||
- 이유·영향: 외부 reference 공통 tolerance를 유지하면서 내부 계산 정확도와 별도의 물리 coverage를 검증한다. 제한된 수식 probe의 실행 결과를 전체 shell·구현·reference 검증으로 승계하지 않는다. I/O field binding과 실제 구현·build/test·reference 비교는 후속 작업이다.
|
||||
|
||||
## HHT-ADR-009 — I/O·구현·Physics Evaluation 수행
|
||||
@@ -77,7 +77,7 @@ Feature 범위·상태는 [PRD](PRD.md), 상세 acceptance intent는 [requiremen
|
||||
- Owner: 메인 assistant; I/O 정의·구현·독립 physics review는 각 할당 담당자.
|
||||
- 승인 근거: 사용자의 “I/O definition, implementation, physics evaluation gate 모두 진행하세요” 및 후속 “깃에 커밋 하면서 진행하세요”.
|
||||
- 결정: HHT-ADR-006의 검토된 physical a/auxiliary A 분리, 0+ full STEP 초기화, HHT-ADR-007의 consistent mass를 실제 구현 대상으로 채택한다. 공개 입력은 [I/O 계약](io-contract.md)의 단일 NLGEOM shell DIRECT·기본 계수·zero 초기조건/고정 BC·constant force CLOAD subset이다. 별도 dynamic state와 dynamic-only HDF5 schema v1을 추가하고 기존 static/eigen 계약은 보존한다.
|
||||
- 영향: [구현 계획](implementation-plan.md)에 따라 MSVC Debug build/CTest, 독립 수치·물리 검증과 지정 원본 reference 비교를 수행한다. 확인된 문서·검증된 구현 묶음을 현 branch에서 순차 커밋한다. 외부 solver 실행·reference 보정·push/release는 포함하지 않는다. 실패·미실행 검증을 통과로 표시하지 않는다.
|
||||
- 영향: [구현 계획](README.md#재사용-handoff)에 따라 MSVC Debug build/CTest, 독립 수치·물리 검증과 지정 원본 reference 비교를 수행한다. 확인된 문서·검증된 구현 묶음을 현 branch에서 순차 커밋한다. 외부 solver 실행·reference 보정·push/release는 포함하지 않는다. 실패·미실행 검증을 통과로 표시하지 않는다.
|
||||
|
||||
|
||||
## HHT-ADR-010 — Newton 시작 형상과 영변형 산술
|
||||
|
||||
@@ -1,43 +1,22 @@
|
||||
# HHT Implicit Dynamics 작업 지침
|
||||
# hht-implicit-dynamics 문서·작업 지침
|
||||
|
||||
- Feature ID: `hht-implicit-dynamics`
|
||||
- Owner: 메인 assistant
|
||||
- 목적: 지정 shell reference를 대상으로 HHT implicit 동적 해석의 요구사항·정식화·수치 검증 계약을 마련한다.
|
||||
- 현재 작업 범위: I/O definition·implementation·physics evaluation 전체 수행 및 검증 묶음별 Git commit.
|
||||
- 현재 상태와 유일한 checklist: [PRD](PRD.md#현재-checklist).
|
||||
- 문서 진입점·목적·사용법·Handoff: [README](README.md).
|
||||
- 현재 범위·checklist: [PRD](PRD.md); 결정·승인·대체 이력: [ADR](ADR.md).
|
||||
- 적용 범위: 해당 기능의 문서. 자동 로드되는 코드 영역 `AGENTS.md`가 아니다.
|
||||
|
||||
기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md),
|
||||
[공통 ADR](../ADR.md#adr-028), [ARCHITECTURE](../ARCHITECTURE.md),
|
||||
[TOLERANCE](../TOLERANCE.md), [Feature 문서 관리](../FEATURE_DOCUMENTATION.md).
|
||||
기준: [프로젝트 지침](../../AGENTS.md), [ARCHITECTURE](../ARCHITECTURE.md),
|
||||
[Feature 문서 관리](../FEATURE_DOCUMENTATION.md), [공통 tolerance](../TOLERANCE.md).
|
||||
|
||||
## 지역 지침
|
||||
## 보존할 계약과 인계
|
||||
|
||||
- 기준 코드는 `dev` commit `23b37ca644563b51472654af3b22811f077f15f6`다. `hht-implicit-dynamics` worktree에서 구현·검증한다.
|
||||
- 사용자가 지정한 `reference/shellNL-dyn-meshfine`의 INP와 CSV를 그대로 조사한다. 원본 reference는 보존하고 FESA solver 구현·실행·비교를 수행한다. Reference 재생성·외부 solver 실행은 포함하지 않는다.
|
||||
- 요구사항은 관찰 가능한 동작과 검증 의도를, 연구는 일차 출처의 사실·계산·추론·남은 공백을 소유한다. 연구식을 승인된 구현 정식화로 취급하지 않는다.
|
||||
- 이전 논문 재현 실험의 drilling·질량·접선 변경과 dev 일관질량 eigen 진단은 이 기능의 물리 선택이나 구현 승인으로 이어지지 않는다.
|
||||
- 사용자가 [HHT-ADR-007](ADR.md)에서 consistent kinetic mass를 선택했다. 이번 HHT 구현 범위는 일관질량이며 lumped는 비교 연구·기존 eigen 회귀의 경계에서만 다룬다.
|
||||
- `NLGEOM=YES`, `DIRECT` 시간 의미와 전체 reference 이력을 보존한다. Abaqus 입력 subset 지원은 내부 요소·시간적분 구현 동등성 약속이 아니다.
|
||||
- 공통 tolerance와 shell U blocking / UR warning-only 분류를 유지한다. Eigen 전용 RMS 5% 예외를 동적 해석에 확대하지 않는다.
|
||||
- 미결정 물리 범위와 근거 부족을 명시하며 결과에 맞추어 alpha·질량·하중 이력을 변경하지 않는다. 공개 문헌으로 확정되는 입력 의미에는 불필요한 재승인 절차를 추가하지 않는다.
|
||||
수식·I/O·수치 기준의 원본은 README에서 연결한 전문 문서를 따른다. 기능을 재개할 때
|
||||
관련 계약과 실제 실행 revision·미해결 항목을 함께 읽는다. 과거 stage pass나 현재 문서
|
||||
정리를 solver 검증 통과로 계산하지 않는다. 요구사항·ADR ID와 승인 이력을 유지한다.
|
||||
메인은 PRD·ADR·진입점·문서 참조를 관리하고 전문 작업자는 할당한 본문과 관련 범위만 수정한다.
|
||||
기존 개인 설정·reference·다른 작업자의 변경을 보존하며 실패를 tolerance 완화로 숨기지 않는다.
|
||||
문서만 수정하면 정적 검토를 수행하고, 동작 변경에는 관련 검사와 필요한 독립 검토를 수행한다.
|
||||
|
||||
## 문서 소유권
|
||||
|
||||
[구현 계획](implementation-plan.md)은 메인 소유다. [I/O 계약](io-contract.md)은 io-definition-agent, 코드·시험은 메인이 지정한 input/inertia/state-output/procedure 소유권을 따른다. 최종 물리 평가는 독립 physics-evaluation-agent가 맡는다.
|
||||
|
||||
| 문서 | Owner | 책임 |
|
||||
| --- | --- | --- |
|
||||
| [FEATURED_AGENTS.md](FEATURED_AGENTS.md) | 메인 assistant | 지역 지침과 할당 |
|
||||
| [PRD.md](PRD.md) | 메인 assistant | 요청·범위·현재 checklist·현행 코드와의 차이 |
|
||||
| [ADR.md](ADR.md) | 메인 assistant | 결정·승인 근거와 미결정 경계 |
|
||||
| [requirements.md](requirements.md) | requirement-agent | 원자적 요구사항·acceptance intent·reference inventory |
|
||||
| [research.md](research.md), [numerical-research.md](numerical-research.md) | research-agent | HHT·공개 입력 의미·수치 근거·검증 후보·근거 공백 |
|
||||
| [formulation.md](formulation.md), [formulation-inertia.md](formulation-inertia.md) | formulation-agent | HHT 시간적분·초기화·shell 관성·잔차와 접선·검증 불변식 |
|
||||
| [numerical-review.md](numerical-review.md), [numerical-review-probes.md](numerical-review-probes.md) | numerical-review-agent | 정식화와 수치 계약의 독립 검토·반례·재현 가능한 수식 검산 |
|
||||
| [numerical-controls.md](numerical-controls.md), [verification-cases.md](verification-cases.md) | numerical-review-agent | 내부 수치 기준과 반증 가능한 검증 사례 |
|
||||
| [reference-model.md](reference-model.md) | 메인 assistant; numerical-review-agent 검토 | 원본 inventory·시간·identity·수치 비교 계약; I/O binding은 후속 |
|
||||
| [implementation-numerical-review.md](implementation-numerical-review.md) | numerical-review-agent | 구현 독립 검토·C08 실패 반례·복구 후보 검토 |
|
||||
| [physics-evaluation.md](physics-evaluation.md) | physics-evaluation-agent | 실제 HDF5·독립 적분·reference와 물리 coverage 평가 |
|
||||
| [formulation-acceleration-recovery.md](formulation-acceleration-recovery.md) | formulation-agent | HHT-ADR-011의 별도 가속도 복구 후보; 채택 전 정식화·불변식·한계 |
|
||||
|
||||
담당자는 할당 문서만 수정하고 peer를 재위임하지 않는다. 현재 I/O·구현·solver 물리 검증을 수행하며 빈 보고서는 생성하지 않는다. 수식 검산은 solver build/test나 지정 reference의 동적 해석 통과 evidence와 구별한다.
|
||||
Consistent kinetic mass, 물리적 a/보조 A, generalized/spatial moment, full residual을 구분한다.
|
||||
C08a/C08b 실패·C04a SKIP과 가속도 복구 후보의 미채택을 유지한다. 원본 변위 비교 PASS와
|
||||
굽힘 단면력 계수 수정은 실제 shell 시간수렴 또는 동해석 전체 완료를 뜻하지 않는다.
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
|
||||
## 사용자 요청과 범위
|
||||
|
||||
사용자는 HHT implicit 적분법을 사용한 dynamic 해석 구현을 준비하기 위해 requirement/research, formulation, numerical research를 차례로 요청했고, 검증 모델로 `reference/shellNL-dyn-meshfine`을 지정했다. 현재 산출물은 요구사항·근거·정식화·독립 수치 검토와 검증 계약이다. 사용자의 후속 I/O definition·implementation·physics evaluation 전체 진행 요청에 따라 [I/O 계약](io-contract.md)과 [구현 계획](implementation-plan.md)을 작성하고 실제 solver 구현·검증을 진행한다.
|
||||
사용자는 HHT implicit 적분법을 사용한 dynamic 해석 구현을 준비하기 위해 requirement/research, formulation, numerical research를 차례로 요청했고, 검증 모델로 `reference/shellNL-dyn-meshfine`을 지정했다. 현재 산출물은 요구사항·근거·정식화·독립 수치 검토와 검증 계약이다. 사용자의 후속 I/O definition·implementation·physics evaluation 전체 진행 요청에 따라 [I/O 계약](io-contract.md)과 [구현 계획](README.md#재사용-handoff)을 작성하고 실제 solver 구현·검증을 진행한다.
|
||||
|
||||
[시간적분 정식화](formulation.md)와 [shell 관성 상세](formulation-inertia.md)의 후속으로 [독립 수치 검토](numerical-review.md), [수치 기준](numerical-controls.md), [검증 사례](verification-cases.md), [추가 연구](numerical-research.md)를 작성한다. 사용자가 **consistent kinetic mass**를 선택했으며 이번 HHT 구현 범위는 일관질량이다. 후속 전체 gate 진행 요청에 따른 구현 대상·공개 subset·출력 schema는 [HHT-ADR-009](ADR.md)에 기록한다.
|
||||
[시간적분 정식화](formulation.md)와 [shell 관성 상세](formulation-inertia.md)의 후속으로 [독립 수치 검토](numerical-review.md#numerical-review), [수치 기준](numerical-controls.md), [검증 사례](verification-cases.md), [추가 연구](research.md#numerical-research)를 작성한다. 사용자가 **consistent kinetic mass**를 선택했으며 이번 HHT 구현 범위는 일관질량이다. 후속 전체 gate 진행 요청에 따른 구현 대상·공개 subset·출력 schema는 [HHT-ADR-009](ADR.md)에 기록한다.
|
||||
|
||||
최소 구현 목표 후보는 기존 FESA-MITC4 shell의 선형 탄성 재료·기하비선형 동적 해석이다. 단일 step의 `*Dynamic,direct`, 초기 정지 상태, 고정 외곽 경계와 집중하중에 필요한 지원을 우선 정의한다. 질량·회전 관성·HHT 생략값·공식 동적 결과 범위는 근거를 확인하여 후속 정식화와 연결한다. 임의 amplitude, 시간변화 경계, 물리적 damping, contact, 소성, explicit, 다중 step/restart 또는 다른 요소의 dynamics는 이번 요청에서 지원을 약속하지 않는다.
|
||||
|
||||
@@ -45,7 +45,7 @@ Density 허용과 HHT update 식 추가만으로 기능이 완성되는 것은
|
||||
|
||||
결정 기록은 [ADR](ADR.md), 결정 항목의 원본은 [requirements의 HHT-OPEN-001–006](requirements.md#범위-경계와-미결정-사항)이다. 질량 종류는 사용자 결정으로 확정했다. 수식과 수치 검증 계약을 연결하되 공개 parameter·결과 범위 및 I/O binding은 후속으로 확정한다. 문서 검토만으로 구현이 검증되었다고 표시하지 않는다.
|
||||
|
||||
이번 [Research](research.md)에서 확인한 공개 입력 의미는 무접촉 기본 HHT-TF 계수 `alpha=-0.05`, `beta=0.275625`, `gamma=0.55`, amplitude 생략 시 STEP 하중, DIRECT 고정 증분 및 기본 초기 가속도 계산이다. 최초 HHT force history와 초기 frame의 결합, FESA 질량·유한회전 관성 및 공개 결과 범위는 여전히 후속 계약이 필요하다. 원 HHT의 표준 결합 계수 범위와 vendor가 허용하는 전체 parameter 범위를 혼동하지 않는다.
|
||||
이번 [Research](research.md#research)에서 확인한 공개 입력 의미는 무접촉 기본 HHT-TF 계수 `alpha=-0.05`, `beta=0.275625`, `gamma=0.55`, amplitude 생략 시 STEP 하중, DIRECT 고정 증분 및 기본 초기 가속도 계산이다. 최초 HHT force history와 초기 frame의 결합, FESA 질량·유한회전 관성 및 공개 결과 범위는 여전히 후속 계약이 필요하다. 원 HHT의 표준 결합 계수 범위와 vendor가 허용하는 전체 parameter 범위를 혼동하지 않는다.
|
||||
|
||||
Reference의 `max|U3|/thickness≈9.84e-5`, 기존 동일 mesh eigen reference에 대한 `dt/T1=7.4567`은 작은 응답과 성긴 시간간격을 보여준다. 이 CSV와의 일치만으로 큰 회전 관성, V/A 또는 시간 정확도를 검증할 수 없다. 단위계는 입력의 일관된 단위를 따르며 SI로 단정하지 않는다.
|
||||
|
||||
@@ -53,7 +53,7 @@ Reference의 `max|U3|/thickness≈9.84e-5`, 기존 동일 mesh eigen reference
|
||||
|
||||
[정식화](formulation.md)의 추천 후보는 유한회전 kinetic energy의 정확한 관성력과 물리적 가속도 `a` / 적분용 보조 가속도 `A`의 분리다. `A_(n+1)=(1+alpha)a_(n+1)-alpha a_n`를 Newmark update에 사용하고 endpoint 물리 평형을 푼다. 일정 질량에서는 기존 HHT 식으로 환원한다. 비선형 내력은 현행 dev의 objective drilling을 포함한 에너지 미분을 보존하며 이전 논문 실험의 접선·drilling 변경을 도입하지 않는다.
|
||||
|
||||
[독립 수식 검토](numerical-review.md)와 [재현 가능한 검산](numerical-review-probes.md)은 일정 질량 HHT 식에 `M(q)`만 대입하면 일반적으로 1차 오차가 남음을 확인했다. 추천 후보는 smooth variable-mass 제조해와 영질량 방향이 회전하는 제한된 모델에서 U/V/물리적 a의 2차 수렴을 보였다. 메인도 공개된 재현 코드를 실행하여 표의 결과를 확인했다. 이는 실제 MITC4 shell의 동적 해석 또는 보편적인 singular-DAE 증명의 대체물이 아니다.
|
||||
[독립 수식 검토](numerical-review.md#numerical-review)와 [재현 가능한 검산](numerical-review.md#numerical-review-probes)은 일정 질량 HHT 식에 `M(q)`만 대입하면 일반적으로 1차 오차가 남음을 확인했다. 추천 후보는 smooth variable-mass 제조해와 영질량 방향이 회전하는 제한된 모델에서 U/V/물리적 a의 2차 수렴을 보였다. 메인도 공개된 재현 코드를 실행하여 표의 결과를 확인했다. 이는 실제 MITC4 shell의 동적 해석 또는 보편적인 singular-DAE 증명의 대체물이 아니다.
|
||||
|
||||
| 기존 open 항목 | 이번 정식화에서 구체화한 후보 | 남은 결정/검증 |
|
||||
| --- | --- | --- |
|
||||
@@ -72,7 +72,7 @@ Reference의 `max|U3|/thickness≈9.84e-5`, 기존 동일 mesh eigen reference
|
||||
|
||||
[검증 사례 C01–C12](verification-cases.md)는 oscillator·STEP 초기화·variable mass·moving null, 운동에너지 적분·관성 접선, 반력·에너지·실제 shell 유한회전, 실패 보존·결정론·전체 reference 이력을 포함한다. D3 회전 미분에는 독립 block-exponential oracle를 지정했다. 문서 gate 당시 신규 solver 사례는 모두 NOT RUN이었다. 현재 실행 결과는 아래 checklist와 [독립 수치 검토](implementation-numerical-review.md), [물리 평가](physics-evaluation.md)에 구분한다.
|
||||
|
||||
추가 full Cartesian moving-null 수식 probe는 전체 시점 최대 오차에서 q/v/물리적 a의 최종 refinement 차수 `1.99985/1.99992/1.99834`를 보였고 독립 reviewer가 재현했다. 이는 기하학적 normalization이나 각도 축약 없이 계산한 제한된 수식 evidence다. 전체 N1–N7 구현 검사와 실제 shell·reference 통과를 의미하지 않는다. 자세한 실행 범위는 [수식 검산](numerical-review-probes.md)에 기록한다.
|
||||
추가 full Cartesian moving-null 수식 probe는 전체 시점 최대 오차에서 q/v/물리적 a의 최종 refinement 차수 `1.99985/1.99992/1.99834`를 보였고 독립 reviewer가 재현했다. 이는 기하학적 normalization이나 각도 축약 없이 계산한 제한된 수식 evidence다. 전체 N1–N7 구현 검사와 실제 shell·reference 통과를 의미하지 않는다. 자세한 실행 범위는 [수식 검산](numerical-review.md#numerical-review-probes)에 기록한다.
|
||||
|
||||
## 현재 checklist
|
||||
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
# HHT implicit dynamics
|
||||
|
||||
## 목적과 현재 상태
|
||||
|
||||
Consistent kinetic mass, 정확한 유한회전 관성·convective 항, HHT 잔차·접선·증분 state와
|
||||
HDF5를 구현했다. 원본 U의101-frame 비교 PASS와 UR 경고200건 기록이 있지만 실제 shell의
|
||||
C08a/C08b 시간수렴 실패는 미해결이다. 구현됨과 기능 검증 완료를 구분한다.
|
||||
|
||||
## 계약과 사용법
|
||||
|
||||
- [PRD](PRD.md)·[ADR](ADR.md)·[요구사항](requirements.md): 범위·미해결·현재 checklist.
|
||||
- [정식화](formulation.md), [유한회전 관성](formulation-inertia.md),
|
||||
[가속도 복구 후보](formulation-acceleration-recovery.md): 채택식과 미채택 후보 구분.
|
||||
- [I/O](io-contract.md), [reference 계약](reference-model.md),
|
||||
[전체 변위 비교표](displacement-comparison-tables.md).
|
||||
- [수치 기준](numerical-controls.md), [검증 사례](verification-cases.md),
|
||||
[수학 검산](numerical-review.md#numerical-review), [연구](research.md#research).
|
||||
- [구현 검토·실패·수정](implementation-numerical-review.md), [물리 평가](physics-evaluation.md).
|
||||
|
||||
환경·명령은 [operations](../operations.md)를 따른다. I/O의 지원 `*DYNAMIC, DIRECT` subset과 고정 HHT 계수,
|
||||
출력의 물리적 가속도와 보조 acceleration 구분을 확인한다.
|
||||
|
||||
## 재사용 Handoff
|
||||
|
||||
Eigen derived lumped mass와 HHT consistent kinetic mass는 목적이 다르다. Total rotation-vector
|
||||
chart의 generalized moment와 spatial moment도 다르다. Physical a와 algorithmic A를 바꾸어
|
||||
쓰지 않으며 moving-null 제약과 동적·대수 초기평형을 유지한다. 같은 trial에서 full residual,
|
||||
inertia와 tangent를 계산하고 실패 candidate가 accepted history를 변경하지 않게 한다.
|
||||
|
||||
## 실패·시행착오·다음 작업
|
||||
|
||||
C08 두 실패는 열해석 전후 전체617개 회귀에서도 baseline metric과 동일했다.
|
||||
가속도 복구 후보는 아직 채택하지 않았다. C09–C11의 잔여 coverage와 전체 physics 완료도
|
||||
남아 있다. 굽힘 단면력의 두께 계수 `M=t^3 C kappa/12` 수정은14 focused tests 및 원본
|
||||
HDF5 대조의 별도 evidence이며 동해석 전체의 완료를 뜻하지 않는다.
|
||||
과거475 PASS/1 SKIP의 제외 실행과 최신 전체 회귀를 합치지 않는다.
|
||||
@@ -81,7 +81,7 @@ C_{ij}^{(1)}B_i^T&C_{ij}^{(2)}B_i^TB_j
|
||||
|
||||
`rho`의 차원은 `mass/length³`, `(C0,C1,C2)` 및 `(m,s,j)`의 차원은 `(mass,mass·length,mass·length²)`다. `M_uu/M_uphi/M_phiphi`는 각각 같은 세 차원, residual translation은 force, rotation은 force·length이다. `v_u,a_u`는 `length/time,length/time²`; `v_phi,a_phi,omega,omega_dot`는 `1/time,1/time²`. 각도 단위는 rad이며 SI를 추정하지 않는다.
|
||||
|
||||
Moments는 현행 [eigen2 mass 계약 M2–M3](../mitc4-shell-feast-eigen2/formulation-mass-stabilization.md#m2-consistent-scalar-moments와-적분)의 `3×3×3` Gauss–Legendre를 기준으로 하며, 그 scalar-moment lumping은 비교식에만 사용한다. 긴 유도는 선행 [mass 계약 M3](../mitc4-shell-feast-eigen/formulation-mass.md#m3-consistent-matrix와-충분한-quadrature)에 있다. 점은 `−sqrt(3/5),0,+sqrt(3/5)`, weight는 `5/9,8/9,5/9`, 순서는 증가하는 `xi→eta→zeta`다. Geometry가 bilinear degenerated shell이고 rho/t가 일정할 때 `Ni Nj z^k J0`의 축별 차수는 최대 4여서 이 moment 적분은 정확하다. `B_i`와 그 도함수는 nodal 값이므로 현재 관성과 tangent도 같은 moment를 사용한다.
|
||||
Moments는 현행 [eigen2 mass 계약 M2–M3](../mitc4-shell-feast-eigen2/formulation-mass-stabilization.md#m2-consistent-scalar-moments와-적분)의 `3×3×3` Gauss–Legendre를 기준으로 하며, 그 scalar-moment lumping은 비교식에만 사용한다. 긴 유도는 선행 [mass 계약 M3](../mitc4-shell-feast-eigen/formulation.md#formulation-mass--m3-consistent-matrix와-충분한-quadrature)에 있다. 점은 `−sqrt(3/5),0,+sqrt(3/5)`, weight는 `5/9,8/9,5/9`, 순서는 증가하는 `xi→eta→zeta`다. Geometry가 bilinear degenerated shell이고 rho/t가 일정할 때 `Ni Nj z^k J0`의 축별 차수는 최대 4여서 이 moment 적분은 정확하다. `B_i`와 그 도함수는 nodal 값이므로 현재 관성과 tangent도 같은 moment를 사용한다.
|
||||
|
||||
모든 27 mass 점에서 finite positive `J0`와 기존 geometry predicate를 확인한다. Current trial도 내력 8점·tying·center·recovery와 추가 inertia 평가점에서 허용 geometry를 만족해야 한다. `abs(J)`, 점 생략, 강제 평면화는 없다. 물리 내력·물리 에너지와 section recovery는 기존 `2×2×2` 적분, drill potential은 기존 element-level 합을 보존한다.
|
||||
|
||||
@@ -196,7 +196,7 @@ v_{n+1}-v_n=h\{-\alpha(1-\gamma)a_{n-1}
|
||||
|
||||
세 coefficient 합은 1, `a_(n−1),a_n,a_(n+1)`의 시간 offset `−1,0,+1`에 대한 first moment는 `alpha+gamma=1/2`다. 여기에는 `Mdot` 잔여항이 없다. Endpoint equation이 nonsingular mass의 smooth `a=f(q,v,t)`를 정의하면 q/v의 2차 일관성과 안정성 검토를 할 수 있고 physical a도 같은 해의 정확도를 따른다. 이는 nonlinear mass의 smooth manufactured verification을 요구하는 근거이며 독립 수치 검토를 대신하지 않는다.
|
||||
|
||||
문헌의 nonsingular mechanical solve 및 regular index-3 조건과 달리 본 shell은 drilling direction에서 singular `M`을 가진다. §4의 `psi_qN` regularity와 constant rank의 실제 지원 범위, redundant full-coordinate 구현에서의 hidden-constraint drift·q/v/a 정확도는 **구현 후 필수 검증 항목**이다. 이 조건으로 reduced smooth dynamics를 설명할 수 있는 범위를 확인하되 모든 shell에 대한 보편 정리를 요구하지 않는다. [독립 검토](numerical-review.md)는 현 수식 후보를 대조했고, [독립 검산](numerical-review-probes.md)의 smooth variable-mass / moving-null 예제는 이를 지지한다. 이 제한된 evidence가 실제 shell/drilling 검증을 대신하지 않으며 유한회전 지원 범위를 축소하는 근거도 아니다.
|
||||
문헌의 nonsingular mechanical solve 및 regular index-3 조건과 달리 본 shell은 drilling direction에서 singular `M`을 가진다. §4의 `psi_qN` regularity와 constant rank의 실제 지원 범위, redundant full-coordinate 구현에서의 hidden-constraint drift·q/v/a 정확도는 **구현 후 필수 검증 항목**이다. 이 조건으로 reduced smooth dynamics를 설명할 수 있는 범위를 확인하되 모든 shell에 대한 보편 정리를 요구하지 않는다. [독립 검토](numerical-review.md#numerical-review)는 현 수식 후보를 대조했고, [독립 검산](numerical-review.md#numerical-review-probes)의 smooth variable-mass / moving-null 예제는 이를 지지한다. 이 제한된 evidence가 실제 shell/drilling 검증을 대신하지 않으며 유한회전 지원 범위를 축소하는 근거도 아니다.
|
||||
|
||||
### 5.3 다른 후보와 채택하지 않은 이유
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
- 상태: `independently-reviewed-candidate; physics-and-validation-pending`.
|
||||
- Owner: `formulation-agent`, 2026-09-22. 문서 gate 산출물이며 구현 승인이나 수치 검증 통과가 아니다.
|
||||
- 기준: [프로젝트 지침](../../AGENTS.md), [제품 PRD](../PRD.md), [공통 ADR](../ADR.md#adr-028), [Feature PRD](PRD.md), [요구사항](requirements.md), [연구](research.md).
|
||||
- 기준: [프로젝트 지침](../../AGENTS.md), [제품 PRD](../PRD.md), [공통 ADR](../ADR.md#adr-028), [Feature PRD](PRD.md), [요구사항](requirements.md), [연구](research.md#research).
|
||||
- 관성의 전개식·초기 일관성·정확도 근거는 [formulation-inertia](formulation-inertia.md)가 소유한다. 영속 schema, C++ 저장 구조와 tolerance는 정의하지 않는다.
|
||||
|
||||
## 1. 결론과 적용 범위
|
||||
@@ -117,7 +117,7 @@ T_L=\frac12\sum_i\left(m_i|v_{ui}|^2+2s_i v_{ui}\cdot B_iv_{\phi i}
|
||||
\beta=\frac14(1-\alpha)^2.
|
||||
\]
|
||||
|
||||
기본값은 `alpha=−0.05`, `beta=0.275625`, `gamma=0.55`다. [공개 기본값 근거](research.md#3-reference-입력의-공개-의미)와 [Sandia의 결합계수](https://www.sandia.gov/files/sierra/SM_Users_5_20/main/implicit/integration.html)를 따른다. `alpha=0`은 평균가속도 Newmark다. 이 범위는 일반 유한회전 문제의 무조건 안정성이나 큰 시간간격의 정확도를 보증하지 않는다. 별도 `beta/gamma` 입력을 승인한 의미도 아니다.
|
||||
기본값은 `alpha=−0.05`, `beta=0.275625`, `gamma=0.55`다. [공개 기본값 근거](research.md#research--3-reference-입력의-공개-의미)와 [Sandia의 결합계수](https://www.sandia.gov/files/sierra/SM_Users_5_20/main/implicit/integration.html)를 따른다. `alpha=0`은 평균가속도 Newmark다. 이 범위는 일반 유한회전 문제의 무조건 안정성이나 큰 시간간격의 정확도를 보증하지 않는다. 별도 `beta/gamma` 입력을 승인한 의미도 아니다.
|
||||
|
||||
**FESA 초기화 후보 계약:** frame 0은 `t=0+`, `q_0=v_0=0`, 전값 `F_0=F*`다. `M_ff(q_0)a_f0=F_f0−f_int,f(q_0)`와 [mass-null 일관성](formulation-inertia.md#4-mass-null과-초기-일관성)을 함께 풀어 `a_0`를 구한다. `A_0=a_0`, `g_0=f_int(q_0)−F_0`를 정의한다. `g_0=0` 또는 `a_0=0`을 임의 대입하지 않는다. 이는 공개 STEP 의미에 맞춘 FESA 계약 제안이며 Abaqus의 숨은 첫 history 생성 절차를 확인한 주장이 아니다.
|
||||
|
||||
@@ -210,6 +210,6 @@ W_{0\to n}=F^{\star T}(q_n-q_0),\quad
|
||||
| 구현 lifecycle | 동일 state tangent, 실패 rollback, time/frame 순서, deterministic assembly와 반복 결과 |
|
||||
| 외부 reference | 지정 원본 101 frames × 9 nodes, frame/instance/node/component의 exact mapping; U blocking / UR warning-only 및 공통 TOLERANCE. V/A/energy correctness는 해당 CSV에 coverage 없음 |
|
||||
|
||||
수식 후보의 [독립 검토](numerical-review.md)는 완료되었으며 표시된 수식에서 새 오류는 발견되지 않았다. 질량 선택은 consistent로 확정되었다. 구현 전 남은 계약은 (1) HHT 확장·초기화의 FESA 채택과 나머지 physics 범위, (2) initial algebraic regularity와 trial 실패 판정의 수치 기준, (3) 공식 output 의미의 공개 범위/I/O다. 이 선택 후 구현할 수 있는 수식 후보이며, 실제 유한회전 shell의 drilling DAE·관성 tangent·q/v/a 시간 수렴은 **구현 후 기능 acceptance에 필요한 검증**이다. 부모 문헌의 nonsingular-mass 조건을 shell mass-null에 자동 적용하지 않되, 모든 shell DAE의 보편적 수렴 증명을 코드 작성의 선행 조건으로 요구하지 않는다. 현재 문서 완료나 제한된 probe를 전체 solver 승인·검증 통과로 표시하지 않는다.
|
||||
수식 후보의 [독립 검토](numerical-review.md#numerical-review)는 완료되었으며 표시된 수식에서 새 오류는 발견되지 않았다. 질량 선택은 consistent로 확정되었다. 구현 전 남은 계약은 (1) HHT 확장·초기화의 FESA 채택과 나머지 physics 범위, (2) initial algebraic regularity와 trial 실패 판정의 수치 기준, (3) 공식 output 의미의 공개 범위/I/O다. 이 선택 후 구현할 수 있는 수식 후보이며, 실제 유한회전 shell의 drilling DAE·관성 tangent·q/v/a 시간 수렴은 **구현 후 기능 acceptance에 필요한 검증**이다. 부모 문헌의 nonsingular-mass 조건을 shell mass-null에 자동 적용하지 않되, 모든 shell DAE의 보편적 수렴 증명을 코드 작성의 선행 조건으로 요구하지 않는다. 현재 문서 완료나 제한된 probe를 전체 solver 승인·검증 통과로 표시하지 않는다.
|
||||
|
||||
이번 owner 작업은 기존 정식화·source 대조, 일차 문헌 대조와 수식 유도 및 문서 정적 검토다. [독립 시간정확도 검산](numerical-review-probes.md)은 variable-mass SDOF와 moving-null 예제에서 추천 후보의 약 2차 q/v/physical-a 수렴을 관찰했고 naive 확대의 약 1차 오차를 구별했다. 이는 shell solver 검증이나 일반 drilling DAE 증명을 대신하지 않는다. Build/test·solver/reference 실행은 문서 작업 범위가 아니므로 미실행이다. 독립 검산과 Numerical Review 결과는 해당 owner의 보고서가 소유하며 본 문서가 스스로 승인하지 않는다.
|
||||
이번 owner 작업은 기존 정식화·source 대조, 일차 문헌 대조와 수식 유도 및 문서 정적 검토다. [독립 시간정확도 검산](numerical-review.md#numerical-review-probes)은 variable-mass SDOF와 moving-null 예제에서 추천 후보의 약 2차 q/v/physical-a 수렴을 관찰했고 naive 확대의 약 1차 오차를 구별했다. 이는 shell solver 검증이나 일반 drilling DAE 증명을 대신하지 않는다. Build/test·solver/reference 실행은 문서 작업 범위가 아니므로 미실행이다. 독립 검산과 Numerical Review 결과는 해당 owner의 보고서가 소유하며 본 문서가 스스로 승인하지 않는다.
|
||||
|
||||
@@ -38,13 +38,13 @@ NR-006의 최소 exact 구현 경로는 공개 moment-load가 0이고 동일 nod
|
||||
|
||||
Newmark의 q/v는 A를 사용하고 물리 a는 `(A+alpha*a_old)/(1+alpha)`로 회복한다. Effective tangent의 rate 계수, force/moment 별 uncancelled Newton scale, 네 correction gate, 100번째 correction 뒤 재평가, fixed DIRECT `n*h`, endpoint reaction 및 현재 arm/`Jl^-T` spatial moment balance를 대조했다. Constant STEP load의 work `F·q`와 `T+Uphys+Udrill−E0−W`는 현 하중 범위와 맞으며 energy 감소를 강제하지 않는다. 이것은 실제 moving-shell 시간 정확도 인증이 아니다.
|
||||
|
||||
메인 실행 로그를 독립 열람했다. [focused.log](../../.harness/build/hht-numerical/focused.log)는 관성 8 tests와 일반 finite-rotation internal D3 sweep, HHT helper 3 tests의 통과를 보인다. 같은 실행 전체는 당시 mapper/writer 7 failures가 있어 전체 PASS가 아니다. `DynamicRotation.*`의 inverse/null/D3 oracle suite는 이 로그에 없어 별도 실행 확인이 필요하다. 당시 없었던 internal 작은각 threshold fixture는 아래 후속 로그에서 통과했다.
|
||||
메인 실행 로그를 독립 열람했다. focused.log(당시 경로: `../../.harness/build/hht-numerical/focused.log`, 현재 checkout에 없음)는 관성 8 tests와 일반 finite-rotation internal D3 sweep, HHT helper 3 tests의 통과를 보인다. 같은 실행 전체는 당시 mapper/writer 7 failures가 있어 전체 PASS가 아니다. `DynamicRotation.*`의 inverse/null/D3 oracle suite는 이 로그에 없어 별도 실행 확인이 필요하다. 당시 없었던 internal 작은각 threshold fixture는 아래 후속 로그에서 통과했다.
|
||||
|
||||
[focused-procedure.log](../../.harness/build/hht-numerical/focused-procedure.log)는 algebra 7/8, all-fixed procedure, state/writer/log 통과와 총 37개 중 2개 실패를 보인다. Algebra 경계 fixture는 이후 `W=I`, `diag(1,2^-k)`로 binary-exact threshold를 검사하도록 고쳤으나 이 보고서 시점 재실행 evidence는 대기다. 나머지 실패는 mapper diagnostic fixture다. 기존 로그를 새 소스 전체 통과로 소급하지 않는다.
|
||||
focused-procedure.log(당시 경로: `../../.harness/build/hht-numerical/focused-procedure.log`, 현재 checkout에 없음)는 algebra 7/8, all-fixed procedure, state/writer/log 통과와 총 37개 중 2개 실패를 보인다. Algebra 경계 fixture는 이후 `W=I`, `diag(1,2^-k)`로 binary-exact threshold를 검사하도록 고쳤으나 이 보고서 시점 재실행 evidence는 대기다. 나머지 실패는 mapper diagnostic fixture다. 기존 로그를 새 소스 전체 통과로 소급하지 않는다.
|
||||
|
||||
후속 [focused-exact-constraint.log](../../.harness/build/hht-numerical/focused-exact-constraint.log)는 internal residual 7 tests의 통과를 보이며, NR-005의 작은각 4 fixtures와 NR-006의 finite/warped exact ψ·gradient·Hessian 검사를 포함한다. [zero-trial-red.log](../../.harness/build/hht-numerical/zero-trial-red.log)의 기존 영변형 spurious force 실패도 확인했다. 수정 `CovariantIncrement`의 `2E=G·δg+δg·G+δg·δg`, drilling `F=I+δg⊗Gdual`는 큰 기준값의 뺄셈을 피하는 동일 수식이다. `q=0`의 exact-zero 회복은 force clamp나 tolerance 완화가 아니다. 새 zero-trial test의 통과를 확인했다. Recovery·기존 정적 영향은 전체 회귀 검사 대상이다.
|
||||
후속 focused-exact-constraint.log(당시 경로: `../../.harness/build/hht-numerical/focused-exact-constraint.log`, 현재 checkout에 없음)는 internal residual 7 tests의 통과를 보이며, NR-005의 작은각 4 fixtures와 NR-006의 finite/warped exact ψ·gradient·Hessian 검사를 포함한다. zero-trial-red.log(당시 경로: `../../.harness/build/hht-numerical/zero-trial-red.log`, 현재 checkout에 없음)의 기존 영변형 spurious force 실패도 확인했다. 수정 `CovariantIncrement`의 `2E=G·δg+δg·G+δg·δg`, drilling `F=I+δg⊗Gdual`는 큰 기준값의 뺄셈을 피하는 동일 수식이다. `q=0`의 exact-zero 회복은 force clamp나 tolerance 완화가 아니다. 새 zero-trial test의 통과를 확인했다. Recovery·기존 정적 영향은 전체 회귀 검사 대상이다.
|
||||
|
||||
C04a는 판정을 분리한다. 위 로그에서 finest binary64 full/reduced acceleration 차이 약 `3.079e-10`이 `1e-10`을 넘었지만 N7 해상도 약 `6.296e-10` 이하다. q/v/physical-a의 시간차수·오차/noise 검사와 coarse reduction은 별개다. N7에 따라 finest reduction은 **INCONCLUSIVE**로 남길 수 있으며 threshold를 바꾸지 않는다. [decimal80 독립 검산](../../.harness/build/hht-numerical/c04a-decimal-reduction.json)의 full 2×2/scalar recurrence 차이 `<=1.70e-73`은 수학적 reduction을 지지하지만 FESA binary64의 `1e-10` 통과를 대신하지 않는다. 새 test는 시간수렴/coarse gate와 finest `GTEST_SKIP`을 분리했으며 이 보고서에서는 새 바이너리 재실행을 아직 확인하지 않았다. C04a 전체를 무조건 PASS로 합치지 않는다.
|
||||
C04a는 판정을 분리한다. 위 로그에서 finest binary64 full/reduced acceleration 차이 약 `3.079e-10`이 `1e-10`을 넘었지만 N7 해상도 약 `6.296e-10` 이하다. q/v/physical-a의 시간차수·오차/noise 검사와 coarse reduction은 별개다. N7에 따라 finest reduction은 **INCONCLUSIVE**로 남길 수 있으며 threshold를 바꾸지 않는다. decimal80 독립 검산(당시 경로: `../../.harness/build/hht-numerical/c04a-decimal-reduction.json`, 현재 checkout에 없음)의 full 2×2/scalar recurrence 차이 `<=1.70e-73`은 수학적 reduction을 지지하지만 FESA binary64의 `1e-10` 통과를 대신하지 않는다. 새 test는 시간수렴/coarse gate와 finest `GTEST_SKIP`을 분리했으며 이 보고서에서는 새 바이너리 재실행을 아직 확인하지 않았다. C04a 전체를 무조건 PASS로 합치지 않는다.
|
||||
|
||||
Build/CTest는 메인/구현 owner가 담당하며 reviewer가 별도 C++ 실행을 했다고 주장하지 않는다. 문서 `git diff --check`는 exit 0이다. NR-008 문서 정합성, 새 algebra/rotation oracle 실행, 실제 shell의 시간수렴·energy·moving-null·reference 검증이 남는다. 본 보고서는 전체 기능/물리 gate 통과 판정이 아니다.
|
||||
|
||||
@@ -119,7 +119,7 @@ print(json.dumps(result, indent=2))
|
||||
|
||||
[C08 source](../../tests/unit/analysis/hht_shell_physics_test.cpp)의 `RunPlate`, `InitializeNullVelocity`, `Differences`, `RecordNoise`를 대조했다. q0=0에서 null=e_phi3, f=0이므로 stiffness phi3 행으로 초기 ψ_q를 구성하는 식은 맞다. Initial physical director/null velocity, physical/hidden2 a0, A0=a0, old physical-a history, correction length scaling, `fine.history[2*frame]` 시간 대응과 T/T² normalization도 일치한다. `RecordNoise`의 free-vector nodal indexing은 이 all-free fixture에서는 유효하며 partial BC로 일반화하면 안 된다. **큰 rotational-rate 비수렴을 설명하는 구체적인 driver 인덱스·산술 오류는 찾지 못했다.**
|
||||
|
||||
[최신 optimized 진단](../../.harness/build/hht-numerical/c08-diagnostic-20260926.log)의 C08a finest angular-a 최대는 `n=10,t=.0390625`로 scalar transient peak와 일치한다. Total error `5.67565924e-4` 중 current-null 성분은 `5.58582318e-4`, physical complement는 `1.00582661e-4`다. Startup 가설을 지지하지만 physical 성분도 해당 node/time에서 이미 `1e-4`를 넘는다. 전체 node/time physical maximum 및 recovery 결과가 없으므로 null-only 회복으로 C08a가 통과한다고 예측할 수 없다.
|
||||
최신 optimized 진단(당시 경로: `../../.harness/build/hht-numerical/c08-diagnostic-20260926.log`, 현재 checkout에 없음)의 C08a finest angular-a 최대는 `n=10,t=.0390625`로 scalar transient peak와 일치한다. Total error `5.67565924e-4` 중 current-null 성분은 `5.58582318e-4`, physical complement는 `1.00582661e-4`다. Startup 가설을 지지하지만 physical 성분도 해당 node/time에서 이미 `1e-4`를 넘는다. 전체 node/time physical maximum 및 recovery 결과가 없으므로 null-only 회복으로 C08a가 통과한다고 예측할 수 없다.
|
||||
|
||||
같은 로그의 C08b finest rotational q/v/a self difference는 `1.38700902e-4 / 1.15434080e-2 / .868938812`다. 마지막 acceleration noise 합은 약 `5.426e-6`이므로 큰 차이를 N7 산술/solve 해상도로 설명할 수 없다. Cubic 반례는 q가 exact하므로 C08b q plateau까지 증명한 원인은 아니다. 다음 진단은 처음/최대/후반/최종 오차의 node·시간과 analytic null/physical complement별 q/v/a 차이, 초기값 grid independence, 대표 frame의 residual/effective tangent 대조다. Alpha·grid·fixture를 바꿔 기존 FAIL을 지워서는 안 된다.
|
||||
|
||||
@@ -143,9 +143,9 @@ Null acceleration correction은 `B*N=0`이므로 현재 q/v의 director accelera
|
||||
|
||||
**HHT-IMP-NR-011 — source corrected; optimized focused regression passed.** Main이 식별한 [RecoverState](../../src/fesa/elements/nonlinear_mitc4_shell.cpp)의 bending resultant 계수를 독립 검산했다. `z=t*zeta/2`, `dz=t/2*d(zeta)`이므로 `M=∫z*S*dz=(t²/4)*Σw*zeta*S`다. 기존 `t/4`는 두께 1개가 누락되어 moment per length의 단위 `[force]` 대신 membrane resultant와 같은 `[force/length]`가 된다. 현재 소스의 `0.25*thickness_*thickness_*thickness_sign*gauss*stress` 수정은 부호·단위·두께 적분과 맞는다.
|
||||
|
||||
[새 test](../../tests/unit/elements/nonlinear_mitc4_shell_test.cpp)의 flat reference, quadratic-through-thickness stress에서 `t²/12*(S_top-S_bottom)`은 odd first moment의 정확한 별도 샘플 oracle다. `t=.2,.5,2` 선택은 t=1이 누락 계수를 숨기는 문제를 피한다. [수정 전 로그](../../.harness/build/hht-numerical/bending-moment-red.log)의 t=2에서 계산값 `4.36084804185815`, oracle `8.72169608371628`의 factor2 실패도 식과 일치한다. 수정 후 실행 및 기존 static recovery 영향은 owner 검증 대기다. 이 변경은 recovery의 section resultant에 한정되며 internal force/tangent 식이나 HHT recurrence를 변경하지 않는다. C08 시간수렴 FAIL의 해결로 분류하면 안 된다.
|
||||
[새 test](../../tests/unit/elements/nonlinear_mitc4_shell_test.cpp)의 flat reference, quadratic-through-thickness stress에서 `t²/12*(S_top-S_bottom)`은 odd first moment의 정확한 별도 샘플 oracle다. `t=.2,.5,2` 선택은 t=1이 누락 계수를 숨기는 문제를 피한다. 수정 전 로그(당시 경로: `../../.harness/build/hht-numerical/bending-moment-red.log`, 현재 checkout에 없음)의 t=2에서 계산값 `4.36084804185815`, oracle `8.72169608371628`의 factor2 실패도 식과 일치한다. 수정 후 실행 및 기존 static recovery 영향은 owner 검증 대기다. 이 변경은 recovery의 section resultant에 한정되며 internal force/tangent 식이나 HHT recurrence를 변경하지 않는다. C08 시간수렴 FAIL의 해결로 분류하면 안 된다.
|
||||
|
||||
후속 [optimized recovery 실행](../../.harness/build/hht-numerical/recovery-green-optimized.log)을 독립 열람하여 **13 tests PASS**를 확인했다. 새 thickness moment test와 기존 small-rotation/objectivity/recovery/patch가 포함된다. 위 “검증 대기”는 최초 검토 시점 기록이며, 현재 확인한 범위는 이 focused optimized 실행이다. 전체 Debug 및 다른 reference 검증의 대체 evidence는 아니다.
|
||||
후속 optimized recovery 실행(당시 경로: `../../.harness/build/hht-numerical/recovery-green-optimized.log`, 현재 checkout에 없음)을 독립 열람하여 **13 tests PASS**를 확인했다. 새 thickness moment test와 기존 small-rotation/objectivity/recovery/patch가 포함된다. 위 “검증 대기”는 최초 검토 시점 기록이며, 현재 확인한 범위는 이 focused optimized 실행이다. 전체 Debug 및 다른 reference 검증의 대체 evidence는 아니다.
|
||||
|
||||
## 가속도 복구 후보 독립 검토 — HHT-ADR-011
|
||||
|
||||
@@ -179,7 +179,7 @@ NR-013의 **explicit-time post-check 수정은 source에서 확인**했다. Manu
|
||||
|
||||
별도 `RecoveredAcceleration` 저장, const assembly 입력과 copied frame 사용을 대조했으며 q/v/a_h/A에 recovered 값을 대입하는 경로는 없다. 기존 acceptance assertions는 원 a_h 결과를 계속 검사한다. `CheckLinearSolve`는 recovery solve의 N2-L backward check를 수행하지만 이것만으로 N7 forward noise/시간차수를 인증할 수 없다. `Mdeltaa=||M*delta a||/(||M||*||delta a||)`는 null-action 진단이며 large correction을 고려한 실제 full E/reaction의 전후 오차 평가를 대신하지 않는다.
|
||||
|
||||
[최초 recovery-probe 로그](../../.harness/build/hht-numerical/c08-recovery-probe-20260926.log)의 C08a 전체 recovered angular-a maximum은 h=1/16..1/256에서 `.01351694529 / .004558583885 / .001373166739 / .0004000031671 / .0001005829141`이다. 이 값으로 계산한 마지막 두 raw order는 **1.77942349 / 1.99162617**, finest는 **1.005829141e-4**다. 따라서 기존 `>=1.8`, `<=1e-4`를 충족하지 않으며 후보 PASS가 아니다. 이 숫자는 아직 N7로 인증된 차수 evidence도 아니다.
|
||||
최초 recovery-probe 로그(당시 경로: `../../.harness/build/hht-numerical/c08-recovery-probe-20260926.log`, 현재 checkout에 없음)의 C08a 전체 recovered angular-a maximum은 h=1/16..1/256에서 `.01351694529 / .004558583885 / .001373166739 / .0004000031671 / .0001005829141`이다. 이 값으로 계산한 마지막 두 raw order는 **1.77942349 / 1.99162617**, finest는 **1.005829141e-4**다. 따라서 기존 `>=1.8`, `<=1e-4`를 충족하지 않으며 후보 PASS가 아니다. 이 숫자는 아직 N7로 인증된 차수 evidence도 아니다.
|
||||
|
||||
같은 로그의 C08a `angular_a_null=0,angular_a_physical=0`는 **무효 diagnostic**이다. Analytic frame의 비어 있는 `nodal_internal_order`로 loop가 0회 실행됐기 때문이다. Full recovered error를 계산하는 `FrameError`는 vector size를 사용하므로 위 maximum 숫자에는 이 문제가 없다. 수정 source는 `generalized_coordinates.Size()/6`와 vector-size guard를 사용한다. 수정 후 C08a split 실행 evidence는 별도 확인해야 하며 이전 0을 exact branch로 해석하면 안 된다. C08b의 실제 accepted frame metadata는 채워져 있어 이 특정 zero-loop 문제와 구별한다.
|
||||
|
||||
@@ -189,7 +189,7 @@ NR-013의 **explicit-time post-check 수정은 source에서 확인**했다. Manu
|
||||
|
||||
C08b post-hidden2 ratio는 네 pair에서 `6.06e-17..1.45e-16`, normalized Mdeltaa는 약 `5e-20`이다. 수정된 autonomous scale와 null correction의 제한 consistency evidence를 지지하지만 full N7 검증이나 a 정확도 PASS가 아니다. 회복 후보 자체의 후속 검증과 별도로 C08b의 physical dynamics/rate 비수렴 원인을 조사해야 한다. 이 결론은 production recovery 채택 또는 새 integrator 선택을 승인하지 않는다.
|
||||
|
||||
후속 [C08a split 수정 실행](../../.harness/build/hht-numerical/c08-recovery-split-spectrum-20260927.log)은 **2 tests / 1 PASS / 1 FAIL**로 완료됐고 C08a temporal FAIL을 유지했다. Recovered full maximum은 이전 실행과 같으며, finest exact-state common projector의 angular-a null/physical maximum은 각각 **`4.64641213e-7 / 1.00582661e-4`**다. False-zero split 문제는 이 실행으로 수정 확인했다. 남은 C08a recovered maximum도 physical complement가 지배하며 finest `1e-4` 초과는 그대로다. 별도 matrix dump test의 PASS는 spectral/시간해상도 결론을 뜻하지 않으며 이 검토에서 spectrum 계산을 수행하지 않았다.
|
||||
후속 C08a split 수정 실행(당시 경로: `../../.harness/build/hht-numerical/c08-recovery-split-spectrum-20260927.log`, 현재 checkout에 없음)은 **2 tests / 1 PASS / 1 FAIL**로 완료됐고 C08a temporal FAIL을 유지했다. Recovered full maximum은 이전 실행과 같으며, finest exact-state common projector의 angular-a null/physical maximum은 각각 **`4.64641213e-7 / 1.00582661e-4`**다. False-zero split 문제는 이 실행으로 수정 확인했다. 남은 C08a recovered maximum도 physical complement가 지배하며 finest `1e-4` 초과는 그대로다. 별도 matrix dump test의 PASS는 spectral/시간해상도 결론을 뜻하지 않으며 이 검토에서 spectrum 계산을 수행하지 않았다.
|
||||
|
||||
### C08b 초기 spectrum 독립 재현
|
||||
|
||||
@@ -208,7 +208,7 @@ C08b post-hidden2 ratio는 네 pair에서 `6.06e-17..1.45e-16`, normalized Mdelt
|
||||
| Full generalized residual maximum | `2.62506622e-15` |
|
||||
| `||Phi^T*M*Phi-I||F` | `8.78577073e-15` |
|
||||
|
||||
Full residual metric은 각 mode의 `||K*phi-lambda*M*phi||2 / [(||K||2+abs(lambda)*||M||2)*||phi||2]`다. 독립 `eigh`의 최저 여섯 raw eigenvalue는 `[-1.63581e-11,-7.39169e-12,-7.29645e-12,2.01889e-12,3.26844e-12,8.09326e-12]`, 그 다음은 `44.22815124448042`였다. [Main eigvalsh JSON](../../.harness/build/hht-numerical/c08b-initial-spectrum-20260927.json)의 raw 값과 전체 최대 차이는 `7.276e-11`이며 최대 ω는 표시 precision에서 동일하다. 음수 값을 0으로 바꾸거나 그 제곱근을 계산하지 않았다. 별도로 3 translations와 `u=Omega×X,phi=Omega`의 3 analytic rigid fields는 `||K*R||F/(||K||F*||R||F)=2.27995067e-17`이었다. 이는 여섯 near-zero 값의 rigid-mode 해석을 지지하며 nonlinear stability 인증은 아니다.
|
||||
Full residual metric은 각 mode의 `||K*phi-lambda*M*phi||2 / [(||K||2+abs(lambda)*||M||2)*||phi||2]`다. 독립 `eigh`의 최저 여섯 raw eigenvalue는 `[-1.63581e-11,-7.39169e-12,-7.29645e-12,2.01889e-12,3.26844e-12,8.09326e-12]`, 그 다음은 `44.22815124448042`였다. Main eigvalsh JSON(당시 경로: `../../.harness/build/hht-numerical/c08b-initial-spectrum-20260927.json`, 현재 checkout에 없음)의 raw 값과 전체 최대 차이는 `7.276e-11`이며 최대 ω는 표시 precision에서 동일하다. 음수 값을 0으로 바꾸거나 그 제곱근을 계산하지 않았다. 별도로 3 translations와 `u=Omega×X,phi=Omega`의 3 analytic rigid fields는 `||K*R||F/(||K||F*||R||F)=2.27995067e-17`이었다. 이는 여섯 near-zero 값의 rigid-mode 해석을 지지하며 nonlinear stability 인증은 아니다.
|
||||
|
||||
| h | omega_max*h |
|
||||
| --- | ---: |
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
# HHT Implementation Plan
|
||||
|
||||
**Goal:** 일관질량 HHT shell 동적 해석을 원본 입력부터 공식 HDF5·전체 reference 비교·독립 물리 평가까지 구현한다.
|
||||
|
||||
**Architecture:** Domain의 별도 dynamic step과 별도 동적 state/procedure/writer를 연결한다. 기존 MITC4 내력·objective drilling은 보존하고 유한회전 consistent 관성을 정확히 미분한다. 물리적 a와 보조 A를 분리하고 candidate 검증 후에만 frame·최종 파일을 반영한다.
|
||||
|
||||
**Tech Stack:** C++17, MSVC x64 Debug, CMake/Ninja/CTest, MKL/TBB/HDF5.
|
||||
|
||||
**Spec:** [정식화](formulation.md), [관성](formulation-inertia.md), [내부 기준](numerical-controls.md), [검증 사례](verification-cases.md), [I/O](io-contract.md), [Reference](reference-model.md).
|
||||
|
||||
## 실행 범위와 소유권
|
||||
|
||||
사용자가 I/O definition, implementation, physics evaluation을 모두 요청했으므로 기존 정식화의 추천 a/A 분리와 0+ 초기화를 구현 대상으로 채택한다. 메인은 통합·procedure·검증을 맡고 독립적인 kernel/input/writer 묶음만 구현 담당자에게 할당한다. 현재 checklist는 [PRD](PRD.md)에만 유지한다. 후속 사용자 요청에 따라 검증 묶음별 로컬 commit을 수행하며 push는 포함하지 않는다.
|
||||
|
||||
| 묶음 | 파일·책임 | 검증 |
|
||||
| --- | --- | --- |
|
||||
| 입력 | `model_types.h`, `domain.h/.cpp`, Abaqus mapping: `DynamicStepDefinition`, `StepDefinition::Dynamic/IsDynamic`, `Domain::Dynamic` | 원본 INP, STEP·DIRECT·density·zero BC·force subset, unsupported·invalid input; static/eigen 회귀 |
|
||||
| 관성 | `elements/nonlinear_mitc4_inertia.h/.cpp`: `Create(nodes,frames,section,material,density)`, `Evaluate(trial,v24,a24)` → M/I/c/DqI/DvI/T/P/L/rates | C05–C06 독립 volume·미분·null·좌표/단위 oracle |
|
||||
| 상태·출력 | `analysis/dynamic_analysis_state.h/.cpp`, `results/dynamic_results_writer.h`, `io/hdf5/dynamic_hdf5_results_writer.h/.cpp` | frame0 포함 commit/rollback, finite/identity/schedule 검증, schema readback·atomic failure |
|
||||
| 시간적분 | `analysis/hht_time_integration.h/.cpp`와 tests | C01–C04 정확해·HHT 환원·moving-null·초기화·소산 |
|
||||
| 동적 절차 | `analysis/hht_dynamic_procedure.h/.cpp` 및 필요한 internal assembly/constraint helper | 초기 positive-range/null solve, 정확한 유효 접선, N1–N7, C07–C11 shell·관성반력·에너지·실패 |
|
||||
| 통합 | `prepared_analysis.h/.cpp`, application, CMake 등록 | 원본 CLI 실행·진단·최종 HDF5; 기존 procedures 보존 |
|
||||
| 비교·물리 | `tests/reference/hht_dynamic_reference_*`, 보고서와 ignored 실행 evidence | C12 202 comparison families, 101 frames 전부, 독립 physics evaluation |
|
||||
|
||||
## 구현·검증 순서
|
||||
|
||||
각 묶음은 관찰 가능한 실패 사례를 먼저 추가하고 구현 후 관련 CMake target/CTest filter로 확인한다. 아직 없는 API의 컴파일 실패와 수치 oracle 실패를 구별해 기록한다. 코드 소유권이 겹치는 변경은 메인이 직렬로 통합한다. Build는 메인이 단일 경로에서 실행한다.
|
||||
|
||||
1. I/O 계약의 필드·진단·source/time 연결을 정의하고 기존 문서와 대조한다.
|
||||
2. Input/관성 kernel/동적 state를 구현한다. 관성의 director D3와 convective 항은 production finite difference로 대체하지 않는다.
|
||||
3. HHT predictor와 물리적 endpoint 평형을 연결한다. `A=(q-q_p)/(beta*h*h)`, `v=v_p+gamma*(q-q_p)/(beta*h)`, `a=(A+alpha*a_n)/(1+alpha)`이며 tangent는 `DqI+gamma/(beta*h)*DvI+M/((1+alpha)*beta*h*h)+Kint`다.
|
||||
4. N2 잔차·correction/rate AND 판정, N3 초기 대수조건, N4 analytic null·positive mass·regularity 및 실패 보존을 검증한다. Backend 성공만으로 frame을 commit하지 않는다.
|
||||
5. Official HDF5 writer와 deterministic comparator를 연결한다. Reference의 source increment로 대응하고 시간 보간·행 평균·값 보정은 하지 않는다.
|
||||
6. 수정 영향에 맞는 검사를 수행하고 최종 `python scripts/execute.py`로 전체 MSVC Debug build/CTest를 한 번 수행한다. 필수 원본 dynamic reference는 별도 비교 evidence를 남긴다.
|
||||
7. 독립 physics reviewer가 실제 결과의 평형·운동량·에너지·coverage를 평가한다. 실패는 현 owner가 수정하며 tolerance를 결과에 맞추어 변경하지 않는다.
|
||||
|
||||
## Review focus
|
||||
|
||||
- a/A 혼동 또는 current M만의 naive HHT 확대: C01–C04와 output readback으로 검출한다.
|
||||
- 질량 영공간을 작은 질량·fixed UR3 삭제로 처리: C04–C06의 초기·moving-null 사례로 검출한다.
|
||||
- Initial full STEP force와 초기 acceleration 누락: C02와 원본 frame0의 U/V/A 의미를 대조한다.
|
||||
- 실패 trial·불완전 HDF5 노출: state/writer 실패 주입 및 기존 최종 파일 보존을 검사한다.
|
||||
- 101-frame identity·reference subset 오류: C12의 누락·추가·중복·nonfinite·wrong-time mutation을 사용한다.
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
## 1. 입력과 호환성
|
||||
|
||||
기존 [비선형 I/O](../nonlinear-static-newton-raphson/io.md)의 lexical parsing, source target resolution, part/identity instance, node/set, S4/S4R → FESA-MITC4, centered homogeneous shell, isotropic elastic material, geometry와 chart 검증을 상속한다. 아래 절차 차이만 dynamic에 적용한다. 기존 static/frequency 입력·결과의 의미나 schema는 바꾸지 않는다. Source S4/S4R 표기는 보존하며 Abaqus 내부 요소·관성·시간 알고리즘 동등성을 주장하지 않는다. 공개 Abaqus 관례의 근거는 이미 조사한 [research](research.md)의 관측 가능한 입력 의미에 한정한다.
|
||||
기존 [비선형 I/O](../nonlinear-static-newton-raphson/io.md)의 lexical parsing, source target resolution, part/identity instance, node/set, S4/S4R → FESA-MITC4, centered homogeneous shell, isotropic elastic material, geometry와 chart 검증을 상속한다. 아래 절차 차이만 dynamic에 적용한다. 기존 static/frequency 입력·결과의 의미나 schema는 바꾸지 않는다. Source S4/S4R 표기는 보존하며 Abaqus 내부 요소·관성·시간 알고리즘 동등성을 주장하지 않는다. 공개 Abaqus 관례의 근거는 이미 조사한 [research](research.md#research)의 관측 가능한 입력 의미에 한정한다.
|
||||
|
||||
| 구문 | 이번 지원 의미 / 검증 |
|
||||
| --- | --- |
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# HHT 내부 수치 판정
|
||||
|
||||
[Numerical Review](numerical-review.md)의 구현용 계약이다. IEEE binary64를 기준으로 하며 [정식화](formulation.md), [관성 상세](formulation-inertia.md), [검증 사례](verification-cases.md)를 함께 적용한다. 사용자 결정 [HHT-ADR-007](ADR.md)에 따라 이번 HHT 구현은 **consistent kinetic mass**를 사용한다. 아래 lumped 대조는 기존 eigen/대안 evidence의 경계이며 새 HHT lumped 지원 요구가 아니다. 외부 reference는 [TOLERANCE](../TOLERANCE.md)만 따른다.
|
||||
[Numerical Review](numerical-review.md#numerical-review)의 구현용 계약이다. IEEE binary64를 기준으로 하며 [정식화](formulation.md), [관성 상세](formulation-inertia.md), [검증 사례](verification-cases.md)를 함께 적용한다. 사용자 결정 [HHT-ADR-007](ADR.md)에 따라 이번 HHT 구현은 **consistent kinetic mass**를 사용한다. 아래 lumped 대조는 기존 eigen/대안 evidence의 경계이며 새 HHT lumped 지원 요구가 아니다. 외부 reference는 [TOLERANCE](../TOLERANCE.md)만 따른다.
|
||||
|
||||
## N1. Scale와 공통 규칙
|
||||
|
||||
|
||||
@@ -1,152 +0,0 @@
|
||||
# HHT 수치 제어·검증 설계 추가 근거
|
||||
|
||||
- Feature: `hht-implicit-dynamics`
|
||||
- Owner: `research-agent`
|
||||
- Date: `2026-09-22`
|
||||
- Status: `Evidence and verification candidates; numerical thresholds not selected`
|
||||
- 기준: [프로젝트 지침](../../AGENTS.md), [PRD](../PRD.md), [ADR](../ADR.md#adr-028), [기존 연구](research.md).
|
||||
|
||||
[관성 정식화](formulation-inertia.md)와 [독립 probe](numerical-review-probes.md)를 읽고
|
||||
남은 질문만 조사했다. 기존 SDOF/moving-null 계산은 재실행하지 않았다.
|
||||
**사실**은 열람한 일차 자료, **도출**은 명시한 수학적 계산, **후보**는 검증 제안이다.
|
||||
수치 threshold·질량 채택·물리 범위·입출력 계약은 이 문서에서 결정하지 않는다.
|
||||
현재 질량 선택은 사용자 결정으로 consistent mass가 확정되었다. Shell 속도 보간의
|
||||
운동에너지를 그대로 적분하며, lumped는 이번 HHT 구현의 지원 요구에서 제외한다.
|
||||
|
||||
## 1. Physical acceleration, startup와 DAE 적용 경계
|
||||
|
||||
**사실 [N1].** Brüls–Arnold (2008) author postprint pp.3–4, Eq. (5)–(8)은
|
||||
물리적 `q_ddot`와 보조 acceleration-like variable을 구분하고 보조 초기값을
|
||||
물리적 초기 가속도와 같게 둔다. 이 문서의 `A`가 논문의 보조 `a`에 대응한다.
|
||||
`alpha_m=0`, `alpha_f=-alpha`를 대입하면 현재 후보의
|
||||
`A_(n+1)=(1+alpha)a_(n+1)-alpha a_n`이다. 같은 논문은 variable M일 때 이를
|
||||
force-level 가중 평형과 동일시할 수 없다고 명시한다. 이 질문에는 기존 출처가 충분하다.
|
||||
|
||||
**사실 [N1]: 정리의 가정은 정확히 구분한다.** Printed p.6, “Equivalent model”은
|
||||
`[[M,-L],[-h_qddot,I-h_y]]` block의 비특이성과 index-3 조건
|
||||
`Phi_q g*_lambda`의 비특이성을 사용한다. 여기의 `h`는 논문 Eq. (4)의 algebraic
|
||||
output function이며 시간간격이 아니다. Controller/algebraic coupling을 제거한
|
||||
특수형에서는 첫 조건이 M의 비특이성으로 줄어든다. 논문 전체가 무조건 “M만
|
||||
비특이이면 충분”하다고 읽어서는 안 된다. “Initial value condition”의 초기 오차 조건과
|
||||
“Constrained case”의 정칙성 하에서 얻은 수렴 결과를 singular drilling에 자동 적용할 수 없다.
|
||||
|
||||
**도출/수치 제어에의 함의.** 현재 shell의 `psi=N(q)^T g=0`는 논문의 holonomic
|
||||
`Phi=0`와 동일한 모델임이 아직 증명되지 않았다. 따라서 다음을 분리해서 관찰한다.
|
||||
|
||||
| 관찰 대상 | 필요한 검증 후보 | 남은 한계 |
|
||||
| --- | --- | --- |
|
||||
| 첫 시점 | `a0`는 우측 물리 평형·초기 대수조건으로 결정한 뒤 `A0=a0`; 첫 step과 이후 오차를 분리 | 작은 Newton residual로 불일관 초기값이 정당화되지 않음 |
|
||||
| 물리 a와 A | 동일 시각 정확해에 대한 q/v/physical a 차수와 `A-a`를 별도 측정 | A를 물리 출력·각운동량 미분에 대입하면 안 됨 |
|
||||
| Current null | 매 configuration에서 `MN`, `N^T I`, `psi`, 양의 부분공간 mass 및 `psi_q N` 정칙성 | 이전 시점 null, 고정 UR3, 전체 M의 역행렬로 대체 불가 |
|
||||
| Hidden constraints | `psi_q v+psi_t`와 `psi_q a+psi_qq[v,v]+2psi_qt v+psi_tt`의 최대·종단 결함과 dt 수렴 | 위치 평형만 만족해도 두 결함이 0인 것은 아님 |
|
||||
| 반례 coverage | 현재 움직이는 영공간 예제를 full redundant coordinates로 풀어 기존 reduced-angle probe와 대조 | 기존 probe는 위치조건을 정확히 강제했으므로 full-coordinate Newton 구현 검증이 아님 |
|
||||
| 고정 간격 | 기존 후보에서 dt를 줄여 같은 물리 종단시각 비교 | adaptive dt·startup 재설정은 별도 scope이며 이번 근거로 추가하지 않음 |
|
||||
|
||||
**도출.** Chart 내부의 smooth q에서 projector와 null basis는 같은 물리 영공간을 나타내야
|
||||
한다. Null vector의 부호·정규화 변경 자체와 rank 손실을 구분해야 한다.
|
||||
`psi_q`에는 `DN`이 들어가므로 basis를 고정한 finite difference는 별도 식을 검증하게 된다.
|
||||
투영 오차·hidden defect가 큰 결과를 발견하면 정확한 projection/condensation의 채택 여부는
|
||||
formulation owner에게 돌린다. 여기서는 추가 projection을 자동 제안·채택하지 않는다.
|
||||
|
||||
## 2. Double precision, conditioning 및 미분 검증
|
||||
|
||||
**사실 [N2–N4].** IEEE double의 정상수 significand는 53 bits다. LAPACK DGECON은
|
||||
선택한 1/∞ norm의 reciprocal condition number **추정값**을 반환한다. DGESVX는
|
||||
equilibration 여부를 구별하고, factor pivot이 정확히 0인 경우와 reciprocal condition이
|
||||
machine precision보다 작은 경우를 서로 다른 INFO로 보고한다. 후자는 해·오차 추정을
|
||||
계속 계산할 수 있는 warning이다. 이 공개 library 동작은 FESA failure threshold를
|
||||
자동 승인하지 않으며 vendor routine 채택 요구도 아니다.
|
||||
|
||||
**도출.** Binary64에서 1의 다음 표현수 간격 `eps=2^-52`, round-to-nearest 정상 범위의
|
||||
unit roundoff `u=2^-53`를 구분한다. 문헌의 “machine epsilon” 정의와 library 반환 의미를
|
||||
확인하지 않고 두 값을 혼용하면 안 된다. 작은 perturbation의 forward error는
|
||||
대략 `condition × backward error`로 증폭되므로 residual 하나로 해의 정확도를 보장하지 못한다.
|
||||
|
||||
| 질문 | 근거에 따른 분리 및 검사 후보 |
|
||||
| --- | --- |
|
||||
| Physical mass-null인가? | `n=[0;J_l^-1 d]`, admissible free-space intersection 같은 분석적 운동학을 원본으로 삼는다. `MN`의 수치 결함과 양의 complement의 conditioning을 각각 검사한다. |
|
||||
| 작은 양의 eigenvalue인가? | 단위·두께 때문에 작은 inertia를 rcond 하나로 drilling null로 바꾸지 않는다. 예상 추가 null/geometry 이상과 positive-space accuracy loss를 구분한다. |
|
||||
| 어느 rcond인가? | Full singular M의 rcond는 positive inertia 품질을 설명하지 못한다. Positive-space mass, 초기화 algebraic block, effective Newton matrix를 각각 이름 붙이고 norm·scaling을 기록한다. |
|
||||
| 단위를 바꾸면? | 병진·회전 단위가 섞인 원행렬 condition은 단위 선택에 의존한다. `q=D qhat`, `Rhat=D^T R/Escale`이면 `Khat=D^T K D/Escale`라는 virtual-work 일관 scaling을 대조 후보로 삼는다. 기준 scale의 수치 선택은 NR 소유다. |
|
||||
| Library equilibration이면 충분한가? | Row/column equilibration은 solver conditioning 도구다. 물리적 nondimensionalization이나 예상 null proof와 동일하지 않다. 원·scaled 행렬 중 무엇을 추정했는지 보존한다. |
|
||||
|
||||
**사실 [N5].** GSL의 central differentiation은 truncation과 roundoff를 함께 추정하여
|
||||
step을 고르며, 5-point와 3-point 차이를 오차 추정에 쓴다. 따라서 가장 작은 step을
|
||||
항상 정답으로 간주하지 않는 독립 derivative 검사 설계가 공식 수치 library의 접근과 부합한다.
|
||||
|
||||
**도출/후보.** Dimensionless direction p에 대해 scaled 잔차의 중심차분과 `Khat p`를
|
||||
비교하면 일반적인 smooth·비상쇄 구간에서 오차형은 `C_t delta²+C_r u/delta`다.
|
||||
최적 step의 `u^(1/3)` 크기는 이 가정에서의 점근적 안내일 뿐 공통 고정값이 아니다.
|
||||
Zero derivative, 큰 residual cancellation, branch 접근에서는 계수와 error floor가 달라진다.
|
||||
여러 delta를 sweep하여 감소구간·최저 plateau·roundoff 증가구간을 기록하고, 모든 sample이
|
||||
같은 허용 chart와 geometry 안에 있는지 확인한다. Unit-aware scale을 쓰고 임의
|
||||
`max(1, norm)`로 작은 문제를 덮지 않는다.
|
||||
|
||||
Inertia partial derivative 검사에서는 q/v/physical a 중 하나만 바꾸고 나머지는 고정한다.
|
||||
Effective tangent 검사에서는 같은 trial q에 연동되는 v, A, physical a를 모두 갱신한다.
|
||||
두 검사는 서로 다른 미분이므로 섞지 않는다. 작은 dt의 acceleration 재구성에는
|
||||
위치 차분 오차가 `1/dt²`로 증폭되므로 시간 차수 측정에서 너무 미세한 dt의 plateau를
|
||||
수학적 차수 저하로 오인하지 않는다. 기준 oracle 정밀도와 nonlinear solve 오차도 분리한다.
|
||||
|
||||
## 3. 3차 회전 미분과 운동량·에너지 case 후보
|
||||
|
||||
**사실 [N6].** Higham–Relton의 Theorem 3.5/Algorithm 3.6은 고차 Fréchet derivative를
|
||||
재귀 block matrix function의 우상단 block으로 구한다. Matrix exponential은 smoothness
|
||||
조건을 만족한다. `P=[phi]_cross` 및 세 방향 행렬에 적용하면 24×24 exponential 하나의
|
||||
3×3 우상단 block이 3차 혼합 미분을 준다.
|
||||
|
||||
**후보.** 이 방식에 `d0`를 곱한 결과를 Rodrigues/회전 Jacobian의 해석 미분과 비교하면
|
||||
동일 scalar coefficient 도함수를 재사용하는 자기검증을 피할 수 있다. “Exact derivative”는
|
||||
수학적 항등식을 뜻하며 부동소수점 exp 계산까지 오차가 없다는 뜻은 아니다.
|
||||
Production 의존성 추가나 24×24 exp의 runtime 사용은 요구하지 않는다.
|
||||
|
||||
**자체 도출: 영회전의 유한 다항 oracle.** `H_p=[p]_cross` 등으로 쓰면
|
||||
|
||||
\[
|
||||
D^3d(0)[p,s,r]=\frac16\sum_{\sigma\in S_3}
|
||||
H_{\sigma(p)}H_{\sigma(s)}H_{\sigma(r)}d_0.
|
||||
\]
|
||||
|
||||
이는 exponential Taylor series의 cubic 항에서 바로 얻는다. 방향 permutation 대칭,
|
||||
각 방향의 선형성, 동일 방향 3회 `H_p³ d0`를 함께 검사할 수 있다. 비영 phi의
|
||||
block-exponential oracle와 `D²d`의 방향 중심차분을 추가해 영점 특례만 맞는 오류를 검출한다.
|
||||
Chart 경계 안쪽, 작은 phi, 서로 비평행한 방향을 포함하되 경계를 넘어 차분하지 않는다.
|
||||
|
||||
| ID | 실행 가능한 검증 설계 후보 | 판정에 필요한 한계 |
|
||||
| --- | --- | --- |
|
||||
| NR-E01 | 임의 유효 shell 상태에서 spatial rigid velocity를 부여하여 kinetic energy·총 P·총 L을 독립 volume integration과 대조 | Rigid velocity는 순간 운동학 검사다. 회전하는 탄성 shell이 자유운동에서도 강체를 유지한다는 가정은 하지 않음. Consistent/lumped 각각 자신의 measure를 사용 |
|
||||
| NR-E02 | `I(q,v,a)`를 q/v/a별 미분하고 전체 effective tangent도 별도 directional check | 3차 director 항과 `D(H^T)` 누락을 분리 검출 |
|
||||
| NR-E03 | 작은 smooth 회전 구간의 자유 shell에 일관된 initial velocity를 부여하거나 짧은 smooth loading 후 unload, P/L/총에너지·work와 dt 수렴 관찰 | 초기조건/시간하중이 CLI 범위 밖이면 kernel/procedure verification 후보로만 유지. 승인 input subset 확대 금지 |
|
||||
| NR-E04 | 같은 spatial problem에 alpha=0 및 승인된 음수 alpha를 적용하고 저주파 해상 case와 높은 modal content case를 분리 | 일반 비선형 HHT의 총에너지 매 step 감소 또는 정확한 각운동량 보존을 무조건 요구하지 않음 |
|
||||
| NR-E05 | 문헌 free-flying single-layer plate를 후속 benchmark 후보로 검토 | 아래 N7은 large rotation/energy 사례의 출처다. 현재 fixed chart를 넘어서는 tumble·장시간 운동은 그대로 채택할 수 없음 |
|
||||
|
||||
**사실 [N7].** Vu-Quoc–Tan (2003), §5.1.2/Figs.9–12는 free-flying single-layer plate의
|
||||
큰 전체 운동과 P/L/에너지 및 dissipative/nondissipative integrator 결과를 비교한다.
|
||||
해당 요소는 rotation DOF가 없는 solid-shell이므로 그 mass·응력 모델과 여기의 director shell은
|
||||
다르다. Author-uploaded 본문의 관련 절을 확인했으나 그림의 하중 위치·수치 history를
|
||||
독립 추출하지 않았다. 따라서 현 단계에서는 case family 근거이며 완성된 reference artifact가 아니다.
|
||||
|
||||
**추론.** 현재 shell 운동학에서는 `Pdot/Ldot`에 physical a를 사용하고 numerical drill
|
||||
potential을 포함한 에너지·내력 일을 일관되게 대조해야 한다. N7의 보존형 integrator가
|
||||
보이는 exact conservation을 HHT의 요구조건으로 옮길 수 없다. [기존 연구 S8](research.md#sources)의
|
||||
비선형 Newmark 보존 한계 근거는 그대로 충분하다. 추가 shell 연구는 기하·하중·시간 구간이
|
||||
승인된 chart와 입력 범위 안에 있는지 결정한 뒤에만 구체화할 필요가 있다.
|
||||
|
||||
## 출처·열람 한계와 인계
|
||||
|
||||
`accessed: 2026-09-22`. 문서 정적 검사만 수행하며 solver/build/test/reference 생성은 수행하지 않았다.
|
||||
|
||||
| ID | Stable citation / locator | 열람 범위 |
|
||||
| --- | --- | --- |
|
||||
| N1 | Brüls, O.; Arnold, M. (2008), *The generalized-alpha scheme as a linear multistep integrator: Toward a general mechatronic simulator*, J. Computational and Nonlinear Dynamics 3, 041007, [DOI:10.1115/1.2960475](https://doi.org/10.1115/1.2960475), [author PDF](https://orbi.uliege.be/bitstream/2268/27088/1/pa_BrulsArnold2008_TheGeneralizedAlphaSchemeAsALinearMultistepIntegrator.pdf) | Printed pp.3–6 Eq.5–8/Equivalent model, Initial value condition/Constrained case. Shell singular-mass 정리 아님 |
|
||||
| N2 | Oracle, *Numerical Computation Guide*, [§2.2.3 Double Format](https://docs.oracle.com/cd/E37069_01/html/E39019/z4000ac019269.html) | 53-bit significand 설명. IEEE 표준 전체 적합성 시험을 수행한 것은 아님 |
|
||||
| N3 | LAPACK, [DGECON](https://netlib.org/lapack/explore-html/d4/daf/group__gecon_ga4f9b830e19e12c7f082ddb497a57af18.html), Purpose/NORM/ANORM/RCOND | Normwise reciprocal condition estimate |
|
||||
| N4 | LAPACK, [DGESVX](https://netlib.org/lapack/explore-html/d5/dbe/group__gesvx_ga82173a93234afc15d70b64233b3e5bc8.html), Description steps 1–6/INFO | Equilibration, singular pivot와 working-precision warning 구별 |
|
||||
| N5 | GNU Scientific Library 2.8, [Numerical Differentiation](https://www.gnu.org/software/gsl/doc/html/diff.html), `gsl_deriv_central` | Truncation/roundoff 기반 step/error estimate. FESA tolerance 원본 아님 |
|
||||
| N6 | Higham, N.J.; Relton, S.D. (2014), *Higher Order Fréchet Derivatives of Matrix Functions and the Level-2 Condition Number*, SIAM J. Matrix Anal. Appl. 35, 1019–1037, [DOI:10.1137/130945259](https://doi.org/10.1137/130945259), [author PDF](https://eprints.maths.manchester.ac.uk/2066/1/paper.pdf), Theorem 3.5/Algorithm 3.6 | 2013 author version printed pp.5–6; oracle identity와 계산법 |
|
||||
| N7 | Vu-Quoc, L.; Tan, X.G. (2003), *Optimal solid shells for non-linear analyses of multilayer composites. II. Dynamics*, CMAME 192, 1017–1059, [DOI:10.1016/S0045-7825(02)00336-5](https://doi.org/10.1016/S0045-7825(02)00336-5), [author-uploaded text](https://www.researchgate.net/publication/222546721_Optimal_solid_shells_for_non-linear_analyses_of_multilayer_composites_II_Dynamics), §5.1.2/Figs.9–12 | Relevant text 확인; 하중 figure·곡선 digitization 미수행, exact benchmark reproduction 미정 |
|
||||
|
||||
Numerical Review에 인계할 결정은 scaling·conditioning/hidden-defect 판정·FD sweep과
|
||||
시간 수렴 구간·case 최소 조합이다. Formulation에 남는 사항은 singular-mass regularity의
|
||||
실제 shell 적용과 full-coordinate hidden constraint 검증이다. 사용자 결정에 따라 이번
|
||||
HHT 구현은 consistent mass를 사용한다. 위 lumped 비교 근거는 연구 이력이며 현재 지원 요구가 아니다.
|
||||
@@ -1,162 +0,0 @@
|
||||
# HHT 독립 시간정확도 검산
|
||||
|
||||
[검토 보고서](numerical-review.md)의 상세 evidence다. 2026-09-22 Python 표준 라이브러리만 사용했다. FESA solver, Abaqus 또는 reference 비교 실행이 아니다. 아래 오차는 승인 tolerance를 새로 정하는 값이 아니라 정확해와의 수렴 관찰값이다.
|
||||
|
||||
## 모델과 결과
|
||||
|
||||
1. Smooth SDOF: `T=.5(1+q²)v²`, `c=qv²`, `q_exact=.4+sin(t)`, `f=(1+q_exact²)a_exact+q_exact v_exact²`, `0≤t≤1`. 초기 `q=.4,v=1,a=0`. 입력은 일관된 무차원 검산 단위다. `alpha=-.05,beta=.275625,gamma=.55`.
|
||||
2. Moving-null: `x(q)=q/|q|`, `T=.5|Dx(q)v|²`, `U=.5(|q|-1)²`, `q∈R²\{0}`. `r=|q|`, `d=q/r`, `M=(I-ddᵀ)/r²`, `c=-2(q·v)Mv/r²`, `f_int=(r-1)d`. `ker M=span(q)`가 회전한다. 정확해 `q=(cos t,sin t)`, `v=(-sin t,cos t)`, `a=-q`; 초기 위치·속도·가속도 대수조건은 일관된다. Endpoint 반경 대수조건 `r=1`은 각도 parameterization으로 정확하게 강제하며 tangent 평형만 Newton으로 푼다. 이 모델은 shell/drilling 구현이나 일반 singular-DAE 정리의 대체물이 아니다.
|
||||
|
||||
| SDOF 방법 | `h=1/512` U 오차 | `h=1/1024` U 오차 | 관측 차수 |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| Naive `M1 A1+(1+alpha)g1-alpha g0=0` | 1.0272820368e-5 | 5.2200068232e-6 | 0.976709 |
|
||||
| Weighted mass `((1+alpha)M1-alpha M0)A1+(1+alpha)g1-alpha g0=0` | 3.2914014847e-7 | 8.2299941973e-8 | 1.999739 |
|
||||
| Endpoint physical `M1 a1+g1=0`, `A1=(1+alpha)a1-alpha a0` | 2.7561411953e-7 | 6.8902116013e-8 | 2.000030 |
|
||||
|
||||
`g=c-f`. 마지막 방법의 physical acceleration 오차는 `2.3176116737e-7 → 5.7545108678e-8`로 줄지만 algorithmic `A` 오차는 `5.2612378749e-5 → 2.6344436092e-5`다. 따라서 `A`를 endpoint physical acceleration으로 보고하면 안 된다.
|
||||
|
||||
Moving-null 마지막 방법은 같은 두 h에서 U 오차 `4.0606413493e-7 → 1.0152120526e-7`, V 오차 `4.1505360817e-7 → 1.0376522277e-7`, physical a 오차 `4.1511310820e-7 → 1.0262747089e-7`를 보였다. `max|q·v|`는 `8.4282e-11 → 1.0594e-11`, `max|q·a+v²|`는 `7.9368e-7 → 1.9445e-7`다. Endpoint 위치 대수조건을 지켜도 미분된 속도·가속도 조건이 매 frame 정확히 0이 되는 것은 아니다. 이 결함의 시간수렴과 초기 일관성을 별도로 검증해야 한다.
|
||||
|
||||
## 독립 수학 대조
|
||||
|
||||
Smooth 물리식 `M(q)a+g(q,v,t)=0`에서 Newmark 내부 가속도의 정확해 대응은 `A=a+alpha*h*adot+O(h²)`다. Naive 식의 일차 결함은
|
||||
|
||||
`alpha*h*(M*adot+gdot)=-alpha*h*Mdot*a`.
|
||||
|
||||
따라서 `Mdot*a≠0`인 일반 문제에서 상수 M 증명을 그대로 사용할 수 없다. Weighted mass는 이 항을 상쇄하지만 `alpha∈(-1,0)`이면 서로 다른 두 시점의 양의 준정부호 질량의 양의 결합이다. 그 영공간은 두 영공간의 교집합이므로, 영공간이 회전하면 rank가 늘어날 수 있다. 단순 SDOF의 2차 결과가 이를 정당화하지 않는다.
|
||||
|
||||
Physical/algorithmic 가속도 분리는 [Brüls–Arnold 원문](https://orbi.uliege.be/bitstream/2268/27088/1/pa_BrulsArnold2008_TheGeneralizedAlphaSchemeAsALinearMultistepIntegrator.pdf)의 Eq. (5), (7), (8)에 `alpha_m=0,alpha_f=-alpha`를 대입한 것이다. 원문의 p.6 equivalent-model/index-3 가정은 비특이 mass 및 제약 정칙성을 사용한다. Singular drilling mass에 그 증명을 직접 적용하지 않는다. 이 문서의 제조해와 결함 계산은 독립 검산이다.
|
||||
|
||||
## 재현 코드와 명령
|
||||
|
||||
Workspace root에서 다음 명령으로 아래 Python block만 실행한다. 외부 package, 파일 생성 또는 solver 실행은 없다.
|
||||
|
||||
```powershell
|
||||
python -c 'from pathlib import Path; s=Path("docs/hht-implicit-dynamics/numerical-review-probes.md").read_text(encoding="utf-8"); exec(s.split(chr(96)*3+"python\n",1)[1].split(chr(96)*3,1)[0])'
|
||||
```
|
||||
|
||||
```python
|
||||
import math
|
||||
|
||||
alpha = -.05
|
||||
beta = (1-alpha)**2/4
|
||||
gamma = .5-alpha
|
||||
|
||||
def exact(t):
|
||||
return .4+math.sin(t), math.cos(t), -math.sin(t)
|
||||
|
||||
def force(t):
|
||||
q, v, a = exact(t)
|
||||
return (1+q*q)*a+q*v*v
|
||||
|
||||
def scalar(h, variant):
|
||||
q, v, ap = exact(0)
|
||||
A = ap
|
||||
for n in range(round(1/h)):
|
||||
t = (n+1)*h
|
||||
m0 = 1+q*q
|
||||
g0 = q*v*v-force(n*h)
|
||||
oldap = ap
|
||||
pred = q+h*v+h*h*(.5-beta)*A
|
||||
vpred = v+h*(1-gamma)*A
|
||||
def calc(x):
|
||||
an = (x-pred)/(beta*h*h)
|
||||
vn = vpred+gamma*h*an
|
||||
m = 1+x*x
|
||||
if variant == 'physical':
|
||||
pn = (an+alpha*oldap)/(1+alpha)
|
||||
r = m*pn+x*vn*vn-force(t)
|
||||
dr = 2*x*pn+m/((1+alpha)*beta*h*h)+vn*vn+2*x*vn*gamma/(beta*h)
|
||||
else:
|
||||
me = m if variant == 'naive' else (1+alpha)*m-alpha*m0
|
||||
dm = 2*x if variant == 'naive' else (1+alpha)*2*x
|
||||
r = me*an+(1+alpha)*(x*vn*vn-force(t))-alpha*g0
|
||||
dr = dm*an+me/(beta*h*h)+(1+alpha)*(vn*vn+2*x*vn*gamma/(beta*h))
|
||||
pn = an
|
||||
return r, dr, vn, an, pn
|
||||
x = pred+beta*h*h*A
|
||||
for _ in range(20):
|
||||
r, dr, *_ = calc(x)
|
||||
dx = -r/dr
|
||||
x += dx
|
||||
if abs(dx) < 1e-14:
|
||||
break
|
||||
else:
|
||||
raise RuntimeError('scalar Newton failed')
|
||||
q = x
|
||||
_, _, v, A, ap = calc(q)
|
||||
qe, ve, ae = exact(1)
|
||||
return abs(q-qe), abs(v-ve), abs(ap-ae), abs(A-ae)
|
||||
|
||||
def moving_null(h):
|
||||
q, v, ap = [1.,0.], [0.,1.], [-1.,0.]
|
||||
A = ap[:]
|
||||
theta = 0.
|
||||
max_cv = max_ca = 0.
|
||||
dot = lambda x,y: sum(x[i]*y[i] for i in range(2))
|
||||
for _ in range(round(1/h)):
|
||||
pred = [q[i]+h*v[i]+h*h*(.5-beta)*A[i] for i in range(2)]
|
||||
vp = [v[i]+h*(1-gamma)*A[i] for i in range(2)]
|
||||
old = ap[:]
|
||||
theta += h
|
||||
def calc(angle):
|
||||
d = [math.cos(angle),math.sin(angle)]
|
||||
tangent = [-d[1],d[0]]
|
||||
an = [(d[i]-pred[i])/(beta*h*h) for i in range(2)]
|
||||
vn = [vp[i]+gamma*h*an[i] for i in range(2)]
|
||||
pn = [(an[i]+alpha*old[i])/(1+alpha) for i in range(2)]
|
||||
dv, tv = dot(d,vn), dot(tangent,vn)
|
||||
residual = dot(pn,tangent)-2*dv*tv
|
||||
derivative = 1/((1+alpha)*beta*h*h)-dot(pn,d)-2*(tv*tv+dv*(-dv+gamma/(beta*h)))
|
||||
return residual, derivative, d, vn, pn, an
|
||||
for _ in range(15):
|
||||
r, dr, *_ = calc(theta)
|
||||
dx = -r/dr
|
||||
theta += dx
|
||||
if abs(dx) < 1e-14:
|
||||
break
|
||||
else:
|
||||
raise RuntimeError('moving-null Newton failed')
|
||||
_, _, q, v, ap, A = calc(theta)
|
||||
max_cv = max(max_cv,abs(dot(q,v)))
|
||||
max_ca = max(max_ca,abs(dot(q,ap)+dot(v,v)))
|
||||
qe = [math.cos(1),math.sin(1)]
|
||||
ve = [-math.sin(1),math.cos(1)]
|
||||
ae = [-x for x in qe]
|
||||
errors = [math.hypot(*[x[i]-y[i] for i in range(2)]) for x,y in ((q,qe),(v,ve),(ap,ae))]
|
||||
return *errors, max_cv, max_ca
|
||||
|
||||
for variant in ('naive','weighted_mass','physical','moving_null'):
|
||||
print(variant)
|
||||
previous = None
|
||||
for k in range(5,11):
|
||||
h = 2**(-k)
|
||||
errors = moving_null(h) if variant == 'moving_null' else scalar(h,variant)
|
||||
order = math.log(previous/errors[0],2) if previous else float('nan')
|
||||
print(f'h={h:.9g} errors='+','.join(f'{x:.10e}' for x in errors)+f' pU={order:.6f}')
|
||||
previous = errors[0]
|
||||
```
|
||||
|
||||
Newton correction cutoff `1e-14`는 이 독립 double-precision probe의 반복 종료값이다. Solver convergence 또는 reference acceptance tolerance로 채택하지 않는다. 미세 h의 acceleration 오차에는 displacement 차분의 roundoff가 포함되므로 표의 관측값을 정확한 수학 상수로 해석하지 않는다.
|
||||
|
||||
## 후속 full Cartesian moving-null 검산
|
||||
|
||||
추가 Numerical 작업에서 메인이 [full_coordinate_probe.py](../../.harness/build/hht-numerical/full_coordinate_probe.py)를 작성했고 수치 검토자가 residual/Jacobian 식을 읽고 아래 명령을 재실행했다. Exit `0`, 2026-09-22. 이 script는 ignored build evidence이며 FESA source가 아니다. 위 angle-reduced probe와 달리 q의 두 Cartesian 성분을 직접 Newton으로 풀며 radial projection·normalization을 하지 않는다. 같은 `x=q/|q|` 모델의 exact 2×2 Jacobian을 사용한다.
|
||||
|
||||
```powershell
|
||||
python .harness/build/hht-numerical/full_coordinate_probe.py
|
||||
```
|
||||
|
||||
오차는 각 h의 **모든 시점**에서 q/v/physical a의 2-norm 최대다. 앞 절의 종단 오차와 다른 측정량이다.
|
||||
|
||||
| h | max q error | max v error | max physical a error | 직전 h 대비 q/v/a 차수 |
|
||||
| --- | ---: | ---: | ---: | --- |
|
||||
| 1/128 | 6.4948801161e-6 | 6.6395874231e-6 | 1.2690547915e-5 | 1.99932 / 1.99962 / 2.01024 |
|
||||
| 1/256 | 1.6240799623e-6 | 1.6601117645e-6 | 3.1667175260e-6 | 1.99968 / 1.99981 / 2.00269 |
|
||||
| 1/512 | 4.0606299832e-7 | 4.1505196280e-7 | 7.9259171465e-7 | 1.99985 / 1.99992 / 1.99834 |
|
||||
|
||||
마지막 grid의 최대 `||q|-1|=2.22045e-16`, `|q·v|=8.39836e-11`, `|q·a+v²|=7.91118e-7`. 상쇄 전 `Ma`의 entry products·c·f_int를 사용한 최대 normwise residual은 `7.94824e-11`, Newton 최대 3 corrections, 마지막 correction 최대 `4.00220e-16`이었다. 이 probe의 종료는 correction `<=1e-13`이며 N2의 모든 AND gate를 구현한 solver가 아니다. 위 관찰을 N2–N7 전체 통과나 실제 shell 통과로 확대하지 않는다.
|
||||
|
||||
별도 trial `q=(.85,.52)`, predictor `(.83,.50)`, velocity predictor `(-.35,.71)`, old physical a `(-.7,-.3)`, h=.1, direction `(.6,-.8)`의 exact effective Jacobian을 중앙차분했다. N5의 j=8,10,12,14,16,18,20 순서에서 상대 오차는 `[3.13656e-5,1.96035e-6,1.22522e-7,7.65779e-9,4.77929e-10,3.25134e-11,1.04250e-11]`이다. 연속한 내부 sweep 점 j=12/14 등이 `1e-6`을 만족한다. 이는 이 2D trial/direction에 대한 미분 evidence이며 shell D3 oracle를 대체하지 않는다.
|
||||
|
||||
Full-coordinate 결과는 새로운 [C04b](verification-cases.md)의 moving-null 구조와 max-time 측정을 지지한다. C04b의 전체 prescribed grids, 초기화 실패 mutation, regularity·scale·반복오차 분리 등 모든 판정을 실행한 것은 아니다. 더 미세한 h에서 residual이 증가할 수 있으므로 h=1/1024까지 같은 residual 기준으로 통과했다는 주장을 하지 않는다.
|
||||
@@ -1,11 +1,23 @@
|
||||
# HHT 독립 수치 검토·검증 계약
|
||||
# HHT 독립 정식화 검토와 제조해 검산
|
||||
|
||||
아래 상태와 미실행 표시는 각 검토 당시의 기록이다. 이후 reference 비교와 실제 shell
|
||||
검증 결과는 [구현 수치 검토](implementation-numerical-review.md), 현재 실패·잔여 범위는
|
||||
[PRD](PRD.md)와 [전체 현황](../tracking/status.md)을 따른다.
|
||||
|
||||
|
||||
|
||||
<a id="numerical-review"></a>
|
||||
|
||||
<a id="numerical-review--hht-독립-수치-검토검증-계약"></a>
|
||||
## HHT 독립 수치 검토·검증 계약
|
||||
|
||||
- Feature: `hht-implicit-dynamics`; owner: `numerical-review-agent`; date: `2026-09-22`.
|
||||
- 상태: `numerical-contract-defined; io-binding-and-implementation-verification-pending`. 기존 정식화 검토에 후속 Numerical gate의 내부 판정·검증 사례·reference mapping 검토를 추가했다. Solver 기능 통과 또는 I/O schema 승인이 아니다.
|
||||
- 기준: [프로젝트 지침](../../AGENTS.md), [Feature PRD](PRD.md), [요구사항](requirements.md), [연구 근거](research.md), [공통 tolerance](../TOLERANCE.md).
|
||||
- 상세: [내부 수치 기준](numerical-controls.md), [검증 사례](verification-cases.md), [시간정확도 검산](numerical-review-probes.md), [추가 일차 근거](numerical-research.md), [reference mapping](reference-model.md). Solver source/tests/reference/상위 계약은 수정하지 않았다.
|
||||
- 기준: [프로젝트 지침](../../AGENTS.md), [Feature PRD](PRD.md), [요구사항](requirements.md), [연구 근거](research.md#research), [공통 tolerance](../TOLERANCE.md).
|
||||
- 상세: [내부 수치 기준](numerical-controls.md), [검증 사례](verification-cases.md), [시간정확도 검산](numerical-review.md#numerical-review-probes), [추가 일차 근거](research.md#numerical-research), [reference mapping](reference-model.md). Solver source/tests/reference/상위 계약은 수정하지 않았다.
|
||||
|
||||
## 결론
|
||||
<a id="numerical-review--결론"></a>
|
||||
### 결론
|
||||
|
||||
[주 정식화](formulation.md)와 [관성 상세](formulation-inertia.md)를 독립 대조했다. **현재 physical/algorithmic 가속도 분리 후보의 표시된 수식에서 새 오류는 발견하지 않았다.** 사용자는 [HHT-ADR-007](ADR.md)에서 consistent kinetic mass를 선택했다. 내부 수치값과 반증 가능한 사례를 구체화했으며 Numerical 계약은 후속 I/O/구현에 인계할 수 있다. 실제 finite-rotation shell의 drilling DAE·시간수렴·reference 검증은 구현 후 필수 evidence다. 이 미실행을 수식 모순이나 코드 작성 금지로 해석하지 않는다.
|
||||
|
||||
@@ -18,7 +30,8 @@
|
||||
|
||||
숫자의 norm·zero branch·단위·실행 상태는 [numerical-controls](numerical-controls.md)가 원본이다. 위 요약의 값만 떼어 다른 metric에 적용하지 않는다. 기존 정적 외력 상대 1%/absolute `1e-3`나 eigen 외부 RMS 예외를 동적 Newton에 승계하지 않았다.
|
||||
|
||||
## 위험과 수정 반영
|
||||
<a id="numerical-review--위험과-수정-반영"></a>
|
||||
### 위험과 수정 반영
|
||||
|
||||
| ID | 판단 | 근거·필요 조치 |
|
||||
| --- | --- | --- |
|
||||
@@ -27,7 +40,8 @@
|
||||
| HHT-NR-003 | Endpoint physical `a`와 auxiliary `A` 분리 **SUPPORTED CANDIDATE** | `A1=(1+alpha)a1-alpha*a0`, Newmark에는 A, endpoint balance에는 a. Smooth variable-mass와 한 moving-null 제조해에서 U/V/a의 2차 경향 확인. 일반 shell DAE 수렴 증명·구현 통과는 아니다. |
|
||||
| HHT-NR-004 | `A`를 physical acceleration으로 출력 **FAIL; 현 후보에서 구분 완료** | 위 후보에서도 A의 endpoint 오차는 1차다. 주 정식화 §§4–6이 a/A와 endpoint reaction을 구분한다. 영속 결과 선택은 I/O owner의 후속 계약이다. |
|
||||
|
||||
## 수식 대조 결과
|
||||
<a id="numerical-review--수식-대조-결과"></a>
|
||||
### 수식 대조 결과
|
||||
|
||||
| 검토 항목 | 결과와 evidence |
|
||||
| --- | --- |
|
||||
@@ -39,7 +53,8 @@
|
||||
| 반력·에너지·회복 | Endpoint `E=I+f_int-F`, reaction의 support-on-structure 부호, `M_spatial=Jl^-T m_phi`의 가상일 관계는 일관된다. `R_HHT,c`와 endpoint reaction을 구별한다. `T+U_phys+U_drill-W`는 이산 에너지 결함이며 물리 damping이 아니다. Numerical drill을 physical section stress에 넣지 않는다. |
|
||||
| State·안정성·coverage | 같은 trial의 q/v/a/A·tangent·recovery, 원자적 commit, 실패 history 보존 및 fixed dt 실패 종료는 수식과 일치한다. 기존 MITC의 locking/왜곡/chart 경계는 사라지지 않는다. U/UR reference만으로 V/A/에너지·큰 회전·hidden constraint를 검증할 수 없다. |
|
||||
|
||||
## 계약 결정과 후속 검증의 구분
|
||||
<a id="numerical-review--계약-결정과-후속-검증의-구분"></a>
|
||||
### 계약 결정과 후속 검증의 구분
|
||||
|
||||
| ID | 영향·owner | 필요한 해소 |
|
||||
| --- | --- | --- |
|
||||
@@ -49,16 +64,188 @@
|
||||
|
||||
후속 필수 검증은 정식화 §7과 연구 HHT-E01–E10을 따른다. 특히 실제 shell의 3차 director/관성 tangent directional derivative, 초기 drilling acceleration coupling, 좌표변환 후 동일 물리 모델, kinetic-energy derivative·관성 force/moment 평형, 선형 alpha=0 에너지 및 비선형 에너지 결함 시간수렴을 포함해야 한다. 일반 비선형 HHT에 정확 에너지 보존·매 frame 단조감소를 강제하지 않는다.
|
||||
|
||||
## Reference tolerance 적용 경계
|
||||
<a id="numerical-review--reference-tolerance-적용-경계"></a>
|
||||
### Reference tolerance 적용 경계
|
||||
|
||||
[reference-model](reference-model.md)을 독립 대조해 수치 비교 정의에 이견이 없음을 확인했다. 원본 inventory의 직접 재집계는 그 문서에 기록된 main evidence다. `Step-1/increment/instance/node/component` identity, frame별 `U-global`/`UR-global` 27 scalars씩 총202 families, 9-node projection 전후 사전검사를 사용한다. CSV decimal time `n/10`과 FESA scheduled binary64 `n*h`를 각각 검증한 뒤 integer increment로 연결하므로 표시 decimal과 부동소수점 곱의 차이를 nearest-time tolerance로 숨기지 않는다. 실제 HDF5 field/schema는 후속 I/O가 연결한다.
|
||||
|
||||
[TOLERANCE](../TOLERANCE.md)의 near-zero band `0.01S`, 일반 행 relative `0.05`, relative RMS `0.01`, `S=0` exact-zero를 그대로 사용한다. U blocking, UR warning-only이나 identity/finite 오류는 전체 실패다. Eigen RMS 예외는 적용하지 않는다. Reference 비교는 **미실행**이다. 9개 node가 중심 주변 3×3 patch라는 coverage 한계 및 성긴 `dt/T1≈7.4567`을 보존한다.
|
||||
[TOLERANCE](../TOLERANCE.md)의 near-zero band `0.01S`, 일반 행 relative `0.05`, relative RMS `0.01`, `S=0` exact-zero를 그대로 사용한다. U blocking, UR warning-only이나 identity/finite 오류는 전체 실패다. Eigen RMS 예외는 적용하지 않는다. 이 정식화 검토 당시 Reference 비교는 **미실행**이었다. 9개 node가 중심 주변 3×3 patch라는 coverage 한계 및 성긴 `dt/T1≈7.4567`을 보존한다.
|
||||
|
||||
## 실행 evidence와 한계
|
||||
<a id="numerical-review--실행-evidence와-한계"></a>
|
||||
### 실행 evidence와 한계
|
||||
|
||||
[독립 검산](numerical-review-probes.md)의 기존 SDOF/angle-reduced moving-null은 **종단 오차** evidence로 재사용했다. 후속 main의 full Cartesian 2×2 residual/Jacobian probe를 읽고 한 번 재실행하여 exit `0` 및 **전체 시점 최대오차**를 확인했다. 마지막 refinement의 q/v/a 차수는 `1.99985/1.99992/1.99834`, full residual 최대 `7.94824e-11`, 최대 Newton3 corrections였다. 별도 Jacobian의 고정 step sweep도 연속한 내부 점에서 `1e-6` 이하를 보였다. 이 관찰은 N2–N7의 모든 gate나 실제 shell을 통과한 실행이 아니다.
|
||||
[독립 검산](numerical-review.md#numerical-review-probes)의 기존 SDOF/angle-reduced moving-null은 **종단 오차** evidence로 재사용했다. 후속 main의 full Cartesian 2×2 residual/Jacobian probe를 읽고 한 번 재실행하여 exit `0` 및 **전체 시점 최대오차**를 확인했다. 마지막 refinement의 q/v/a 차수는 `1.99985/1.99992/1.99834`, full residual 최대 `7.94824e-11`, 최대 Newton3 corrections였다. 별도 Jacobian의 고정 step sweep도 연속한 내부 점에서 `1e-6` 이하를 보였다. 이 관찰은 N2–N7의 모든 gate나 실제 shell을 통과한 실행이 아니다.
|
||||
|
||||
본 owner의 4개 문서에서 로컬 링크 대상·trailing whitespace를 검사하여 문제 0개였다. Binary64 scalar 계산으로 `gamma4096=4.54747e-13`, `gamma64/(2^-32)=3.05176e-5` 및 `diag(1,c)`의 c=`2^-31,2^-32,2^-33,0`에 대한 conditioning 경계 판정 `pass,pass,fail,fail`을 확인했다. 이는 scalar 산술 확인이며 C05의 실제 mass/condition-estimator 실행 통과가 아니다.
|
||||
|
||||
잔여 위험은 선택 consistent mass의 실제 shell constant-rank/regularity, D3 구현과 small-angle 경계, 큰 h의 시간 alias, 초기·finite-dt hidden constraints, 조건수 추정의 forward-error 한계다. C01–C12가 이를 검출하도록 설계됐고 아직 solver 실행 결과는 없다. Build/CTest, FESA 동적 해석, Abaqus, 외부 reference comparison은 이번 문서 작업 범위에서 실행하지 않았다.
|
||||
|
||||
<a id="numerical-review-probes"></a>
|
||||
|
||||
<a id="numerical-review-probes--hht-독립-시간정확도-검산"></a>
|
||||
## HHT 독립 시간정확도 검산
|
||||
|
||||
[검토 보고서](numerical-review.md#numerical-review)의 상세 evidence다. 2026-09-22 Python 표준 라이브러리만 사용했다. FESA solver, Abaqus 또는 reference 비교 실행이 아니다. 아래 오차는 승인 tolerance를 새로 정하는 값이 아니라 정확해와의 수렴 관찰값이다.
|
||||
|
||||
<a id="numerical-review-probes--모델과-결과"></a>
|
||||
### 모델과 결과
|
||||
|
||||
1. Smooth SDOF: `T=.5(1+q²)v²`, `c=qv²`, `q_exact=.4+sin(t)`, `f=(1+q_exact²)a_exact+q_exact v_exact²`, `0≤t≤1`. 초기 `q=.4,v=1,a=0`. 입력은 일관된 무차원 검산 단위다. `alpha=-.05,beta=.275625,gamma=.55`.
|
||||
2. Moving-null: `x(q)=q/|q|`, `T=.5|Dx(q)v|²`, `U=.5(|q|-1)²`, `q∈R²\{0}`. `r=|q|`, `d=q/r`, `M=(I-ddᵀ)/r²`, `c=-2(q·v)Mv/r²`, `f_int=(r-1)d`. `ker M=span(q)`가 회전한다. 정확해 `q=(cos t,sin t)`, `v=(-sin t,cos t)`, `a=-q`; 초기 위치·속도·가속도 대수조건은 일관된다. Endpoint 반경 대수조건 `r=1`은 각도 parameterization으로 정확하게 강제하며 tangent 평형만 Newton으로 푼다. 이 모델은 shell/drilling 구현이나 일반 singular-DAE 정리의 대체물이 아니다.
|
||||
|
||||
| SDOF 방법 | `h=1/512` U 오차 | `h=1/1024` U 오차 | 관측 차수 |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| Naive `M1 A1+(1+alpha)g1-alpha g0=0` | 1.0272820368e-5 | 5.2200068232e-6 | 0.976709 |
|
||||
| Weighted mass `((1+alpha)M1-alpha M0)A1+(1+alpha)g1-alpha g0=0` | 3.2914014847e-7 | 8.2299941973e-8 | 1.999739 |
|
||||
| Endpoint physical `M1 a1+g1=0`, `A1=(1+alpha)a1-alpha a0` | 2.7561411953e-7 | 6.8902116013e-8 | 2.000030 |
|
||||
|
||||
`g=c-f`. 마지막 방법의 physical acceleration 오차는 `2.3176116737e-7 → 5.7545108678e-8`로 줄지만 algorithmic `A` 오차는 `5.2612378749e-5 → 2.6344436092e-5`다. 따라서 `A`를 endpoint physical acceleration으로 보고하면 안 된다.
|
||||
|
||||
Moving-null 마지막 방법은 같은 두 h에서 U 오차 `4.0606413493e-7 → 1.0152120526e-7`, V 오차 `4.1505360817e-7 → 1.0376522277e-7`, physical a 오차 `4.1511310820e-7 → 1.0262747089e-7`를 보였다. `max|q·v|`는 `8.4282e-11 → 1.0594e-11`, `max|q·a+v²|`는 `7.9368e-7 → 1.9445e-7`다. Endpoint 위치 대수조건을 지켜도 미분된 속도·가속도 조건이 매 frame 정확히 0이 되는 것은 아니다. 이 결함의 시간수렴과 초기 일관성을 별도로 검증해야 한다.
|
||||
|
||||
<a id="numerical-review-probes--독립-수학-대조"></a>
|
||||
### 독립 수학 대조
|
||||
|
||||
Smooth 물리식 `M(q)a+g(q,v,t)=0`에서 Newmark 내부 가속도의 정확해 대응은 `A=a+alpha*h*adot+O(h²)`다. Naive 식의 일차 결함은
|
||||
|
||||
`alpha*h*(M*adot+gdot)=-alpha*h*Mdot*a`.
|
||||
|
||||
따라서 `Mdot*a≠0`인 일반 문제에서 상수 M 증명을 그대로 사용할 수 없다. Weighted mass는 이 항을 상쇄하지만 `alpha∈(-1,0)`이면 서로 다른 두 시점의 양의 준정부호 질량의 양의 결합이다. 그 영공간은 두 영공간의 교집합이므로, 영공간이 회전하면 rank가 늘어날 수 있다. 단순 SDOF의 2차 결과가 이를 정당화하지 않는다.
|
||||
|
||||
Physical/algorithmic 가속도 분리는 [Brüls–Arnold 원문](https://orbi.uliege.be/bitstream/2268/27088/1/pa_BrulsArnold2008_TheGeneralizedAlphaSchemeAsALinearMultistepIntegrator.pdf)의 Eq. (5), (7), (8)에 `alpha_m=0,alpha_f=-alpha`를 대입한 것이다. 원문의 p.6 equivalent-model/index-3 가정은 비특이 mass 및 제약 정칙성을 사용한다. Singular drilling mass에 그 증명을 직접 적용하지 않는다. 이 문서의 제조해와 결함 계산은 독립 검산이다.
|
||||
|
||||
<a id="numerical-review-probes--재현-코드와-명령"></a>
|
||||
### 재현 코드와 명령
|
||||
|
||||
Workspace root에서 다음 명령으로 아래 Python block만 실행한다. 외부 package, 파일 생성 또는 solver 실행은 없다.
|
||||
|
||||
```powershell
|
||||
python -c 'from pathlib import Path; s=Path("docs/hht-implicit-dynamics/numerical-review-probes.md").read_text(encoding="utf-8"); exec(s.split(chr(96)*3+"python\n",1)[1].split(chr(96)*3,1)[0])'
|
||||
```
|
||||
|
||||
```python
|
||||
import math
|
||||
|
||||
alpha = -.05
|
||||
beta = (1-alpha)**2/4
|
||||
gamma = .5-alpha
|
||||
|
||||
def exact(t):
|
||||
return .4+math.sin(t), math.cos(t), -math.sin(t)
|
||||
|
||||
def force(t):
|
||||
q, v, a = exact(t)
|
||||
return (1+q*q)*a+q*v*v
|
||||
|
||||
def scalar(h, variant):
|
||||
q, v, ap = exact(0)
|
||||
A = ap
|
||||
for n in range(round(1/h)):
|
||||
t = (n+1)*h
|
||||
m0 = 1+q*q
|
||||
g0 = q*v*v-force(n*h)
|
||||
oldap = ap
|
||||
pred = q+h*v+h*h*(.5-beta)*A
|
||||
vpred = v+h*(1-gamma)*A
|
||||
def calc(x):
|
||||
an = (x-pred)/(beta*h*h)
|
||||
vn = vpred+gamma*h*an
|
||||
m = 1+x*x
|
||||
if variant == 'physical':
|
||||
pn = (an+alpha*oldap)/(1+alpha)
|
||||
r = m*pn+x*vn*vn-force(t)
|
||||
dr = 2*x*pn+m/((1+alpha)*beta*h*h)+vn*vn+2*x*vn*gamma/(beta*h)
|
||||
else:
|
||||
me = m if variant == 'naive' else (1+alpha)*m-alpha*m0
|
||||
dm = 2*x if variant == 'naive' else (1+alpha)*2*x
|
||||
r = me*an+(1+alpha)*(x*vn*vn-force(t))-alpha*g0
|
||||
dr = dm*an+me/(beta*h*h)+(1+alpha)*(vn*vn+2*x*vn*gamma/(beta*h))
|
||||
pn = an
|
||||
return r, dr, vn, an, pn
|
||||
x = pred+beta*h*h*A
|
||||
for _ in range(20):
|
||||
r, dr, *_ = calc(x)
|
||||
dx = -r/dr
|
||||
x += dx
|
||||
if abs(dx) < 1e-14:
|
||||
break
|
||||
else:
|
||||
raise RuntimeError('scalar Newton failed')
|
||||
q = x
|
||||
_, _, v, A, ap = calc(q)
|
||||
qe, ve, ae = exact(1)
|
||||
return abs(q-qe), abs(v-ve), abs(ap-ae), abs(A-ae)
|
||||
|
||||
def moving_null(h):
|
||||
q, v, ap = [1.,0.], [0.,1.], [-1.,0.]
|
||||
A = ap[:]
|
||||
theta = 0.
|
||||
max_cv = max_ca = 0.
|
||||
dot = lambda x,y: sum(x[i]*y[i] for i in range(2))
|
||||
for _ in range(round(1/h)):
|
||||
pred = [q[i]+h*v[i]+h*h*(.5-beta)*A[i] for i in range(2)]
|
||||
vp = [v[i]+h*(1-gamma)*A[i] for i in range(2)]
|
||||
old = ap[:]
|
||||
theta += h
|
||||
def calc(angle):
|
||||
d = [math.cos(angle),math.sin(angle)]
|
||||
tangent = [-d[1],d[0]]
|
||||
an = [(d[i]-pred[i])/(beta*h*h) for i in range(2)]
|
||||
vn = [vp[i]+gamma*h*an[i] for i in range(2)]
|
||||
pn = [(an[i]+alpha*old[i])/(1+alpha) for i in range(2)]
|
||||
dv, tv = dot(d,vn), dot(tangent,vn)
|
||||
residual = dot(pn,tangent)-2*dv*tv
|
||||
derivative = 1/((1+alpha)*beta*h*h)-dot(pn,d)-2*(tv*tv+dv*(-dv+gamma/(beta*h)))
|
||||
return residual, derivative, d, vn, pn, an
|
||||
for _ in range(15):
|
||||
r, dr, *_ = calc(theta)
|
||||
dx = -r/dr
|
||||
theta += dx
|
||||
if abs(dx) < 1e-14:
|
||||
break
|
||||
else:
|
||||
raise RuntimeError('moving-null Newton failed')
|
||||
_, _, q, v, ap, A = calc(theta)
|
||||
max_cv = max(max_cv,abs(dot(q,v)))
|
||||
max_ca = max(max_ca,abs(dot(q,ap)+dot(v,v)))
|
||||
qe = [math.cos(1),math.sin(1)]
|
||||
ve = [-math.sin(1),math.cos(1)]
|
||||
ae = [-x for x in qe]
|
||||
errors = [math.hypot(*[x[i]-y[i] for i in range(2)]) for x,y in ((q,qe),(v,ve),(ap,ae))]
|
||||
return *errors, max_cv, max_ca
|
||||
|
||||
for variant in ('naive','weighted_mass','physical','moving_null'):
|
||||
print(variant)
|
||||
previous = None
|
||||
for k in range(5,11):
|
||||
h = 2**(-k)
|
||||
errors = moving_null(h) if variant == 'moving_null' else scalar(h,variant)
|
||||
order = math.log(previous/errors[0],2) if previous else float('nan')
|
||||
print(f'h={h:.9g} errors='+','.join(f'{x:.10e}' for x in errors)+f' pU={order:.6f}')
|
||||
previous = errors[0]
|
||||
```
|
||||
|
||||
Newton correction cutoff `1e-14`는 이 독립 double-precision probe의 반복 종료값이다. Solver convergence 또는 reference acceptance tolerance로 채택하지 않는다. 미세 h의 acceleration 오차에는 displacement 차분의 roundoff가 포함되므로 표의 관측값을 정확한 수학 상수로 해석하지 않는다.
|
||||
|
||||
<a id="numerical-review-probes--후속-full-cartesian-moving-null-검산"></a>
|
||||
### 후속 full Cartesian moving-null 검산
|
||||
|
||||
추가 Numerical 작업에서 메인이 full_coordinate_probe.py(당시 경로: `../../.harness/build/hht-numerical/full_coordinate_probe.py`, 현재 checkout에 없음)를 작성했고 수치 검토자가 residual/Jacobian 식을 읽고 아래 명령을 재실행했다. Exit `0`, 2026-09-22. 이 script는 ignored build evidence이며 FESA source가 아니다. 위 angle-reduced probe와 달리 q의 두 Cartesian 성분을 직접 Newton으로 풀며 radial projection·normalization을 하지 않는다. 같은 `x=q/|q|` 모델의 exact 2×2 Jacobian을 사용한다.
|
||||
|
||||
```powershell
|
||||
python .harness/build/hht-numerical/full_coordinate_probe.py
|
||||
```
|
||||
|
||||
오차는 각 h의 **모든 시점**에서 q/v/physical a의 2-norm 최대다. 앞 절의 종단 오차와 다른 측정량이다.
|
||||
|
||||
| h | max q error | max v error | max physical a error | 직전 h 대비 q/v/a 차수 |
|
||||
| --- | ---: | ---: | ---: | --- |
|
||||
| 1/128 | 6.4948801161e-6 | 6.6395874231e-6 | 1.2690547915e-5 | 1.99932 / 1.99962 / 2.01024 |
|
||||
| 1/256 | 1.6240799623e-6 | 1.6601117645e-6 | 3.1667175260e-6 | 1.99968 / 1.99981 / 2.00269 |
|
||||
| 1/512 | 4.0606299832e-7 | 4.1505196280e-7 | 7.9259171465e-7 | 1.99985 / 1.99992 / 1.99834 |
|
||||
|
||||
마지막 grid의 최대 `||q|-1|=2.22045e-16`, `|q·v|=8.39836e-11`, `|q·a+v²|=7.91118e-7`. 상쇄 전 `Ma`의 entry products·c·f_int를 사용한 최대 normwise residual은 `7.94824e-11`, Newton 최대 3 corrections, 마지막 correction 최대 `4.00220e-16`이었다. 이 probe의 종료는 correction `<=1e-13`이며 N2의 모든 AND gate를 구현한 solver가 아니다. 위 관찰을 N2–N7 전체 통과나 실제 shell 통과로 확대하지 않는다.
|
||||
|
||||
별도 trial `q=(.85,.52)`, predictor `(.83,.50)`, velocity predictor `(-.35,.71)`, old physical a `(-.7,-.3)`, h=.1, direction `(.6,-.8)`의 exact effective Jacobian을 중앙차분했다. N5의 j=8,10,12,14,16,18,20 순서에서 상대 오차는 `[3.13656e-5,1.96035e-6,1.22522e-7,7.65779e-9,4.77929e-10,3.25134e-11,1.04250e-11]`이다. 연속한 내부 sweep 점 j=12/14 등이 `1e-6`을 만족한다. 이는 이 2D trial/direction에 대한 미분 evidence이며 shell D3 oracle를 대체하지 않는다.
|
||||
|
||||
Full-coordinate 결과는 새로운 [C04b](verification-cases.md)의 moving-null 구조와 max-time 측정을 지지한다. C04b의 전체 prescribed grids, 초기화 실패 mutation, regularity·scale·반복오차 분리 등 모든 판정을 실행한 것은 아니다. 더 미세한 h에서 residual이 증가할 수 있으므로 h=1/1024까지 같은 residual 기준으로 통과했다는 주장을 하지 않는다.
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
## 원본 HDF5 독립 계산
|
||||
|
||||
현재 [공식 HDF5](../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine_results.h5)의 SHA256은 `f07beddaa232abe314e20210534a243d6deaf1f677c598c64f9334428bbecb56`이다. 9월 26일 volume·평형 계산의 원본은 [수정 전 보관본](../../.harness/build/hht-numerical/reference-before-recovery-fix.h5), SHA256 `23bac93d1f7998b2f74a0f68767ae98a9899ee92c53f5170d08a814d3ee936d4`다. 9월 27일 `uv run --with h5py python -B -`로 두 파일의 2033 datasets를 독립 대조했다. 값이 다른 dataset은 100개 noninitial section resultants뿐이다. 해당 dataset 안의 M 성분은 새 값이 옛 값의 정확히 `.5`배이며 N/Q 성분은 같다. 2025 floating datasets의 byte 비교에서도 그 100개 외 변경은 없다. 따라서 아래 평형·kinetic energy·운동학·stress 계산은 동일 데이터에 관한 근거로 유효하며, 굽힘 결과는 아래 새 재검산으로 대체한다.
|
||||
현재 공식 HDF5(당시 경로: `../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine_results.h5`, 현재 checkout에 없음)의 SHA256은 `f07beddaa232abe314e20210534a243d6deaf1f677c598c64f9334428bbecb56`이다. 9월 26일 volume·평형 계산의 원본은 수정 전 보관본(당시 경로: `../../.harness/build/hht-numerical/reference-before-recovery-fix.h5`, 현재 checkout에 없음), SHA256 `23bac93d1f7998b2f74a0f68767ae98a9899ee92c53f5170d08a814d3ee936d4`다. 9월 27일 `uv run --with h5py python -B -`로 두 파일의 2033 datasets를 독립 대조했다. 값이 다른 dataset은 100개 noninitial section resultants뿐이다. 해당 dataset 안의 M 성분은 새 값이 옛 값의 정확히 `.5`배이며 N/Q 성분은 같다. 2025 floating datasets의 byte 비교에서도 그 100개 외 변경은 없다. 따라서 아래 평형·kinetic energy·운동학·stress 계산은 동일 데이터에 관한 근거로 유효하며, 굽힘 결과는 아래 새 재검산으로 대체한다.
|
||||
|
||||
Reviewer는 solver/build 및 artifact 재생성을 실행하지 않았다. 검토는 stdin Python/NumPy 계산과 실행 결과 열람이다. 모든 floating result 값의 finite 확인은 수정 전 audit와 수정 후 finite M 재검산·나머지 데이터 동일성으로 유지된다. 단위는 `consistent-input-units`; 이하 L/F/T는 입력 length/force/time이며 SI로 단정하지 않는다.
|
||||
|
||||
@@ -49,17 +49,17 @@ Plane-stress `C=E/(1−nu²)[[1,nu,0],[nu,1,0],[0,0,(1−nu)/2]]`로 모든 101
|
||||
|
||||
Frame1, internal element `12`(0-based; source `Part-1-1`, element label `13`), GP2에서 `kappa11=kappa22=−1.72598199555e-5` L^-1이다. `t=.5,E=2.1e11,nu=.3`이면 `M11=M22=−53936.9373610` F다. 수정 전 저장값은 `−107873.8747221` F였고 수정 후 `−53936.93736103468` F로 일치한다. 같은 점의 `S11(bottom,middle,top)=(795234.504841,−499254.790420,−1793738.488372)` F/L²에서 독립 두께 moment `t²(S_top−S_bottom)/12`도 약 `−53936.93736` F다. Source identity는 HDF5 `/model/elements`의 해당 행으로 정한다.
|
||||
|
||||
전 frame의 face stress 차분 적분과 수정 M의 최대 절대차는 `4.07217431e-6` F, 위 symmetric relative metric은 `1.93401205e-10`이다. 한쪽 `max|M|`만 분모로 쓰는 [main audit](../../.harness/build/hht-numerical/reference-recovery-audit-20260927.json)의 metric은 `3.86802409e-10`으로 동일 차이를 표현한다. 고 E·작은 strain에서 별도 평가된 face stress의 차감은 curvature 대조보다 민감하다. **Face identity가 전역 `1e-12`로 일치한다고 주장하지 않는다.** 수정 전 2배 오류 해소와 유한정밀도 차감 차이를 구별한다.
|
||||
전 frame의 face stress 차분 적분과 수정 M의 최대 절대차는 `4.07217431e-6` F, 위 symmetric relative metric은 `1.93401205e-10`이다. 한쪽 `max|M|`만 분모로 쓰는 main audit(당시 경로: `../../.harness/build/hht-numerical/reference-recovery-audit-20260927.json`, 현재 checkout에 없음)의 metric은 `3.86802409e-10`으로 동일 차이를 표현한다. 고 E·작은 strain에서 별도 평가된 face stress의 차감은 curvature 대조보다 민감하다. **Face identity가 전역 `1e-12`로 일치한다고 주장하지 않는다.** 수정 전 2배 오류 해소와 유한정밀도 차감 차이를 구별한다.
|
||||
|
||||
Generalized strain은 midsurface 값이 아니라 두께 평균/moment다. 따라서 `C epsilon0`와 middle stress의 작은 차이, top/bottom 평균과 middle stress의 작은 차이를 오류로 판정하지 않았다. 최대 membrane strain `5.07413e-6`, curvature `1.72598e-5` L^-1, transverse shear strain `4.28336e-6`, stress `1.79377197e6` F/L²는 작은 탄성 변형률 규모와 일관된다. Numerical drill이 physical stress에 포함됐다고 단정할 근거는 없다.
|
||||
|
||||
## C08 및 제한 evidence
|
||||
|
||||
[9월 26일 C08 diagnostic 로그](../../.harness/build/hht-numerical/c08-diagnostic-20260926.log)는 195745 ms에 1 PASS/2 FAIL로 종료해 [이전 로그](../../.harness/build/hht-numerical/c08-optimized.log)의 실패를 재현했다. C08a pointwise 독립 volume force/power/momentum은 최대 회전 `.54757231145` rad에서 PASS다. 시간 이력의 acceleration 차수/오차 실패와 finest N7 noise 분리 미달은 별도로 남는다.
|
||||
9월 26일 C08 diagnostic 로그(당시 경로: `../../.harness/build/hht-numerical/c08-diagnostic-20260926.log`, 현재 checkout에 없음)는 195745 ms에 1 PASS/2 FAIL로 종료해 이전 로그(당시 경로: `../../.harness/build/hht-numerical/c08-optimized.log`, 현재 checkout에 없음)의 실패를 재현했다. C08a pointwise 독립 volume force/power/momentum은 최대 회전 `.54757231145` rad에서 PASS다. 시간 이력의 acceleration 차수/오차 실패와 finest N7 noise 분리 미달은 별도로 남는다.
|
||||
|
||||
C08b finest q_u/q_phi/v_u/v_phi/a_u/a_phi self-difference는 `(5.54743e-6,1.38701e-4,1.77613e-4,.0115434,.0119796,.868939)`다. q_u 외 채널은 finest `1e-4`를 넘는다. 최대 회전 약 `.27266` rad로 finite-rotation 범위는 도달했다. Energy/L error finest `9.55904e-7/4.29749e-7`, 마지막 refinement 비율 `.248198/.250140`은 C08b bounds와 일치한다. P error는 `3.85047e-14→4.82500e-14→2.00403e-13`으로 작지만 감소 조건에 실패했다. Roundoff 수준이라는 관찰로 승인 감소 조건을 면제하지 않는다. Finest hidden v/a defect `1.46403e-6/.00158291`은 진단량이며 N2 tolerance에 임의 대입하지 않는다.
|
||||
|
||||
후속 [회복 후보 probe](../../.harness/build/hht-numerical/c08-recovery-probe-20260926.log)는 3 tests/1 PASS/2 FAIL이며, [C08a split 수정 실행](../../.harness/build/hht-numerical/c08-recovery-split-spectrum-20260927.log)은 2 tests/1 PASS/1 FAIL이다. C08a recovered angular-a finest 최대오차 `1.005829141075e-4`, 마지막 두 raw 차수 `1.77942349/1.99162617`은 기존 bounds를 모두 충족하지 않는다. 수정된 split의 finest null/physical maximum은 `4.64641213e-7/1.00582661e-4`로 physical complement가 지배한다. 최초 probe의 C08a split=0은 loop 누락 diagnostic이므로 근거로 사용하지 않는다.
|
||||
후속 회복 후보 probe(당시 경로: `../../.harness/build/hht-numerical/c08-recovery-probe-20260926.log`, 현재 checkout에 없음)는 3 tests/1 PASS/2 FAIL이며, C08a split 수정 실행(당시 경로: `../../.harness/build/hht-numerical/c08-recovery-split-spectrum-20260927.log`, 현재 checkout에 없음)은 2 tests/1 PASS/1 FAIL이다. C08a recovered angular-a finest 최대오차 `1.005829141075e-4`, 마지막 두 raw 차수 `1.77942349/1.99162617`은 기존 bounds를 모두 충족하지 않는다. 수정된 split의 finest null/physical maximum은 `4.64641213e-7/1.00582661e-4`로 physical complement가 지배한다. 최초 probe의 C08a split=0은 loop 누락 diagnostic이므로 근거로 사용하지 않는다.
|
||||
|
||||
C08b recovered angular-a self-difference는 `.846306569/.881654308/.982191000/.868938661`로 수렴하지 않는다. Finest physical/null maximum은 `.868938153/.00286332558`이다. q/v를 유지하는 null-only recovery로 이 physical complement 오류가 해소되지 않는다는 근거다. Maximum들은 서로 다른 node/time일 수 있어 제곱합으로 합치지 않는다. Post-hidden2 ratio는 C08a finest `2.81779e-16`, C08b pair별 약 `6.06e-17..1.45e-16`으로 작아졌지만, [독립 수치 검토](implementation-numerical-review.md)의 explicit-time scale·recovery N7 noise qualification이 남는다. **Hidden2 개선은 시간 정확도·후보 채택 승인과 다르며 recovered-a order는 INCONCLUSIVE다.** 원 a_h의 FAIL은 그대로다.
|
||||
|
||||
@@ -67,8 +67,8 @@ C08b recovered angular-a self-difference는 `.846306569/.881654308/.982191000/.8
|
||||
|
||||
## Evidence와 잔여 위험
|
||||
|
||||
- [원본 INP](../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine.inp), [CSV](<../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine displacements.csv>), [완료 Newton 로그](../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine_log.txt), [수정 후 비교 JSON](../../.harness/build/hht-numerical/reference-after-recovery-fix.json): U 101 families PASS/UR warnings 200. [수정 전 비교 JSON](../../.harness/build/hht-numerical/reference-comparison.json)의 precheck 441774 scalars, U RMS 최대 `.00227058974`, UR RMS 최대 `.02533113821` 근거도 U/UR 데이터 동일성 범위에서 유지된다. 원본 9 nodes의 U/UR projection만 비교한다.
|
||||
- [Debug focused](../../.harness/build/hht-numerical/focused-debug-complete.log), [stable kernel](../../.harness/build/hht-numerical/focused-stable-kernel.log), [exact constraints](../../.harness/build/hht-numerical/focused-exact-constraint.log), [C04a Decimal80](../../.harness/build/hht-numerical/c04a-decimal-reduction.json), [독립 수치 검토](implementation-numerical-review.md).
|
||||
- [Recovery 수정 후 optimized focused](../../.harness/build/hht-numerical/recovery-green-optimized.log): 13 tests PASS. 수정 전 HDF5를 소급하여 수정하지 않으며 공식 재생성 결과의 별도 검산은 위 SHA256과 수치로 구분한다.
|
||||
- [원본 INP](../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine.inp), [CSV](<../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine displacements.csv>), 완료 Newton 로그(당시 경로: `../../reference/shellNL-dyn-meshfine/shellNL-dyn-meshfine_log.txt`, 현재 checkout에 없음), 수정 후 비교 JSON(당시 경로: `../../.harness/build/hht-numerical/reference-after-recovery-fix.json`, 현재 checkout에 없음): U 101 families PASS/UR warnings 200. 수정 전 비교 JSON(당시 경로: `../../.harness/build/hht-numerical/reference-comparison.json`, 현재 checkout에 없음)의 precheck 441774 scalars, U RMS 최대 `.00227058974`, UR RMS 최대 `.02533113821` 근거도 U/UR 데이터 동일성 범위에서 유지된다. 원본 9 nodes의 U/UR projection만 비교한다.
|
||||
- Debug focused(당시 경로: `../../.harness/build/hht-numerical/focused-debug-complete.log`, 현재 checkout에 없음), stable kernel(당시 경로: `../../.harness/build/hht-numerical/focused-stable-kernel.log`, 현재 checkout에 없음), exact constraints(당시 경로: `../../.harness/build/hht-numerical/focused-exact-constraint.log`, 현재 checkout에 없음), C04a Decimal80(당시 경로: `../../.harness/build/hht-numerical/c04a-decimal-reduction.json`, 현재 checkout에 없음), [독립 수치 검토](implementation-numerical-review.md).
|
||||
- Recovery 수정 후 optimized focused(당시 경로: `../../.harness/build/hht-numerical/recovery-green-optimized.log`, 현재 checkout에 없음): 13 tests PASS. 수정 전 HDF5를 소급하여 수정하지 않으며 공식 재생성 결과의 별도 검산은 위 SHA256과 수치로 구분한다.
|
||||
|
||||
실제 shell의 physical acceleration/무질량 좌표 시간 정확도와 C08b self-convergence는 미해결이다. 원본 굽힘 recovery 수정의 물리 대조는 완료했지만 HDF5에 없는 raw hidden vectors·regularity 조건수·N2-L 원 선형계는 이번 audit로 독립 확인하지 않았다. C09–C11 실패 보존·결정론·전체 rigid-motion coverage와 전체 Debug/CTest는 해당 실행 보고서에서 확인해야 한다. 완료 reference는 이 공백을 해소하지 않는다. 계약·수치 한계·artifact를 변경하지 않았으며 본 문서는 release 승인 문서가 아니다.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
- Feature: `hht-implicit-dynamics`; 정적 inventory·초안 작성: 메인 assistant; 수치 비교 검토: numerical-review-agent.
|
||||
- 상태: `numerical-contract-reviewed; io-binding-and-solver-execution-pending`.
|
||||
- 기준: [요구사항](requirements.md), [정식화](formulation.md), [수치 검토](numerical-review.md), [공통 TOLERANCE](../TOLERANCE.md).
|
||||
- 기준: [요구사항](requirements.md), [정식화](formulation.md), [수치 검토](numerical-review.md#numerical-review), [공통 TOLERANCE](../TOLERANCE.md).
|
||||
|
||||
## 1. 원본과 모델 의미
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ HHT implicit dynamic analysis를 도입하기 위한 요구조건을 정의한
|
||||
|
||||
최소 목표는 원본 모델에 필요한 선형 탄성 shell의 기하비선형 implicit dynamics다. 원본의 Abaqus `S4` 이름을 처리하는 것은 FESA shell과 Abaqus 내부 정식화·적분·stabilization의 동등성 약속이 아니다. 현재 문서는 contact, 소성·손상, explicit dynamics, 다중 step/restart, 시간변화 구속, base excitation, 임의 amplitude, follower load, Rayleigh/modal damping, adaptive stepping 또는 다른 element의 동적 지원을 약속하지 않는다.
|
||||
|
||||
[Research](research.md)에서 공식 문서에 따른 원본 입력의 생략 의미를 확인했다. 이는 reference 입력의 해석 근거이며 FESA 구현 승인이나 신규 사용자 결정이 아니다. 아래에서는 확인된 공개 의미와 남은 FESA 계약 결정을 구분한다.
|
||||
[Research](research.md#research)에서 공식 문서에 따른 원본 입력의 생략 의미를 확인했다. 이는 reference 입력의 해석 근거이며 FESA 구현 승인이나 신규 사용자 결정이 아니다. 아래에서는 확인된 공개 의미와 남은 FESA 계약 결정을 구분한다.
|
||||
|
||||
사용자는 이번 HHT 기본 질량으로 일관질량을 명시 선택했다([HHT-ADR-007](ADR.md)). 이번 HHT의 lumped mass 지원은 제외한다. 이 선택으로 다른 미결정 physics·지원 범위·공식 schema의 승인을 추정하지 않는다.
|
||||
|
||||
|
||||
@@ -1,7 +1,13 @@
|
||||
# HHT implicit dynamics 연구 근거
|
||||
# HHT 연구 근거와 수치 설계
|
||||
|
||||
|
||||
|
||||
<a id="research"></a>
|
||||
|
||||
<a id="research--hht-implicit-dynamics-연구-근거"></a>
|
||||
## HHT implicit dynamics 연구 근거
|
||||
|
||||
- Feature: `hht-implicit-dynamics`
|
||||
- Owner: `research-agent`
|
||||
- Date: `2026-09-22`
|
||||
- Status: `Research evidence; formulation and acceptance not approved`
|
||||
- 기준: [프로젝트 지침](../../AGENTS.md), [PRD](../PRD.md), [ARCHITECTURE](../ARCHITECTURE.md), [ADR-028](../ADR.md#adr-028).
|
||||
@@ -13,17 +19,19 @@ Abaqus 자료는 공개 입력·출력 의미를 해석하는 근거이며 내
|
||||
후속 사용자 결정으로 이번 HHT 구현의 질량은 consistent mass로 확정되었다.
|
||||
아래 lumped 비교·검증 후보는 연구 이력이며 현재 지원 요구에서 제외한다.
|
||||
|
||||
## 1. 결론과 결정 후보
|
||||
<a id="research--1-결론과-결정-후보"></a>
|
||||
### 1. 결론과 결정 후보
|
||||
|
||||
| 질문 | 근거와 결론 | 후속 결정 경계 |
|
||||
| --- | --- | --- |
|
||||
| HHT 계수 | 원래 음수 alpha 관례의 표준 후보는 `-1/3 ≤ alpha ≤ 0`, `gamma=1/2-alpha`, `beta=(1-alpha)^2/4`다. `alpha=0`이면 평균가속도 Newmark다. [S1](#sources), [S2](#sources) | beta/gamma 독립 입력을 허용할지, 기본 alpha와 허용 범위는 requirement/formulation에서 확정 |
|
||||
| 안정성 | 선형 안정성은 큰 dt의 정확도, 비선형 Newton 수렴 또는 임의 유한회전 에너지 안정성을 보장하지 않는다. [S3](#sources), [S8](#sources) | 시간 수렴과 반복 수렴 evidence를 별도로 지정 |
|
||||
| reference 하중 | 무접촉 기본 application은 transient fidelity이고 무 amplitude 하중은 STEP이다. 공개 기본 계수는 `(-0.05,0.275625,0.55)`다. [S4](#sources), [S5](#sources) | FESA의 지원 의미와 첫 시점 하중/초기 가속도 계약을 명시 |
|
||||
| shell mass | 현재 eigen의 consistent 원본·derived nodal lumping·drilling null은 재사용 검토 근거다. [L1](#local-evidence) | 후속 사용자 결정: shell 속도 보간의 운동에너지를 그대로 적분하는 consistent mass 채택; lumped는 이번 지원 요구에서 제외 |
|
||||
| HHT 계수 | 원래 음수 alpha 관례의 표준 후보는 `-1/3 ≤ alpha ≤ 0`, `gamma=1/2-alpha`, `beta=(1-alpha)^2/4`다. `alpha=0`이면 평균가속도 Newmark다. [S1](research.md#research), [S2](research.md#research) | beta/gamma 독립 입력을 허용할지, 기본 alpha와 허용 범위는 requirement/formulation에서 확정 |
|
||||
| 안정성 | 선형 안정성은 큰 dt의 정확도, 비선형 Newton 수렴 또는 임의 유한회전 에너지 안정성을 보장하지 않는다. [S3](research.md#research), [S8](research.md#research) | 시간 수렴과 반복 수렴 evidence를 별도로 지정 |
|
||||
| reference 하중 | 무접촉 기본 application은 transient fidelity이고 무 amplitude 하중은 STEP이다. 공개 기본 계수는 `(-0.05,0.275625,0.55)`다. [S4](research.md#research), [S5](research.md#research) | FESA의 지원 의미와 첫 시점 하중/초기 가속도 계약을 명시 |
|
||||
| shell mass | 현재 eigen의 consistent 원본·derived nodal lumping·drilling null은 재사용 검토 근거다. [L1](research.md#research) | 후속 사용자 결정: shell 속도 보간의 운동에너지를 그대로 적분하는 consistent mass 채택; lumped는 이번 지원 요구에서 제외 |
|
||||
| reference coverage | 작은 변위, 성긴 dt, 9개 절점 U/UR만 확인한다. 큰 회전·가속도·에너지 검증은 부족하다. | 아래 독립 검증 후보와 함께 사용 |
|
||||
|
||||
## 2. HHT 이론 및 잔차 후보
|
||||
<a id="research--2-hht-이론-및-잔차-후보"></a>
|
||||
### 2. HHT 이론 및 잔차 후보
|
||||
|
||||
**사실.** S1은 HHT 원논문의 서지·초록을 확인한 근거이고, 이번 열람에서는 본문 PDF가
|
||||
초록 페이지로 이동했다. 계수 관계는 공식 S2 §4.11.1.3에서 교차 확인했다.
|
||||
@@ -69,7 +77,8 @@ Abaqus 공개 허용범위 `[-1/2,0]` 및 moderate-dissipation 기본값을 원
|
||||
에너지 보존 검증 후보이나, 비선형에서 같은 결론을 자동 적용할 수 없다. S8은
|
||||
Newmark 계열의 비선형 에너지·각운동량 보존 한계를 직접 다룬다.
|
||||
|
||||
## 3. reference 입력의 공개 의미
|
||||
<a id="research--3-reference-입력의-공개-의미"></a>
|
||||
### 3. reference 입력의 공개 의미
|
||||
|
||||
**사실: Abaqus 2025 문서 기준.** 버전 metadata를 reference readiness의 추가 조건으로
|
||||
요구하지 않는다. 아래 기본값을 기존 CSV에서 역으로 식별했다는 주장도 하지 않는다.
|
||||
@@ -91,9 +100,10 @@ history와 가속도 초기화의 결합은 formulation/I/O owner가 명시해
|
||||
공개 STEP 문구와 U/UR CSV만으로 Abaqus의 첫 residual history 생성 절차는 확인할 수 없다.
|
||||
초기 U/UR=0은 초기 a=0의 증거가 아니다.
|
||||
|
||||
## 4. shell mass와 유한회전 관성
|
||||
<a id="research--4-shell-mass와-유한회전-관성"></a>
|
||||
### 4. shell mass와 유한회전 관성
|
||||
|
||||
**사실: 기존 FESA 계약.** [L1](#local-evidence)의 M1–M7은 작은 회전의
|
||||
**사실: 기존 FESA 계약.** [L1](research.md#research)의 M1–M7은 작은 회전의
|
||||
`v=H q_dot`, `M_C=integral rho H^T H dV`와 scalar thickness-moment 기반
|
||||
nodal block lumping을 정의한다. 일반 global-component row sum이 아니다.
|
||||
Consistent와 lumped는 총질량·uniform translation energy를 공유하지만 일반 속도장의
|
||||
@@ -122,7 +132,8 @@ Basis가 configuration에 따라 회전하면 그 시간미분도 검토해야
|
||||
정한다. 후자를 지원한다면 기존 비선형 static internal force에 초기 M만 더하는 방식을
|
||||
독립적으로 정당화해야 한다. 이 문서는 mass 종류·drilling 처리·회전 적분을 채택하지 않는다.
|
||||
|
||||
## 5. 현재 reference의 evidence와 한계
|
||||
<a id="research--5-현재-reference의-evidence와-한계"></a>
|
||||
### 5. 현재 reference의 evidence와 한계
|
||||
|
||||
<a id="local-evidence"></a>
|
||||
|
||||
@@ -151,7 +162,8 @@ V/A/energy/reaction은 이 CSV에 없다.
|
||||
`UR1/UR2/UR3` warning-only 분류를 보존한다. Numerical Review는 이 분류와
|
||||
[공통 tolerance 정책](../TOLERANCE.md) 안에서 구체적인 family와 mapping을 확정한다.
|
||||
|
||||
## 6. 독립 검증 후보 및 공백
|
||||
<a id="research--6-독립-검증-후보-및-공백"></a>
|
||||
### 6. 독립 검증 후보 및 공백
|
||||
|
||||
아래는 **검증 설계 후보**이며 실행·통과 기록이 아니다. 허용오차와 영속 schema는 정하지 않는다.
|
||||
|
||||
@@ -177,7 +189,8 @@ Numerical Review: nonlinear convergence와 time convergence의 판정·reference
|
||||
|
||||
<a id="sources"></a>
|
||||
|
||||
## 출처와 열람 범위
|
||||
<a id="research--출처와-열람-범위"></a>
|
||||
### 출처와 열람 범위
|
||||
|
||||
모든 web source의 `accessed: 2026-09-22`. ID는 본문에서 사용한 안정적인 locator다.
|
||||
|
||||
@@ -192,3 +205,162 @@ Numerical Review: nonlinear convergence와 time convergence의 판정·reference
|
||||
| S7 | Dassault Systèmes, Abaqus 2025, [*CLOAD](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEKEYRefMap/simakey-r-cload.htm), AMPLITUDE/FOLLOWER | 입력 의미만 |
|
||||
| S8 | Simo, J.C., Tarnow, N., Wong, K.K. (1992), *Exact energy-momentum conserving algorithms and symplectic schemes for nonlinear dynamics*, CMAME 100, 63–116. [DOI:10.1016/0045-7825(92)90115-Z](https://doi.org/10.1016/0045-7825(92)90115-Z), Abstract | 비선형 보존 한계의 1차 논문 근거; 대체 integrator 채택 아님 |
|
||||
| S9 | Idaho National Laboratory, MASTODON, [Hilber-Hughes-Taylor (HHT) Time Integration Verification](https://mastodon.inl.gov/sqa/v_and_v/kernels/time_integration/hht.html), Problem Statement and Results/Complete Input File | 재현 가능한 검증 설계 후보; 외부 solver 실행하지 않음 |
|
||||
|
||||
<a id="numerical-research"></a>
|
||||
|
||||
<a id="numerical-research--hht-수치-제어검증-설계-추가-근거"></a>
|
||||
## HHT 수치 제어·검증 설계 추가 근거
|
||||
|
||||
- Feature: `hht-implicit-dynamics`
|
||||
- Date: `2026-09-22`
|
||||
- Status: `Evidence and verification candidates; numerical thresholds not selected`
|
||||
- 기준: [프로젝트 지침](../../AGENTS.md), [PRD](../PRD.md), [ADR](../ADR.md#adr-028), [기존 연구](research.md#research).
|
||||
|
||||
[관성 정식화](formulation-inertia.md)와 [독립 probe](numerical-review.md#numerical-review-probes)를 읽고
|
||||
남은 질문만 조사했다. 기존 SDOF/moving-null 계산은 재실행하지 않았다.
|
||||
**사실**은 열람한 일차 자료, **도출**은 명시한 수학적 계산, **후보**는 검증 제안이다.
|
||||
수치 threshold·질량 채택·물리 범위·입출력 계약은 이 문서에서 결정하지 않는다.
|
||||
현재 질량 선택은 사용자 결정으로 consistent mass가 확정되었다. Shell 속도 보간의
|
||||
운동에너지를 그대로 적분하며, lumped는 이번 HHT 구현의 지원 요구에서 제외한다.
|
||||
|
||||
<a id="numerical-research--1-physical-acceleration-startup와-dae-적용-경계"></a>
|
||||
### 1. Physical acceleration, startup와 DAE 적용 경계
|
||||
|
||||
**사실 [N1].** Brüls–Arnold (2008) author postprint pp.3–4, Eq. (5)–(8)은
|
||||
물리적 `q_ddot`와 보조 acceleration-like variable을 구분하고 보조 초기값을
|
||||
물리적 초기 가속도와 같게 둔다. 이 문서의 `A`가 논문의 보조 `a`에 대응한다.
|
||||
`alpha_m=0`, `alpha_f=-alpha`를 대입하면 현재 후보의
|
||||
`A_(n+1)=(1+alpha)a_(n+1)-alpha a_n`이다. 같은 논문은 variable M일 때 이를
|
||||
force-level 가중 평형과 동일시할 수 없다고 명시한다. 이 질문에는 기존 출처가 충분하다.
|
||||
|
||||
**사실 [N1]: 정리의 가정은 정확히 구분한다.** Printed p.6, “Equivalent model”은
|
||||
`[[M,-L],[-h_qddot,I-h_y]]` block의 비특이성과 index-3 조건
|
||||
`Phi_q g*_lambda`의 비특이성을 사용한다. 여기의 `h`는 논문 Eq. (4)의 algebraic
|
||||
output function이며 시간간격이 아니다. Controller/algebraic coupling을 제거한
|
||||
특수형에서는 첫 조건이 M의 비특이성으로 줄어든다. 논문 전체가 무조건 “M만
|
||||
비특이이면 충분”하다고 읽어서는 안 된다. “Initial value condition”의 초기 오차 조건과
|
||||
“Constrained case”의 정칙성 하에서 얻은 수렴 결과를 singular drilling에 자동 적용할 수 없다.
|
||||
|
||||
**도출/수치 제어에의 함의.** 현재 shell의 `psi=N(q)^T g=0`는 논문의 holonomic
|
||||
`Phi=0`와 동일한 모델임이 아직 증명되지 않았다. 따라서 다음을 분리해서 관찰한다.
|
||||
|
||||
| 관찰 대상 | 필요한 검증 후보 | 남은 한계 |
|
||||
| --- | --- | --- |
|
||||
| 첫 시점 | `a0`는 우측 물리 평형·초기 대수조건으로 결정한 뒤 `A0=a0`; 첫 step과 이후 오차를 분리 | 작은 Newton residual로 불일관 초기값이 정당화되지 않음 |
|
||||
| 물리 a와 A | 동일 시각 정확해에 대한 q/v/physical a 차수와 `A-a`를 별도 측정 | A를 물리 출력·각운동량 미분에 대입하면 안 됨 |
|
||||
| Current null | 매 configuration에서 `MN`, `N^T I`, `psi`, 양의 부분공간 mass 및 `psi_q N` 정칙성 | 이전 시점 null, 고정 UR3, 전체 M의 역행렬로 대체 불가 |
|
||||
| Hidden constraints | `psi_q v+psi_t`와 `psi_q a+psi_qq[v,v]+2psi_qt v+psi_tt`의 최대·종단 결함과 dt 수렴 | 위치 평형만 만족해도 두 결함이 0인 것은 아님 |
|
||||
| 반례 coverage | 현재 움직이는 영공간 예제를 full redundant coordinates로 풀어 기존 reduced-angle probe와 대조 | 기존 probe는 위치조건을 정확히 강제했으므로 full-coordinate Newton 구현 검증이 아님 |
|
||||
| 고정 간격 | 기존 후보에서 dt를 줄여 같은 물리 종단시각 비교 | adaptive dt·startup 재설정은 별도 scope이며 이번 근거로 추가하지 않음 |
|
||||
|
||||
**도출.** Chart 내부의 smooth q에서 projector와 null basis는 같은 물리 영공간을 나타내야
|
||||
한다. Null vector의 부호·정규화 변경 자체와 rank 손실을 구분해야 한다.
|
||||
`psi_q`에는 `DN`이 들어가므로 basis를 고정한 finite difference는 별도 식을 검증하게 된다.
|
||||
투영 오차·hidden defect가 큰 결과를 발견하면 정확한 projection/condensation의 채택 여부는
|
||||
formulation owner에게 돌린다. 여기서는 추가 projection을 자동 제안·채택하지 않는다.
|
||||
|
||||
<a id="numerical-research--2-double-precision-conditioning-및-미분-검증"></a>
|
||||
### 2. Double precision, conditioning 및 미분 검증
|
||||
|
||||
**사실 [N2–N4].** IEEE double의 정상수 significand는 53 bits다. LAPACK DGECON은
|
||||
선택한 1/∞ norm의 reciprocal condition number **추정값**을 반환한다. DGESVX는
|
||||
equilibration 여부를 구별하고, factor pivot이 정확히 0인 경우와 reciprocal condition이
|
||||
machine precision보다 작은 경우를 서로 다른 INFO로 보고한다. 후자는 해·오차 추정을
|
||||
계속 계산할 수 있는 warning이다. 이 공개 library 동작은 FESA failure threshold를
|
||||
자동 승인하지 않으며 vendor routine 채택 요구도 아니다.
|
||||
|
||||
**도출.** Binary64에서 1의 다음 표현수 간격 `eps=2^-52`, round-to-nearest 정상 범위의
|
||||
unit roundoff `u=2^-53`를 구분한다. 문헌의 “machine epsilon” 정의와 library 반환 의미를
|
||||
확인하지 않고 두 값을 혼용하면 안 된다. 작은 perturbation의 forward error는
|
||||
대략 `condition × backward error`로 증폭되므로 residual 하나로 해의 정확도를 보장하지 못한다.
|
||||
|
||||
| 질문 | 근거에 따른 분리 및 검사 후보 |
|
||||
| --- | --- |
|
||||
| Physical mass-null인가? | `n=[0;J_l^-1 d]`, admissible free-space intersection 같은 분석적 운동학을 원본으로 삼는다. `MN`의 수치 결함과 양의 complement의 conditioning을 각각 검사한다. |
|
||||
| 작은 양의 eigenvalue인가? | 단위·두께 때문에 작은 inertia를 rcond 하나로 drilling null로 바꾸지 않는다. 예상 추가 null/geometry 이상과 positive-space accuracy loss를 구분한다. |
|
||||
| 어느 rcond인가? | Full singular M의 rcond는 positive inertia 품질을 설명하지 못한다. Positive-space mass, 초기화 algebraic block, effective Newton matrix를 각각 이름 붙이고 norm·scaling을 기록한다. |
|
||||
| 단위를 바꾸면? | 병진·회전 단위가 섞인 원행렬 condition은 단위 선택에 의존한다. `q=D qhat`, `Rhat=D^T R/Escale`이면 `Khat=D^T K D/Escale`라는 virtual-work 일관 scaling을 대조 후보로 삼는다. 기준 scale의 수치 선택은 NR 소유다. |
|
||||
| Library equilibration이면 충분한가? | Row/column equilibration은 solver conditioning 도구다. 물리적 nondimensionalization이나 예상 null proof와 동일하지 않다. 원·scaled 행렬 중 무엇을 추정했는지 보존한다. |
|
||||
|
||||
**사실 [N5].** GSL의 central differentiation은 truncation과 roundoff를 함께 추정하여
|
||||
step을 고르며, 5-point와 3-point 차이를 오차 추정에 쓴다. 따라서 가장 작은 step을
|
||||
항상 정답으로 간주하지 않는 독립 derivative 검사 설계가 공식 수치 library의 접근과 부합한다.
|
||||
|
||||
**도출/후보.** Dimensionless direction p에 대해 scaled 잔차의 중심차분과 `Khat p`를
|
||||
비교하면 일반적인 smooth·비상쇄 구간에서 오차형은 `C_t delta²+C_r u/delta`다.
|
||||
최적 step의 `u^(1/3)` 크기는 이 가정에서의 점근적 안내일 뿐 공통 고정값이 아니다.
|
||||
Zero derivative, 큰 residual cancellation, branch 접근에서는 계수와 error floor가 달라진다.
|
||||
여러 delta를 sweep하여 감소구간·최저 plateau·roundoff 증가구간을 기록하고, 모든 sample이
|
||||
같은 허용 chart와 geometry 안에 있는지 확인한다. Unit-aware scale을 쓰고 임의
|
||||
`max(1, norm)`로 작은 문제를 덮지 않는다.
|
||||
|
||||
Inertia partial derivative 검사에서는 q/v/physical a 중 하나만 바꾸고 나머지는 고정한다.
|
||||
Effective tangent 검사에서는 같은 trial q에 연동되는 v, A, physical a를 모두 갱신한다.
|
||||
두 검사는 서로 다른 미분이므로 섞지 않는다. 작은 dt의 acceleration 재구성에는
|
||||
위치 차분 오차가 `1/dt²`로 증폭되므로 시간 차수 측정에서 너무 미세한 dt의 plateau를
|
||||
수학적 차수 저하로 오인하지 않는다. 기준 oracle 정밀도와 nonlinear solve 오차도 분리한다.
|
||||
|
||||
<a id="numerical-research--3-3차-회전-미분과-운동량에너지-case-후보"></a>
|
||||
### 3. 3차 회전 미분과 운동량·에너지 case 후보
|
||||
|
||||
**사실 [N6].** Higham–Relton의 Theorem 3.5/Algorithm 3.6은 고차 Fréchet derivative를
|
||||
재귀 block matrix function의 우상단 block으로 구한다. Matrix exponential은 smoothness
|
||||
조건을 만족한다. `P=[phi]_cross` 및 세 방향 행렬에 적용하면 24×24 exponential 하나의
|
||||
3×3 우상단 block이 3차 혼합 미분을 준다.
|
||||
|
||||
**후보.** 이 방식에 `d0`를 곱한 결과를 Rodrigues/회전 Jacobian의 해석 미분과 비교하면
|
||||
동일 scalar coefficient 도함수를 재사용하는 자기검증을 피할 수 있다. “Exact derivative”는
|
||||
수학적 항등식을 뜻하며 부동소수점 exp 계산까지 오차가 없다는 뜻은 아니다.
|
||||
Production 의존성 추가나 24×24 exp의 runtime 사용은 요구하지 않는다.
|
||||
|
||||
**자체 도출: 영회전의 유한 다항 oracle.** `H_p=[p]_cross` 등으로 쓰면
|
||||
|
||||
\[
|
||||
D^3d(0)[p,s,r]=\frac16\sum_{\sigma\in S_3}
|
||||
H_{\sigma(p)}H_{\sigma(s)}H_{\sigma(r)}d_0.
|
||||
\]
|
||||
|
||||
이는 exponential Taylor series의 cubic 항에서 바로 얻는다. 방향 permutation 대칭,
|
||||
각 방향의 선형성, 동일 방향 3회 `H_p³ d0`를 함께 검사할 수 있다. 비영 phi의
|
||||
block-exponential oracle와 `D²d`의 방향 중심차분을 추가해 영점 특례만 맞는 오류를 검출한다.
|
||||
Chart 경계 안쪽, 작은 phi, 서로 비평행한 방향을 포함하되 경계를 넘어 차분하지 않는다.
|
||||
|
||||
| ID | 실행 가능한 검증 설계 후보 | 판정에 필요한 한계 |
|
||||
| --- | --- | --- |
|
||||
| NR-E01 | 임의 유효 shell 상태에서 spatial rigid velocity를 부여하여 kinetic energy·총 P·총 L을 독립 volume integration과 대조 | Rigid velocity는 순간 운동학 검사다. 회전하는 탄성 shell이 자유운동에서도 강체를 유지한다는 가정은 하지 않음. Consistent/lumped 각각 자신의 measure를 사용 |
|
||||
| NR-E02 | `I(q,v,a)`를 q/v/a별 미분하고 전체 effective tangent도 별도 directional check | 3차 director 항과 `D(H^T)` 누락을 분리 검출 |
|
||||
| NR-E03 | 작은 smooth 회전 구간의 자유 shell에 일관된 initial velocity를 부여하거나 짧은 smooth loading 후 unload, P/L/총에너지·work와 dt 수렴 관찰 | 초기조건/시간하중이 CLI 범위 밖이면 kernel/procedure verification 후보로만 유지. 승인 input subset 확대 금지 |
|
||||
| NR-E04 | 같은 spatial problem에 alpha=0 및 승인된 음수 alpha를 적용하고 저주파 해상 case와 높은 modal content case를 분리 | 일반 비선형 HHT의 총에너지 매 step 감소 또는 정확한 각운동량 보존을 무조건 요구하지 않음 |
|
||||
| NR-E05 | 문헌 free-flying single-layer plate를 후속 benchmark 후보로 검토 | 아래 N7은 large rotation/energy 사례의 출처다. 현재 fixed chart를 넘어서는 tumble·장시간 운동은 그대로 채택할 수 없음 |
|
||||
|
||||
**사실 [N7].** Vu-Quoc–Tan (2003), §5.1.2/Figs.9–12는 free-flying single-layer plate의
|
||||
큰 전체 운동과 P/L/에너지 및 dissipative/nondissipative integrator 결과를 비교한다.
|
||||
해당 요소는 rotation DOF가 없는 solid-shell이므로 그 mass·응력 모델과 여기의 director shell은
|
||||
다르다. Author-uploaded 본문의 관련 절을 확인했으나 그림의 하중 위치·수치 history를
|
||||
독립 추출하지 않았다. 따라서 현 단계에서는 case family 근거이며 완성된 reference artifact가 아니다.
|
||||
|
||||
**추론.** 현재 shell 운동학에서는 `Pdot/Ldot`에 physical a를 사용하고 numerical drill
|
||||
potential을 포함한 에너지·내력 일을 일관되게 대조해야 한다. N7의 보존형 integrator가
|
||||
보이는 exact conservation을 HHT의 요구조건으로 옮길 수 없다. [기존 연구 S8](research.md#research)의
|
||||
비선형 Newmark 보존 한계 근거는 그대로 충분하다. 추가 shell 연구는 기하·하중·시간 구간이
|
||||
승인된 chart와 입력 범위 안에 있는지 결정한 뒤에만 구체화할 필요가 있다.
|
||||
|
||||
<a id="numerical-research--출처열람-한계와-인계"></a>
|
||||
### 출처·열람 한계와 인계
|
||||
|
||||
`accessed: 2026-09-22`. 문서 정적 검사만 수행하며 solver/build/test/reference 생성은 수행하지 않았다.
|
||||
|
||||
| ID | Stable citation / locator | 열람 범위 |
|
||||
| --- | --- | --- |
|
||||
| N1 | Brüls, O.; Arnold, M. (2008), *The generalized-alpha scheme as a linear multistep integrator: Toward a general mechatronic simulator*, J. Computational and Nonlinear Dynamics 3, 041007, [DOI:10.1115/1.2960475](https://doi.org/10.1115/1.2960475), [author PDF](https://orbi.uliege.be/bitstream/2268/27088/1/pa_BrulsArnold2008_TheGeneralizedAlphaSchemeAsALinearMultistepIntegrator.pdf) | Printed pp.3–6 Eq.5–8/Equivalent model, Initial value condition/Constrained case. Shell singular-mass 정리 아님 |
|
||||
| N2 | Oracle, *Numerical Computation Guide*, [§2.2.3 Double Format](https://docs.oracle.com/cd/E37069_01/html/E39019/z4000ac019269.html) | 53-bit significand 설명. IEEE 표준 전체 적합성 시험을 수행한 것은 아님 |
|
||||
| N3 | LAPACK, [DGECON](https://netlib.org/lapack/explore-html/d4/daf/group__gecon_ga4f9b830e19e12c7f082ddb497a57af18.html), Purpose/NORM/ANORM/RCOND | Normwise reciprocal condition estimate |
|
||||
| N4 | LAPACK, [DGESVX](https://netlib.org/lapack/explore-html/d5/dbe/group__gesvx_ga82173a93234afc15d70b64233b3e5bc8.html), Description steps 1–6/INFO | Equilibration, singular pivot와 working-precision warning 구별 |
|
||||
| N5 | GNU Scientific Library 2.8, [Numerical Differentiation](https://www.gnu.org/software/gsl/doc/html/diff.html), `gsl_deriv_central` | Truncation/roundoff 기반 step/error estimate. FESA tolerance 원본 아님 |
|
||||
| N6 | Higham, N.J.; Relton, S.D. (2014), *Higher Order Fréchet Derivatives of Matrix Functions and the Level-2 Condition Number*, SIAM J. Matrix Anal. Appl. 35, 1019–1037, [DOI:10.1137/130945259](https://doi.org/10.1137/130945259), [author PDF](https://eprints.maths.manchester.ac.uk/2066/1/paper.pdf), Theorem 3.5/Algorithm 3.6 | 2013 author version printed pp.5–6; oracle identity와 계산법 |
|
||||
| N7 | Vu-Quoc, L.; Tan, X.G. (2003), *Optimal solid shells for non-linear analyses of multilayer composites. II. Dynamics*, CMAME 192, 1017–1059, [DOI:10.1016/S0045-7825(02)00336-5](https://doi.org/10.1016/S0045-7825(02)00336-5), [author-uploaded text](https://www.researchgate.net/publication/222546721_Optimal_solid_shells_for_non-linear_analyses_of_multilayer_composites_II_Dynamics), §5.1.2/Figs.9–12 | Relevant text 확인; 하중 figure·곡선 digitization 미수행, exact benchmark reproduction 미정 |
|
||||
|
||||
Numerical Review에 인계할 결정은 scaling·conditioning/hidden-defect 판정·FD sweep과
|
||||
시간 수렴 구간·case 최소 조합이다. Formulation에 남는 사항은 singular-mass regularity의
|
||||
실제 shell 적용과 full-coordinate hidden constraint 검증이다. 사용자 결정에 따라 이번
|
||||
HHT 구현은 consistent mass를 사용한다. 위 lumped 비교 근거는 연구 이력이며 현재 지원 요구가 아니다.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# HHT 반증 가능한 검증 사례
|
||||
|
||||
[Numerical Review](numerical-review.md)의 사례 계약이다. [N1–N7 내부 기준](numerical-controls.md)과 [reference 계약](reference-model.md)을 적용한다. 아래 synthetic 초기값·제조 하중은 kernel/procedure 검증용이며 공개 INP 지원을 확대하지 않는다. 사용자 결정 [HHT-ADR-007](ADR.md)의 **consistent kinetic mass**가 HHT 필수 검증 대상이다. Lumped 언급은 기존 mass/eigen 대조 또는 선택되지 않은 대안 설명이며 새 동적 지원 의무가 아니다. 모든 신규 solver 사례는 **NOT RUN**이다.
|
||||
[Numerical Review](numerical-review.md#numerical-review)의 사례 계약이다. [N1–N7 내부 기준](numerical-controls.md)과 [reference 계약](reference-model.md)을 적용한다. 아래 synthetic 초기값·제조 하중은 kernel/procedure 검증용이며 공개 INP 지원을 확대하지 않는다. 사용자 결정 [HHT-ADR-007](ADR.md)의 **consistent kinetic mass**가 HHT 필수 검증 대상이다. Lumped 언급은 기존 mass/eigen 대조 또는 선택되지 않은 대안 설명이며 새 동적 지원 의무가 아니다. 모든 신규 solver 사례는 **NOT RUN**이다.
|
||||
|
||||
## 공통 측정과 실행 상태
|
||||
|
||||
@@ -10,7 +10,7 @@ C01–C04의 grid는 `h=1/16,1/32,1/64,1/128,1/256`, `T=1`이다. N7의 마지
|
||||
|
||||
| Evidence | 현재 상태와 적용 한계 |
|
||||
| --- | --- |
|
||||
| [기존 SDOF·moving-null probe](numerical-review-probes.md) | **RUN / 제한된 독립 검산**. h=1/32..1/1024의 **종단 오차** 및 moving-null hidden-defect 최대를 기록했다. 아래 전체 시점 max-error 계약의 실행 통과를 뜻하지 않는다. |
|
||||
| [기존 SDOF·moving-null probe](numerical-review.md#numerical-review-probes) | **RUN / 제한된 독립 검산**. h=1/32..1/1024의 **종단 오차** 및 moving-null hidden-defect 최대를 기록했다. 아래 전체 시점 max-error 계약의 실행 통과를 뜻하지 않는다. |
|
||||
| C01–C12의 FESA/kernel/procedure 실행 | **NOT RUN**. 구현 후 요구되는 검증 설계다. 기존 Python 수식 계산을 C++ solver 통과로 승계하지 않는다. |
|
||||
| 지정 reference inventory | [reference-model §5](reference-model.md)의 main 정적 조사 evidence. Solver/HDF5 comparison은 **NOT RUN**. |
|
||||
|
||||
@@ -40,7 +40,7 @@ C04b는 position constraint `max|r-1|<=1e-10`. `max|q·v|`, `max|q·a+v²|`의
|
||||
|
||||
## C06. D3·관성·접선 독립 미분
|
||||
|
||||
C05 기본/warped geometry와 `phi=(0,0,0)`, `(1e-6,-2e-6,3e-6)`, `(.2,-.3,.4)`를 사용한다. Small-angle boundary에는 `phi=(1e-4*(1±2^-10),0,0)`를 추가한다. Direction은 e1/e2/e3, `(1,2,-1)/sqrt6`; 모든 distinct triple permutation과 pure/mixed actions를 포함한다. 영점 D3 oracle는 [추가 연구 N6](numerical-research.md)의 `sum_permutation H_p H_s H_r d0 / 6`, 비영점은 독립 24×24 block exponential의 high-precision evaluation을 사용한다. Production의 같은 Jl scalar derivative를 oracle에 재사용하지 않는다.
|
||||
C05 기본/warped geometry와 `phi=(0,0,0)`, `(1e-6,-2e-6,3e-6)`, `(.2,-.3,.4)`를 사용한다. Small-angle boundary에는 `phi=(1e-4*(1±2^-10),0,0)`를 추가한다. Direction은 e1/e2/e3, `(1,2,-1)/sqrt6`; 모든 distinct triple permutation과 pure/mixed actions를 포함한다. 영점 D3 oracle는 [추가 연구 N6](research.md#numerical-research)의 `sum_permutation H_p H_s H_r d0 / 6`, 비영점은 독립 24×24 block exponential의 high-precision evaluation을 사용한다. Production의 같은 Jl scalar derivative를 oracle에 재사용하지 않는다.
|
||||
|
||||
Element state는 `u_i=.01*(i,-i,.5i)`, `phi_i=(.05i,-.03i,.02i)`, `v_ui=(.1,.05i,-.03i)`, `v_phi_i=(.2,-.1i,.04i)`, `a_ui=(.3,-.2,.1i)`, `a_phi_i=(-.07i,.06,.05)`다. q/v/a 중 하나씩 perturb한 DqI/DvI/DaI와 같은 q에서 종속 rate를 갱신한 Keff를 **서로 다른 검사**로 실행한다. Keff에는 `h=.1,.025` 두 값과 N5의 고정 sweep을 쓴다.
|
||||
|
||||
@@ -68,7 +68,7 @@ Element state는 `u_i=.01*(i,-i,.5i)`, `phi_i=(.05i,-.03i,.02i)`, `v_ui=(.1,.05i
|
||||
|
||||
F=0의 positive E0에 대해 `e_E(h)=max|T+U_phys+U_drill-E0|/E0`를 기록한다. 마지막 두 refinement에서 감소, 마지막 ratio `e_E(h/2)/e_E(h)<=.6`, finest `e_E<=1e-3`를 요구한다. Momentum은 P0/L0 및 변화가 존재하는 각 quantity의 자연적인 초기 integrand norm 합으로 정규화해 같은 감소/finest `1e-3`를 확인한다. 초기 합 scale=0인 component는 scalar component floor 대신 vector integral의 sum-of-norm scale를 쓴다. 매 frame energy 단조감소·exact nonlinear momentum 보존은 요구하지 않는다.
|
||||
|
||||
문헌 free-flying plate는 [추가 연구 N7](numerical-research.md)의 case-family 근거일 뿐이다. 위 C08은 FESA의 별도 완전 지정 synthetic fixture이며 미열람 문헌 그림의 하중·곡선을 재현한다고 주장하지 않는다.
|
||||
문헌 free-flying plate는 [추가 연구 N7](research.md#numerical-research)의 case-family 근거일 뿐이다. 위 C08은 FESA의 별도 완전 지정 synthetic fixture이며 미열람 문헌 그림의 하중·곡선을 재현한다고 주장하지 않는다.
|
||||
|
||||
## C09–C12. 경계·실패·결정론·reference
|
||||
|
||||
|
||||
Reference in New Issue
Block a user