MAPDL migration#

Coming from MAPDL? This page consolidates every MAPDL- relevant entry-point into a single migration map so you don’t have to hunt for them across the docs tree.

The MAPDL compatibility layer is the most-frequently-exercised foreign-deck path in femorph-solver, with the deepest binary- format coverage. The full deep-dive lives at MAPDL interop (where the analyst- oriented walk-through belongs) and MAPDL compatibility (the format-spec table). This page is the hub that links them — symmetric with NASTRAN migration, Abaqus migration, and LS-DYNA migration, so the interop/ index reads coherently.

Reader entry points#

Source format

Loader

Returns

MAPDL CDB (ASCII archive)

femorph_solver.interop.mapdl.from_cdb()

Model

MAPDL .dat (input deck)

planned — #513

n/a today

MAPDL .rst (binary results)

femorph_solver.interop.mapdl.io (read-only, cross-check fixture path)

reader handle, not a Model

The CDB path is the canonical “I have an MAPDL workflow, take me to a femorph-solver model” entry point. See MAPDL interop for the full inspection- and-assignment walk-through, and Frequently asked questions for the common gotchas (missing materials in some decks, KEYOPT translation rules, /UNITS detection).

The native .dat reader (#513) is the next shipping interop addition — until it lands, run a MAPDL deck through the CDWRITE command to produce the CDB.

APDL command shim#

When porting an APDL macro line-by-line the femorph_solver.interop.mapdl.APDL wrapper exposes the APDL command set one-for-one. MAPDL element catalogue names ("SOLID185" etc.) are translated to their neutral kernel counterparts at this boundary; nothing downstream sees foreign- deck spelling. See MAPDL interop for the per-command coverage table.

The shim is for porting; for new work the native Model primitives (assign(), fix(), apply_force()) are the recommended path.

Element-name translation#

Foreign-deck spellings stay at the import boundary. See the cross-vendor Cross-vendor terminology Rosetta table for the full Rosetta across MAPDL / NASTRAN / Abaqus / LS-DYNA. The MAPDL-side mappings:

MAPDL catalog

femorph-solver kernel

Notes

SOLID185

HEX8

Default trilinear hex; the EAS variant (KEYOPT(1)=2) maps to HEX8(integration="enhanced_strain").

SOLID186

HEX20 / WEDGE15 / PYR13

20-node serendipity hex; degenerate variants (15-node wedge, 13-node pyramid) auto-detect on connectivity length.

SOLID187

TET10

10-node quadratic tet.

BEAM188

BEAM2

Hermite-cubic Euler-Bernoulli with rectangular / circular / I / T cross-sections.

LINK180

TRUSS2

Pure-axial 2-node link.

PLANE182

QUAD4_PLANE

2D bilinear quad. KEYOPT(1)=2 (Wilson-Q6) translates to the enhanced-strain variant.

PLANE183

planned — #543

8-node serendipity quad.

SHELL181

QUAD4_SHELL

DKT shell. See Known limitations for the drilling-DOF caveat.

SHELL281

planned — #552

8-node quadratic shell.

COMBIN14

SPRING

Linear axial spring.

MASS21

POINT_MASS

Translational lumped mass (rotational-inertia components are ignored with a warning).

KEYOPT coverage#

The KEYOPT translation table is the most-frequently-asked- about interop detail. See MAPDL compatibility for the per-element / per-KEYOPT coverage matrix. The short version:

  • PLANE182 ``KEYOPT(1)`` — full / B-bar / EAS variants recognised.

  • BEAM188 ``KEYOPT(1)`` — cubic shape function recognised (the linear option falls through to BEAM2’s analytic form).

  • SHELL181 ``KEYOPT`` — full integration only; reduced- integration with hourglass control is on the roadmap.

Unrecognised KEYOPT combinations emit a warning and skip the element — see Vendor verification-manual coverage matrix for the per-deck round-trip status.

Boundary-condition cards#

The CDB reader translates BC cards to the native Model API:

MAPDL card

Native equivalent

Notes

D, node, label, value

Model.fix(nodes=[node], dof=[label])()

Single-node Dirichlet.

D, ALL, label, value

Model.fix(where=mask, dof=[label])()

Mass Dirichlet across a coordinate filter.

F, node, FX/FY/FZ/MX/MY/MZ, value

Model.apply_force(node, fx=value)()

Single-node load.

CSYS, 1 (cylindrical)

via Model.fix() with the appropriate normal- projection mask

Recognised; see #553 for the full coverage path.

CP (coupled DOFs)

via the model’s coupling table

Tracked under #518.

SFBEAM (distributed beam load)

planned — #516

On the roadmap.

The Vendor verification-manual coverage matrix tracks which problems round-trip cleanly for each card.

Common migration patterns#

Three flows the team sees most often:

  • CDB → modal solve. Read a Mechanical APDL .cdb file with femorph_solver.mapdl_api.from_cdb(), attach materials and BCs, and call Model.solve_modal.

  • Native MAPDL run + cross-check against femorph-solver. See the Verification corpus for the side-by-side reference problems.

  • Pure APDL macro port. Use the femorph_solver.interop.mapdl.APDL shim; see MAPDL interop for the command-by-command walk-through.

See also#