49 lines
4.5 KiB
Markdown
49 lines
4.5 KiB
Markdown
# 구성과 실행 흐름
|
|
|
|
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 성공만으로 실행 환경이 완성되지 않는다.
|