Validation Overview
This section documents how Armatura is checked against analytical solutions, internal equilibrium checks, and reference comparisons.
The aim is not to claim that the solver is "validated" in a broad marketing sense. The aim is narrower and more useful: for each benchmark case, state exactly what was modeled, what reference value was used, what Armatura produced, and what tolerance was accepted.
What belongs here
A validation page should correspond to a test that already exists in the repository and is stable enough to be rerun during development. The current test suite already contains strong candidates in three groups:
- closed-form beam checks in
SamLabs.Armatura.Test/CoreBeamTests.cs - frame-behaviour checks in
SamLabs.Armatura.Test/CoreFrameTests.cs - reference comparisons and design/evaluation checks in
SamLabs.Armatura.Test/ComparisonTests.csandSamLabs.Armatura.Test/AnalysisAndEvaluationTests.cs
Recommended first benchmarks
The most doc-worthy tests in the current codebase are:
CantileverBeam_PointLoadAtTip_CorrectDeflectionCantileverBeam_PointLoad_CorrectReactionsSimplySupportedBeam_UniformLoad_CorrectDeflectionSimplySupportedBeam_UniformLoad_CorrectReactionsSimplySupportedBeam_UniformLoad_CorrectMomentAtCenterPortalFrame_HorizontalLoadOnly_ColumnShearEqualsAppliedUpsideDownU_CompareToExpectedValuesCantilever_TipLoad_AnalysisAndEvaluation_BendingCheck
These are a good first set because they are specific, repeatable, and already map cleanly to known formulas or reference values.
Page structure
Each validation page should follow the same structure:
- Purpose — what behaviour the case is validating
- Model — geometry, supports, material, section, and load
- Reference — formula, hand calculation, or external benchmark
- Armatura result — the actual reported values
- Comparison — absolute and relative error
- Notes — sign conventions, assumptions, and current limits
How to capture results
For the pages drafted here, the model definition and expected values are taken from the test code. The final numeric result tables should be pasted in from a real test run.
A practical workflow is:
# run a single benchmark test and capture console output
dotnet test --filter "FullyQualifiedName~SamLabs.Armatura.Test.CoreBeamTests.CantileverBeam_PointLoadAtTip_CorrectDeflection"
Then copy the reported values into the corresponding page.
Scope of the current validation section
This section is intentionally conservative.
It currently covers:
- linear elastic beam response
- support reactions and global equilibrium
- simple frame sway behaviour
- one explicit comparison against stored reference values
- a small number of design-code pipeline checks
It does not yet constitute broad validation of:
- geometric nonlinearity
- second-order effects
- shell or plate behaviour
- dynamic analysis
- large benchmark suites against commercial solvers
Those belong in later additions, but it is better to document a small set honestly than to imply wider coverage than the project currently has.