294 lines
23 KiB
Markdown
294 lines
23 KiB
Markdown
# Shell 축소 좌표 HHT 정식화
|
||
|
||
읽기 구분: 현재 축소 적분·graph·physical-rate 복원의 수식 원본이다. Fully-free rotation의 component selector는 [고정 null 기저](formulation-fixed-null-basis.md)가 대체한다. 아래 구현 제안·검토 대기는 작성 당시의 기록이며 현재 구현·검증은 [기능 요약](README.md)을 따른다.
|
||
|
||
본문의 검토·ADR·N1–N7 등 과거 기록명은 당시 근거의 식별명이며, 이 문서의 현재 요약 링크가 원자료 전문을 제공한다는 뜻은 아니다.
|
||
|
||
작성 당시 상태: `implementation-ready; independent-review-and-shell-verification-pending`, 2026-10-12. 사용자는 실제 shell의 축소 좌표 HHT 구현·검증과 full A의 진단용 filter-combination 의미/schema 구분을 승인했다. 본 문서는 수식 인계이며 구현 또는 수치 통과를 승인하지 않는다. [기존 정식화](formulation.md), [현재 관성](formulation-inertia.md), `실험·실패 보고`를 전제로 한다. Carried-A의 동일 full-coordinate HHT 산술은 [별도 N7 상세](formulation-carried-a-noise.md)가 소유한다.
|
||
|
||
## 1. 물리와 좌표
|
||
|
||
2026-10-13 HHT-ADR-018 이후 all-free rotational null 절점의 component selector와
|
||
이에 의존하는 projection/lift는 [고정 null 기저 상세](formulation-fixed-null-basis.md)의
|
||
FB-02–07로 대체한다. 부분구속의 기존 component chart는 유지한다. 아래 continuous
|
||
physics와 graph/rate 계약은 유지하되, identity-coordinate 전용 설명을 새 plane basis에
|
||
그대로 적용하지 않는다. 실제 augmented scaling·초기화·CA/N7의 새 basis 경계는
|
||
해당 상세 문서를 따른다.
|
||
|
||
기존 Total Lagrangian MITC4, 선택한 numerical drilling potential, isotropic linear elasticity, nodal lumped kinetic measure, 공간 적분과 fixed-initial global chart를 유지한다. 좌표는 node-major `q=(u_x,u_y,u_z,phi_X,phi_Y,phi_Z)`, `v=dot q`, `a=ddot q`; 병진 단위는 length, 회전은 rad다. 질량 추가, damping, stress averaging은 없다. 공개 load subset은 기존 constant global force, 구속은 fixed zero다. 아래 smooth F(t)의 시간미분은 C08a 내부 manufactured oracle에만 해당한다.
|
||
|
||
2026-10-20 기본 직접 스프링의 primitive는
|
||
`psi_ei=kd*(d_i0·phi_i)*(n_actual(phi_i)·d_i0)`다. `n_actual`은 기존
|
||
`EvaluateDynamicRotation`의 cubic Exp/Jacobian에서 계산한 `normalize(J_cubic^-1*d_cubic)`를
|
||
사용하며, 아래 정확 SO(3)의 closed 식으로 대체하지 않는다. Shared node에서 요소별
|
||
primitive를 source 순서로 합하고 `n_actual·Fext_rot`을 한 번만 뺀다.
|
||
Gradient·Hessian·3차 방향미분도 같은 primitive와 실제 null에서 유도한다.
|
||
Metric은 `sum_e kd*grad(gamma_ei)*grad(gamma_ei)^T`다. Force의 일정 접선을 이유로
|
||
null의 고차 미분을 지우지 않는다. 다음 `k*S*gamma`는 기존 상대 비틀림 방식의 유도다.
|
||
|
||
Zero constrained 성분을 정확히 제거한 free 공간에서
|
||
|
||
\[
|
||
E(q,v,a,t)=I(q,v,a)+g(q,t),\quad I=M(q)a+c(q,v),\quad g=f_{int}(q)-F(t).
|
||
\tag{RC-01}
|
||
\]
|
||
|
||
실제 admissible nodal mass-null은 `n_i=normalize(J_l(phi_i)^{-1} d_i)`, `d_i=Exp(phi_i)d0_i`이다. N은 이 방향의 free-space lift이며 `MN=0`, `N^TI=0`이다. 원 대수조건은
|
||
|
||
\[
|
||
\psi_i=N_i^Tg=\sum_{e\ni i} k_e S_i\gamma_{ei}-n_i^TF_{\phi,i}(t),\quad
|
||
S_i=1/\|J_l^{-1}d_i\|.
|
||
\tag{RC-02}
|
||
\]
|
||
|
||
이는 기존 `drilling_constraint`의 scalar이며 raw twist gamma가 아니다. 이 유도는 physical force의 null work가 0인 정확 identity를 사용하므로 energy의 4차 tensor는 필요 없다. Translation force의 null work는 0이다. Shared node external term은 한번만 추가한다.
|
||
|
||
현재 cubic 관성에서는 별도로 계산한 physical force의 null 투영이 이 정확 identity를
|
||
항상 만족하지 않는다. 직접 방식의 hidden scalar를 `n^T(fphysical+fdrill-Fext)`로
|
||
재구성하면 primitive 미분과 다른 식이 되므로 canonical scalar를 그대로 사용한다.
|
||
Full mass/null·physical residual·triad acceptance는 별도로 유지하며 근사 오차를 숨기지 않는다.
|
||
빈 admissible null inventory에는 scalar를 요구하지 않고, 필요한 null이 있을 때 미평가
|
||
scalar를0으로 치환하거나 사용할 수 없는 directional 응답을 재사용하지 않는다.
|
||
|
||
## 2. Fixed graph와 부분 구속
|
||
|
||
초기 frame에서 admissible null node마다 free rotation component 중 `|n_i[c]|` 최대 성분을 z pivot으로 선택한다. 동률은 X,Y,Z 순서이며 node는 기존 canonical/source order다. 나머지 free components가 p다. 고정 selector `L_p,L_z`로 `q_f=L_p p+L_z z`를 정의하고 **global coupled** `psi(q,t)=0`를 풀어 `z=z(p,t)`, `q=Q(p,t)`를 만든다. 각 node의 독립 scalar solve로 대신하지 않는다. `G=psi_q L_z`는 nonsymmetric일 수 있다.
|
||
|
||
부분 회전 BC의 null 개수는 `span(n_i) ∩ {w:C_i w=0}`에서 정한다. Constrained component에 n_i가 하나라도 nonzero이면 그 node의 admissible null은 0이며 해당 node의 모든 free components를 p에 남긴다. 모든 constrained null components가 정확히 0이면 null 1개다. 기존 `NullNodes`의 exact component convention을 사용하되 noise threshold로 rank를 바꾸지 않는다. 작은 constrained 성분을 0으로 clamp하거나 null을 잘라 정규화하지 않는다.
|
||
|
||
고정 graph 전체에서 initial admissible-node list가 같아야 한다. 매 trial의 실제 null 교집합을 다시 대조한다. Partial BC가 처음에는 null을 허용하나 finite rotation에서 가르면 rank가 변하므로 실패다. 그 모델은 본 fixed-rank local method의 지원 밖이며 silent full/reduced switching을 하지 않는다. Pivot은 최초 선택 후 변경하지 않는다. 기존 principal-chart, geometry, swing/twist validity와 동일한 branch를 유지한다. 실패 chart의 history transport·자동 rechart는 이번 최소 구현에서 지원하지 않는다.
|
||
|
||
다음은 서로 다른 필수 검사다: G solve regularity, `psi_q N` transversality, full column-rank J, `M_r=J^TMJ` positivity 및 기존 condition checks. G의 invertibility만으로 이 모두를 대체하지 않는다. `[J,N]`이 free space를 span하면 psi=0와 `J^TE=0`는 원 `E_f=0`와 동등하다. 기존 N1–N6 scale/condition policies를 사용하고 새 tolerance/floor/pseudoinverse/diagonal shift를 정하지 않는다.
|
||
|
||
Empty null에서는 `Q(p)=L_p p`, `J=L_p`, `Q_t=Q''=Q'''=0`이며 원 full-coordinate HHT로 환원한다. All-fixed에서는 p,z,free solve가 모두 비며 full reaction만 복구한다. All-free 및 all-rotation-fixed node 조합은 고정 rank를 직접 만족한다. 일반 partial node는 위 교집합/rank 검사 아래에서만 지원하며, 모든 partial BC의 성공을 보장하지 않는다.
|
||
|
||
## 3. 축소 적분과 물리 rate
|
||
|
||
초기 `p0=L_p^T q0`; graph의 identity coordinates 때문에 `vp0=L_p^T v0`, `ap0=L_p^T a0`다. 동일 Q branch와 chain-rule rates가 기존 full frame0를 복원해야 한다. 기존 정확 q0/v0/a0를 silent projection하거나 첫 frame를 제외하지 않는다. `Ar0=ap0`이다.
|
||
|
||
초기 null correction과 hidden evidence의 `psi_q`도 RC-02의 direct scalar primitive와
|
||
동일한 미분을 사용한다. Analytically objective physical energy의 `n^T H`는 이 제약에
|
||
기여하지 않지만, 별도로 계산한 physical Hessian을 투영하면 반올림 잡음이 제약 계수로
|
||
남을 수 있다. 이를 원래 full `a0`에 가짜 null acceleration을 추가하는 근거로 사용하지
|
||
않는다. Primitive의 source-ordered assembly와 안정적인 contraction으로 같은 수식을
|
||
계산하고, physical mass range solve 및 original/reconstructed frame0의 full residual
|
||
판정은 유지한다. 이 산술 정정의 원인·실행 범위는
|
||
`후속 검증 기록`을 따른다.
|
||
|
||
\[
|
||
Ar_{n+1}=(1+\alpha)ap_{n+1}-\alpha ap_n,\quad
|
||
p_p=p_n+h vp_n+h^2(1/2-\beta)Ar_n,\quad
|
||
vp_p=vp_n+h(1-\gamma)Ar_n,
|
||
\tag{RC-03}
|
||
\]
|
||
\[
|
||
Ar=(p-p_p)/(\beta h^2),\quad vp=vp_p+\gamma h Ar,\quad
|
||
ap=(Ar+\alpha ap_n)/(1+\alpha).
|
||
\tag{RC-04}
|
||
\]
|
||
|
||
동등한 carried-Ar Newton 산술은 Ar를 직접 갱신할 수 있으나 실제 update operator와 N7 estimator가 대응해야 한다. Public full A는 Ar나 `J Ar`가 아니다.
|
||
|
||
\[
|
||
q=Q(p,t),\quad v=J vp+Q_t,\quad
|
||
a=J ap+Q_{pp}[vp,vp]+2Q_{pt}vp+Q_{tt},\quad J=Q_p,
|
||
\tag{RC-05}
|
||
\]
|
||
\[
|
||
A_{full,n+1}=(1+\alpha)a_{n+1}-\alpha a_n,\quad A_{full,0}=a_0.
|
||
\tag{RC-06}
|
||
\]
|
||
|
||
Afull은 full chart의 진단용 filter combination이며, reduced history `p,vp,ap,Ar`로 다음 predictor를 계산한다. Full physical v/a, spatial omega/omega_dot, 원 E와 반력은 기존 의미를 유지한다. 하나의 accepted full state에서 물리량을 복구하며 Ar를 physical acceleration으로 사용하지 않는다. 적분 이력과 물리 state를 함께 원자적으로 commit한다.
|
||
|
||
Newton 시작점은 같은 frozen `pp,vpp,ap_old`에서 p=pp와 p=pn을 각각 **새 endpoint 시간**의 Q(p,t)로 올린 두 trial이다. 시간 의존 psi에서 과거 full qn를 새 graph state로 그대로 사용하지 않는다. 두 trial의 실제 full chain-rule rates와 원 free `||D^T E||inf`를 대조하여 작은 쪽을 선택하고 exact tie는 predictor다. 같은 p이면 한번만 평가하며, 선택한 assembly를 그대로 첫 iteration에 사용한다. 기존 genuine geometry/chart fallback 범위를 유지하되 algebraic-rank, solve, arithmetic failure를 geometry 실패로 숨기지 않는다.
|
||
|
||
## 4. Tensor 없는 implicit embedding 미분
|
||
|
||
시간을 포함해 `Psi(q,t)=psi(q,t)`, `Qtilde=(Q,t)`로 쓴다. Full extended Hessian을 H, third trilinear operator를 T라 한다. p/t direction b에 대해 `U_b=DQtilde[b]`이며
|
||
|
||
\[
|
||
G z_p=-\psi_q L_p,\qquad G z_t=-\psi_t,\qquad
|
||
G z''[b,c]=-H[U_b,U_c].
|
||
\tag{RC-07}
|
||
\]
|
||
|
||
z의 first derivatives로 J와 Qt를 만든다. Second derivatives의 full vector는 z block에만 nonzero이며 time component는 0이다. 전체 second/third tensor를 저장할 필요 없다. 현재 endpoint에서
|
||
|
||
\[
|
||
w=(vp,1),\quad W=(v,1)=DQtilde[w],\quad B=D^2Qtilde[w,w],\quad a=J ap+B_q.
|
||
\tag{RC-08}
|
||
\]
|
||
|
||
열 j마다 `U_j=(J e_j,0)`, `X_j=D²Qtilde[(e_j,0),w]`, `Y_j=D²Qtilde[(e_j,0),(ap,0)]`를 동일 G로 푼다. `B_q,X_{j,q},Y_{j,q}`는 RC-07의 Hessian RHS다. 필요한 third만
|
||
|
||
\[
|
||
G C_{j,z}=-\{T[U_j,W,W]+2H[X_j,W]+H[B,U_j]\},
|
||
\quad C_j=D^3Qtilde[(e_j,0),w,w].
|
||
\tag{RC-09}
|
||
\]
|
||
|
||
같은 G factorization을 모든 RHS에 재사용할 수 있다. 이는 매 endpoint의 graph derivative factorization이며 Newton tangent의 stale factor reuse를 뜻하지 않는다. Finite RHS/solve residual을 검사하고 direct inverse를 만들지 않는다.
|
||
|
||
## 5. Exact reduced Newton
|
||
|
||
Residual은 `R=J^T E_f`. `cv=gamma/(beta h)`, `ca=1/[(1+alpha)beta h²]`라 하면
|
||
|
||
\[
|
||
\delta q_j=J_j,\qquad \delta v_j=X_{j,q}+cv J_j,\qquad
|
||
\delta a_j=Y_{j,q}+ca J_j+C_{j,q}+2cv X_{j,q}.
|
||
\tag{RC-10}
|
||
\]
|
||
\[
|
||
K_{r,ij}=Q_{pp}[e_i,e_j]^T E_f+
|
||
J_i^T\{(I_q+K_{int})\delta q_j+I_v\delta v_j+M\delta a_j\}.
|
||
\tag{RC-11}
|
||
\]
|
||
|
||
`Qpp`는 RC-07로 구하며 평형 밖에서 E와의 contraction을 생략할 수 없다. 전체 Qpp vectors 없이 `G^T lambda=L_z^T E`를 한번 풀면 첫 항은 `-lambda^T H[U_i,U_j]`다. 같은 transpose solve를 재사용하며 미분을 근사하지 않는다. `Kr Δp=-R`, 또는 `s=beta h²`인 동등식 `s Kr ΔAr=-R`를 nonsymmetric solver로 푼다. 기존 full-coordinate Keff에는 Q 곡률과 `(delta J)^T E`가 없으므로 Kr로 사용할 수 없다.
|
||
|
||
Reduced 수렴에는 원 free E, psi와 다음 hidden derivatives도 검사한다.
|
||
|
||
\[
|
||
r_1=\psi_qv+\psi_t,\quad
|
||
r_2=\psi_q a+\psi_{qq}[v,v]+2\psi_{qt}v+\psi_{tt}.
|
||
\tag{RC-12}
|
||
\]
|
||
|
||
작은 R만으로 ill-conditioned embedding이나 원 평형을 인증하지 않는다. 기존 full-space force/moment scales, physical recovery와 linear solve checks를 유지한다. 수정한 trial 좌표와 복구한 rate derivatives는 같은 assembly에 속해야 한다. Branch root와 outer Newton의 iteration 한도·진단은 구현·수치 검토 책임이며 본 정식화에서 새 acceptance 값을 만들지 않는다.
|
||
|
||
### 5.1 구현의 동등한 희소 augmented Newton
|
||
|
||
실제 구현은 전역 `J`, `Qpp`를 저장하는 대신 selector residual
|
||
`E_p=L_p^T E`와 graph의 접선 방정식을 함께 푼다. `psi=N^T E=0`이고
|
||
선택한 pivot의 `N_z`가 가역이면 `E_p=0`은 원 전체 평형 및 `J^T E=0`과
|
||
같은 root를 갖는다. 이는 **다른 residual의 exact Newton**이다. 평형 밖의
|
||
Newton step까지 RC-11과 동일하다고 주장하거나, RC-11에서 `delta J^T E`를
|
||
생략하는 근사로 해석하지 않는다.
|
||
|
||
Unknown은 `(delta p, delta z, delta vz, delta az)`이며
|
||
`delta q=L_p delta p+L_z delta z`,
|
||
`delta v=L_p cv delta p+L_z delta vz`,
|
||
`delta a=L_p ca delta p+L_z delta az`이다. Physical row는
|
||
`L_p^T[(I_q+Kint)delta q+I_v delta v+M delta a]=-E_p`다.
|
||
같은 trial의 `W=(v,1)`에 대해 나머지 세 row는 다음과 같다.
|
||
|
||
\[
|
||
\psi_q\delta q=0,\qquad
|
||
\psi_q\delta v+(\psi_{qq}v+\psi_{qt})\delta q=0,
|
||
\]
|
||
\[
|
||
\psi_q\delta a+(\psi_{qq}a+D^3\Psi[\cdot,W,W])\delta q
|
||
+2(\psi_{qq}v+\psi_{qt})\delta v=0.
|
||
\]
|
||
|
||
각 trial은 position graph root, implicit physical-rate 복구, 실제 full
|
||
assembly와 operator 재평가 순으로 구성한다. 위 auxiliary correction은
|
||
linear solve의 full physical variation과 noise 평가에 모두 보존하되,
|
||
독립적인 이력으로 commit하지 않는다. 다음 trial은 갱신한 `p`와 private
|
||
`Ar`에서 다시 root와 rates를 복구한다. 원 full E, hidden 0/1/2,
|
||
chart/rank regularity 및 기존 물리·선형 solve 검사를 그대로 수행한다.
|
||
Hidden 1/2의 초기화 판정과 accepted endpoint의 진단·시간수렴 책임은
|
||
기존 N3를 따른다. Endpoint의 hidden 1/2에 새로운 무조건적인 N2 종료
|
||
허용값을 추가하지 않는다.
|
||
|
||
N2는 실제 `delta q`, `h delta v`, `h^2 delta a`, `h^2 delta A`의 승인된
|
||
scaled norm과 private `delta Ar`를 검사한다. Public
|
||
`delta A=(1+alpha)delta a`에서 이전 accepted physical acceleration은
|
||
고정된다. N7에서도 augmented defect의 모든 auxiliary block을 위 식으로
|
||
변환해야 한다. `delta p`만 남기거나 hidden defect를 무시하면 해당 noise
|
||
판정은 유효하지 않다. 독립 소형 Schur 검산과 실제 shell 검증의 범위는
|
||
`수치 검토`에 구분하여 기록한다.
|
||
|
||
### 5.2 Newton 좌표 증분과 carried Ar의 산술 표현
|
||
|
||
Private physical candidate p와 Ar는 실제 augmented correction에서 함께 갱신한다.
|
||
`p <- p + delta_p`, `Ar <- Ar + delta_p/(beta*h^2)`이며, vp/ap는 기존 Ar
|
||
recurrence로 구한 뒤 full physical rates를 재구성한다. 처음 선택한 p/Ar 시작값과
|
||
정확한 초기화, 원래 full residual·hidden·correction·update 기준은 유지한다.
|
||
|
||
Exact arithmetic에서는 `p=pp+beta*h^2*Ar`가 귀납적으로 유지된다. Binary64에서
|
||
매 반복 p를 큰 pp와 반대 부호의 큰 Ar 항으로 다시 만드는 것은 작은 실제 Newton
|
||
증분을 잃을 수 있다. 실제 large DIRECT probe에서 pp=-11218.75이고 Ar≈651228인
|
||
상태의 요청 delta_p=-2.216e-12가 재구성 좌표에서는 -3.638e-12로 반영됐다.
|
||
직접 p 증분 누적은 같은 수학 recurrence의 산술 표현 변경이며, p와 Ar를 별도 독립
|
||
물리 unknown으로 늘리거나 실패 residual을 보정하는 방법이 아니다.
|
||
|
||
Accepted absolute update와 원 N3의 q increment trace에 기존 uncancelled-scale
|
||
`1e-12`를 적용하며 불일치는 fail closed한다. 추가 vnew-vold subtraction은
|
||
원 N3 요구가 아니므로 diagnostic으로 구분한다. Ar와 vp/ap의 별도 산술 이력 및
|
||
graph-rate indicator를 계속 보존한다.
|
||
|
||
2026-10-13 후속 산술 수정은 Newton candidate의 p 덧셈에서 잃은 low를 유지한다.
|
||
`(s,e)=TwoSum(p_high,delta_p)`, `t=p_low+e`,
|
||
`(p_high_new,p_low_new)=TwoSum(s,t)`로 갱신하며 실제 geometry에는 high를 사용한다.
|
||
원 predictor high 및 시작점 선택은 유지하고 predictor의 두 덧셈 low도 별도로
|
||
carry한다. Old-p 시작은 해당 binary64 값에서 low0으로 시작한다. Requested trace는
|
||
독립적인 보상 합계이며 candidate를 이 trace로 덮어쓰지 않는다.
|
||
|
||
Finite binary64·gradual underflow에서 pair radius는
|
||
`Bpair_new=Bpair_old+rho(t)`, 실제 high radius는 `Bpair_new+abs(p_low_new)`다.
|
||
Predictor의 inherited bound와 초기 low를 포함하고 accepted high의 uncertainty를
|
||
다음 step으로 넘긴다. 기존 pp+Ar 또는 plain p addition bound를 이 새 경로의
|
||
완전한 evidence로 승계하거나 radius를 reset/clamp하지 않는다. 이는 같은 수학
|
||
recurrence의 산술 표현이며 stored high가 원 N3를 만족하지 못하면 여전히 실패다.
|
||
독립 exact replay와 적용 한계는 `수치 검토`를 따른다.
|
||
|
||
위 high-only 실패 정책은 승인 이전 evidence다. `HHT-ADR-016`([현재 요약](README.md))에 따라
|
||
reduced whole/requested 두 증분은 실제 candidate pair의 increment
|
||
`(p_high+p_low)-old_accepted_high`를 EFT expansion으로 비교하고, 저장 high의
|
||
RN-even 일치를 별도로 검사한다. 원래 각 scale와 `1e-12`, zero-scale exact-zero,
|
||
독립 requested trace와 CA radius는 유지한다. Raw high-only 실패값을 보존하며
|
||
승인 이전 FAIL을 변경본 PASS로 승계하지 않는다. 상세 범위와 표현 경계 검증은
|
||
`승인된 제안`을 따른다.
|
||
|
||
## 6. 필요한 local operator와 시간 항
|
||
|
||
기존 scalar Jet의 `first`, `second`, `mixed_second[j]`는 gradient, Hessian과 `D³ scalar[e_j,v,v]`다. Internal psi(4 nodal scalars, 24 coordinate directions)와 external nodal scalar `-n(phi,d0)·Fphi`(3 rotation directions)에 이 값을 제공한다. AD/Jet/vendor type은 private로 유지한다. 시간 좌표를 포함한 Psi의 derivative contraction은
|
||
|
||
\[
|
||
H[(u,\tau),(w,\sigma)]
|
||
=\psi_{qq}[u,w]+\tau\psi_{qt}[w]+\sigma\psi_{qt}[u]+\tau\sigma\psi_{tt},
|
||
\tag{RC-13}
|
||
\]
|
||
\[
|
||
\psi_t=-n^TF',\quad \psi_{qt}[u]=-Dn[u]^TF',\quad \psi_{tt}=-n^TF'',
|
||
\tag{RC-14}
|
||
\]
|
||
\[
|
||
T[(u,0),(v,1),(v,1)]
|
||
=D^3\psi_{int}[u,v,v]-D^3n[u,v,v]^TF
|
||
-2D^2n[u,v]^TF'-Dn[u]^TF''.
|
||
\tag{RC-15}
|
||
\]
|
||
|
||
Fixed-time Newton에는 RC-15의 T만 필요하므로 **F'''는 불필요하다**. 일반 pure Qttt 요청에는 F'''가 필요하지만 이번 구현에서 요청하지 않는다. Constant public CLOAD에서는 F'=F''=0이다. Generalized rotational F가 nonzero이면 n의 pure-q 미분은 여전히 필요하다. C08a oracle에 Fdot/Fddot=0을 대입하면 잘못된 구현이다. External time-mixed second contraction은 n의 nodal Hessian에서 계산하며 force finite difference로 대체하지 않는다.
|
||
|
||
## 7. 당시 최소 구현 인계
|
||
|
||
다음 파일명과 인터페이스는 2026-10-12 제안이며 현재 파일 배치를 뜻하지 않는다.
|
||
현재 source flow는 [기능 요약](README.md)을 따른다.
|
||
|
||
| Owner / 파일 제안 | 대응 operator / 책임 |
|
||
| --- | --- |
|
||
| `include/fesa/elements/nonlinear_mitc4_shell.h`, `src/fesa/elements/nonlinear_mitc4_shell.cpp` | Internal psi gradient/Hessian와 `drilling_constraint_third_directional_gradient[node][j]=D³psi[e_j,v,v]`; RC-02/15. 기존 physical energy force/tangent 보존 |
|
||
| Element-local `NonlinearMitc4Shell::EvaluateExternalDrillingConstraint(node,phi,phi_dot,F,Fdot,Fddot)` | Unit d0, principal phi, n convention과 nodal scalar 미분. `gradient/Hessian`은 pure q, `directional_first/second`와 `gradient_directional_first/second`는 W=(v,1) contractions; RC-13–15 |
|
||
| `src/fesa/analysis/hht_reduced_internal.h`, `hht_reduced_operators.cpp` 새 private proposal | Stable scatter/ordered assembly, external term once/node, current admissible null checks; shell/AD storage ownership 이전 금지 |
|
||
| `src/fesa/analysis/hht_reduced_embedding.cpp` 새 private proposal | Fixed p/z selectors, coupled algebraic root, G/transposed-G solves, J/Qt/B/X/Y/C and full physical state; RC-07–10 |
|
||
| `src/fesa/analysis/hht_dynamic_procedure.cpp` 및 필요시 `hht_reduced_newton.cpp` | Immutable prediction, reduced candidate/history, exact Kr, original equilibrium/hidden/geometry/recovery and atomic commit. Nonsymmetric sparse solver adapter 사용 |
|
||
| `src/fesa/CMakeLists.txt` | 새 private source의 기존 production target registration; 새 vendor/public target 없음 |
|
||
|
||
Private interface는 `EvaluateAlgebraicOperators(q,t,F,Fdot,Fddot,v)`, `SolveEmbedding(fixed_chart,p,t,accepted_z_seed)`, `EvaluateReducedTrial(p,vp,ap,t)`의 수학적 책임을 분리하는 정도면 충분하다. 이름·저장/API는 구현자가 existing ownership에 맞춘다. `SolveEmbedding`은 immutable accepted z seed와 current trial를 구분하며 실패가 committed branch/cache에 반영되지 않는다. Perturbed algebraic-root finite difference is independent derivative validation only; production tangent must RC-11과 동일하다.
|
||
|
||
## 8. 검증 인계와 남은 한계
|
||
|
||
- Local scalar third: nonzero finite rotation/warped element, mixed external F/Fdot/Fddot, directional derivative sweeps와 independent scalar identity 확인. 임의 stored 0 third나 internal-only C08a 경로는 mutation 검출 대상이다.
|
||
- RC-07–11: coupled mesh graph derivatives, exact reduced Newton tangent의 독립 directional sweep, `delta J^T E`/mixed-time/curvature 누락 mutation. Empty null의 원 full-coordinate recurrence와 all-fixed reaction, partial BC의 null 교집합·rank-change rejection도 확인한다.
|
||
- Frame0와 hidden0/1/2, full E/reaction, director kinematics, spatial rates, energy/P/L, 실패 rollback을 현재 승인 기준으로 검사한다. 같은 alpha/beta/gamma가 과거 full-coordinate 결과의 동일성을 뜻하지 않는다.
|
||
- C08a all-time full q/v/physical-a 차수와 실제 shell C08b physical high-frequency convergence는 별개다. 축소법의 null-rate 개선만으로 C08b finest fixed-grid 기준 통과를 주장하지 않는다. Original reference 비교·현재 full suite는 implementation owner가 수행한다.
|
||
- Fixed component graph는 general chart/rank transport, smoothness가 깨진 null cutting BC, nonprincipal branch, nonsmooth F를 지원하지 않는다. 이 경계는 fail-closed 구현과 진단으로 드러나야 하며 tolerance/rank clipping으로 숨기지 않는다.
|
||
|
||
당시 원자료 `Decimal96 polynomial probe`는 explicit-time coupled 2-constraint graph의 RC-07/09와 RC-10/11을 세 상태에서 계산했다. 원자료명 `결과`, `native0 기록`은 당시 evidence를 가리키며 이 문서에서 원자료 경로를 제공하지 않는다. [현재 요약](README.md)은 현재 기능 상태를 안내한다. Implicit derivatives를 polynomial Q의 직접 미분과 비교하고, 원 평형 밖의 임의 smooth covector에서 exact tangent와 central difference를 비교하여 `delta J` 생략 효과가 nonzero임을 확인했다. 이는 수식 bookkeeping 검산이며 실제 shell 물리 모델·production 실행 또는 독립 numerical review가 아니다.
|
||
|
||
독립 numerical reviewer가 RC-01–15와 actual implementation operator/BC/branch 대응을 검토해야 한다. Public A/schema details는 I/O owner의 승인 계약을 참조하며 본 수식 문서가 새로운 영속 문자열을 정하지 않는다.
|