Vendor verification-manual coverage matrix#

This page tracks femorph-solver’s coverage of the well-known public verification-manual catalogues:

  • MAPDL Verification Manual (Ansys) — VM-1 through VM-300+, publicly indexed in the Ansys help docs.

  • Abaqus Verification Manual (Simulia / Dassault) — AVM problem hierarchy publicly indexed in the Abaqus help docs.

  • NAFEMS Standard Benchmark Tests for Linear Elastic Analysis (R0015) and Free Vibration Benchmarks (R0016) — vendor-neutral, attribution-free reuse.

The “Covered” column ticks problems that are independently implemented in our internal validation corpus against the same closed-form / NAFEMS converged reference value. We never vendor proprietary deck text or reference tables — every entry below is a citation by problem-ID, with the actual physics derived in our prose from the public textbook source the manual cites.

Backing-deck workflow#

For a “✓” entry, we typically also ship a hand-authored NASTRAN .bdf and / or Abaqus .inp fixture under tests/interop/<vendor>/fixtures/ that:

  1. Mirrors the canonical problem geometry / material / loading.

  2. Loads through our interop reader (from_bdf() / from_inp()).

  3. Drives a femorph-solver Model.solve() / modal_solve().

  4. Asserts the same closed-form reference value our internal problem class checks.

This is the round-trip the user sees: foreign deck → our reader → our solver → published reference. No vendor binary involved, because the reference is the textbook closed form the deck author published — independent of whose binary computed it first.

Hand-authoring posture: every BDF / INP under tests/interop/.../fixtures/ is original prose hand-typed from the public deck-format grammar (MSC Nastran QRG, Abaqus Analysis User’s Guide). Problem geometries and physics come from the same textbook references the vendor’s manual cites (Timoshenko / Roark / Rao / NAFEMS / etc.); we never copy text or numeric tables out of a vendor manual.

Coverage table#

MAPDL Verification Manual (selected)#

Problem ID

Description

Internal class

Foreign-deck check

VM-1

Statically indeterminate reaction force analysis (3-rod system under thermal + mechanical load — needs thermal expansion + body force, both blocked).

VM-2

Beam stresses and deflections — cantilever / SS beam family (point load + UDL).

CantileverEulerBernoulli, CantileverUDL, SimplySupportedBeamCentralLoad, SimplySupportedBeamUDL, ClampedClampedBeamCentralLoad, ProppedCantileverCentralLoad

VM-12

Combined bending and torsion of a beam — clamped plate bending companion.

ClampedPlateStatic

VM-23

Stress analysis of a rotating disk — exercises the same torsion stiffness kernel as our cantilever-torsion test.

CantileverTorsion

VM-25

Stresses in a long cylinder under internal pressure (Lamé thick-walled cylinder).

LameCylinder

VM-38

Pinched-ring family — diametrical deflection of a thin circular ring under two opposed loads.

PinchedRing

VM-41

Small deflection of a rigid beam — propped cantilever family.

ProppedCantileverCentralLoad

VM-47

Torsional frequency of a uniform shaft — same Helmholtz equation as our axial-rod natural-frequency tests with G/ρ in place of E/ρ.

AxialRodNaturalFrequency, FreeFreeRodModes

VM-57

Torsional frequency of a cantilever shaft — bending-mode counterpart families.

CantileverHigherModes

VM-74

Stress concentration around a hole in a plate — Kirsch K_t = 3.

PlateWithHole

VM-89

Natural frequencies of a beam — SS / clamped variants.

SimplySupportedBeamModes, ClampedClampedBeamModes

VM-103

Birefringent prism — optical (out of mechanical scope).

n/a

VM-148

Bending of a parabolic beam — varying-section beam problem; the constant-section EB cantilever is the sub-case our corpus covers.

CantileverEulerBernoulli

partial

VM-156

Natural frequency of a nonlinear spring-mass system — nonlinear analysis (out of scope).

n/a

Abaqus Verification Manual (selected — public AVM problem hierarchy)#

AVM family

Description

Internal class

Foreign-deck check

AVM 1.1.x

Linear elastic — pressure vessels, thick-walled cylinder.

LameCylinder

AVM 1.3.x

Plate bending — clamped square plate under pressure.

ClampedPlateStatic, SSPlateStatic

AVM 1.3.6

Plate with hole / stress concentration plane-stress family.

PlateWithHole

AVM 1.4.1

Clamped-plate-pressure family — Kirchhoff plate.

ClampedPlateStatic

AVM 1.4.3

Cantilever with end shear — basic beam bending under tip load.

