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: .. list-table:: :widths: 22 18 15 55 :header-rows: 1 * - Element (canonical) - MAPDL alias - Kind - Notes * - :doc:`TRUSS2 ` - ``LINK180`` - 3D 2-node truss - Axial only; 3 DOF/node. * - :doc:`SPRING ` - ``COMBIN14`` - 3D 2-node spring - Longitudinal KEYOPT(2)=0; 3 DOF/node. * - :doc:`POINT_MASS ` - ``MASS21`` - 1-node point mass - KEYOPT(3)=2; 3 DOF/node. * - :doc:`BEAM2 ` - ``BEAM188`` - 3D 2-node Euler–Bernoulli beam - 6 DOF/node; axial + torsion + two bending planes. * - :doc:`QUAD4_PLANE ` - ``PLANE182`` - 2D 4-node quad - 2 DOF/node; plane stress / plane strain. * - :doc:`QUAD4_SHELL ` - ``SHELL181`` - 4-node Mindlin shell - Selective reduced integration; drilling stabilisation. * - :doc:`HEX8 ` - ``SOLID185`` - 3D 8-node hex - 2×2×2 Gauss; B-bar / enhanced-strain options. * - :doc:`HEX20 ` - ``SOLID186`` - 3D 20-node serendipity hex - Bedrosian 2×2×2 stiffness, Irons 14-point mass; degenerate ``WEDGE15`` and ``PYR13`` auto-dispatched. * - :doc:`TET10 ` - ``SOLID187`` - 3D 10-node tet - 4-point Keast Gauss (both K and M). Registry and dispatch --------------------- Element classes register into :mod:`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 :class:`femorph_solver.Model`, the registry is queried through :meth:`~femorph_solver.Model.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 :class:`~femorph_solver.elements.ElementBase` interface — :meth:`ke` for stiffness, :meth:`me` for mass, optional :meth:`ke_batch` / :meth:`me_batch` for vectorised assembly. .. toctree:: :hidden: :maxdepth: 1 link180 combin14 mass21 beam188 plane182 shell181 solid185 solid186 solid187