Files
2026-10-18 15:06:44 +09:00

4.5 KiB

구성과 실행 흐름

FESA는 로컬 파일을 읽어 구조·열 해석을 수행하고 결과 파일을 쓰는 단일 프로세스 솔버다. 사용자 계정 서버·원격 저장소·외부 해석 서비스가 실행 경로에 끼어 있지 않다. Abaqus 입력 표기는 의미 모델로 변환하는 경계이며 Abaqus의 요소·적분·알고리즘을 내부 구현으로 가져오는 경계가 아니다.

구성 요소와 의존 방향

영역 소유하는 것 의존 방향과 넘기지 않는 것
app 인자·출력 경로·파일 점유·객체 수명·진단 출력 입력 준비 → 해석 선택 → 완료 결과 저장을 조합한다. 물리식을 결정하지 않는다.
io/abaqus 원문·문법·모델 의미 변환 source identity를 가진 Domain을 만든다. equation·해·vendor resource를 만들지 않는다.
core source identity·ASCII 처리·공통 실패 값 다른 계층의 공통 값이다. procedure별 입력 의미를 default로 넣지 않는다.
model node·element·set·step·geometry 정의 properties·materials·loads의 의미 정의를 연결한다. 실행 중 해와 equation을 저장하지 않는다.
properties·materials·loads 단면·구성 관계·하중 의미 요소에 필요한 정의와 local 응답을 제공한다. 전역 누적과 수렴을 소유하지 않는다.
elements local 강성·내력·관성·열전도·복구용 응답 정의와 trial 값을 받아 typed 응답을 반환한다. 전역 sparse matrix와 파일을 쓰지 않는다.
fem·constraints DOF·equation·pattern·partition·지정값 적용 local 응답과 전역 방정식 사이의 mapping을 소유한다. node나 backend가 번호를 따로 발급하지 않는다.
assembly local contribution의 전역 누적 worker별 계산을 모은 뒤 정해진 순서로 reduction한다. equation 소유권을 가져오지 않는다.
analysis procedure·trial·수렴·accepted history model view·assembly·solver·recovery를 조정한다. 영속 schema와 vendor handle을 공개 state에 넣지 않는다.
math·solvers 수치 storage·분해·선형해·고유치 MKL PARDISO·FEAST·BLAS는 private adapter로 연결한다. 모델을 수정해 수치 실패를 덮지 않는다.
results 위치·좌표·단위·부호를 가진 복구 결과 검증된 typed 결과를 만든다. 비교 원본이나 HDF5 layout에 맞춘 보정을 하지 않는다.
io/hdf5 직렬화·재개방 검사·최종 파일 교체 HDF5 C handle을 격리한다. 완료되지 않은 trial을 정상 결과로 공개하지 않는다.

공개 선언은 include/fesa, 구현은 src/fesa에 있다. 공개 값과 실패 계약은 vendor-neutral이다. TBB 병렬 실행과 Windows 파일 연산도 구현 경계에 머문다. 시험 실행기와 Python 비교기는 제품 실행 흐름 바깥의 consumer다.

입력 한 건의 수명

  1. App이 입력의 lexical 경로에서 결과·로그 경로를 만들고 출력 쌍의 lease를 얻는다.
  2. 입력을 한 번 읽고 문법과 의미를 검사하여 source identity를 보존한 Domain을 만든다.
  3. 준비된 Domain에서 해석 family 하나를 선택한다. AnalysisModel은 Domain을 빌려 보는 view이므로 Domain과 주입된 solver·parallel·log adapter가 실행보다 오래 살아야 한다.
  4. DofManager가 방정식과 pattern을 만들고 local 계산 결과를 안정된 순서로 조립한다. Procedure가 해법과 trial을 조정하고 검증을 마친 candidate만 accepted state로 반영한다.
  5. 완료된 family의 typed outcome을 반환한다. App이 로그 close 성공을 확인한 뒤 해당 결과 writer를 선택한다. Writer 누락을 다른 family로 변환하여 처리하지 않는다.
  6. Writer가 별도 candidate 파일을 기록·close·재개방 검사한다. 모든 검사가 끝난 뒤 최종 경로를 교체한다. Accepted state의 commit과 최종 파일 공개는 별도 실패 경계다.

빌드와 외부 의존

직접 관리하는 MSVC solution이 주 개발 경로이고 CMake/Ninja는 같은 제품·검사 source를 사용하는 보조 경로다. 두 경로 모두 같은 solver library를 CLI와 세 검사 실행기에 연결한다. MKL은 ILP64·dynamic·Intel threading, TBB는 local 병렬 실행, HDF5는 결과 저장을 담당한다. GoogleTest는 승인된 로컬 source checkout을 사용한다. 의존성 탐색과 runtime DLL 배치는 별도 책임이므로 link 성공만으로 실행 환경이 완성되지 않는다.