Files
FESA/docs/PRD.md
T
2026-07-29 23:32:26 +09:00

9.9 KiB

PRD: FESA

1. 제품 목표

FESA는 Abaqus .inp 제한 부분집합으로 정의된 유한요소 모델을 읽고 선형 정적 구조해석을 수행한 뒤, 모델과 절점·요소 결과를 자기완결형 HDF5 파일로 저장하는 C++20/MSVC 기반 내부 검증용 솔버다.

첫 배포는 Abaqus나 Nastran의 기능 범위를 재현하는 것이 아니라 다음 기반을 검증하는 데 목적이 있다.

  • 입력에서 결과까지 이어지는 전체 해석 파이프라인
  • FEM 정식화를 추적할 수 있는 모듈 구조
  • 명시적인 입력·내부 모델·출력 계약
  • MKL, TBB 및 HDF5를 격리하는 backend 경계
  • 해석해, physics sanity 및 reference 비교가 가능한 TDD 구조

2. 대상 사용자와 배포 형태

  • 주 사용자: FESA를 개발하고 검증하는 1인 개발자
  • 배포 대상: 개발팀 내부 검증 환경
  • 산출물: 정적 해석 코어 라이브러리, CLI, 예제 입력, HDF5 schema 문서, reference 데이터 및 검증 보고서
  • 일정: 고정 기한보다 단계별 완료 조건과 품질 게이트를 우선한다.

3. Phase 1 기능 범위

3.1 해석

  • 소변형 선형 정적 해석
  • 단일 *STEP과 단일 *STATIC 하중 케이스
  • 약 10만 자유도 이하
  • 비영 지정 변위·회전을 포함한 essential boundary condition
  • 일관 단위계 사용; FESA 내부 단위 변환 없음

3.2 요소와 정식화

  • 2절점 직선 3D Isoparametric Timoshenko Beam
  • 절점당 자유도: (u_x,u_y,u_z,\theta_x,\theta_y,\theta_z)
  • 선형 형상함수와 자연좌표 (\xi\in[-1,1])
  • 선택적 감차적분:
    • 축·굽힘·비틀림 항: 2점 Gauss 적분
    • 전단 항: 1점 Gauss 적분
  • 등방성 선형 탄성:
    • 입력: (E,\nu)
    • 계산: (G=E/[2(1+\nu)])
  • 일반 단면 semantic property: (A,I_y,I_z,J,A_{sy},A_{sz})
  • 도심과 전단중심이 일치하는 주축 단면
  • (I_{yz}=0), 단면 오프셋과 워핑 없음
  • 요소축과 평행하지 않은 국부 단면 기준 방향 벡터 필수
  • 여러 재료와 여러 단면을 ELSET별로 할당

3.3 Abaqus 입력 부분집합

입력은 다음 두 조직 중 하나를 사용한다.

  • 전역 절점·요소로 구성된 flat/orphan mesh
  • 여러 Part 정의와 좌표변환이 없는 단일 Assembly·단일 Instance

계층형 입력에서는 Assembly의 Instance가 참조하는 Part만 해석에 사용한다. 사용되지 않는 Part는 파싱하지만 해석 Domain에 포함하지 않는다. 외부 entity는 (instance name, part-local label)로 식별하고 내부 dense index와 분리한다.

필수 지원 대상:

  • *NODE
  • *ELEMENT, TYPE=B31
  • *PART, *END PART
  • *ASSEMBLY, *END ASSEMBLY
  • *INSTANCE, *END INSTANCE
  • *NSET, *ELSET
    • 명시적 ID 목록
    • GENERATE
    • 기존 집합을 참조하는 중첩 집합
  • *MATERIAL, *ELASTIC
  • *BEAM GENERAL SECTION, SECTION=GENERAL
  • *TRANSVERSE SHEAR STIFFNESS(선택)
  • *BOUNDARY
  • *CLOAD
  • *STEP, *STATIC, *END STEP

계층형 입력은 좌표변환이 없는 단일 Instance만 허용한다. 여러 Assembly/Instance, Instance 평행이동·회전, instance-local mesh 수정 및 flat/계층 mesh 혼합은 파일 위치와 원인을 포함한 diagnostic으로 거부한다. Part 집합과 Assembly 집합은 scope를 구분하며, Assembly의 INSTANCE= 집합을 활성 Part의 로컬 ID에 연결한다.

