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-neutral — HEX8, 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 |
|---|---|---|---|
|
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 |
Bedrosian 2×2×2 stiffness, Irons 14-point mass; degenerate
|
|
|
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.