docs: align feature guidance with adopted Refactor structure

This commit is contained in:
KOKO\Mimi
2026-10-18 03:35:15 +09:00
parent 7562d5a303
commit 0635cec53d
19 changed files with 224 additions and 29 deletions
+51 -18
View File
@@ -1,6 +1,6 @@
# 솔버 공통 구조와 계약
FESA는 C++17 이상·Windows MSVC x64 Debug·CMake/CTest를 기준으로 하는 개인 연구용 솔버다. 승인된 Abaqus 입력 subset을 독립 모델로 해석하고 HDF5를 쓴다. Source spelling의 수용은 Abaqus 내부 요소·적분·알고리즘과의 동등성을 뜻하지 않는다. 외부 배포 형태·지원 환경·dependency 재배포 조건은 아직 정해지지 않았다.
FESA는 C++17 이상·Windows MSVC x64 Debug·직접 MSBuild와 CMake/CTest를 기준으로 하는 개인 연구용 솔버다. 승인된 Abaqus 입력 subset을 독립 모델로 해석하고 HDF5를 쓴다. Source spelling의 수용은 Abaqus 내부 요소·적분·알고리즘과의 동등성을 뜻하지 않는다. 외부 배포 형태·지원 환경·dependency 재배포 조건은 아직 정해지지 않았다.
## 책임과 수명
@@ -49,23 +49,56 @@ Configure/build/test의 compiler·구성·build tree를 함께 맞추고 discove
## 빌드와 직접 검사
MSVC x64 Developer PowerShell에서 저장소 root를 작업 디렉터리로 사용한다. CMake3.25 이상,
Ninja, 로컬 GoogleTest source checkout과 MKL·TBB·HDF5 개발 package가 필요하다.
`FESA_GTEST_SOURCE_DIR`은 GoogleTest의 CMakeLists.txt가 있는 source root이고,
`MKL_DIR`·`TBB_DIR`·`HDF5_DIR`은 각각 package config 파일이 있는 디렉터리다.
환경 변수에 로컬 경로를 지정한 뒤 [CMake presets](../../CMakePresets.json)의 직접 명령을 사용한다.
직접 관리하는 [FESA.sln](../../FESA.sln)과 [msvc 지침](../../msvc/AGENTS.md)이 주 개발 빌드다.
VS x64 개발 환경에서 저장소 root를 작업 디렉터리로 사용한다. v145 toolset과 로컬
GoogleTest source checkout, MKL ILP64/dynamic/Intel threading·TBB·HDF5·OpenMP가 필요하다.
`FESA_GTEST_SOURCE_DIR`, `FESA_MKL_ROOT`, `FESA_TBB_ROOT`, `FESA_HDF5_ROOT`,
`FESA_OMP_ROOT`에 설치 root를 지정하거나 ignored `msvc/Fesa.Local.props`로 주입한다.
개인 설치 경로를 추적 파일에 고정하거나 dependency를 자동 다운로드하지 않는다.
```powershell
cmake --preset windows-msvc-ninja-debug
cmake --build --preset windows-msvc-ninja-debug
ctest --preset windows-msvc-ninja-debug --show-only=json-v1
ctest --preset windows-msvc-ninja-debug --output-on-failure
```bat
MSBuild FESA.sln /m:2 /p:Configuration=Debug /p:Platform=x64
.build\native\Debug\tests\fesa_unit_tests.exe
.build\native\Debug\tests\fesa_integration_tests.exe
.build\native\Debug\tests\fesa_reference_tests.exe
```
Debug build tree는 `build/windows-msvc-ninja-debug`, 별도 Release는
`build/windows-msvc-ninja-release`이며 configure/build preset 이름도 각각 대응한다.
Debug와 Release의 binary·test inventory·evidence를 섞지 않는다. CTest discovery와 실제
종료 코드를 함께 확인한다. Python 검사가 필요하면 해당 suite를 별도로 실행하며 CTest에
포함됐다고 추론하지 않는다. [CMake](../../CMakeLists.txt)의 `fesa_docs` target은 Doxygen을
찾았을 때만 생성되므로 선택적 API 문서 산출물이다. CLI executable은 각 build tree의
`src/fesa/fesa.exe`이며 dependency runtime DLL을 함께 준비한다.
Native CLI는 `.build/native/Debug/src/fesa/fesa.exe`이며 테스트 executable은
`.build/native/Debug/tests/`에 있다. Release는 같은 구조의 `Release` 디렉터리다.
직접 MSBuild에 CMake·Ninja·Doxygen을 선행 조건으로 추가하지 않는다.
보조 경로는 CMake3.25 이상·Ninja·동일 MSVC 환경을 사용한다. `MKL_DIR`·`TBB_DIR`·
`HDF5_DIR`은 각각 config package 디렉터리다. 한국어 MSVC의 include 추적을 위해
configure/build 모두 code page 65001을 사용한다.
```bat
chcp 65001
cmake --preset windows-msvc-ninja-debug
cmake --build --preset windows-msvc-ninja-debug --parallel 2
ctest --preset windows-msvc-ninja-debug --show-only=json-v1
ctest --preset windows-msvc-ninja-debug --output-on-failure -j 1
python -m pytest tests -q
```
[Presets](../../CMakePresets.json)의 Debug tree는 `.build/cmake-debug`, Release는
`.build/cmake-release`다. CMake CLI도 각 tree의 `src/fesa/fesa.exe`에 있다.
Debug/Release의 binary·DLL·검사 목록·실행 근거를 섞지 않는다. AVX2는 전용 Hex8
source에만 적용하며 CRT·정밀도·source·link·runtime DLL과 검사 identity를 두 경로에서 대조한다.
`fesa_docs`는 Doxygen을 찾았을 때만 생기는 선택적 target이다.
현재 통합 검증은 세 C++ executable의 전체 등록 검사와 별도 Python suite를 대상으로 한다.
과거 Refactor의 정적 선별 실행을 이번 전체 실행으로 승계하지 않는다. Native/CTest는
서로 다른 실행 전용 TMP/TEMP와 raw 출력 경로를 사용해 직렬 실행한다. 상속된 필터·sharding을
제거하고 실제 identity·수·exit·XML/log를 discovery와 대조한다. Skip·0건·자료 누락은 PASS가 아니다.
모델은 hash가 확인된 새 작업 복사본에서만 실행한다. `reference/temp`는 검증에 사용하지 않는다.
현재 진행 결과와 미완료 비교는 [병합 현황](../cpp-object-oriented-modular-refactoring/README.md)에 기록한다.
## 공통 procedure와 결과 경계
[PrepareAnalysisInput/CreateAnalysisProcedure](../../include/fesa/analysis/prepared_analysis.h)는
한 번 mapping한 Domain에서 한 family를 선택한다. `AnalysisProcedure::Execute`는
[typed outcome](../../include/fesa/analysis/prepared_analysis_outcome.h)을 반환하며 파일을 열지 않는다.
Domain과 주입된 solver·parallel·log adapter는 실행 동안 살아 있고 이동하지 않아야 한다.
App이 로그 close 성공을 확인한 뒤 `FinalizePreparedAnalysisResult`가
[WritePreparedAnalysisResult](../../include/fesa/results/prepared_results_writer.h)로 연결한다.
필요한 writer 부재는 output failure이며 다른 결과 family로 위장하지 않는다.