add uncommitted files
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
# Step 0: Beam Element-end Recovery
|
||||
|
||||
## 읽어야 할 파일
|
||||
|
||||
- `/AGENTS.md`
|
||||
- `/docs/PRD.md`
|
||||
- `/docs/ARCHITECTURE.md`
|
||||
- `/docs/ADR.md`
|
||||
- `/docs/formulation/timoshenko-beam-3d.md`
|
||||
- `/include/fesa/elements/beam/beam3d2.hpp`
|
||||
- `/include/fesa/model/beam_section.hpp`
|
||||
|
||||
## 작업
|
||||
|
||||
요소 양 끝 절점에서 section strain/resultant, 도심 응력과 선택 회복점 축응력을
|
||||
계산한다.
|
||||
|
||||
```cpp
|
||||
struct BeamSectionResult final {
|
||||
double xi;
|
||||
NodeId end_node;
|
||||
std::array<double, 6> section_strain;
|
||||
std::array<double, 6> section_force;
|
||||
double centroid_sigma_xx;
|
||||
std::vector<double> sigma_xx;
|
||||
};
|
||||
[[nodiscard]] std::vector<BeamSectionResult> recover_beam3d2(
|
||||
const Beam3D2Input&,
|
||||
std::span<const double, 12> element_displacement,
|
||||
std::span<const std::array<double, 2>> recovery_points);
|
||||
```
|
||||
|
||||
- component 순서는 \(N,V_y,V_z,T,M_y,M_z\)다.
|
||||
- `centroid_sigma_xx=N/A`; 회복점은 axial+bending \(\sigma_{xx}\)만 계산한다.
|
||||
- 순수 축/비틀림/각 축 굽힘/이축 굽힘, 양 끝 부호, 회복점 순서를 먼저 테스트한다.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
```powershell
|
||||
cmake --build --preset windows-debug
|
||||
ctest --preset windows-debug -R "BeamRecovery|CentroidStress|SectionForce" --output-on-failure
|
||||
ctest --preset windows-debug --output-on-failure
|
||||
```
|
||||
|
||||
## 검증 절차
|
||||
|
||||
1. hand-calculated recovery test 실패를 확인한다.
|
||||
2. stiffness와 같은 frame/부호 convention을 재사용한다.
|
||||
3. 도심에서 bending contribution이 0인지 확인한다.
|
||||
4. 전체 테스트와 index를 갱신한다.
|
||||
|
||||
## 금지사항
|
||||
|
||||
- point shear/torsional stress를 출력하지 마라. 이유: 단면 형상 정보가 부족하다.
|
||||
- Abaqus column 이름을 element kernel에 넣지 마라. 이유: validation adapter 책임이다.
|
||||
- 절점별 내력 부호를 임의 절댓값으로 바꾸지 마라. 이유: 평형 검증을 깨뜨린다.
|
||||
Reference in New Issue
Block a user