Files

69 lines
4.6 KiB
Markdown
Raw Permalink 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.
# 3D Euler–Bernoulli beam 선형 정적 해석
## 목적과 경계
직선 2절점 `B33`의 축변형·비틀림·두 방향 굽힘을 해석한다.
Prismatic general section, 등방 선형탄성, 작은 변형·회전이 대상이다.
`B31` 전단변형 beam, `I12!=0` 결합 단면, 소성·좌굴·동적 beam은 포함하지 않는다.
`LocalEquivalentLoad`는 정식화 검산용이며 공개 beam `DLOAD` 지원을 뜻하지 않는다.
공통 실행·소유권·수치 비교 규칙은 [solver-core](../solver-core/README.md),
수식·부호·좌표·복구 위치 원문은 [정식화](formulation.md)를 따른다.
## 채택한 수식과 이유
각 절점은 global `[UX,UY,UZ,URX,URY,URZ]`를 가지며 요소는 12 DOF다.
Connectivity가 local x를, 입력 guide의 x 직교 투영이 local y를 정하고 z는 외적이다.
퇴화 길이·평행 guide를 임의 축으로 대체하지 않는다.
`G=E/(2(1+nu))`, `Iy=I11`, `Iz=I22`이며 양의 `A,Iy,Iz,J`를 요구한다.
축·비틀림과 Hermite 굽힘의 local stiffness를 두 점 Gauss 순서로 계산하고 global로 변환한다.
Endpoint outward action과 단면력은 같은 이름의 값이 아니므로 부호를 별도로 복구한다.
단면 응력은 입력 section point의 local 위치에서 `S11`로 복구한다.
Section point 생략 시 centroid는 `fesa-default` identity를 가진다.
## 입력과 결과 대응
`*ELEMENT,TYPE=B33`, `*BEAM GENERAL SECTION,SECTION=GENERAL,ELSET=...,MATERIAL=...`를 사용한다.
단면 첫 행은 `A,I11,I12,I22,J`, 둘째 행은 guide vector다.
`*SECTION POINTS`의 `x1,x2`는 local y,z 좌표이며 입력 순서를 보존한다.
Part·set·identity instance, `*ELASTIC`, DOF 1–6 `*BOUNDARY`와 step `*CLOAD`를 지원한다.
선형 `*STATIC`의 네 양수 field는 호환성 값이며 증분 loop를 만들지 않는다.
단일 step 결과의 storage identity는 `Step-1`, frame `0`이다.
Instance transform, include와 미지원 model keyword는 실패하며 output 요청 allowlist만 warning no-op이다.
HDF5 `/steps/Step-1/frames/0` 아래 nodal displacement/reaction과
`element/section_resultant`, `end_force_local`, `generalized_strain`,
`generalized_resultant`, `stress_s11`을 서로 다른 위치 identity로 저장한다.
| 원본 `reference/cantilever beam/` | 비교 의미 |
| --- | --- |
| `cantilever beam.inp`, `cantilever beam displacements.csv` | 11 nodes의 U1–3→UX–UZ, UR1–3→URX–URZ |
| `cantilever beam reactions.csv` | RF1–3와 RM1–3의 global nodal reaction |
| `cantilever beam elemental forces.csv` | 10 elements×2 endpoint; SF1→N, SM1→My, SM2→Mz, SM3→T |
Key는 frame·instance·source node이며 endpoint는 source element도 포함한다.
공유 절점의 여러 endpoint를 평균하지 않는다. Abaqus stress equality gate는 없다.
각 family는 reference-only `S=max(abs(reference))`를 쓴다.
`abs(reference)<=0.01*S`는 absolute error `<=0.01*S`, 그 밖은 relative error `<=5%`이며
모든 row와 `RMS(error)/S<=1%`를 함께 요구한다. `S=0`이면 FESA도 exact zero다.
Free residual·force/moment balance의 내부 정규화 한계는 `1e-10`이다.
## 구현과 수명
[EulerBeam3D](../../include/fesa/elements/euler_beam_3d.h)의 `Create`, `LocalStiffness`,
`RecoverBeam`이 local 계산을 소유한다. [구현](../../src/fesa/elements/euler_beam_3d.cpp)을 대조한다.
Domain의 semantic definition은 equation을 저장하지 않으며 AnalysisModel은 non-owning view다.
DofManager의 stable mapping→local contribution→ordered global assembly 순서로 진행한다.
[LinearStaticProcedureExecutor](../../include/fesa/analysis/linear_static_procedure.h)는
`Kff` factorization 뒤 `Ff-Kfc*dc`를 풀고 full residual `K*d-F`로 반력과 평형을 복구한다.
[BeamResultRecovery](../../src/fesa/results/beam_result_recovery.h)는 typed recovery candidate를 채운다.
Writer는 검증된 candidate만 직렬화하며 실패한 결과가 기존 최종 HDF5를 덮지 않게 한다.
## 검증 의미와 교훈
기존 beam reference 비교와 analytical·rigid-mode·endpoint 부호 검산의 통과 기록이 있다.
이 문서 정리는 현재 revision의 새 실행이나 외부 solver 재실행을 뜻하지 않는다.
Dense matrix 크기 곱 overflow를 할당 전에 검사하게 된 결함 이력을 기억한다.
빌드 실패 후 `No tests were found`는 통과가 아니며 discovery와 실행을 함께 확인한다.
변위 일치만으로 단면 응력·반력·end action 정확도를 추론하지 않는다.
외부 검증은 지정된 하나의 cantilever bundle이며 일반 단면·곡선 beam coverage를 주장하지 않는다.