128 lines
8.5 KiB
Markdown
128 lines
8.5 KiB
Markdown
# 3D Euler-Bernoulli Beam Kernel Implementation Plan
|
|
|
|
## Metadata
|
|
- feature_id: euler-beam-3d
|
|
- source_requirement: docs/requirements/euler-beam-3d.md
|
|
- source_research: docs/research/euler-beam-3d-research.md
|
|
- source_formulation: docs/formulations/euler-beam-3d-formulation.md
|
|
- source_numerical_review: docs/numerical-reviews/euler-beam-3d-review.md
|
|
- source_io_definition: docs/io-definitions/euler-beam-3d-io.md
|
|
- source_reference_models: docs/reference-models/euler-beam-3d-reference-models.md
|
|
- status: ready-for-implementation
|
|
- owner_agent: implementation-planning-agent
|
|
- date: 2026-06-12
|
|
|
|
## Readiness Check
|
|
|
|
| input | required_status | observed_status | decision |
|
|
| --- | --- | --- | --- |
|
|
| requirement | sufficient draft | draft, kernel scope explicit | proceed |
|
|
| research | ready-for-formulation | ready-for-formulation | proceed |
|
|
| formulation | ready-for-numerical-review | ready-for-numerical-review | proceed |
|
|
| numerical_review | pass-for-implementation-planning | pass-for-implementation-planning | proceed |
|
|
| io_definition | ready-for-implementation-planning or explicit future scope | ready-for-implementation-planning | proceed |
|
|
| reference_models | planned artifacts or future gate | needs-reference-artifacts | proceed for kernel only |
|
|
|
|
## Implementation Scope
|
|
- included_behavior:
|
|
- semantic `beam2` model topology.
|
|
- local 12x12 stiffness for a two-node 3D Euler-Bernoulli beam.
|
|
- local end-force recovery as `K_local * u_local`.
|
|
- local/global basis construction, global stiffness transform, and global end-force recovery.
|
|
- excluded_behavior:
|
|
- parser integration, assembly, solver integration, HDF5 output, reference CSV generation, reference comparison, stress recovery, distributed loads, mass, geometric stiffness, releases, offsets, warping, shear deformation, nonlinear and dynamic behavior.
|
|
- non_goals:
|
|
- no external linear algebra dependency.
|
|
- no CMake edits unless the existing source/test globs fail to pick up new files.
|
|
|
|
## Work Breakdown
|
|
|
|
| task_id | order | purpose | upstream_trace | depends_on | expected_test_first |
|
|
| --- | --- | --- | --- | --- | --- |
|
|
| EB3D-TASK-001 | 1 | Add `ElementTopology::beam2` semantic topology. | EB3D-REQ-001, EB3D-REQ-002 | none | EB3D-TEST-001 |
|
|
| EB3D-TASK-002 | 2 | Add local stiffness and local end-force kernel. | EB3D-REQ-004, EB3D-REQ-005, EB3D-REQ-007, EB3D-REQ-009 | EB3D-TASK-001 | EB3D-TEST-002 |
|
|
| EB3D-TASK-003 | 3 | Add global transform and global end-force recovery. | EB3D-REQ-006, EB3D-REQ-008, EB3D-REQ-010, EB3D-REQ-011 | EB3D-TASK-002 | EB3D-TEST-003 |
|
|
| EB3D-TASK-004 | 4 | Record build/test evidence. | project validation policy | EB3D-TASK-003 | N/A |
|
|
| EB3D-TASK-005 | 5 | Record release-readiness note with limitations. | EB3D-REQ-012 through EB3D-REQ-015 | EB3D-TASK-004 | N/A |
|
|
|
|
## TDD Test Plan
|
|
|
|
| test_id | order | test_type | red_condition | green_condition | linked_task | command |
|
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
| EB3D-TEST-001 | 1 | unit | compile fails because `ElementTopology::beam2` is missing | model element test passes with `beam2` and existing topologies preserved | EB3D-TASK-001 | `ctest --test-dir build/msvc-debug --output-on-failure -C Debug -R model_element_test` |
|
|
| EB3D-TEST-002 | 2 | unit | compile fails because `euler_beam_3d.hpp` API is missing | local stiffness entries, symmetry, `K*u`, and invalid inputs pass | EB3D-TASK-002 | `ctest --test-dir build/msvc-debug --output-on-failure -C Debug -R euler_beam_3d_local_stiffness_test` |
|
|
| EB3D-TEST-003 | 3 | unit | compile fails because global transform API is missing | identity transform, rotated symmetry, rigid translation, axial force, and invalid orientation pass | EB3D-TASK-003 | `ctest --test-dir build/msvc-debug --output-on-failure -C Debug -R euler_beam_3d_transform_recovery_test` |
|
|
|
|
## CMake/CTest Plan
|
|
- target_candidates: existing FESA library target and unit-test executable pattern.
|
|
- add_test_needs: only if existing test globs do not register new tests.
|
|
- labels: unit.
|
|
- msvc_config: Debug.
|
|
- expected_feature_commands:
|
|
- `ctest --test-dir build/msvc-debug --output-on-failure -C Debug -R model_element_test`
|
|
- `ctest --test-dir build/msvc-debug --output-on-failure -C Debug -R euler_beam_3d_local_stiffness_test`
|
|
- `ctest --test-dir build/msvc-debug --output-on-failure -C Debug -R euler_beam_3d_transform_recovery_test`
|
|
- workspace_validation: `python scripts/validate_workspace.py`.
|
|
|
|
## Candidate Files and Ownership
|
|
|
|
| file_candidate | purpose | owner_boundary | notes |
|
|
| --- | --- | --- | --- |
|
|
| `src/fesa/model/element.hpp` | add semantic topology enum value | model semantic layer | No equation IDs or section constants. |
|
|
| `src/fesa/model/element.cpp` | only if topology string/conversion exists | model semantic layer | Preserve existing behavior. |
|
|
| `tests/unit/model_element_test.cpp` | topology unit test | test-first for model change | Must be edited before production enum change. |
|
|
| `src/fesa/elements/euler_beam_3d.hpp` | kernel declarations and small value types | element kernel layer | C++17 standard library only. |
|
|
| `src/fesa/elements/euler_beam_3d.cpp` | local/global stiffness and recovery implementation | element kernel layer | No parser, assembly, or HDF5 code. |
|
|
| `tests/unit/euler_beam_3d_local_stiffness_test.cpp` | local kernel tests | test-first for local kernel | Covers representative entries and invalid inputs. |
|
|
| `tests/unit/euler_beam_3d_transform_recovery_test.cpp` | transform/recovery tests | test-first for global transform | Covers identity, rotation, rigid translation, axial force, invalid orientation. |
|
|
|
|
## Acceptance Traceability Matrix
|
|
|
|
| requirement_id | task_id | test_id | reference_model_id | acceptance_criterion | status |
|
|
| --- | --- | --- | --- | --- | --- |
|
|
| EB3D-REQ-001 | EB3D-TASK-001 | EB3D-TEST-001 | N/A | semantic topology exists for two-node beam | planned |
|
|
| EB3D-REQ-002 | EB3D-TASK-002 | EB3D-TEST-002 | N/A | local DOF order matches formulation entries | planned |
|
|
| EB3D-REQ-004 | EB3D-TASK-002 | EB3D-TEST-002 | N/A | section constants are used and invalid constants rejected | planned |
|
|
| EB3D-REQ-005 | EB3D-TASK-002 | EB3D-TEST-002 | N/A | local 12x12 stiffness entries match formulation | planned |
|
|
| EB3D-REQ-006 | EB3D-TASK-003 | EB3D-TEST-003 | `eb3d-skew-transform` future | global stiffness uses documented transform | planned |
|
|
| EB3D-REQ-007 | EB3D-TASK-002 | EB3D-TEST-002 | N/A | local end forces equal `K*u` | planned |
|
|
| EB3D-REQ-008 | EB3D-TASK-003 | EB3D-TEST-003 | `eb3d-skew-transform` future | global end forces use consistent transform | planned |
|
|
| EB3D-REQ-009 | EB3D-TASK-002/003 | EB3D-TEST-002/003 | N/A | local and global stiffness matrices are symmetric | planned |
|
|
| EB3D-REQ-010 | EB3D-TASK-003 | EB3D-TEST-003 | N/A | rigid global translation has near-zero end forces | planned |
|
|
| EB3D-REQ-011 | EB3D-TASK-003 | EB3D-TEST-003 | `eb3d-skew-transform` future | transform and recovery conventions are consistent | planned |
|
|
| EB3D-REQ-012 | EB3D-TASK-002/003 | EB3D-TEST-002/003 | N/A | excluded behaviors are not implemented | planned |
|
|
| EB3D-REQ-013 | EB3D-TASK-004 | N/A | all future models | no `reference/` artifacts are modified | planned |
|
|
| EB3D-REQ-014 | EB3D-TASK-005 | N/A | N/A | no full Abaqus compatibility claim | planned |
|
|
| EB3D-REQ-015 | EB3D-TASK-005 | N/A | N/A | kernel completion remains separate from full solver release | planned |
|
|
|
|
## Validation Commands
|
|
|
|
```powershell
|
|
ctest --test-dir build/msvc-debug --output-on-failure -C Debug -R model_element_test
|
|
ctest --test-dir build/msvc-debug --output-on-failure -C Debug -R euler_beam_3d_local_stiffness_test
|
|
ctest --test-dir build/msvc-debug --output-on-failure -C Debug -R euler_beam_3d_transform_recovery_test
|
|
python -m unittest discover -s scripts -p "test_*.py"
|
|
python scripts/validate_workspace.py
|
|
```
|
|
|
|
## Risks and Downstream Handoff
|
|
|
|
### Implementation Agent
|
|
- Follow `RED -> GREEN -> VERIFY` for each production change.
|
|
- Keep matrix storage row-major with index `row * 12 + col`.
|
|
- Throw `std::invalid_argument` for invalid length, section constants, and orientation.
|
|
|
|
### Build/Test Executor Agent
|
|
- Record CTest and workspace validation evidence after the C++ steps.
|
|
|
|
### Correction Agent
|
|
- Compile failures are likely missing CMake glob registration or signature mismatch.
|
|
- Test failures are likely sign convention, transform convention, or tolerance mistakes.
|
|
|
|
### Reference Verification Agent
|
|
- No reference comparison is expected until future HDF5 and reference artifact work is approved.
|
|
|
|
## Open Issues
|
|
- Exact parser keyword subset and HDF5 schema are future integration work.
|
|
- Reference artifacts remain unavailable by design in this kernel phase.
|