67 lines
2.0 KiB
Markdown
67 lines
2.0 KiB
Markdown
# Step 6: boundary-load-step-storage
|
|
|
|
## Read First
|
|
|
|
Read these files before editing:
|
|
|
|
- `/AGENTS.md`
|
|
- `/docs/AGENT_RULES.md`
|
|
- `/docs/ADR.md`
|
|
- `/docs/ARCHITECTURE.md`
|
|
- `/docs/implementation-plans/domain-model-foundation-implementation-plan.md`
|
|
- `/include/fesa/core/Domain.hpp`
|
|
- `/include/fesa/core/ModelTypes.hpp`
|
|
- `/tests/core/domain_storage_test.cpp`
|
|
|
|
## Task
|
|
|
|
Add boundary condition, nodal load, and analysis step definition storage.
|
|
|
|
Allowed files:
|
|
|
|
- Create `/include/fesa/core/BoundaryCondition.hpp`
|
|
- Create `/include/fesa/core/LoadDefinition.hpp`
|
|
- Create `/include/fesa/core/StepDefinition.hpp`
|
|
- Modify `/include/fesa/core/Domain.hpp`
|
|
- Modify `/src/core/Domain.cpp`
|
|
- Modify `/tests/core/domain_storage_test.cpp`
|
|
|
|
Required behavior:
|
|
|
|
- A boundary condition stores node id, constrained `Dof`, and prescribed value.
|
|
- A nodal load stores node id, `Dof`, and value.
|
|
- A linear static step definition stores step id, name, boundary condition indices or ids, and load indices or ids.
|
|
- Adding BC/load for a missing node throws `std::invalid_argument`.
|
|
- Duplicate step ids throw `std::invalid_argument`.
|
|
- Stored BCs, loads, and steps are returned as const data.
|
|
|
|
## Tests To Write First
|
|
|
|
Write failing tests before production changes:
|
|
|
|
- Add and retrieve a boundary condition on an existing node.
|
|
- Add and retrieve a nodal load on an existing node.
|
|
- Missing-node BC/load throws.
|
|
- Add a linear static step referencing stored BC/load entries.
|
|
- Duplicate step id throws.
|
|
|
|
Run targeted CTest and verify RED before implementation.
|
|
|
|
## Acceptance Criteria
|
|
|
|
Run:
|
|
|
|
```powershell
|
|
cmake --build build/msvc-debug --config Debug
|
|
ctest --test-dir build/msvc-debug --output-on-failure -C Debug -R domain
|
|
python scripts/validate_workspace.py
|
|
```
|
|
|
|
Update `/phases/domain-model-foundation/index.json` step 6 with `completed`, `error`, or `blocked`.
|
|
|
|
## Do Not
|
|
|
|
- Do not apply boundary conditions to matrices.
|
|
- Do not compute reactions.
|
|
- Do not add solver state, displacements, equation ids, or sparse matrix behavior.
|