78 lines
4.6 KiB
Markdown
78 lines
4.6 KiB
Markdown
# 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
|
||
<assembly element set 또는 instance.element>, SPOS
|
||
*DSLOAD
|
||
Surf-1, P, <signed finite magnitude>
|
||
```
|
||
|
||
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 검증이 아니다.
|