파서는 Abaqus syntax를 semantic model로 변환한다. *HEADING, *PREPRINT, *RESTART, *OUTPUT은 명시적으로 지원하는 no-op directive로 처리한다. 그 밖의 지원하지 않는 keyword나 option을 묵시적으로 무시하지 않는다.

명시적 전단강성이 있으면 FESA의 (A_{sy},A_{sz})를 재료의 (G)와 일관되게 구성한다. 생략되면 (A_{sy}=A_{sz}=5A/6)과 SCF=0을 Phase 1 기본값으로 적용한다. 명시된 SCF가 0이 아니면 미지원 입력으로 거부한다.

3.4 하중과 경계조건

  • *BOUNDARY: 6개 절점 자유도의 0 또는 비영 지정값
  • *CLOAD: 절점 집중력과 집중모멘트
  • 지정값이 중복되거나 충돌하면 semantic validation 오류
  • 분포하중, 중력, 압력 및 follower load는 제외

3.5 결과

절점 결과는 전역좌표계로 출력한다.

  • 변위와 회전
  • 반력과 반력모멘트

요소 결과는 요소 국부좌표계로 출력한다.

  • 단면력 (N,V_y,V_z,T,M_y,M_z)
  • 대응 단면변형률
  • 사용자 지정 단면 회복점 ((y,z))에서 축력과 이축 굽힘에 의한 (\sigma_{xx})
  • 요소별 국부 기저 벡터
  • 계층형 입력의 Part/Instance 이름과 part-local ID

점별 전단응력과 비틀림응력은 단면 형상 정보 없이는 유일하게 복원할 수 없으므로 Phase 1에서 출력하지 않는다.

HDF5 결과는 다음 정보를 함께 갖는 자기완결형 파일이어야 한다.

  • schema와 FESA 버전
  • 원본 입력 식별 정보
  • 절점, 요소, 집합, 재료 및 단면
  • 외부 ID와 내부 dense index mapping
  • step과 solver 설정
  • 적용된 전단강성과 입력값/기본값 출처
  • 절점·요소 결과
  • 수렴·평형·solver diagnostic

4. 수치해법과 병렬화 요구사항

  • 지정 자유도 소거 후 reduced equation system을 구성한다.
  • 소거 전 평형식 (r=Ku-f)를 이용해 반력을 복원한다.
  • 전역 강성행렬은 대칭 CSR로 저장한다.
  • MKL PARDISO 대칭 양정치 직접해법을 기본 backend로 사용한다.
  • oneTBB는 요소 강성·하중·결과 계산과 조립 전처리에 사용한다.
  • 선형해법 실행 중에는 외부 TBB 작업을 중첩하지 않고 MKL 내부 병렬화를 사용한다.
  • 부동소수점 contribution의 병합 순서를 고정해 같은 설정에서 재현 가능한 결과를 낸다.

5. 검증 요구사항

5.1 검증 계층

  1. 단위 테스트
    • 형상함수 partition of unity
    • Jacobian과 Gauss 적분
    • 국부 기저 직교성
    • 좌표변환
    • 요소 강성 대칭성
  2. 정식화 테스트
    • 강체운동에서 무변형
    • 축력, 비틀림, 단축 및 이축 굽힘
    • 전단 지배 문제
    • 세장비 변화와 shear locking
  3. 통합 테스트
    • 입력 파싱부터 HDF5 출력까지 전체 파이프라인
    • 평형 (Ku-f-r)
    • 비영 지정 변위
    • 여러 재료·단면과 중첩 집합
  4. Reference 테스트
    • Abaqus/Standard 2024 B31 결과
    • 현재 캔틸레버의 변위와 반력
    • 요소 내력 및 요소 절점 단면 도심 응력 비교 계약의 synthetic CSV 검증

5.2 골든 데이터

Abaqus는 CI나 Harness에서 자동 실행하지 않는다. 별도 Abaqus 2024 환경에서 수동으로 생성한 입력과 CSV 결과를 reference/<model-id>/에 보관하며 per-model metadata 파일은 요구하지 않는다.

