Files
FESADev/docs/hht-implicit-dynamics/verification-cases.md
T
KOKO\Mimi eaa5cbeb21 feat: adopt lumped mass and reduced-coordinate shell HHT
Integrate Hex8 mass verification and fixed-null-basis shell dynamics with numerical and physics handoff evidence. Preserve interrupted reference and full-validation status; full integration validation is deferred until after performance optimization.
2026-10-13 16:57:19 +09:00

83 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HHT 반증 가능한 검증 사례
[HHT-ADR-012](ADR.md)의 `nodal-lumped-kinetic`이 현재 필수 검증 대상이다. M, I, c, DqI, DvI, T, P, L 및 rates를 동일한 rho*N_i*dV0 measure로 계산한다. 기존 [수치 기준](numerical-controls.md), [검증 사례](verification-cases.md), [reference 계약](reference-model.md)과 모든 허용값을 유지한다. 과거 consistent 구현의 결과는 변경본 통과로 승계하지 않으며 현재 재검증은 대기다.
## 공통 측정과 실행 상태
기본 `alpha=-.05,beta=.275625,gamma=.55`, `A0=a0`, 물리 damping=0. 명시한 정확해로 q0/v0/a0를 설정한다. 같은 종단시각과 nested checkpoint에서 q/v/physical a를 각각 비교한다. A와 물리 a의 차이는 별도 기록한다. Temporal error는 scalar 절댓값/vector 2-norm의 `max_n ||quantity_n-exact(t_n)||`이며 **모든 accepted time points**를 포함한다. Shell은 node별 3-vector 2-norm의 최댓값을 u/phi와 각 rate에 따로 사용한다. 첫 increment, `t≥T/4` 구간 최대, 전체 최대, 종단 오차를 분리 보고한다. 종단의 우연한 상쇄를 전체 통과로 쓰지 않는다.
C01–C04의 grid는 `h=1/16,1/32,1/64,1/128,1/256`, `T=1`이다. N7의 마지막 두 refinement order/error/noise 기준을 적용한다. C02의 STEP jump는 t0 이전에 있고 정확해는 0+ 우측이다. 첫 step를 제외하여 통과를 만드는 것은 허용하지 않는다. `A0=a0` startup이 고차 국소조건을 모두 만족한다는 가정을 하지 않는다.
| Evidence | 현재 상태와 적용 한계 |
| --- | --- |
| [기존 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**. |
## C01–C04. 정확해·초기화·시간 차수
| ID | 정확한 모델·초기값 | 측정·반증 대상 |
| --- | --- | --- |
| C01 | `m=1,k=4,F=0`, `q=cos(2t)+.15sin(2t)`, `v0=.3,a0=-4`. q/v/a scale는 `sqrt(1+.15²)`, 그 2배/4배 | 외력 0에서도 Newton scale 유효, turning points, alpha 부호·physical a와 A 구별. Constant-M 표준 HHT 독립 recurrence와 q/v의 scaled 차이도 `<=1e-12` |
| C02 | `m=2,k=8,F(t≥0+)=2`, `q0=v0=0,a0=1`, 정확해 `q=.25(1-cos 2t),v=.5sin 2t,a=cos 2t`. Scale `.5,.5,1` | STEP 전값·초기 acceleration·old force, 최초 increment부터 모두 측정. 의도적으로 F0=0/a0=0/RAMP로 바꾼 mutation이 oracle에 실패해야 함 |
| C03 | `T=.5(1+q²)v²`, `c=qv²`, `q=.4+sin t`, `F=(1+q²)(-sin t)+q cos²t`, `q0=.4,v0=1,a0=0`. q/v/a scale 각각 1 | Variable-M와 convective term, naive force-weighted M(q) 확대의 1차 반례. 올바른 candidate는 N7; naive 구현은 `p<1.5`의 negative evidence를 별도 기록하며 합격 구현으로 채택하지 않음 |
| C04a | `q=(x,z)`, `M=diag(2,0)`, `U=.5*8*x²+.5*3*(z-.7x)²`, `F=(2,0)`. `q0=v0=0`, `a0=(1,.7)`, `A0=a0`; `x=.25(1-cos2t)`, `z=.7x`. Vector q/v/a scales는 `sqrt(1+.7²)*(.5,.5,1)` | Coupled zero-mass acceleration, full 2×2 solve와 exact algebraic reduction을 `1e-10` 대조. Pseudoinverse의 a_z=0는 초기 hidden-constraint 검사에 실패. κ=0, negative positive-mass m, inconsistent z0=.1은 각각 regularity/positive-mass/initial-consistency 실패 |
| C04b | `y(q)=q/|q|`, `T=.5|Dy v|²`, `U=.5(|q|-1)²`, `M=(I-ddᵀ)/r²`, `c=-2(q·v)Mv/r²`, `f_int=(r-1)d`. `q=(cos t,sin t)`, `v=(-sin t,cos t)`, `a=-q` | **Full Cartesian q1/q2 Newton**으로 푼다. 각도 parameterization·normalization·constraint projection 금지. Moving `ker M=span(q)`, exact M rank1, endpoint r=1·초기 q·v=0/q·a+v²=0. q/v/a scale1; hidden raw/normalized defect의 최대·종단 및 수렴. 기존 angle probe는 독립 대조만 제공 |
C04b는 position constraint `max|r-1|<=1e-10`. `max|q·v|`, `max|q·a+v²|`의 마지막 두 refinement는 각각 감소해야 하며 finest에서 각각 `<=1e-6`, `<=1e-4`다. 이 raw threshold는 무차원 unit-circle oracle의 조건이며 실제 shell에 그대로 적용하지 않는다. 같은 수치를 Newton 초기 consistency tolerance로 사용하지 않는다. Correct full-coordinate 해와 기존 angle-reduced 해는 같은 grid에서 q/v/a의 scaled 차이 `<=1e-8`여야 한다. 미세 h에서 cancellation이 차이를 지배하면 N7 inconclusive 규칙으로 처리한다.
## C05. 질량·null·조건수와 단위
기본 element는 `X=(-1,-1,0),(1,-1,0),(1,1,0),(-1,1,0)`, `d0=(0,0,1)`, `t=.2,E=1000,nu=.3,rho=1`. Analytic rectangle C0는 `rho*t*area/36`에 `[4,2,1,2]` cyclic matrix, C1=0, C2=`t² C0/12`; lumped `(m,s,j)=(rho*t*area/4,0,rho*t³*area/48)`다. Consistent rank20, lumped node rank5, total4 analytic drill null과 physical rigid field의 positive kinetic energy를 각각 검사한다.
추가 fixture는 node3 z=.1인 warped quad이며 initial director는 기존 deterministic geometry 규칙으로 생성한다. 3³ 적분과 독립 5³ Gauss moment/kinetic integral을 N4로 대조한다. Density 배율 `1e-180,1e180`에서 scalar mass positivity는 overflow 없는 variance 식으로 같은 verdict여야 한다. 이 extreme density fixture에서 필요하지 않은 stiffness/mass time solve를 실행해 unrelated overflow를 요구하지 않는다.
현재 `phi_i=(.2,-.3,.1)` 및 node별 `phi_i=(.05i,-.03i,.02i), i=1..4`에서도 Jl^-1 d null을 확인한다. 동역학 질량의 기존 초기 M 고정 mutation과 fixed global UR3 deletion mutation을 검출한다. Partial-BC oracle는 한 node의 physical tangent에 대한 free scalar direction의 positive mass가 `p²`에 비례하도록 `p=0,1/2000,1e-8`을 구성한다. p=0은 exact null, p≠0은 positive dimension을 유지한다; conditioning guard 미달이면 **positive mass conditioning failure**이며 null로 분류하지 않는다. 이 scalar-only projected block의 rcond=1이라는 점도 확인하고, 작은 mass를 이웃 positive DOF와 함께 둔 mixed block의 conditioning과 구분한다.
독립 guard boundary는 scaled SPD `diag(1,c)` 및 algebraic `diag(1,c)`의 `c=2^-31,2^-32,2^-33`: 첫 둘 통과·마지막 conditioning 실패다. `c=0`은 singular failure로 구별한다. Regularity/positive mass 두 기준은 각각 실행한다.
단위변환은 numeric multipliers `c_L=1e-3,c_M=1e-6,c_T=1e2`: X/u/t→c_L, h/time→c_T, density→c_M/c_L³, E→c_M/(c_L*c_T²), force→c_M*c_L/c_T², moment→c_M*c_L²/c_T²를 적용한다. v/a의 시간·길이 배율도 변환하고 동일 physical predicate·normalized metric을 N4/N6로 비교한다. Unit change로 rank/conditioning 분류를 바꾸지 않는다.
## 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](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을 쓴다.
필수 mutation: D(Hᵀ)항, D3, convective c, DvI 각각을 하나씩 누락하면 적어도 한 nonzero-direction oracle가 실패해야 한다. Correct derivative의 N5 pass와 이 detection evidence를 함께 기록한다. 이 미분 실험은 stability·시간 정확도 검증을 대체하지 않는다.
## C07. 선형 에너지·소산·관성 반력
`m=1,k=4,q0=1,v0=0,a0=-4`에서 alpha=0, beta=.25,gamma=.5, `h=1/64,T=10`의 energy maximum defect / E0는 `<=1e-10`. 같은 문제의 기본 alpha에서는 에너지·위상·진폭 오차를 보고하고 exact conservation을 요구하지 않는다.
독립 3×3 amplification matrix를 q/v/A recurrence로 만들고 `omega*h={.01,.1,1,10,100,1000}`에서 spectral radius를 확인한다: alpha=0의 physical pair modulus는 `1±1e-10`, 기본 alpha의 radius는 `<=1+1e-10`. High-frequency limit `rho_infinity=(1+alpha)/(1-alpha)`는 analytical limit로 대조하고 `omega*h=1000` 값을 limit exact equality로 강제하지 않는다. Consistent initial physical a를 설정해 숨은 parasitic 초기 mode를 구별한다.
반력 oracle는 `M=[[2,.5],[.5,1]]`, `K=diag(8,3)`, q2=v2=a2=A2=0, F=(2,0)에서 C02와 같은 x(t)를 사용한다. Physical support reaction `R2=.5*a1`이고 algorithmic constrained residual과 다르다. Endpoint M a+Kq-F의 physical reaction 및 momentum balance를 N2/N6로 검사한다. 이 mass coupling은 constrained acceleration=0이어도 inertial reaction이 생김을 검증한다.
## C08. 실제 shell 유한회전·자유운동·에너지
**C08a manufactured rigid orbit:** C05 기본 1 element와 동일 물성으로, `phi(t)=(.4sin t,.6sin(.7t),.2sin(1.3t))`, 모든 node에 `R=exp(phi×)`, `u_i=(R-I)X_i`, `d_i=R d0_i`를 준다. `T=1,h=1/16,1/32,1/64,1/128,1/256,1/512,1/1024`; 원 16–256 결과와 실패를 보존하고 [HHT-ADR-015](ADR.md)에 따라 512/1024를 최종 grid로 추가한다. q/v/a 초기값은 해당 analytic curve와 독립 exponential derivative로 구한다. `max|phi|>0.5 rad`를 실제 관측하여 small-rotation만 통과한 사례로 대체되지 않도록 한다.
제조된 generalized force는 선택된 nodal lumped mass의 **독립 volume oracle**에서 `F_i=∫rho N_i H_i^T xddot_i dV0`로 생성한다. Objective internal/drill force는 rigid orbit에서 0이어야 한다. Production I를 다시 호출해 F를 만드는 자기검증을 금지한다. Time-dependent generalized forcing과 nonzero initial rates는 내부 verification fixture이며 공개 CLOAD/초기조건 지원을 뜻하지 않는다. 실제 full q/v/physical-a 전체 이력에서 finest normalized error `<=1e-4`, 마지막 두 refinement 차수 `>=1.8`, 최종 세 grid의 N7 factor100 separation을 요구한다. Moment/power와 analytic drill null을 검증한다. C08a hidden1/2는 strict 감소 대신 모든 frame의 `|ψk_i|/Sk_i <=1e-10`을 요구한다(HHT-ADR-015). 원 uncancelled scale을 유지하고 scale0이면 raw defect exact0이어야 하며 floor·clamp·projection을 쓰지 않는다. Raw defect·scale·normalized 최대값을 기록한다.
**C08b free deformable plate:** `[−1,1]²`의 2×2 정사각 mesh(9 nodes/4 elements), C05 물성, 모든 DOF free, F=0, q0=0. 초기 midsurface velocity는 `V+Omega×X+(0,0,.02 X_x X_y)`, `V=(.125,-.25,.0625)`, `Omega=(.8,.6,.4)`다. 초기 physical director rate는 `Omega×d0`; 남은 null velocity는 `ψ_x w=0`으로 결정한다. a0는 physical equation과 초기 2차 ψ 조건으로 구한다. Arbitrary null velocity/acceleration=0을 넣지 않는다.
`T=.25`, `h=1/64,1/128,1/256,1/512,1/1024`의 기존 결과를 보존한다. 2026-10-12 [HHT-ADR-014](ADR.md)의 사용자 승인으로 `h=1/32768,1/65536,1/131072`를 최종 시간수렴 판정에 추가한다. 모든 grid에서 principal/swing/geometry branch를 만족해야 한다. 최종 최대 회전이 0.2 rad 이상인지 기록한다; 미달이면 이 fixture의 finite-rotation coverage가 부족한 것이며 값을 바꾸어 통과를 만드는 대신 별도 보강 설계를 검토한다.
공통 coarse time points에서 `d_h=max||q_h-q_h2||`와 v/a 차이를 각각 측정한다. Translation scale ell, rotation 1 rad, v/a는 각 scale/T, scale/T²를 사용한다. 마지막 두 self-convergence ratios의 `log2(d_h/d_h2)>=1.8`, finest normalized difference `<=1e-4`, N7 noise separation을 요구한다. 이것은 self-convergence이며 정확해 error bound라고 표시하지 않는다. 각 frame의 N2/N4/N6 평형도 필수다.
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 합으로 정규화한다. L에는 같은 감소/finest `1e-3`를 요구한다. Flat centered all-free fixture의 P에는 finest absolute `<=1e-3`와 원 balance/HHT update consistency를 요구하고 strict 감소는 요구하지 않는다(HHT-ADR-014). Reduced-coordinate 적분에서는 실제 복구된 full rates와 해당 update로 보존·balance를 독립 확인하며 기존 full-coordinate velocity recurrence를 자동 적용하지 않는다. 초기 합 scale=0인 component는 scalar component floor 대신 vector integral의 sum-of-norm scale를 쓴다. 매 frame energy 단조감소·exact nonlinear momentum 보존은 요구하지 않는다.
문헌 free-flying plate는 [추가 연구 N7](research.md#numerical-research)의 case-family 근거일 뿐이다. 위 C08은 FESA의 별도 완전 지정 synthetic fixture이며 미열람 문헌 그림의 하중·곡선을 재현한다고 주장하지 않는다.
## C09–C12. 경계·실패·결정론·reference
| ID | 반드시 반증할 동작 | 판정 |
| --- | --- | --- |
| C09 | All-fixed 유효 모델, free force channel만/rotation channel만, 정확 무하중 q=v=a=A=0, 무하중 uniform translation | Empty solve/empty channel 정상 처리; nonempty zero-scale branch exact zero; rigid translation은 T/P 보존·internal/drill0 N6. 모든 항0 분모를1로바꾸는 mutation검출 |
| C10 | NaN/Inf, invalid density/thickness/J, principal/swing branch, near-singular positive block, algebraic rank loss, Newton100 종료 | 각각 최초 해당 predicate에서 실패. 허용 끝점100과101금지, fixed dt failure/no retry, epsilon mass/diagonal shift/삭제없는실패. Valid 원상태에 invalid trial을 주입하여 committed q/v/a/A/history/frame/output 보존 |
| C11 | 동일 input 3회; stable element/thread partition 변화; proper global rotation `Q=R_z(.7)R_x(.4)`로 geometry부터재조립 | N7 결정론 및 N6 covariance. 회전된 BC/loads가 같은 물리공간인지 확인; schema identity와 값 norm을 따로 검사 |
| C12 | 원본 101 frames×9 nodes 전부, initial exact-zero U/UR, reordered CSV, missing/extra/duplicate/nonfinite/wrongtime mutation | [reference-model](reference-model.md)·공통 tolerance. UR warning도 precheck오류는blocking. Urow5%/RMS1%, nearzero1%, S0exactzero 경계 포함. HDF5→debugCSV는공식출력대체불가 |
최종 기능 acceptance에는 채택 mass의 위 필수 사례와 C12, 구성된 build/CTest가 필요하다. 이번 Numerical 문서 gate에서는 solver/build/CTest/Abaqus/reference를 실행하지 않는다. Fixture 구현 중 upstream 수식·지원 범위를 바꿔야 하는 발견은 formulation/main에 돌리고 문서의 tolerance를 결과에 맞추어 바꾸지 않는다.