add uncommitted files

This commit is contained in:
KOKO\Mimi
2026-07-29 23:32:26 +09:00
parent fb0f8f39a0
commit f5379472ce
80 changed files with 7461 additions and 1 deletions
+26
View File
@@ -0,0 +1,26 @@
{
"project": "FESA",
"phase": "results-and-pipeline",
"steps": [
{
"step": 0,
"name": "result-database",
"status": "pending"
},
{
"step": 1,
"name": "minimal-hdf5-schema",
"status": "pending"
},
{
"step": 2,
"name": "linear-static-analysis",
"status": "pending"
},
{
"step": 3,
"name": "cli-pipeline-integration",
"status": "pending"
}
]
}
+60
View File
@@ -0,0 +1,60 @@
# Step 0: Result Database
## 읽어야 할 파일
- `/AGENTS.md`
- `/docs/PRD.md`
- `/docs/ARCHITECTURE.md`
- `/docs/ADR.md`
- `/include/fesa/model/domain.hpp`
- `/include/fesa/core/diagnostic.hpp`
## 작업
HDF5와 독립적인 최소 Phase 1 result semantic model을 만든다.
```cpp
struct NodalFrame final {
std::vector<NodeId> node_ids;
std::vector<std::array<double, 6>> displacement;
std::vector<std::array<double, 6>> reaction;
};
struct ResultFrame final {
double step_time;
NodalFrame nodal;
std::vector<Diagnostic> diagnostics;
};
struct ResultStep final {
std::string name;
std::vector<ResultFrame> frames;
};
struct ResultDatabase final {
std::string schema_version;
std::vector<ResultStep> steps;
};
```
- size mismatch, duplicate node, nonfinite field, duplicate step/frame을 실패 테스트로
먼저 작성한다.
- 이 step에는 element result를 미리 만들지 않는다.
## Acceptance Criteria
```powershell
cmake --build --preset windows-debug
ctest --preset windows-debug -R "ResultDatabase|NodalFrame" --output-on-failure
ctest --preset windows-debug --output-on-failure
```
## 검증 절차
1. 유효/무효 result model 테스트를 먼저 실행한다.
2. 불변 읽기 계약에 필요한 최소 저장만 구현한다.
3. HDF5 include가 없는지 확인한다.
4. 전체 테스트와 index를 갱신한다.
## 금지사항
- HDF5 handle을 result model에 넣지 마라. 이유: semantic/adaptor 경계를 깨뜨린다.
- velocity, acceleration, temperature를 추가하지 마라. 이유: Phase 1에서 사용하지 않는다.
- 빈 element output hierarchy를 만들지 마라. 이유: 필요한 phase에서만 실체화한다.
+56
View File
@@ -0,0 +1,56 @@
# Step 1: Minimal HDF5 Schema
## 읽어야 할 파일
- `/AGENTS.md`
- `/docs/PRD.md`
- `/docs/ARCHITECTURE.md`
- `/docs/ADR.md`
- `/include/fesa/results/result_database.hpp`
- `/include/fesa/model/domain.hpp`
- `/cmake/FesaDependencies.cmake`
## 작업
먼저 `docs/HDF5_SCHEMA.md`에 schema `1.0.0`의 최소 group/dataset/attribute 계약을
작성하고 HDF5 writer/reader round trip을 구현한다.
```cpp
struct Hdf5ReadResult final {
std::optional<ResultDatabase> database;
std::vector<Diagnostic> diagnostics;
};
[[nodiscard]] std::vector<Diagnostic> write_hdf5(
const std::filesystem::path&,
const Domain&,
const ResultDatabase&);
[[nodiscard]] Hdf5ReadResult read_hdf5_results(
const std::filesystem::path&);
```
- schema/version, node origin `(part,instance,local label)`, dense ID map, 좌표,
connectivity, shear property source, nodal displacement/reaction을 round trip한다.
- 먼저 public reader로 모든 값을 재확인하는 실패 테스트를 작성한다.
- 모든 `hid_t`는 move-only RAII wrapper로 관리한다.
## Acceptance Criteria
```powershell
cmake --build --preset windows-debug
ctest --preset windows-debug -R "Hdf5|ResultRoundTrip" --output-on-failure
h5ls -r .\out\build\windows-debug\Testing\Temporary\fesa-round-trip.h5
ctest --preset windows-debug --output-on-failure
```
## 검증 절차
1. schema 문서를 writer보다 먼저 작성한다.
2. round-trip test 실패를 확인한 뒤 최소 adapter를 구현한다.
3. HDF5 도구와 public reader 결과를 모두 확인한다.
4. 전체 테스트와 index를 갱신한다.
## 금지사항
- global HDF5 handle을 만들지 마라. 이유: 수명과 오류 경계를 훼손한다.
- reference CSV 기능을 추가하지 마라. 이유: validation phase 책임이다.
- schema에 빈 미래 분석 결과를 넣지 마라. 이유: 현재 계약만 저장한다.
+56
View File
@@ -0,0 +1,56 @@
# Step 2: Linear Static Analysis
## 읽어야 할 파일
- `/AGENTS.md`
- `/docs/PRD.md`
- `/docs/ARCHITECTURE.md`
- `/docs/ADR.md`
- `/include/fesa/model/domain.hpp`
- `/include/fesa/fem/dof_manager.hpp`
- `/include/fesa/assembly/`
- `/include/fesa/constraints/`
- `/include/fesa/solvers/linear/`
- `/include/fesa/results/result_database.hpp`
## 작업
기존 production 모듈을 조율하는 `LinearStaticAnalysis` lifecycle을 구현한다.
```cpp
struct AnalysisRunResult final {
bool succeeded;
std::optional<ResultDatabase> results;
std::vector<Diagnostic> diagnostics;
};
class LinearStaticAnalysis final {
public:
[[nodiscard]] AnalysisRunResult run(const Domain&) const;
};
```
- parser나 HDF5를 호출하지 않고 이미 검증된 Domain을 입력받는다.
- DofManager, pattern/assembly, BC elimination, PARDISO, full reconstruction,
reaction recovery, nodal ResultDatabase 순서로 실행한다.
- hand-check 가능한 한 요소 Domain으로 변위, 반력, residual을 먼저 테스트한다.
## Acceptance Criteria
```powershell
cmake --build --preset windows-debug
ctest --preset windows-debug -R "LinearStaticAnalysis|StaticEquilibrium" --output-on-failure
ctest --preset windows-debug --output-on-failure
```
## 검증 절차
1. analysis test가 연결 누락으로 실패하는 것을 확인한다.
2. orchestration만 구현하고 수치 kernel을 복제하지 않는다.
3. \(Ku-f-r\) 평형과 finite result를 검사한다.
4. 전체 테스트와 index를 갱신한다.
## 금지사항
- CLI option parsing을 analysis에 넣지 마라. 이유: application 경계를 깨뜨린다.
- nonlinear loop나 여러 step을 추가하지 마라. 이유: Phase 1 범위 밖이다.
- test-only solver 경로를 만들지 마라. 이유: production pipeline을 검증해야 한다.
+60
View File
@@ -0,0 +1,60 @@
# Step 3: CLI Pipeline Integration
## 읽어야 할 파일
- `/AGENTS.md`
- `/docs/PRD.md`
- `/docs/ARCHITECTURE.md`
- `/docs/ADR.md`
- `/include/fesa/io/abaqus/parser.hpp`
- `/include/fesa/io/abaqus/semantic_mapper.hpp`
- `/include/fesa/analysis/linear_static_analysis.hpp`
- `/include/fesa/io/hdf5/writer.hpp`
- `/src/fesa/cli/main.cpp`
## 작업
flat minimal fixture를 입력부터 HDF5까지 실행하는 public application 경로를 연결한다.
```cpp
struct AnalysisRequest final {
std::filesystem::path input_path;
std::filesystem::path output_path;
};
[[nodiscard]] AnalysisRunResult run_solver(const AnalysisRequest&);
```
CLI 계약:
```text
fesa solve <model.inp> --output <results.h5>
fesa --version
```
- 먼저 `MinimalCantileverPipeline` 통합 테스트를 작성한다.
- test는 `run_solver` 또는 CLI와 public HDF5 reader만 사용한다.
- 성공 파일의 ID, finite displacement, reaction/equilibrium diagnostic과 schema path,
실패 입력의 nonzero exit 및 source diagnostic을 검증한다.
## Acceptance Criteria
```powershell
cmake --build --preset windows-debug
ctest --preset windows-debug -R MinimalCantileverPipeline --output-on-failure
.\out\build\windows-debug\Debug\fesa.exe solve tests\fixtures\abaqus\minimal_cantilever.inp --output out\minimal-cantilever.h5
h5ls -r out\minimal-cantilever.h5
ctest --preset windows-debug --output-on-failure
```
## 검증 절차
1. end-to-end test 실패를 확인한다.
2. parser→Domain→analysis→writer만 조율한다.
3. command와 public reader로 산출물을 재검증한다.
4. 이 milestone을 수치 자격 완료로 표시하지 말고 index를 갱신한다.
## 금지사항
- hierarchical sample의 전체 keyword를 우회 처리하지 마라. 이유: 다음 input phase다.
- fake stiffness/result를 쓰지 마라. 이유: 실제 pipeline 검증을 무효화한다.
- CLI에 solver 내부 구현을 넣지 마라. 이유: core/library 재사용성을 훼손한다.