비교 실행은 물리량과 해당 CSV 경로를 명시한다. 요청한 파일이 없으면 실패하고, 요청하지 않은 물리량은 통과로 보고하지 않는다. 현재 reference/cantilever beam 샘플은 변위와 반력만 비교한다. 요소 내력과 응력 CSV가 추가되기 전까지 해당 reader와 비교 kernel은 synthetic CSV로 검증한다.

CSV 식별 및 값 열:

  • 변위: Part Instance Name, Node Label, U-U1..U-U3, UR-UR1..UR-UR3
  • 반력: Part Instance Name, Node Label, RF-RF1..RF-RF3, RM-RM1..RM-RM3
  • 요소 내력: Part Instance Name, Element Label, Node Label, SF-SF1..SF-SF3, SM-SM1..SM-SM3
  • 요소 응력: Part Instance Name, Element Label, Node Label, Sxx

단일 Instance에서는 Part Instance Name 열을 생략할 수 있다. 내력은 SF1,SF2,SF3,SM1,SM2,SM3을 각각 (N,V_y,V_z,T,M_y,M_z)로 비교한다. 응력은 요소 절점의 단면 도심값 (\sigma_{xx}=N/A)를 비교한다.

5.3 허용오차

  • 단위·정식화 테스트는 정규화된 엄격한 tolerance를 사용한다.
  • Abaqus 비교 기본 상대오차는 (10^{-5})로 한다.
  • 영에 가까운 결과는 특성 길이, 하중 및 응력에 기반한 절대오차를 함께 사용한다.
  • formulation 또는 output 위치 차이로 별도 tolerance가 필요하면 comparison test 설정과 docs/VALIDATION.md에 근거를 기록한다.

6. 개발 워크플로우

각 기능은 다음 게이트를 순서대로 통과한다.

  1. 요구조건과 완료 기준 정의
  2. 책, 논문 및 공식 문서 조사
  3. FEM 정식화, 가정, 좌표계, 부호 및 적분 규칙 작성
  4. 입력·semantic model·HDF5 데이터 계약 정의
  5. 실패하는 테스트와 개발 솔버/Abaqus 모델 작성
  6. 테스트를 통과하는 최소 코드 구현
  7. 현재 Abaqus 변위·반력 비교와 요소 내력·응력 비교 루틴 검증
  8. tolerance 및 physics sanity 통과
  9. 내부 배포

파이프라인 수직 슬라이스를 먼저 완성하지만, 이는 수치적으로 자격이 검증된 배포를 의미하지 않는다. 요소 정확도와 Abaqus 비교 게이트까지 통과해야 Phase 1이 완료된다.

7. 제외 범위

  • Truss, bar, plane, solid, shell 및 다른 Beam 요소
  • 여러 step과 하중 이력
  • 여러 Assembly/Instance, Instance 평행이동·회전 및 instance-local mesh 수정
  • 분포하중, 압력, 중력 및 체적력
  • MPC, RBE2, RBE3, penalty 및 Lagrange multiplier constraint
  • 기하·재료 비선형, 접촉, 좌굴, 모달, 동적 및 열전달
  • 소성, 직교이방성 및 사용자 재료
  • 단면 오프셋, 곱관성모멘트, 전단중심 편심 및 워핑
  • 점별 전단·비틀림 응력
  • 단위 변환
  • 외부 고객용 installer와 API 호환성 보장

8. 내부 배포 수용 조건

  • MSVC Debug와 Release 구성에서 새 경고 없이 빌드
  • 모든 GoogleTest/CTest와 Harness 검증 통과
  • 테스트 0개 수집이 아님을 확인
  • 전체 입력-해석-출력 통합 테스트 통과
  • physics sanity와 평형 잔차 기준 통과
  • 현재 Abaqus 2024 변위·반력 골든 결과의 tolerance 통과
  • 요소 내력·도심 응력 CSV adapter와 비교 kernel의 synthetic 검증 통과
  • HDF5 schema, 입력 부분집합, 정식화 및 검증 보고서 제공