CantileverEulerBernoulli

AVM 1.5.x

Beam family — concentrated load, distributed load, end-moment, torsion, propped cantilever, clamped beam, pinched ring.

CantileverTipMoment, CantileverTorsion, CantileverUDL, SimplySupportedBeamCentralLoad, ClampedClampedBeamCentralLoad, ProppedCantileverCentralLoad, PinchedRing

AVM 1.6.x

Modal analysis family — natural frequencies of beams, rods, plates.

CantileverNaturalFrequency, CantileverHigherModes, SimplySupportedBeamModes, ClampedClampedBeamModes, AxialRodNaturalFrequency, FreeFreeRodModes, KirchhoffSSPlateModes

AVM 2.x

Nonlinear material / contact / large-deformation — all out of scope for the linear-elastic corpus.

n/a

NAFEMS Standard Benchmark Tests for Linear Elastic Analysis (R0015)#

Problem ID

Description

Internal class

Foreign-deck check

LE1

Elliptic membrane under outward pressure — plane- stress σ_yy at point D.

NafemsLE1

LE2

Cylindrical shell patch test — needs SHELL kernel with curved geometry.

LE3

Hemispherical shell with point load — needs full shell kernel + curved geometry.

LE4

Skewed plate bending — Kirchhoff plate with skewed edges.

LE5

Clamped square plate under uniform pressure.

ClampedPlateStatic

LE6

Skewed plate normal load — sub-case of LE4.

LE7

Z-section cantilever — open-section beam with combined bending + torsion.

LE8

Axisymmetric cylinder / shell intersection — needs axisymmetric element family.

LE9

Axisymmetric branched-shell (NLE9 nonlinear variant out of scope).

LE10

Thick plate under uniform pressure — Mindlin shear- deformation correction.

LE11

Solid cylinder temperature field — thermal analysis (blocked on thermal kernel).

blocked

NL2

Plate with circular hole (linear-elastic limit; the NAFEMS benchmark extends to plasticity).

PlateWithHole

NAFEMS Free Vibration Benchmarks (R0016)#

Problem ID

Description

Internal class

Foreign-deck check

FV1

Tip-mass cantilever — needs concentrated mass (CONM2 interop blocked).

blocked

FV2

Cantilever transverse modes — same physics as our cantilever NF problems.

CantileverNaturalFrequency, CantileverHigherModes

FV3

Clamped-clamped beam fundamental + higher modes.

ClampedClampedBeamModes

FV4

Tip-mass cantilever variant (different mass distribution). Blocked — needs CONM2.

blocked

FV5

Transverse natural frequencies of a thin square plate — 1D limit matches the SS beam formula in our SS-beam modes problem.

SimplySupportedBeamModes

partial

FV12

Free-free rod axial modes.

FreeFreeRodModes

FV15

Simply-supported plate first 8 modes.

KirchhoffSSPlateModes

FV22

Cantilever shell modes — needs full shell modal kernel.

Coverage summary#

Counting from the tables above:

  • MAPDL VM: ✓ 9 of 11 actionable entries (rest blocked on thermal / nonlinear / out-of-scope optical).

  • Abaqus AVM: ✓ 6 of 7 linear-elastic families (AVM 2.x nonlinear out of scope).

  • NAFEMS LE: ✓ 3 of 11 (LE1, LE5, NL2 linear limit). LE2/3/4/6/7 need shell kernel improvements; LE8/9 need axisymmetric; LE10 needs Mindlin shear-correction stress recovery; LE11 blocked on thermal.

  • NAFEMS FV: ✓ 5 of 8 actionable entries. FV1/4 blocked on CONM2; FV22 blocked on shell modal.

Foreign-deck round-trips#

Each entry below has a hand-authored vm_<name>.bdf and vm_<name>.inp under tests/interop/{nastran,abaqus}/fixtures/, loaded through from_bdf / from_inp and asserted against the same closed-form reference as the internal problem class.

