118 lines
5.9 KiB
Markdown
118 lines
5.9 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 비교의 추론은 하지 않는다.
|
|
|
|
성공은 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 재배포 조건과 지원 범위는 아직 정하지 않았다. 로컬 실행
|
|
성공을 설치·배포 검증으로 간주하지 않는다.
|