3.2 KiB
Property Model Foundation Implementation Plan
Objective
Introduce a runtime Property base class for element property and section objects, then make ShellProperty and Domain use that base class consistently.
This phase keeps property objects as model data only. It does not implement shell section stiffness, constitutive matrices, assembly, solver logic, HDF5 output, or reference comparison.
Phase Overview
-
property-base-contract- Record the runtime property model contract and exclusions.
-
property-base-interface- Add
PropertyKindand abstractProperty. - Add unit tests for polymorphic use and virtual deletion.
- Add
-
shell-property-polymorphism- Make
ShellPropertyderive fromProperty. - Preserve id, material id, thickness, and positive-thickness validation.
- Make
-
domain-property-ownership- Change
Domainproperty storage tostd::unique_ptr<Property>. - Validate duplicate property ids and shell-property material references.
- Validate element property references against runtime property storage.
- Change
-
validation-report-handoff- Run targeted CTest, harness self-tests, workspace validation, and whitespace checks.
- Update handoff documents.
Runtime Property Contract
Property represents element property and section data that is owned by Domain and referenced by elements through PropertyId.
Required interface:
namespace fesa::property {
enum class PropertyKind {
Shell
};
class Property {
public:
virtual ~Property() = default;
virtual PropertyId id() const noexcept = 0;
virtual PropertyKind kind() const noexcept = 0;
};
} // namespace fesa::property
ShellProperty:
- derives from
Property; - returns
PropertyKind::Shell; - stores
PropertyId,MaterialId, and thickness; - rejects non-positive thickness;
- does not compute shell stiffness in this phase.
Domain Contract
Domain stores runtime property objects by ownership:
std::unordered_map<PropertyId, std::unique_ptr<fesa::property::Property>>
Domain validates:
- null property pointer rejection;
- duplicate property id rejection;
- missing material id for
ShellProperty; - missing property id for elements.
Hdf5ResultWriter Constraint
The adjacent Hdf5ResultWriter work requested for this slice is limited to a skeleton class only. It may expose construction and basic path access, but it must not link HDF5, create files, define result datasets, write metadata, or claim HDF5 output support.
Non-Goals
- No MITC4 element formulation.
- No shell section stiffness.
- No material constitutive behavior.
- No DofManager work.
- No assembly, solver, sparse matrix, or reaction recovery.
- No HDF5 file writing or result schema implementation.
- No parser/factory implementation.
Tests
Primary C++ tests:
/tests/property/property_base_test.cpp/tests/property/shell_property_test.cpp/tests/core/domain_storage_test.cpp/tests/core/domain_model_object_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