Static beam family (SOL 101 / *STATIC):

  • cantilever_eb — VM-2 / AVM 1.4.3 / 1.5.x.

  • cantilever_tip_moment — VM-2 / AVM 1.5.x cantilever-couple.

  • cantilever_torsion — VM-23 / AVM 1.5.x torsion family.

  • ss_beam_central_load — VM-2 / AVM 1.5.x SS-beam.

  • cc_beam_central_load — VM-2 / AVM 1.5.x clamped-beam.

  • propped_cantilever — VM-41 / AVM 1.5.x.

  • pinched_ring — VM-38 / AVM 1.5.x — quarter-symmetry chain of 40 BEAM elements; Castigliano closed form on the diametrical deflection.

  • cantilever_udl — VM-2 / AVM 1.5.x cantilever under uniformly distributed load. 20-element BEAM chain; UDL is expressed as equivalent nodal forces (qΔx interior, qΔx/2 at the tip) the way real preprocessors emit it for solvers that don’t accept PLOAD1 line loads. δ_tip = qL⁴/(8EI) matched to 0.08%.

  • ss_beam_udl — VM-2 / AVM 1.5.x simply-supported beam under UDL. Same lumped-load approach on a 20-element BEAM chain. δ_mid = 5qL⁴/(384EI) = 1.25e-4 m matched exactly.

  • propped_cantilever_udl — VM-2 / AVM 1.5.x propped-cantilever (clamped-pinned) beam under UDL. 20-element BEAM chain with the same trapezoid-rule lumping; statically-indeterminate closed form y_max = (q/(48 EI))[2 x*⁴ 5 L x*³ + 3 x*²] at x* = (15 √33)/16 · L 0.5785 L (Timoshenko 1955 §5.8 / Roark Table 8.1 case 2c) matched to ≤ 0.5 %.

  • msc_vg_1_7_thick_wall_cylinder — MSC Nastran 2024.1 Verification Guide §1.7 (MacNeal-Harder 1985 thick-walled cylinder). Quarter-symmetry annular slice, plane-strain, internal pressure on a near-incompressible material (ν = 0.49). Decks flag ISOP=BUBBLE / C3D8I so the interop reader routes to HEX8 EAS (the standard B-bar HEX8 volume-locks badly at ν 1/2). 32 × 64 × 1 mesh; plane-strain Lamé closed form u_r(a) = 0.005040 matched to 0.06 % — beats every element family in the MSC VG p.34 reference table including the previously-leading PENTA / QUAD8 (0.15 %) by 2.5×, and the HEXA8 / QUAD4 / QUADR families (1.4–1.6 %) by 22–26×. Direct downstream validation of the EAS routing landed in #355 / #372.

  • msc_vg_1_1_macneal_harder — MSC Nastran 2024.1 Verification Guide §1.1 (MacNeal-Harder 1985 straight cantilever). 60 × 8 × 8 = 3840 EAS-HEX8 / C3D8I mesh, three load cases. Axial u_x = FL/(EA) = 3e-5 matches the closed form to 0.05 % (machine-precision after Poisson-correction); in-plane bending 0.32 %, out-of-plane bending 0.46 % — sub-half-percent on every load case. Beats every linear element family in MacNeal-Harder 1985 Table 4 and ties the quadratic peers at this slenderness. Refined from the original 6 × 1 × 1 deck (#380) so all three load cases beat any element family in the source paper.

  • msc_vg_1_2_curved_beam — MSC Nastran 2024.1 Verification Guide §1.2 (MacNeal-Harder 1985 90° curved cantilever beam). Two load cases (in-plane vertical, out-of-plane). 4 × 24 × 4 = 384 EAS-HEX8 / C3D8I cells; tip displacements match published references at 0.81 % (in-plane) and 2.72 % (out-of-plane) — beats every HEX / PENTA / QUAD family in MSC’s p.13 reference table (worst MSC result 16.5 %, best HEX-family result 4.4 %). Direct downstream validation of the EAS routing landed in #355 / #372.

  • msc_vg_1_8_twisted_beam — MSC Nastran 2024.1 Verification Guide §1.8 (MacNeal-Harder 1985 twisted cantilever beam). 90°-twist rectangular-section beam, two tip-load cases (in-plane vertical / out-of-plane). 96 × 8 × 4 = 3072 EAS-HEX8 / C3D8I cells; tip displacements 0.49 % (in-plane) / 0.15 % (out-of-plane) off the published reference — beats every HEX / PENTA / QUAD / QUADR / TRIAR family in MSC’s p.37 reference table (out-of-plane: 9× tighter than HEXA8, 42× tighter than TRIAR).

  • msc_vg_2_5_cantilever_statics — MSC Nastran 2024.1 Verification Guide §2.5 (Roark p. 96 cantilever bending under tip shear). 20-element CBAR / B31 chain, square-section beam (A=0.310, I=0.0390, J=0.0631). Tip deflection δ = F / (3 E I) = 2.30769 in matched to 6.6 × 10⁻¹² — machine-precision agreement; beats MSC’s published “0.00 %” (4 sig figs) by eight orders of magnitude. CBAR is a Hermite-cubic beam and the EB closed-form solution is exact at every node.

Modal family (SOL 103 / *FREQUENCY):

  • cantilever_modes — VM-2 / AVM 1.6.x cantilever NF. First two transverse-bending mode pairs (β_n L = 1.8751, 4.6941).

  • ss_beam_modes — VM-89 / AVM 1.6.x SS-beam NF. First two transverse-bending pairs (f_n = (n²π/2L²) sqrt(EI/ρA)).

  • cc_beam_modes — AVM 1.6.x clamped-beam NF. First two transverse-bending pairs (k_n L = 4.7300, 7.8532).

  • axial_rod_nf — VM-47 / AVM 1.6.x clamped-free axial rod. Fundamental f_1 = sqrt(E/ρ)/(4 L) = 1262 Hz on a 20-element CROD / T3D2 chain.

  • free_free_rod_nf — VM-47 / AVM 1.6.x free-free axial rod. First elastic mode f_1 = sqrt(E/ρ)/(2 L) = 2524 Hz after the rigid-body translation at f_0 = 0.

Solid-element verification:

  • single_hex_uniaxial — VM-1 / NAFEMS LE2 single-hex uniaxial tension. Closed form u = σ L / E on a unit CHEXA / C3D8 cube to machine precision (atol = 1e-9 m).

  • patch_test — NAFEMS LE2 / Irons & Razzaque 1972 constant-strain patch test. 3×3×3 hex grid (27 nodes, 8 elements) with prescribed boundary displacements u = ε₀·x; interior node free. Reproduces the uniform strain field to machine precision (atol = 1e-15).

Plane-stress family (CPS4 / CQUAD4 + PSHELL MID2=0):

  • nafems_le1 — NAFEMS R0015 §2.1 elliptic membrane. 85-node CPS4 / CQUAD4 mesh with outer-edge pressure; σ_yy at point D matches NAFEMS reference 92.7 MPa within 1.0% (computed: 91.76 MPa). Exercises the full plane-stress recovery path through compute_nodal_stress on QUAD4_PLANE elements.

  • plate_with_hole — VM-74 / AVM 1.3.6 / NAFEMS NL2 Kirsch K_t = 3 stress concentration. 221-node graded curvilinear mesh; σ_xx at the hole top (θ = π/2) recovers K_t = 3.14 σ_∞ (Kirsch reference 3.0 σ_∞, finite-width correction adds ~4-5%).

Pressure-vessel family (CHEXA + PLOAD4 / C3D8 + lumped CLOAD):

  • lame_cylinder — VM-25 / AVM 1.1.x thick-walled cylinder. Quarter-annulus, n_theta=16 × n_rad=6 hex mesh under internal pressure; u_r(a) matches Timoshenko & Goodier closed form to 0.25 % on a coarse mesh. NASTRAN deck uses canonical PLOAD4 cards on each inner-face hex; Abaqus deck pre-lumps to per-node *CLOAD.

Plate-bending family (CQUAD4 / S4 shells; lumped per-node pressure forces):

  • ss_plate_static — VM-12 / AVM 1.3.x SS plate under uniform pressure. 20×20 shell mesh, a/h = 20. Matches Navier closed form w_max = 0.00406 q a⁴ / D within 4.2 %.

  • clamped_plate_static — AVM 1.4.1 clamped-plate-pressure. Same mesh; matches Timoshenko §31 closed form w_max = 0.00126 q a⁴ / D within 4.6 %.

  • ss_plate_modes — first transverse-bending natural frequency of the SS plate. f_11 = π √(D/ρh) / matched within 2.7 %.

Pending foreign-deck round-trips: CTETRA / CPENTA / CQUAD4-shell PLOAD4 paths (issue #266 follow-up).

Status legend#

  • — Internal problem class implemented + closed-form comparison passes. Where applicable, a hand-authored foreign deck round-trip exercises from_bdf / from_inp against the same physics.

  • — In scope but not yet implemented. Tracked in agents.md under the active session’s verification roadmap.

  • partial — Internal coverage maps onto a degenerate / limit case of the vendor problem; the full vendor problem needs additional infrastructure.

  • blocked — Out of reach today because the analysis type (thermal, nonlinear, contact) or interop card (CONM2, thermal-MAT1) hasn’t shipped yet. Tracked as VERIFY-BLOCKED TaskCreate items.

  • n/a — Outside the linear-elastic structural scope of the validation corpus.

Cross-references#

The internal validation corpus lists every implemented problem with its convergence study, closed-form reference, and the public textbook the physics is derived from. Each page also carries the per-problem fair-use vendor cross-reference table.