Coding subroutines in Abaqus
If you are an advanced Abaqus user, I am sure you have heard a word which some people try to avoid at all costs: subroutines. Today, I write about them as well as about my recent experience coding one for my research.
First of all, lets start with the main question: what is a subroutine? It is a script that, when run in parallel with the Finite Element (FE) model, allows users to request features which are not defined by default in the commercial software Abaqus. This FE package recognises a lot of different types of subroutines for both implicit and explicit simulations, depending on the information that we want to include, recalculate, modify, request… In other words, subroutines are useful when we want something that is not already available within the software and we need it in order to produce acceptable results.
Consider, for instance, that we were trying to simulate the response of a certain material, but the material model which was available in Abaqus did not quite reproduce the correct behaviour. What could we do then? The first option would be to contact Dassault Systemes to ask if they had any kind of expansion (with its corresponding extra cost, not too many things are given for free these days I’m afraid); sometimes, since a lot of users request the same thing, it is the company itself the one that creates the official subroutine. This option would save time and effort, but it would also affect our wallet. The second option would be to create a new material model from scratch. How could we do that? Well, we would need to code a UMAT (implicit) or a VUMAT (explicit) subroutine. In order to do so, we would need to learn how to code in Fortran, which is the only language supported by Abaqus (I know, this is a bit of a pain since Fortran is basically obsolete, but hey! It’s always good to learn something new!). We would also need to install two compilers and link them to the FE package, which once again is not straight forward (don’t worry, I’ll try to write another post to explain this). Some people might say that giving up would be the third option, but to me that attitude would be unacceptable, so don’t you dare!
The main disadvantage of asking Dassault Systemes for their commercially available subroutines is that we have no control over them. On the other hand, if we code it ourselves, we would be able to modify whatever we wanted. To illustrate this, I’ll talk about my personal experience. A few months ago I realised that the approach that some people were following in order to include failure in a certain material model, was indeed wrong (not even the results were unrealistic but also the official documentation stated that it couldn’t be done like that). So instead of accepting the defeat, I decided to learn the basics of Fortran and I created my own VUSDFLD subroutine, which I used to introduce failure based on a maximum strain criterion. As I said before, the great thing of having coded it myself is that even now I am still optimising the code to include other features, such as different failure criteria depending on the strain rate (this is a major improvement for impact scenarios, since the region near the impactor will be subjected to a higher strain rate than other areas of the structure).
I hope you found this post interesting and, as there are so many different types of subroutines with their specific rules, before I finish I”d like to provide a list with all the different options which are available for you in both Abaqus/Standard and Abaqus/Explicit. You can always refer to the official documentation once you’ve chosen the subroutine that will be useful for you. Have a good one!
- CREEP: define time-dependent, viscoelastic behaviour (creep and swelling).
- DFLOW: define non-uniform pore fluid velocity in a CaretConsolidation analysis.
- DFLUX: define non-uniform distributed flux in a heat transfer or mass diffusion analysis.
- DISP: specify prescribed boundary conditions.
- DLOAD: specify non-uniform distributed loads.
- FILM: define non-uniform film coefficient and associated sink temperatures for heat transfer analysis,
- FLOW: define non-uniform seepage coefficient and associated sink pore pressure for consolidation analysis.
- FRIC: Define frictional behavior for contact surfaces.
- FRIC_COEF: Define the frictional coefficient for contact surfaces.
- GAPCON: Define conductance between contact surfaces or nodes in a fully coupled temperature-displacement analysis or pure heat transfer analysis.
- GAPELECTR: Define electrical conductance between surfaces in a coupled thermal-electrical analysis.
- HARDINI: Define initial equivalent plastic strain and initial backstress tensor.
- HETVAL: Provide internal heat generation in heat transfer analysis.
- MPC: Define multi-point constraints.
- ORIENT: Provide an orientation for defining local material directions or local directions for kinematic coupling constraints or local rigid body directions for inertia relief.
- RSURFU: Define a rigid surface.
- SDVINI: Define initial solution-dependent state variable fields.
- SIGINI: Define an initial stress field. UAMP: Specify amplitudes.
- UANISOHYPER_INV: Define anisotropic hyperelastic material behavior using the invariant formulation.
- UANISOHYPER_STRAIN: Define anisotropic hyperelastic material behavior based on Green strain.
- UCORR: Define cross-correlation properties for random response loading. UEL: Define an element.
- UELMAT: Define an element with access to materials
- UEXPAN: Define incremental thermal strains.
- UEXTERNALDB: Manage user-defined external databases and calculate model-independent history information.
- UFIELD: Specify predefined field variables.
- UFLUID: Define fluid density and fluid compliance for CaretHydrostatic fluid elements.
- UFLUIDLEAKOFF: Define the fluid leak-off coefficients for pore pressure cohesive elements.
- UGENS: Define the mechanical behavior of a shell section.
- UHARD: Define the yield surface size and hardening parameters for isotropic plasticity or combined hardening models.
- UHYPEL: Define a hypoelastic stress-strain relation.
- UHYPER: Define a hyperelastic material.
- UINTER: Define surface interaction behavior for contact surfaces.
- UMASFL: Specify prescribed mass flow rate conditions for a convection/diffusion heat transfer analysis.
- UMAT: Define a material’s mechanical behavior.
- UMATHT: Define a material’s thermal behavior.
- UMESHMOTION: Specify mesh motion constraints during adaptive meshing.
- UMOTION: Specify motions during cavity radiation heat transfer analysis or steady-state transport analysis.
- UMULLINS: Define damage variable for the Mullins effect material model.
- UPOREP: Define initial fluid pore pressure.
- UPRESS: Specify prescribed equivalent pressure stress conditions.
- UPSD: Define the frequency dependence for random response loading
- URDFIL: Read the results file
- USDFLD: Redefine field variables at a material point.
- UTEMP: Specify prescribed temperatures.
- UTRACLOAD: Specify nonuniform traction loads.
- UTRS: Define a reduced time shift function for a viscoelastic material.
- UVARM: Generate element output.
- UWAVE: Define wave kinematics for an analysis.
VOIDRI: Define initial void ratios.
- VDISP: Specify prescribed boundary conditions.
- VDLOAD: Specify nonuniform distributed loads.
- VFABRIC: Define fabric material behavior.
- VFRIC: Define frictional behavior for contact surfaces.
- VFRIC_COEF: Define the frictional coefficient for contact surfaces.
- VFRICTION: Define frictional behavior for contact surfaces.
- VUAMP: Specify amplitudes.
- VUANISOHYPER_INV: Define anisotropic hyperelastic material behavior using the invariant formulation.
- VUANISOHYPER_STRAIN: Define anisotropic hyperelastic material behavior based on Green strain.
- VUEL: Define an element.
- VUFIELD: Specify predefined field variables.
- VUFLUIDEXCH: Define the mass flow rate/heat energy flow rate for fluid exchange.
- VUFLUIDEXCHEFFAREA: Define the effective area for fluid exchange.
- VUHARD: Define the yield surface size and hardening parameters for isotropic plasticity or combined hardening models.
- VUINTER: Define the interaction between contact surfaces.
- VUINTERACTION: Define the contact interaction between surfaces with the general contact algorithm.
- VUMAT: Define material behavior.
- VUSDFLD: Redefine field variables at a material point.
- VUTRS: Define a reduced time shift function for a viscoelastic material.
VUVISCOSITY: Define the shear viscosity for equation of state models.