Files
FESADev/docs/operations.md
T
2026-10-04 03:32:59 +09:00

123 lines
6.3 KiB
Markdown

# 개발 환경과 실행 방법
## 최초 준비
Windows에서 Visual Studio의 Desktop development with C++ 워크로드, CMake 3.25 이상,
Ninja, Intel oneAPI MKL·TBB, HDF5 C package와 승인된 GoogleTest 로컬 checkout을 준비한다.
Runner는 Python 3.10 이상, `tomllib`을 사용하는 Python 검사에는 3.11 이상이 필요하다.
자동 dependency download나 특정 개인 설치 경로를 전제하지 않는다.
저장소 루트를 작업 디렉터리로 하는 **MSVC x64 Developer PowerShell**을 연다.
일반 PowerShell에서 아래 configure를 먼저 실행하면 compiler와 runtime 환경이 빠질 수 있다.
설치 경로가 환경변수에 없다면 아래 질문에 실제 로컬 경로를 입력한다.
```powershell
$env:FESA_GTEST_SOURCE_DIR = Read-Host 'GoogleTest source checkout 경로'
$env:MKL_DIR = Read-Host 'MKLConfig.cmake가 있는 디렉터리'
$env:TBB_DIR = Read-Host 'TBBConfig.cmake가 있는 디렉터리'
$env:HDF5_DIR = Read-Host 'hdf5-config.cmake 또는 HDF5Config.cmake가 있는 디렉터리'
Get-Command cl, cmake, ctest, ninja, python
Test-Path -LiteralPath (Join-Path $env:FESA_GTEST_SOURCE_DIR 'CMakeLists.txt')
```
`FESA_GTEST_SOURCE_DIR`는 source root, 나머지 세 변수는 CMake package config directory다.
네 값은 현재 프로세스·개인 설정에 두며 저장소의 절대 경로로 고정하지 않는다.
`Test-Path`가 false이거나 명령이 없으면 먼저 준비 환경을 수정한다.
## C++ 구성·빌드·검사
다음 순서로 실행한다. Configure 전에 dependency 경로와 x64 compiler가 준비되어야 하며,
build 전에 configure가 성공해야 한다. 각 명령이 실패하면 다음 단계로 진행하지 않는다.
```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
```
Build tree는 `.harness/build-ninja-msvc-debug`다. CTest discovery는 실제 등록된 검사를
확인하며 0개 검사는 검증 성공이 아니다. 관련 검사만 실행할 때는 같은 preset에 `-R`로
실제 CTest 이름을 지정한다. 솔버 기능 완료 시 전체 검사와 필수 수치/reference 비교를
수행하고, 문서만 수정할 때는 실행하지 않는다.
## 설정된 실행기로 검증
개인 `.harness/config.json`이 이미 있으면 보존하고 실제 선택된 backend를 확인한다.
동일 preset을 사용하려면 다음 설정을 사용한다. 기존 설정을 무조건 덮어쓰지 않는다.
```json
{
"version": 1,
"projectType": "cmake",
"cmake": {
"sourceDir": ".",
"binaryDir": ".harness/build-ninja-msvc-debug",
"configurePreset": "windows-msvc-ninja-debug",
"buildPreset": "windows-msvc-ninja-debug",
"testPreset": "windows-msvc-ninja-debug"
}
}
```
```powershell
python scripts/execute.py
```
실행기는 명령을 한 번 구성·실행하고 compiler metadata와 CTest discovery를 확인한다.
전체 deadline은 CLI 시작부터 1,800초이며 각 명령 제한과 남은 시간 중 짧은 값을 적용한다.
Phase 인자·`--push`·`--approve-danger-full-access`를 받지 않는다. 자동 Git·retry·외부
solver 실행이나 필요한 추가 reference 비교의 추론은 하지 않는다.
최근 전체617개 회귀는 개별 검사 시간 합계가 약6,859초였으므로 기본1,800초 runner로
전체 완료를 기대하면 안 된다. 긴 전체 회귀는 위 MSVC 환경의 명시 CMake/CTest preset
명령으로 실행하고 실제 native 종료·전체 verdict를 보존한다. Timeout이나 중단된 로그를
부분 성공으로 계산하거나 문서 정리를 이유로 runner 제한·검사를 임의 변경하지 않는다.
성공은 exit 0, config/toolchain/backend/timeout 실패는 exit 1이다. 잘못된 CLI 인자나
자동 감지에서 project metadata가 없는 경우는 exit 2다. 원래 backend exit와 runner exit를
구분해 기록하고 출력 tail에 포함된 stage·argv·cwd에서 실패 경계를 찾는다.
## Python 검사와 비교 도구
Runner 또는 Python 비교기를 변경하면 관련 Python 검사를 별도로 실행한다.
전체 Python 검사 명령은 다음과 같으며 CTest 실행에 포함되지 않는다.
```powershell
uv run --with pytest python -B -m pytest -v -rs
```
HHT 비교 도구에는 Python 3.11 이상과 `numpy`·`h5py`가 필요하다. 현재 도구는 지정된
`shellNL-dyn-meshfine`의 729개 절점 중 선택한 9개 절점, 101 frames의 U/UR 비교용이다.
다음 명령은 **이미 생성된** HDF5와 원본 변위 CSV를 비교하며 솔버나 Abaqus를 실행하지 않는다.
다른 모델의 범용 비교기로 사용하지 않는다. Report의 상위 디렉터리는 도구가 생성한다.
```powershell
$inputPath = Read-Host '비교할 원본 .inp 경로'
$referencePath = Read-Host '원본 변위 CSV 경로'
$resultPath = Read-Host 'FESA HDF5 경로'
$reportPath = Read-Host '비교 보고서 JSON 경로'
uv run --with numpy --with h5py python scripts/verification/compare_hht_dynamic.py --input $inputPath --reference $referencePath --results $resultPath --report $reportPath
```
Reference 원본을 생성·복원하거나 다른 곳으로 옮기는 명령은 검증 절차에 포함하지 않는다.
원본이 없으면 필요한 경로와 미실행 이유를 보고한다. 외부 solver와 라이선스 사용은
별도 명시된 권한 아래 수행한다.
## 모델 실행과 배포 상태
성공한 Debug build 뒤 생성된 CLI를 실행한다. 모델 경로는 실제 승인된 입력을 지정한다.
```powershell
$modelPath = Read-Host '해석할 .inp 경로'
& ./.harness/build-ninja-msvc-debug/src/fesa/fesa.exe $modelPath
```
입력 옆에 `<stem>_results.h5`와 `<stem>_log.txt`를 생성하므로 해당 디렉터리에 쓸 수
있어야 한다. 실행 실패 때 이전 HDF5가 남아 있을 수 있으므로 파일 존재만으로 이번 실행의
성공을 판단하지 않는다. Exit와 진단, 실제 저장된 source identity를 함께 확인한다.
현재 별도의 데이터베이스 초기화·계정 생성·서비스 배포 명령은 없다. 외부 사용자 배포의
형식, 설치 방식, dependency 재배포 조건과 지원 범위는 아직 정하지 않았다. 로컬 실행
성공을 설치·배포 검증으로 간주하지 않는다.