315 lines
10 KiB
Markdown
315 lines
10 KiB
Markdown
# MITC4 Linear Static Shell Solver Initial Implementation Plan
|
|
|
|
## Summary
|
|
FESA will implement an initial finite element structural solver feature named `mitc4-linear-static-shell`. The feature reads an Abaqus-style input file, builds an internal finite element model, performs linear static analysis with a MITC4 shell element, writes HDF5 results, and verifies those results against stored Abaqus reference artifacts.
|
|
|
|
The implementation must follow the full solver development workflow:
|
|
|
|
1. Analyze new solver feature requirements.
|
|
2. Research books, papers, manuals, and related solver implementations.
|
|
3. Write the finite element formulation required for code implementation.
|
|
4. Define solver input and output data contracts.
|
|
5. Create TDD test models for both FESA and the reference solver.
|
|
6. Implement code.
|
|
7. Compare FESA results against reference solver results for nodal displacement, reaction, element internal force, and stress.
|
|
8. Mark implementation complete only when result differences are within tolerance.
|
|
9. Release the solver feature.
|
|
|
|
## Scope
|
|
Feature id: `mitc4-linear-static-shell`
|
|
|
|
Included:
|
|
- Linear static structural analysis.
|
|
- MITC4 4-node shell element.
|
|
- Six DOF per node: `U1, U2, U3, UR1, UR2, UR3`.
|
|
- Single-layer isotropic linear elastic shell section.
|
|
- Abaqus `.inp` subset input.
|
|
- Intel oneAPI MKL CSR/PARDISO sparse linear solve.
|
|
- Intel oneAPI TBB parallel element computation and result recovery.
|
|
- HDF5 solver result output.
|
|
- Stored Abaqus S4R primary reference comparison.
|
|
- Stored Abaqus S4 diagnostic reference comparison.
|
|
|
|
Excluded:
|
|
- Nastran BDF input.
|
|
- Nonlinear geometry.
|
|
- Nonlinear material.
|
|
- Dynamic analysis.
|
|
- Buckling/eigenvalue analysis.
|
|
- Composite/layered shell section.
|
|
- Contact.
|
|
- Agent-run Abaqus or Nastran execution.
|
|
- Reference artifact generation by agents.
|
|
- OpenSees API compatibility.
|
|
|
|
## Architecture
|
|
Use OpenSees as an architectural reference, not as an API clone. FESA should use modern C++17 ownership and small testable modules.
|
|
|
|
Primary conceptual modules:
|
|
- `Domain`: model container for nodes, elements, constraints, loads, materials, sections, and analysis metadata.
|
|
- `Node`: id, coordinates, and six ordered DOFs.
|
|
- `Element`: abstract element behavior for stiffness, internal force, result recovery, and connectivity.
|
|
- `ShellMITC4Element`: four-node MITC4 implementation with 24 element DOFs.
|
|
- `Material/Section`: isotropic elastic shell section with membrane, bending, shear, and stress recovery contract.
|
|
- `Analysis`: linear static analysis driver.
|
|
- `SystemOfEqn`: DOF numbering, constraints, CSR assembly, MKL PARDISO solve.
|
|
- `ResultWriter`: HDF5 output.
|
|
- `ReferenceComparator`: HDF5 reference comparison.
|
|
|
|
## Step 1: New Solver Feature Requirements Analysis
|
|
Create `docs/requirements/mitc4-linear-static-shell.md`.
|
|
|
|
The requirements analysis document must define:
|
|
- analysis type: linear static
|
|
- element type: MITC4 shell
|
|
- DOF order: `U1, U2, U3, UR1, UR2, UR3`
|
|
- material: isotropic linear elastic
|
|
- section: uniform shell thickness
|
|
- input: Abaqus `.inp` subset
|
|
- output: HDF5
|
|
- verification quantities: nodal displacement, reaction, element internal force/resultant, stress
|
|
- tolerance: single value `1e-5`
|
|
- pass rule: `abs(error) <= 1e-5` or `relative(error) <= 1e-5`
|
|
|
|
Acceptance criteria:
|
|
- Every must requirement has a verification method.
|
|
- Every numerical output requirement has component names and units policy.
|
|
- Reference artifact needs are listed under `references/mitc4-linear-static-shell/`.
|
|
|
|
## Step 2: Research Evidence
|
|
Create `docs/research/mitc4-linear-static-shell-research.md`.
|
|
|
|
Research must cover:
|
|
- Dvorkin-Bathe continuum mechanics based four-node shell formulation.
|
|
- MITC4 mixed interpolation of tensorial components.
|
|
- Assumed transverse shear strain interpolation and shear locking.
|
|
- OpenSees `ShellMITC4` class structure and resultants.
|
|
- Abaqus S4/S4R behavior as practical reference elements.
|
|
- Patch tests and Scordelis-Lo shell benchmark.
|
|
|
|
The research document must separate verified source facts from implementation inference.
|
|
|
|
## Step 3: FEM Formulation
|
|
Create `docs/formulations/mitc4-linear-static-shell-formulation.md`.
|
|
|
|
The formulation must define:
|
|
- reference coordinates and node ordering.
|
|
- shell midsurface interpolation.
|
|
- director and local coordinate basis policy.
|
|
- six-DOF nodal displacement vector.
|
|
- membrane, bending, transverse shear strain measures.
|
|
- MITC transverse shear tying/interpolation.
|
|
- isotropic shell constitutive matrix.
|
|
- element stiffness expression.
|
|
- 2x2 Gauss integration.
|
|
- drill stiffness policy.
|
|
- stress and resultant recovery.
|
|
- invalid Jacobian and degenerate element checks.
|
|
|
|
Default drill stiffness policy:
|
|
- v0 hardcodes `alpha=1`.
|
|
- `Ktt = alpha * min_eigenvalue(D_membrane)`.
|
|
- Input override is deferred to a later phase.
|
|
|
|
## Step 4: I/O Contract
|
|
Create `docs/io-definitions/mitc4-linear-static-shell-io.md`.
|
|
|
|
Input subset:
|
|
- `*NODE`
|
|
- `*ELEMENT, TYPE=S4`
|
|
- `*ELEMENT, TYPE=S4R`
|
|
- `*MATERIAL`
|
|
- `*ELASTIC`
|
|
- `*SHELL SECTION`
|
|
- `*BOUNDARY`
|
|
- `*CLOAD`
|
|
- `*STEP`
|
|
|
|
Output format:
|
|
- HDF5 file.
|
|
- No CSV output is required for this feature.
|
|
|
|
Required HDF5 layout:
|
|
```text
|
|
/metadata
|
|
feature_id
|
|
solver_version
|
|
model_id
|
|
units
|
|
tolerance
|
|
reference_solver
|
|
|
|
/mesh/nodes
|
|
/mesh/elements/mitc4/connectivity
|
|
|
|
/results/step_000/frame_000/nodal/displacement
|
|
/results/step_000/frame_000/nodal/reaction
|
|
/results/step_000/frame_000/element/forces
|
|
/results/step_000/frame_000/element/stress
|
|
```
|
|
|
|
Required result components:
|
|
- displacement: `U1, U2, U3, UR1, UR2, UR3`
|
|
- reaction: `RF1, RF2, RF3, RM1, RM2, RM3`
|
|
- element force/resultant: `N11, N22, N12, M11, M22, M12, Q13, Q23`
|
|
- stress: `S11, S22, S12, S13, S23`
|
|
|
|
## Step 5: TDD Reference Models
|
|
Create `docs/reference-models/mitc4-linear-static-shell-reference-models.md`.
|
|
|
|
Reference policy:
|
|
- FESA agents do not run Abaqus or Nastran.
|
|
- Stored Abaqus S4R HDF5 artifacts are the primary pass/fail reference.
|
|
- Stored Abaqus S4 HDF5 artifacts are diagnostic only.
|
|
|
|
Initial model portfolio:
|
|
- membrane patch
|
|
- bending patch
|
|
- transverse shear patch
|
|
- twist patch
|
|
- coarse Scordelis-Lo shell
|
|
|
|
Each model bundle must include:
|
|
```text
|
|
references/mitc4-linear-static-shell/<model-id>/
|
|
model.inp
|
|
metadata.json
|
|
abaqus_s4r/results.h5
|
|
abaqus_s4/results.h5
|
|
README.md
|
|
```
|
|
|
|
`metadata.json` must record:
|
|
- model id
|
|
- source/provenance
|
|
- Abaqus version
|
|
- element type
|
|
- units
|
|
- output locations
|
|
- tolerance `1e-5`
|
|
- compared quantities
|
|
- known limitations
|
|
|
|
## Step 6: Code Implementation Plan
|
|
Create `docs/implementation-plans/mitc4-linear-static-shell-implementation-plan.md`.
|
|
|
|
Implementation must be TDD-first:
|
|
|
|
1. Write failing parser tests.
|
|
2. Implement minimum Abaqus `.inp` parser behavior.
|
|
3. Write failing MITC4 element tests.
|
|
4. Implement shape functions, Jacobian checks, MITC shear interpolation, stiffness, and recovery.
|
|
5. Write failing assembly tests.
|
|
6. Implement DOF numbering, constraint handling, and deterministic CSR assembly.
|
|
7. Write failing MKL PARDISO solve tests.
|
|
8. Implement solver wrapper and reaction recovery.
|
|
9. Write failing TBB deterministic parallel tests.
|
|
10. Implement TBB parallel element computations with deterministic merge.
|
|
11. Write failing HDF5 schema tests.
|
|
12. Implement HDF5 C API RAII wrapper and result writer.
|
|
13. Write failing reference comparison tests.
|
|
14. Implement HDF5 reference comparator.
|
|
15. Run full validation.
|
|
|
|
Required validation commands:
|
|
```powershell
|
|
python -m unittest discover -s scripts -p "test_*.py"
|
|
python scripts/validate_workspace.py
|
|
ctest --test-dir build/msvc-debug --output-on-failure -C Debug -L mitc4
|
|
```
|
|
|
|
## Step 7: Reference Verification
|
|
Create `docs/reference-verifications/mitc4-linear-static-shell-reference-verification.md`.
|
|
|
|
Comparison inputs:
|
|
- FESA `results.h5`
|
|
- stored Abaqus S4R `results.h5`
|
|
- diagnostic Abaqus S4 `results.h5`
|
|
- metadata tolerance and schema version
|
|
|
|
Compared quantities:
|
|
- nodal displacement
|
|
- nodal reaction
|
|
- element internal force/resultant
|
|
- stress
|
|
|
|
Matching rules:
|
|
- node id for nodal quantities
|
|
- element id plus Gauss point id for element quantities
|
|
- component name for scalar comparisons
|
|
|
|
Pass rule:
|
|
```text
|
|
abs(error) <= 1e-5 OR relative(error) <= 1e-5
|
|
```
|
|
|
|
Report:
|
|
- compared quantity
|
|
- number of matched rows
|
|
- missing rows
|
|
- extra rows
|
|
- maximum absolute error
|
|
- maximum relative error
|
|
- worst id
|
|
- worst component
|
|
- pass/fail
|
|
|
|
## Step 8: Completion Decision
|
|
Implementation is complete only when:
|
|
- all required tests pass;
|
|
- CMake/MSVC/x64/Debug build passes;
|
|
- all required HDF5 result quantities compare within tolerance `1e-5`;
|
|
- no required reference artifact is missing;
|
|
- failures are not hidden as known limitations.
|
|
|
|
If comparison fails, classify the failure as one of:
|
|
- missing reference artifact
|
|
- schema mismatch
|
|
- id mismatch
|
|
- unit or coordinate mismatch
|
|
- formulation defect
|
|
- implementation defect
|
|
- tolerance failure
|
|
- reference artifact issue
|
|
|
|
Then return to the owning workflow step.
|
|
|
|
## Step 9: Release
|
|
Create `docs/releases/mitc4-linear-static-shell-release.md`.
|
|
|
|
Release document must include:
|
|
- feature id and scope
|
|
- supported input keywords
|
|
- supported outputs
|
|
- dependency versions
|
|
- test model list
|
|
- reference comparison summary
|
|
- tolerance policy
|
|
- known limitations
|
|
- validation commands and status
|
|
|
|
Release is not approved by build success alone. Release requires reference comparison success and documented limitations.
|
|
|
|
## Dependency Plan
|
|
MKL:
|
|
- Use oneAPI MKL through `MKLROOT` or known oneAPI path.
|
|
- Use CSR matrix storage and PARDISO for the global linear system.
|
|
|
|
TBB:
|
|
- Use oneAPI TBB through `TBBROOT` or known oneAPI path.
|
|
- Parallelize element-local stiffness and result recovery.
|
|
- Use deterministic merge for global assembly.
|
|
|
|
HDF5:
|
|
- FESA provides an internal RAII wrapper around the HDF5 C API.
|
|
- The HDF5 C library itself must be supplied through `HDF5_ROOT` or `HDF5_DIR`.
|
|
- The current local default is `C:\Program Files\HDF_Group\HDF5\2.1.1`; use `HDF5_ROOT` for this root or `HDF5_DIR` for `C:\Program Files\HDF_Group\HDF5\2.1.1\cmake`.
|
|
- HDF5 is required for solver output and reference comparison.
|
|
|
|
## Assumptions
|
|
- Abaqus reference artifacts are generated outside the agent workflow.
|
|
- S4R is the primary reference for pass/fail.
|
|
- S4 is diagnostic and does not determine pass/fail.
|
|
- The single tolerance value is `1e-5`.
|
|
- The initial implementation prioritizes correctness and traceability over broad element coverage.
|