Skip to content

Add LSDynaUMATTarget backend #4

Open

Description

@petlenz

Goal

Generate an LS-DYNA user material subroutine. LS-DYNA uses Fortran-callable umatNN entry points (one per material model number, 41–50 are user-defined slots) with yet-another convention.

LS-DYNA UMAT signature (umat41 / umat42 / ... / umat50)

Per the LS-DYNA User-Defined Materials manual:

extern "C" void umat41_(
    double *cm,     // (lmc)     material constants
    double *eps,    // (nlq, 6)  strain increment, block-major
    double *sig,    // (nlq, 6)  stress, in/out
    double *epsp,   // effective plastic strain (scalar) [for some models]
    double *hsv,    // (nlq, nhv) history variables
    double *dt1siz, // (nlq)     timestep size
    double *capa,   // (nlq, ...) auxiliary
    char   *etype,  // element type tag
    double *tt,     // current time
    double *temps,  // temperatures
    int    *failel, // failure flag
    double *cma,    // additional material constants
    int    *qmat);  // material model variant

Block-major layout like Abaqus VUMAT, but different convention details:

Abaqus UMAT LS-DYNA umatNN
Component order (3D) {11, 22, 33, 12, 13, 23} {11, 22, 33, 12, 23, 13} (same as ANSYS!)
Shear strain engineering engineering
Strain measure total + increment increment only
Layout per-point block (nlq points)
Material constants PROPS array cm array (positional)
History STATEV flat hsv per-point
Tangent required (DDSDDE) not used (explicit)

Notable

LS-DYNA is explicit-only by default for user materials (no tangent required). The codegen can skip OutputRole::ConsistentTangent for this target — same simplification as VUMAT.

LS-DYNA component order matches ANSYS — so the Voigt machinery from #3 carries over.

What to emit

  • targets/lsdyna_umat.h with LSDynaUMATTarget.
  • extern \"C\" entry point named after the user-material slot number (configurable via target constructor: LSDynaUMATTarget(slot=42)).
  • Block-major iteration like VUMAT (Add AbaqusVUMATTarget backend (vectorized UMAT) #2).

Acceptance criteria

  • Smoke test against LinearElasticShear.
  • Test that emits with configurable slot number (e.g. umat41_ vs umat45_).
  • Voigt machinery shared with ANSYS path.

Dependencies

Activity

  1. petlenz commented on May 31, 2026

    @petlenz
    MemberAuthor

    Tracked as Phase 6 of the NumSim compiler epic #28. Unblocks once Phase 3b (#35) lands; share UMAT scaffolding with #2 / #3.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions