22 KiB
22 KiB
Abaqus User Subroutines Research Brief
Metadata
- feature_id: abaqus-user-subroutines
- source_requirement: N/A
- status: draft
- owner_agent: research-agent
- date: 2026-06-08
Research Questions
- Abaqus User Subroutine은 어떤 해석 기능을 확장하며, Standard와 Explicit에서 어떤 subroutine family로 나뉘는가?
- User subroutine 개발 시 고정해야 할 ABI, include, 입력 파일, 상태변수, debug, compile/link 계약은 무엇인가?
- UMAT, VUMAT, UEL, VUEL, USDFLD/VUSDFLD, UVARM, UEXTERNALDB/VEXTERNALDB 중 FESA harness에 우선 반영해야 할 개발/검증 패턴은 무엇인가?
- 현재 C++/MSVC/CMake/CTest 중심 harness를 Abaqus user subroutine 개발에 맞추려면 어떤 gate와 artifact 계약이 필요해지는가?
Source Inventory
| source_type | title | author_or_org | URL_or_DOI | access_date | reliability_tier | notes |
|---|---|---|---|---|---|---|
| vendor manual mirror | Abaqus Analysis User's Guide 18.1.1, User subroutines: overview | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/usb/pt04ch18s01aus106.html | 2026-06-08 | Tier 1, version-specific mirror | Core lifecycle, include, execution, debugging, state variable, vectorization, parallelization rules. |
| vendor manual mirror | Abaqus User Subroutines Reference Guide A.1, User subroutines index | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/sub/ap01s01.html | 2026-06-08 | Tier 1, version-specific mirror | Categorizes Standard, Explicit, CFD user subroutines by function. |
| vendor manual mirror | Abaqus User Subroutines Reference Guide A.2, User subroutine functions listing | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/sub/ap01s02.html | 2026-06-08 | Tier 1, version-specific mirror | Defines one-line purpose for each user subroutine. |
| vendor manual mirror | Abaqus Analysis User's Guide 26.7.1, User-defined mechanical material behavior | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/usb/pt05ch26s07abm69.html | 2026-06-08 | Tier 1, version-specific mirror | UMAT/VUMAT material behavior, stress/strain conventions, material constants, state variables, deletion, hourglass/shear caveats. |
| vendor manual mirror | Abaqus User Subroutines Reference Guide 1.1.44, UMAT | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/sub/ch01s01asb44.html | 2026-06-08 | Tier 1, version-specific mirror | Standard user material interface; source page had slow/scripted HTML but search/open snippets exposed key warnings and variables. |
| vendor manual mirror | Abaqus User Subroutines Reference Guide 1.2.22, VUMAT | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/sub/ch01s02asb22.html | 2026-06-08 | Tier 1, version-specific mirror | Explicit vectorized user material interface. |
| vendor manual mirror | Abaqus User Subroutines Reference Guide 1.1.28, UEL | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/sub/ch01s01asb28.html | 2026-06-08 | Tier 1, version-specific mirror | Standard user element interface and LFLAGS procedure contract. |
| vendor manual mirror | Abaqus Analysis User's Guide 3.2.18, Making user-defined executables and subroutines | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/usb/pt01ch03s02abx18.html | 2026-06-08 | Tier 1, version-specific mirror | abaqus make, compile/link environment parameters, shared library deployment. |
| vendor manual mirror | Abaqus User Subroutines Reference Guide 2.1.15, Terminating an analysis | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/sub/ch02s01abu15.html | 2026-06-08 | Tier 1, version-specific mirror | XIT and XPLB_EXIT instead of Fortran STOP. |
| vendor manual mirror | Abaqus User Subroutines Reference Guide 2.1.22, Ensuring thread safety | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/sub/ch02s01abu22.html | 2026-06-08 | Tier 1, version-specific mirror | Mutex/thread-safety guidance for common blocks, files, and shared resources. |
| vendor manual mirror | Abaqus User Subroutines Reference Guide 2.1.23, Allocatable arrays | Dassault Systemes SIMULIA, mirrored by University of Colorado | https://ceae-server.colorado.edu/v2016/books/sub/ch02s01abu23.html | 2026-06-08 | Tier 1, version-specific mirror | Thread-local/global arrays as safer alternatives to common blocks and save variables. |
| public code repository | davidmorinNTNU/ABAQUS_subroutines | David Morin, NTNU | https://github.com/davidmorinNTNU/ABAQUS_subroutines | 2026-06-08 | Tier 3 example repository | Fortran examples for UVARM, USDFLD/VUSDFLD, UHARD/VUHARD, UMAT/VUMAT, UEXTERNALDB/VEXTERNALDB. README states examples were checked in Abaqus 2019 double precision with Intel ifort 16.0.8 but are not guaranteed bug-free or validated. |
Extracted Facts
Scope and execution model
- Abaqus user subroutines extend features where normal data input is too restrictive. They can be written in C, C++, or Fortran and are supplied at analysis execution time with
abaqus job=job-name user={source-file | object-file}or through Abaqus/CAE's user subroutine file field. - User subroutines are not saved to restart files. A restarted run must include the subroutine again and may include a revised one.
- User subroutines cannot call one another directly. They can call Abaqus-provided utility routines where supported.
- Fortran user subroutines must include
aba_param.incfor Standard orvaba_param.incfor Explicit as the first statement after the argument list. C/C++ user subroutines must includeaba_for_c.h, use Abaqus Fortran-callable naming conventions, and pass arguments by reference. - User code must only define variables listed by the subroutine documentation as variables to be defined. Rewriting information-only variables has unpredictable effects.
- The command
abaqus makecan build user postprocessing executables and user subroutine object/shared libraries. The relevant environment parameters includecompile_cpp,compile_fortran,link_exe, andlink_sl. Prebuilt user subroutine shared libraries can be found throughusub_lib_dir.
Development and debugging constraints
- Abaqus recommends thorough testing on small examples before production use. The manual specifically emphasizes small models where the user subroutine is the only complicated part.
- Debug output can be written to Abaqus-owned units: Standard
.msgthrough unit 7, Standard.dator Explicit.logthrough unit 6. Those units must not be opened by user code. Other user files should use allowed unit ranges and full paths because Abaqus uses scratch directories. ABA_PARALLEL_DEBUGcan increase verbosity and expose compile/link/debug information.- Use
XITin Standard andXPLB_EXITin Explicit instead ofSTOPso Abaqus closes analysis files properly. - Large arrays should not live on the stack. Native allocatable arrays or Abaqus allocatable-array utilities should be used for large or persistent data.
- Parallel jobs are allowed, but common blocks, common files, global arrays, and shared resources must be guarded for thread safety. Abaqus provides mutex utilities and local/global allocatable array utilities.
Model identity and data conventions
- Coordinates passed to user subroutines are generally global assembly coordinates unless a specific interface says otherwise.
- Node and element numbers passed into user subroutines are Abaqus internal global numbers.
GETPARTINFO/VGETPARTINFOandGETINTERNAL/VGETINTERNALare available when original part instance names and local numbers are needed, but their use is not free. - Set and surface names passed into user subroutines are uppercase and, for assemblies, prefixed by assembly and part instance names.
- Solution-dependent state variables are allocated differently depending on the subroutine family. Common material subroutines usually use
*DEPVAR; UEL uses*USER ELEMENT, VARIABLES=...; contact/interface subroutines use their own option-specificDEPVARcontracts. - State variable output is available through
SDV/SDVnfor supported material/integration-point cases.
Standard vs Explicit API shape
- Abaqus/Standard subroutines are generally scalar per material point, element, node, or contact point. Standard material/element/interface subroutines are often called twice in the first iteration of an increment to form initial stiffness and once in later iterations, with extra calls in some dynamic procedures.
- Abaqus/Explicit subroutines use a vector interface: blocks of data for
nblockmaterial points are passed to routines such as VUMAT.vaba_param.incdefinesmaxblkfor dimensioning temporary arrays. - Abaqus/Explicit has single and double precision executables. The precision is determined by the executable and
vaba_param.inc; user code should follow Abaqus precision conventions instead of hard-coding incompatible types.
UMAT and VUMAT
- User-defined mechanical behavior is implemented through UMAT for Abaqus/Standard and VUMAT for Abaqus/Explicit. This interface allows arbitrary mechanical constitutive models but is explicitly not a routine exercise.
- UMAT and VUMAT operate on Cauchy stress components. VUMAT quantities are expressed in a corotational coordinate system at the material point, and Abaqus uses the Green-Naghdi stress rate in VUMAT; built-in Explicit materials may use different objective stress rates.
- Mechanical material constants are supplied through
*USER MATERIAL. Abaqus/Explicit also requires*DENSITY. - In Standard, UMAT must return updated stress, updated state variables, and the material Jacobian
DDSDDE. The Jacobian strongly controls Newton convergence and computational efficiency. If the Jacobian is nonsymmetric,UNSYMMshould be requested. - In Explicit, VUMAT receives blocks of points and must return
stressNewandstateNew; it can also update internal and inelastic energy arrays. - Element deletion can be controlled by a state variable with
*DEPVAR, DELETE=...; deleted material points carry no stress and cannot be reactivated. - For reduced-integration, beam, shell, and transverse-shear cases, user material behavior may require explicit hourglass or transverse shear stiffness choices because Abaqus may not be able to infer them from user material data.
- Hybrid element behavior with UMAT has special total/incremental/incompressible formulations. Nearly incompressible hyperelastic user materials can converge poorly if the wrong hybrid formulation is used.
UEL and VUEL
- UEL defines an Abaqus/Standard user element. The core interface includes
RHS,AMATRX,SVARS,ENERGY, element-level DOF counts, properties, coordinates, displacements, velocities/accelerations as relevant, time, step/increment, and flags. LFLAGSdrives what the UEL must compute. For normal implicit time incrementation, UEL must define residual vectorRHSand Jacobian/stiffness matrixAMATRX; other flag values request stiffness-only, damping-only, mass-only, residual-only, initial acceleration, or perturbation output contributions.- UEL examples in the manual include a two-node structural user element behaving as a linear truss, with
*USER ELEMENT,*ELEMENT, and*UEL PROPERTYinput contracts. This is a strong candidate for a first reproducible artifact pattern if the project targets user elements. - VUEL is the Explicit user element analogue, but this investigation did not yet drill into its detailed interface. It should be treated as a separate research item before implementation planning.
Other relevant subroutine families
USDFLD/VUSDFLD: redefine field variables at material points; useful for field-dependent material behavior and damage/softening controls.UFIELD/VUFIELD: define predefined field variables, often nodal or field-level before interpolation.UVARM: generate custom element output in Standard; useful for exposing derived variables from existing material state.UEXTERNALDB/VEXTERNALDB: manage external databases, files, cross-subroutine data exchange, or coupling with external programs at key analysis points.UHARD/VUHARD: define hardening/yield surface size behavior without replacing the full material update.ORIENT: define material/local directions.DLOAD/VDLOAD,DISP/VDISP,UAMP/VUAMP: load, motion, and amplitude customization.UINTER/VUINTER/VUINTERACTION,FRIC/VFRIC: contact/interface behavior customization.
Observed public example repository patterns
- The NTNU repository contains examples for UVARM, USDFLD/VUSDFLD, UHARD/VUHARD, UMAT/VUMAT, UEXTERNALDB/VEXTERNALDB, plus a Modified Johnson-Cook example combining VUHARD and VUSDFLD.
- Each example folder generally contains a Fortran subroutine, Abaqus input files, post-processing Python scripts, plotting scripts, and a PDF describing the subroutine, input file structure, and results.
- The V_UMAT folder includes paired Standard/Explicit material examples:
UMAT.f,UMAT_MODEL.f,VUMAT.f,VUMAT_SHELL.f, Standard/Explicit.inpfiles, post-processing scripts, plotting scripts, and a talk PDF. - The V_USDFLD folder contains Standard and Explicit field-variable variants and both patch and two-element post-processing scripts.
- The repository README cautions that the examples were checked but may not be bug-free and are not necessarily validation-quality. Therefore this repository is useful as a development-pattern source, not as acceptance evidence.
Candidate Benchmarks and Verification Artifacts
| benchmark_id | source | benchmark_type | physics | target_quantities | artifact_needs | applicability |
|---|---|---|---|---|---|---|
| umat-single-element-elastic | Abaqus manuals, inferred from single-element testing guidance | smoke / analytical | Standard user material | stress, DDSDDE, state variables, convergence behavior |
one-element .inp, user material constants, expected analytical stress/Jacobian CSV, .msg summary |
Best first harness target for UMAT ABI and constitutive update tests. |
| vumat-single-element-elastic | Abaqus manuals, inferred from single-element testing guidance | smoke / analytical | Explicit vectorized user material | stressNew, stateNew, energy arrays, stable explicit response |
one-element Explicit .inp, density, expected stress history CSV |
Tests nblock loop and tensor ordering/precision assumptions. |
| umat-vs-built-in-linear-elastic | Abaqus material docs and UMAT/VUMAT contract | regression / reference comparison | Standard Cauchy stress update | stress, strain, SDV, reaction/displacement if run through Abaqus | built-in and UMAT .inp pair, reference CSVs from approved Abaqus run |
Requires user-generated Abaqus artifacts; not generated by agents. |
| vumat-vs-built-in-linear-elastic | Abaqus material docs and VUMAT contract | regression / reference comparison | Explicit user material | stress, strain, internal energy, displacement/reaction | built-in and VUMAT .inp pair, reference CSVs |
Must control objective-rate and tensor-ordering assumptions. |
| uel-two-node-truss | Abaqus UEL manual example | analytical / user element | Standard user element | element residual, stiffness, nodal displacement, reaction, energy | *USER ELEMENT truss .inp, UEL source, expected truss analytical CSV |
Strong first UEL target; maps cleanly to existing FESA truss/bar solver ideas. |
| usdfld-field-update | NTNU V_USDFLD examples plus Abaqus field-variable docs | regression / patch | Field-dependent material data | field values, SDV, stress changes driven by field | Standard/Explicit .inp, field/SDV CSVs, post scripts |
Example repository useful for structure; official acceptance must come from controlled reference artifacts. |
| uexternaldb-file-exchange | Abaqus overview and NTNU V_UEXTERNALDB examples | integration / harness | External file/database lifecycle | call order, file creation, increment/step metadata | .inp, user subroutine, expected external log file schema |
Useful for harnessing file I/O and thread-safety policy. |
Verification Relevance
- code_verification: High. UMAT/VUMAT/UEL logic can be unit-tested outside Abaqus if constitutive kernels or element kernels are factored away from the Abaqus ABI wrapper.
- solution_verification: High but artifact-dependent. Abaqus runs must be performed by a human or approved external process and stored as reference artifacts.
- validation: Out of scope for this first research pass. Public examples and single-element checks do not validate physical material models against experiments.
- reference_comparison: High. The current FESA reference-comparison pattern can be adapted to compare approved Abaqus
.odb-extracted CSVs,.dat/.msgsummaries, and post-processing outputs.
Applicability Limits
- The main manual sources are Abaqus 2016 mirrors. Interface details must be rechecked against the target installed Abaqus version before implementation.
- Official Dassault documentation may require customer access; the accessible sources here are university mirrors of the 2016 manuals.
- This research does not approve any specific material model, element formulation, stress integration algorithm, or tangent derivation.
- This research does not create, modify, or validate reference CSVs.
- This research does not run Abaqus, compile Fortran, or test compiler/linker compatibility.
- The project harness currently assumes C++17/MSVC/CMake/CTest. Abaqus user subroutine development will likely require a new or extended validation path for Fortran/C/C++ source plus
abaqus job=... user=...and/orabaqus make, guarded by environment detection. - The NTNU examples are useful for repository layout and one/two-element workflows, but their README explicitly limits their verification/validation claims.
Implications for This Project Harness
- The project should not simply rename the existing C++ solver harness. Abaqus user subroutine development has a different execution boundary: source is compiled and linked by the Abaqus execution procedure, not by CMake alone.
- A pragmatic architecture is to split each subroutine into:
- a thin Abaqus ABI wrapper matching the exact manual signature;
- a testable kernel for constitutive update, field update, element residual/tangent, or external database behavior;
- small Abaqus
.inpreference models and approved CSV/log artifacts.
- The current TDD guard should be extended or complemented for Fortran/C/C++ Abaqus source. For production subroutine changes, require either:
- a kernel unit test, or
- an Abaqus artifact comparison test, or
- both for UMAT/VUMAT/UEL.
- Workspace validation should gain explicit modes:
- no-Abaqus mode: run Python harness tests and pure kernel tests only;
- Abaqus-available mode: run compile/link smoke tests and selected
abaqus job=... user=...reference cases; - artifact-comparison mode: compare stored solver output CSV/log artifacts without rerunning Abaqus.
- Reference artifact contracts should include
.inp, user subroutine source version/hash, Abaqus version, compiler version, precision, command line,.msg/.dat/.logtail, extracted CSVs, and post-processing script provenance. - For UMAT/VUMAT, the first implementation gate should focus on a simple elastic or J2 plastic single-element model before complex material laws.
- For UEL, the first implementation gate should focus on a two-node truss/bar element because it has analytical residual/stiffness checks and aligns with the existing FESA solver roadmap.
Downstream Handoff
Requirement Agent
- Decide the primary target: UMAT, VUMAT, UEL/VUEL, field subroutines, output subroutines, or external database routines.
- Record target Abaqus version, operating system, compiler/toolchain, and whether Abaqus is available for local validation.
- Define whether the project will develop Fortran-first subroutines, C/C++ subroutines, or Fortran ABI wrappers over C++ kernels.
I/O Definition Agent
- Define supported Abaqus input keyword subset for each target subroutine family:
- UMAT/VUMAT:
*MATERIAL,*USER MATERIAL,*DEPVAR,*DENSITY, output requests. - UEL:
*USER ELEMENT,*UEL PROPERTY,*ELEMENT, output requests. - USDFLD/VUSDFLD:
*FIELD,*DEPVAR, material field dependency contracts.
- UMAT/VUMAT:
- Define CSV schemas for stress, strain, state variables, element residual/stiffness summaries, displacement, reaction, energy, and call-log/debug outputs.
Reference Model Agent
- Start with one-element UMAT/VUMAT and two-node UEL truss models.
- Require metadata for Abaqus version, compiler version, precision, command, input deck, source hash, and extraction script.
- Treat all generated Abaqus outputs as read-only reference artifacts after approval.
Implementation Planning Agent
- Plan RED tests around pure kernels first, then ABI wrapper compile smoke, then Abaqus artifact comparison if Abaqus is available.
- Require targeted tests for tensor component ordering, state variable allocation, material constant parsing, element deletion flags, and
DDSDDEsymmetry/unsymmetry policy. - Preserve no-Abaqus validation path so the repository remains testable without commercial solver access.
Numerical Review Agent
- For UMAT, review stress update algorithm, objective rates, state integration, consistent tangent, symmetry, and hybrid/incompressible assumptions.
- For VUMAT, review corotational frame assumptions, vectorization loop, stable explicit response, energy accounting, and deleted material point behavior.
- For UEL, review residual sign convention, tangent consistency, mass/damping/stiffness contributions,
LFLAGSbranching, and energy terms.
Open Issues
- Target Abaqus version is not yet specified. The cited manuals are Abaqus 2016.
- Target implementation language is not yet specified. Abaqus supports Fortran, C, and C++, but most public examples and legacy workflows are Fortran-first.
- Windows compiler compatibility is not yet specified. Abaqus, Visual Studio, Intel Fortran/oneAPI, and MSVC versions must be aligned.
- It is not yet clear whether local Abaqus execution is available in this workspace. The current harness should keep a no-Abaqus path.
- The project needs a license policy for third-party example code before copying or adapting code from public repositories.