# Shell 표면 압력 ## 목적과 경계 Named shell surface의 균일 signed `DSLOAD P`를 선형·비선형 정적 해석에 조립한다. 선형은 reference geometry, `NLGEOM=YES`는 current geometry의 follower pressure다. 4절점 `S4|S4R` 중앙면만 대상이며 offset·director face·edge/body load는 포함하지 않는다. 공통 계약은 [solver-core](../solver-core/README.md), 유도 원문은 [정식화](formulation.md)다. ## 방향·면적·접선 Connectivity의 `g_xi×g_eta=a`를 양의 oriented area vector로 둔다. Side multiplier s는 `SPOS=+1`, `SNEG=-1`이며 force density는 `-lambda*p*s*a`다. 따라서 양의 P는 선택한 면의 outward normal 반대 방향이다. 음의 P는 그대로 부호를 뒤집으며 abs·clamp로 바꾸지 않는다. Bilinear shape로 nodal force를 적분하고 고정 Gauss 순서로 누적한다. Current area의 방향과 크기를 함께 미분하여 `Kext=dFext/dq`를 계산한다. Newton tangent에는 `Kint-Kext`로 들어가며 follower tangent는 일반적으로 비대칭이다. Pressure geometry는 translation만 사용하므로 rotational force와 tangent row/column은 exact zero다. Thick shell의 실제 offset face traction으로 임의 확장하지 않는다. ## 입력과 결과 대응 Assembly 안이며 instance block 밖에서 다음 형태를 사용한다. ```text *SURFACE, TYPE=ELEMENT, NAME=Surf-1 , SPOS *DSLOAD Surf-1, P, ``` Surface member는 source element·side로 정규화한다. 같은 side의 중복 facet은 warning 후 하나로 만들고 양쪽 side 충돌은 실패한다. 반면 같은 DSLOAD 행은 각각의 additive load record이며 합법적으로 누적한다. Part/instance-level surface, node surface, 다른 face label, `*DLOAD`는 지원하지 않는다. DSLOAD `AMPLITUDE`, `FOLLOWER`, `OP`, `REF NODE` 및 unknown parameter는 거부한다. Follower 여부는 procedure로 결정하며 keyword 옵션을 조용히 무시하지 않는다. 양의 Jacobian·nondegenerate oriented area·finite force/tangent를 검사한다. 결과는 기존 linear schema0 또는 nonlinear schema1의 displacement/reaction·shell recovery다. 별도의 가상 pressure stress 또는 nodal averaged stress를 추가하지 않는다. Nonlinear 비교는 exact factor-one accepted frame만 사용한다. | 원본 bundle | 비교 의미 | | --- | --- | | `reference/shellNL-meshfine-pressure/shellNL-meshfine-pressure.inp` | 729 nodes, 676 S4의 nonlinear follower pressure | | 같은 stem `displacements.csv` | U1–3 blocking, UR1–3 warning-only | | 같은 stem `reactions.csv` | review-only | | 같은 stem `stresses.csv` | 수치 equality 비교에서 제외 | CSV의 frame·instance·source node와 component를 HDF5 nodal row에 직접 대응한다. Shared row/schema/finite precheck는 tolerance 이전 조건이며 warning family에도 적용한다. Reference-only `S=max(abs(ref))`에 대해 `abs(ref)<=0.01*S`는 error `<=0.01*S`, 나머지는 relative error `<=5%`, family RMS/S `<=1%`를 요구한다. `S=0`은 exact zero다. 내부 free residual·전역 force/moment balance는 normalized `1e-10`을 사용한다. ## 구현과 수명 [EvaluateShellSurfacePressure](../../include/fesa/loads/shell_surface_pressure.h)는 24 DOF force와 양의 external derivative를 돌려주는 stateless local kernel이다. [실제 구현](../../src/fesa/loads/shell_surface_pressure.cpp)은 reference/current geometry를 선택한다. [AssembleSurfacePressure](../../include/fesa/assembly/surface_pressure_assembler.h)는 Domain의 surface/load identity를 stable full DOF contribution으로 조립한다. [Assembler 구현](../../src/fesa/assembly/surface_pressure_assembler.cpp)을 대조한다. Surface와 load definition은 Domain 소유이며 procedure의 trial displacement는 빌려 사용한다. Local 계산→ordered reduction→내력과 외력 결합→free solve→accepted recovery 순서다. Candidate 실패가 기존 accepted state·최종 결과를 바꾸지 않아야 한다. ## 검증 의미와 교훈 기존 방향·합력·moment·강체 회전·finite-difference tangent 및 지정 reference 검증 기록이 있다. 문서 정리는 이번 revision의 새 실행 evidence가 아니다. DSLOAD와 DLOAD의 부호 규칙을 섞거나 reference area로 follower load를 계산하면 안 된다. 같은 trial의 force/tangent를 함께 써야 Newton 일관성을 유지한다. 외부 displacement 일치만으로 압력 tangent나 local reaction 정확성을 추론하지 않는다. 한 개의 지정 shell pressure bundle은 arbitrary closed surface·offset face·contact pressure 검증이 아니다.