Fortran subroutines are widely used in engineering for finite element analysis (FEA) simulations of complex structures in Abaqus. Although these subroutines come with a wide range of material models, boundary conditions, and internal elements, sometimes our simulations require custom definitions that go beyond the standard options. This is where user subroutines written in Fortran come in handy. Learning how to write them allows us to increase the speed and accuracy of our calculations.
Click Here to Learn It
Introduction
By writing our own Fortran Subroutine, we can define custom material models, boundary conditions, loads, field variables, and etc. This capability gives us the flexibility to simulate highly specialized or novel phenomena in our engineering analysis.
1.🚀 Why We Use User Subroutines in Abaqus?
Abaqus is a powerful finite element solver, but for advanced simulations, built-in material models and load definitions may not be enough.
That’s where user-defined Fortran subroutines come in — allowing full control over materials, loading, and boundary conditions.
2. Setting Up the Environment
- Abaqus (CAE + Solver)
- Intel Fortran Compiler (e.g., Intel oneAPI)
- Visual Studio (for integration)
- Linux (optional for gfortran compatibility)
Check the Abaqus documentation for compiler version compatibility.
Linking and compiling Abaqus with Fortran is essential when using user-defined subroutines (e.g., UMAT, VUMAT, UEL).
In this article you can read How to link/Compiling Abaqus with Fortran
Contact our consulting team
3. Available User Subroutines for Abaqus
| Subroutine | Purpose |
|---|---|
| UMAT | Custom material behavior |
| VUMAT | Explicit solver material model |
| UEL | User elements |
| DLOAD | User-defined loads |
| DISP | Displacements |
| USDFLD | Field variable evolution |
| UVARM | Custom outputs |
| UAMP | Amplitude definitions |
4.🧠 Basics of Writing a Fortran Subroutine for Abaqus
Abaqus uses Fortran 77/90 syntax for user subroutines. We define custom behavior that Abaqus calls during analysis.
Common subroutines include:
- UMAT: Custom material behavior (implicit)
- VUMAT: Custom material for explicit dynamics
- DLOAD: Custom element-based loading
- USDFLD: Define field variables that evolve
- UEL: User-defined element
SUBROUTINE UMAT(...)
! Define elastic model
...
END📘Structure of a User Subroutine
Each subroutine receives input variables from Abaqus (e.g., stress, strain, time) and returns updated values. For example, the UMAT subroutine for material modeling has the following structure:
SUBROUTINE UMAT(STRESS, STATEV, DDSDDE, SSE, SPD, SCD, 1 RPL, DDSDDT, DRPLDE, DRPLDT, STRAN, DSTRAN, 2 TIME, DTIME, TEMP, DTEMP, PREDEF, DPRED, CMNAME, 3 NDI, NSHR, NTENS, NSTATV, PROPS, NPROPS, COORDS, 4 DROT, PNEWDT, CELENT, DFGRD0, DFGRD1, NOEL, NPT, 5 LAYER, KSPT, KSTEP, KINC)
Inputs:
PROPS(material properties),DSTRAN(strain increment),TIME(current time).Outputs:
STRESS(updated stress),DDSDDE(material Jacobian matrix).
📘 Example: A Simple UMAT for Linear Elasticity
Here is a basic UMAT subroutine that defines isotropic linear elastic behavior:
SUBROUTINE UMAT(STRESS,STATEV,DDSDDE,SSE,SPD,SCD,
& RPL,DDSDDT,DRPLDE,DRPLDT,STRAN,DSTRAN,
& TIME,DTIME,TEMP,DTEMP,PREDEF,DPRED,CMNAME,
& NDI,NSHR,NTENS,NSTATV,PROPS,NPROPS,COORDS,
& DROT,PNEWDT,CELENT,DFGRD0,DFGRD1,NOEL,NPT,
& LAYER,KSPT,KSTEP,KINC)
INCLUDE 'ABA_PARAM.INC'
DIMENSION STRESS(NTENS), STRAN(NTENS), DSTRAN(NTENS)
DIMENSION DDSDDE(NTENS, NTENS), PROPS(*)
C
E = PROPS(1)
NU = PROPS(2)
G = E / (2.0 * (1.0 + NU))
K = E / (3.0 * (1.0 - 2.0 * NU))
C
DO I = 1, NTENS
STRESS(I) = STRESS(I) + DDSDDE(I,I) * DSTRAN(I)
END DO
C
RETURN
END
Note: In real applications, We’ll fill DDSDDE with the elastic matrix based on the material model.
5.🛠️ Compiling and Running with User Subroutines
- Save Fortran code as
umat.for appropriate name. - Ensure a supported compiler is installed (e.g., Intel Fortran).
- Run Abaqus with the user subroutine:
abaqus job=myjob user=umat.f
6. Additional Examples
DLOAD: Spatially varying load
F = 10.0 * COORDS(2)USDFLD: Coordinate-based field variable
FIELD(1) = COORDS(1)7.🎯 When Do We Need a User Subroutine?
Use Fortran subroutines when we need to:
- Model non-standard material behaviors (e.g., viscoplasticity, damage, composites)
- Apply loads that vary with space or time (
DLOAD) - Define evolving internal variables (
USDFLD) - Create novel elements or formulations (
UEL)
8.📩 Need Help Writing a Subroutine?
At Mathech FEM Consulting, we specialize in creating custom Abaqus subroutines for research, engineering, and simulation.
Contact us if you need help with:
- UMAT/VUMAT for advanced materials
- DLOAD for spatial or thermal loading
- USDFLD or UEL for research-driven simulation




🔥 Thank you so much for explaining everything in such great detail.
Finally, a clear step-by-step tutorial for connecting Fortran compilers to Abaqus. Ideal for anyone developing custom material models or user subroutines.