Element library#

femorph-solver ships a library of structural finite elements. Each element is built from published FEM theory (textbook / journal citations on its theory page). Element names are topology-first and vendor-neutralHEX8, HEX20, TET10, BEAM2, QUAD4_SHELL, etc. The MAPDL catalogue names (SOLID185, SOLID186, BEAM188, …) are retained as compatibility aliases so existing .cdb decks load unchanged.

Correctness is verified against two independent evidence sources: analytical / textbook closed-form solutions (tests/analytical/) and agreement with MAPDL on shared benchmarks for migration safety. MAPDL is a yardstick, not a source of implementation detail.

Pick an element by dimension and kinematics:

Element (canonical)

MAPDL alias

Kind

Notes

TRUSS2

LINK180

3D 2-node truss

Axial only; 3 DOF/node.

SPRING

COMBIN14

3D 2-node spring

Longitudinal KEYOPT(2)=0; 3 DOF/node.

POINT_MASS

MASS21

1-node point mass

KEYOPT(3)=2; 3 DOF/node.

BEAM2

BEAM188

3D 2-node Euler–Bernoulli beam

6 DOF/node; axial + torsion + two bending planes.

QUAD4_PLANE

PLANE182

2D 4-node quad

2 DOF/node; plane stress / plane strain.

QUAD4_SHELL

SHELL181

4-node Mindlin shell

Selective reduced integration; drilling stabilisation.

HEX8

SOLID185

3D 8-node hex

2×2×2 Gauss; B-bar / enhanced-strain options.

HEX20

SOLID186

3D 20-node serendipity hex

Bedrosian 2×2×2 stiffness, Irons 14-point mass; degenerate WEDGE15 and PYR13 auto-dispatched.

TET10

SOLID187

3D 10-node tet

4-point Keast Gauss (both K and M).

Registry and dispatch#

Element classes register into femorph_solver.elements and are discovered by string name. Both the neutral name and the MAPDL alias resolve to the same kernel:

from femorph_solver.elements import get, registered

registered()
# ['BEAM188', 'COMBIN14', 'LINK180', 'MASS21', 'PLANE182', 'SHELL181',
#  'SOLID185', 'SOLID186', 'SOLID186P', 'SOLID186W', 'SOLID187']

hex_kernel = get("SOLID185")  # same class, MAPDL-alias lookup

On an femorph_solver.Model, the registry is queried through et():

m = femorph_solver.Model()
m.et(185, "HEX8")              # canonical neutral name
m.et(185, "SOLID185")          # MAPDL-compat alias — identical behaviour

Every element class implements the ElementBase interface — ke() for stiffness, me() for mass, optional ke_batch() / me_batch() for vectorised assembly.