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) and named to match the corresponding MAPDL element so existing input decks translate one-to-one. Correctness is verified against independently-derived closed-form solutions and cross-checked numerically against MAPDL on shared benchmarks — MAPDL is a yardstick, not a source of implementation detail.
Pick an element by dimension and kinematics:
Element |
Kind |
Notes |
|---|---|---|
3D 2-node truss |
Axial only; 3 DOF/node. |
|
3D 2-node spring |
Longitudinal KEYOPT(2)=0; 3 DOF/node. |
|
1-node point mass |
KEYOPT(3)=2; 3 DOF/node. |
|
3D 2-node Euler–Bernoulli beam |
6 DOF/node; axial + torsion + two bending planes. |
|
2D 4-node quad |
2 DOF/node; plane stress / plane strain. |
|
4-node Mindlin shell |
Selective reduced integration; drilling stabilisation. |
|
3D 8-node hex |
2×2×2 Gauss; B-bar / enhanced-strain options. |
|
3D 20-node serendipity hex |
3×3×3 Gauss; degenerate wedge (15) and pyramid (13) auto-dispatched. |
|
3D 10-node tet |
4-point stiffness Gauss, 15-point mass Gauss. |
Registry and dispatch#
Element classes register into femorph_solver.elements and are
discovered by string name:
from femorph_solver.elements import get, registered
registered()
# ['BEAM188', 'COMBIN14', 'LINK180', 'MASS21', 'PLANE182', 'SHELL181',
# 'SOLID185', 'SOLID186', 'SOLID186P', 'SOLID186W', 'SOLID187']
SOLID185 = get("SOLID185")
On an femorph_solver.Model, the registry is queried through
et():
m = femorph_solver.Model()
m.et(185, "SOLID185") # ``ET,185,SOLID185`` in MAPDL terms
Every element class implements the ElementBase
interface — ke() for stiffness, me() for mass, optional
ke_batch() / me_batch() for vectorised assembly.