3.4 KiB
3.4 KiB
Domain Runtime Storage Implementation Plan
Objective
Make Domain store runtime model objects as its canonical model representation instead of persisting parser-style definition DTOs.
This follows the approved direction:
Abaqus .inp parser
-> temporary parsed or semantic records
-> factory / DomainBuilder
-> Domain owns runtime objects
The parser and factory are not implemented in this phase. Definition DTOs may remain as temporary parser/factory-local records, but Domain must not use them as persistent storage.
Phase Overview
-
runtime-storage-contract- Record the migration contract and clarify which model objects are canonical in
Domain. - Keep parser/factory work out of scope.
- Record the migration contract and clarify which model objects are canonical in
-
element-material-property-runtime-storage- Store elements as
fesa::element::Element. - Store materials as
fesa::material::Material. - Store shell properties as
fesa::property::ShellProperty. - Move
ElementTypetoModelTypes.hppso runtime element interfaces do not depend onElementDefinition.
- Store elements as
-
load-boundary-runtime-storage- Store loads as
fesa::load::Load. - Store boundary conditions as
fesa::boundary::BoundaryCondition. - Validate runtime
NodalLoadandSinglePointConstraintnode references during insertion.
- Store loads as
-
step-and-set-runtime-references- Validate element sets against runtime elements.
- Validate step load and boundary indices against runtime containers.
- Keep
LinearStaticStepDefinitionas a step configuration record until a dedicated runtime step object is designed.
-
legacy-definition-extraction- Remove
core::*DefinitionDTOs fromDomainincludes, fields, and public API. - Keep focused DTO tests only for parser/factory-local record compatibility.
- Remove
-
validation-report-handoff- Run harness and CMake/CTest validation.
- Update project handoff documents with concrete evidence.
Canonical Domain Storage
Domain stores:
fesa::core::Nodevalues;std::unique_ptr<fesa::element::Element>;std::unique_ptr<fesa::material::Material>;fesa::property::ShellPropertyvalues;std::unique_ptr<fesa::load::Load>;std::unique_ptr<fesa::boundary::BoundaryCondition>;- node sets and element sets by id;
LinearStaticStepDefinitionas a temporary step configuration record.
Domain must not store:
ElementDefinition;LinearElasticMaterialDefinition;ShellPropertyDefinition;NodalLoadDefinition;fesa::core::BoundaryCondition.
Non-Goals
- No Abaqus parser implementation.
- No factory/registry implementation.
- No MITC4 stiffness, mass, residual, stress, or tangent implementation.
- No equation numbering or solver state in
Domain. - No HDF5, MKL, TBB, reference artifact, tolerance, or formulation changes.
Tests
Primary C++ tests:
/tests/core/domain_storage_test.cpp/tests/core/domain_model_object_test.cpp/tests/core/model_types_test.cpp/tests/element/element_base_test.cpp/tests/element/mitc4_element_model_test.cpp/tests/material/material_base_test.cpp/tests/property/shell_property_test.cpp/tests/load/load_base_test.cpp/tests/boundary/boundary_base_test.cpp
Required validation:
ctest --test-dir build/msvc-debug --output-on-failure -C Debug -R "domain|model-object"
python -m unittest discover -s scripts -p "test_*.py"
python scripts/validate_workspace.py
git diff --check