What is a subroutine in Abaqus?
The Abaqus user subroutine allows the program to be customized for particular applications unavailable through the main Abaqus facilities. You should write a user subroutine if you cannot run your analysis by ABAQUS built-in models for materials, loads, properties, elements, etc.
What is UMAT subroutine in ABAQUS?
The UMAT subroutine is used in Abaqus/Standard. If you need to model a user-defined nonlinear stress-strain relation, which is not provided by Abaqus, then look for the UMAT user subroutine. UMAT will allow you to define the customized material model for your problem.
What are the prerequisites to writing a subroutine in Abaqus?
User subroutines are mostly written in Fortran. When a simulation model that contains user subroutines is submitted to Abaqus, the correct compile and link commands should be used automatically. If the version of your Fortran compiler does not correspond to that specified, incompatibilities may occur. Therefore, it is important to have compatible components for subroutine configuration. You can find a comprehensive guide to compatible versions of Abaqus, Intel Fortran and Visual Studio In this article: Compatible Fortran and Visual Studio for Abaqus
What kind of subroutines are there in Abaqus software?
There are different kinds of subroutines used in Abaqus. Each subroutine is useful for a certain part of the simulation. For example, User subroutines UMAT allows constitutive models to be added to the program. A more advanced subroutine is UEL, which allows the creation of user-defined elements. Also, different other subroutines are applicable in ABAQUS. Less complex Abaqus user subroutine examples are DLOAD, DISP, UVARM, URDFIL, etc. You can get familiar with the most important and typical subroutines by reading these articles: 10 Useful ABAQUS subroutines (Part 1), 10 Useful Abaqus Subroutine (Part 2).
How can I find an appropriate subroutine due to my problem?
This is where you should decide which subroutine is the answer to your need. While a complete understanding of the structure of Abaqus is not required to develop a user subroutine, it helps if the developer has at least an overview of the structure. Here, there is the basic flow of data and actions from the start of an Abaqus/Standard analysis and Abaqus/Explicit analysis to the end.
How can I learn to create subroutines using Abaqus Documentation?
To learn about a certain subroutine, you need to find your subroutine name from Abaqus User Subroutines Reference Guide in Abaqus Documentation. Each subroutine guide contains seven sections. The first four sections are used to describe subroutine usage and ability in Abaqus, its limitations, etc. The final three sections provide the code structure used for this subroutine. Generally, the variables passed into a user subroutine via the argument list are classified as either variables to be defined, variables that can be defined, or variables passed in for information.
The Abaqus user subroutine allows the program to be customized for particular applications which are not available through the main Abaqus facilities. You should write a user subroutine if you could not run your analysis by ABAQUS built-in models for materials, loads, properties, elements, etc. for example, if you need to model a user-defined nonlinear stress-strain relation, which is not provided by Abaqus, then look for UMAT user subroutine. UMAT will allow you to define the material model customized exactly for your problem. Here we want to provide you with a road map to start writing your first (or very early) subroutine in Abaqus. Follow this article to become familiar with some Abaqus subroutine example and the best Abaqus user subroutine manual. Writing user subroutine with Abaqus will be easier after reading this post and checking its training links.
The subroutines are available for both Abaqus/Standard and Abaqus/Explicit. For example, we have DLOAD in Abaqus/Standard and VDLOAD in Abaqus/Explicit.
1. What you need to write a subroutine in Abaqus (perquisites)
User subroutines are mostly written in Fortran. When a simulation model that contains user subroutines is submitted to Abaqus, the correct compile and link commands should be used automatically. If the version of your Fortran compiler does not correspond to that specified, incompatibilities may occur. Therefore, it is important to have compatible components for subroutine configuration. You can find a comprehensive guide to compatible versions of Abaqus, Intel Fortran and Visual Studio In this article:
First, prepare the required programs. Then you should follow an instruction to link Abaqus with Intel Fortran and Visual Studio. For example, this article helps you with Abaqus 2017:
The basics are similar to other versions of Abaqus. Just pick the compatible versions from the former article or use this Q&A as a quick guide:
Q&A: What are the compatible versions of Intel Fortran and Visual Studio for my Abaqus version?
2. An Introduction to different subroutines in Abaqus | Abaqus subroutine example
User subroutines UMAT allows constitutive models to be added to the program. A more advanced subroutine is UEL, which allows the creation of user-defined elements. Other, less complex Abaqus user subroutine examples are:
- DLOAD for specifying user-defined loading
- DISP to define the magnitudes of prescribed boundary conditions
- UVARM for defining a user output variable
- URDFIL for reading the results file during analyses
- SIGINI for specifying initial stress fields
- USDFLD for defining field variable dependence
UEL or UMAT are more complicated and require a good understanding of applied mechanics concepts (FEM, Continuum mechanics, Computational Plasticity…).
Although, several subroutines like DLOAD, USDFLD or DISP could be simple and can be learned with little effort using the Abaqus documentation and examples that come with it.
You can get familiar with the most important and typical subroutines by reading this article:
3. Finding appropriate subroutine due to your problem
This is where you should decide which subroutine is the answer to your need. While a complete understanding of the structure of Abaqus is not required to develop a user subroutine, it helps if the developer has at least an overview of the structure. This understanding is really mandatory when writing advanced subroutines like UMAT or UEL.
This is the basic flow of data and actions from the start of an Abaqus/Standard analysis to the end:
In addition, you can see this article to master the step, increment and iteration concepts:
And this is the basic flow diagram in an Abaqus/Explicit analysis:
There is some Abaqus subroutine example or Abaqus user subroutine manual in our Package shop. Follow this post to learn the basics about user subroutine writing or Abaqus user subroutine, and after that, you can learn each subroutine in our packages.
4. Referring to Abaqus Documentation
Reading the Abaqus user subroutine manual in the Documentation before working on it can save your time in the end. Most difficulties in using Abaqus can be solved by following the instructions in the manuals carefully.
Open Abaqus User Subroutines Reference Guide from Abaqus Documentation:
First, select User Subroutines in the left panel. Then, Find your subroutine name from the list either for Abaqus/Standard or Abaqus/Explicit. Now, you will see these details on the right:
Sections of a subroutine guide in Abaqus Documentation:
(1) Subroutine title and a short description of its usage in Abaqus
(2) Some links to the related topics of Documentation. Relation of the subroutine and the keywords of Abaqus.
(3) There are some refers to different examples included in Abaqus Documentation related to this subroutine. Open those examples too and look at them carefully.
It is generally useful to look for relevant examples in Abaqus Documentation to review them when embarking on a new class of problems. You may find these examples in Example Problems Guide, Benchmarks Guide, Verification Guide and less likely in Getting Started with Abaqus/CAE. Study the example problem description and the inputs and outputs. Find the most similar example to your specific problem.
(4) Here, you can learn what this subroutine can do, its limitations, etc.
Sometimes, after the Overview, there are some notes about the theory behind the subroutine and so on (for example, see Creep subroutine section in Documentation). Read them carefully, too.
(5) That is the code structure for the subroutine. Copy this part exactly
Generally, the variables passed into a user subroutine via the argument list are classified as either variables to be defined, variables that can be defined, or variables passed in for information.
(6) The parameters introduced in this part constitute the main part of a subroutine. You should define the parameters listed here.
(7) The user must not alter the values of the Variables passed in for information at all. Doing so will have unpredictable results.
5. Developing Your Fortran Subroutine for Abaqus
Now, you need to create a Fortran file (a simple txt file with .for ending) with whatever name you like.
Open the file. Here, we named it as myDISP.for. By default, Microsoft Visual Studio will show up:
First, copy exactly the User subroutine interface part of Documentation ((5) in the above figure). Now you should define the parameters listed in Variables to be defined section (6) instead of user coding to define x line. Here your coding skill come in! Write the customized expression for the parameters.
For example, for a DISP subroutine, we should define U (user defined special form of displacement B.C. that is not supported in Abaqus itself). Therefore, you need to be familiar with Fortran coding language. However, knowing just the main commands (loops, conditions…) and the data structures can be sufficient for most applications.
For this part, you can read the related post about UMAT Abaqus that completely describe how to write your first UMAT subroutine in Abaqus.
6. Using the Subroutine in Abaqus Analysis
Then you tell Abaqus to the user subroutine where you need. It depends on the type of subroutine. For example, DISP is a type of B.C. So, we go to Load module:
And when creating a new job, you give the address of your written subroutine. See this Q&A:
LINK=How to test subroutine
7. Testing Your Written Subroutine for Abaqus
The last and the trickiest step! Follow these instructions when running your sample jobs with subroutines:
» Always test your subroutines on the smallest possible model.
» Do not include other complicated features, such as contact, unless they are absolutely necessary when testing the subroutine.
» Test the most basic model of the user subroutine before adding additional complexity to the subroutine. Whenever add a new feature to the model in a user subroutine, test it before adding another feature.
» When appropriate, try to test the user subroutine in models where only values of the nodal degrees of freedom (displacement, rotations, temperature) are specified: simple tension test, simple shear test, simple temp B.C. s, etc.
To start to write the subroutine, you need to have Fortran knowledge. You can read “Fortran ‘Must Knows’ for Writing Subroutines in Abaqus (PART I)” article to get what you need!
8. How can we learn to write an Abaqus subroutine correctly?
Here below, I have listed some main Abaqus subroutines that you may encounter when using Abaqus at an advanced level as a graduate student or researcher. Good news for you! You can learn each subroutine you want by clicking on that.
In the last part of this post, I will invite you to watch the below video, which presents our main Abaqus tutorial package that can save a lot of time if you are a beginner in Abaqus.
See the “Abaqus for Beginners” package.
Get this post as a PDF file: start-writing-subroutine-in-abaqus
References:
Abaqus Documentation (User Subroutine Reference Guide)
Abaqus Documentation (Analysis User’s Guide)
Eager to hear from you…
Any complications or other questions? Feel free to comment here…
This article is awesome!
Continue to produce such articles!
i like this amazing post
Way cool! Some extremely valid points! I appreciate you penning this post plus the rest of the site is very good.
Wow! Thank you! I permanently wanted to write on my site something like that. Can I include a part of your post to my blog? Rafaelita Ettore Ailsa
This article was one of the most complete articles I have ever read about subroutine. Thank you for preparing this article
If it is possible, can you suggest me training packages about writing subroutines?
thanks for your help