Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
28504 Discussions

How to Use Intel's Fortran Compiler with Abaqus

Barbara_P_Intel
Moderator
7,702 Views

For those who want to use Intel's Fortran compiler with Abaqus on Windows, read this blog for detailed instructions.

 

12 Replies
JohnNichols
Valued Contributor III
7,684 Views

A really good set of instructions.  The young lady who developed the notes does some interesting work on unusual materials.  

Steve_Lionel
Honored Contributor III
7,675 Views

In the past this did not always work, with issues related to uppercase and lowercase letters. The user subroutine(s) could then not be found. If the .log file shows that the compiler is linked, and the .msg file mentions that the user subroutine is missing, then try this workaround (mentioned by Raul Munoz on our previous blog):

The following line can be added at the end of your environment file:

compile_fortran += ['/names:lowercase',]

AUGH! DO NOT DO THIS!!!!!! It will make things increasingly difficult for you. If you do have this issue, I'd suggest BIND(C) for your routine, or maybe !DEC$ ATTRIBUTES ALIAS. Lots of things won't work if you make everything lowercase.

0 Kudos
Cao__Yanmei
Beginner
7,645 Views

Hi Steve, I did everything as the link said except the lowercase stuff. ABAQUS verification shows errors related to user subroutines. I have no idea where is the problem... Any suggestion? Many thanks

 

0 Kudos
Ron_Green
Moderator
7,636 Views

Steve is suggesting using !DEC$ ATTRIBUTES ALIAS. 

 

 

As an example, let's say you have a subroutine "AbbyNormal" that you want to call and you want the subroutine name in all lower case, "abbynormal".  The code would look like this, roughly

 

 

!DEC$ ATTRIBUTES ALIAS:'abbynormal' :: AbbyNormal
subroutine AbbyNormal( x, n )
real :: x(n)
!do stuff
end subroutine AbbyNormal

 

 

I do not know Abaqus.  I was assuming somewhere in your Abaqus code/script you want to call your Fortran subroutine AbbyNormal with this example. I was just showing how to use ATTRIBUTES ALIAS to force the symbol for AbbyNormal to be all lower case.

 

 

0 Kudos
davidwarner
Beginner
4,658 Views

I followed all the steps mentioned in the link you provided, except for the lowercase modification. However, when I ran the ABAQUS verification, I encountered errors related to user subroutines. I am unsure where the issue lies. Do you have any suggestions?

Thank you very much.

 
0 Kudos
mecej4
Honored Contributor III
4,562 Views

There is not much that can be said based on "I encountered errors". You have to describe what commands you used, and report the exact wording of the error messages, if they are from the Intel Fortran compiler or other tools in the Fortran build system.

If the error messages are from Abaqus routines, you will have to wait until one of the few Abaqus users in this forum reads your post or, perhaps better, ask in an Abaqus forum.

I_Putu_Widiantara
3,511 Views

Dear Sir,

I think I have been able to link my Abaqus with the Fortran since I can run subroutine called UMAT. However, in some case, it will show error like this 

Begin Linking Abaqus/Standard User Subroutines
Creating library standardU.lib and object standardU.exp
libirc.lib(fast_mem_ops.obj) : warning LNK4210: .CRT section exists; there may be unhandled static initializers or terminators
End Linking Abaqus/Standard User Subroutines

 

and after that, Abaqus is not linked with the subroutines, which lead to error.

If you need more information, I'd be happy to provide it. 

 

Best regards

0 Kudos
Barbara_P_Intel
Moderator
3,487 Views

Another developer suggests:

I had trouble running Abaqus with a “user subroutine” that I had built using oneAPI (on Windows in this case).  The simulation would start and then abruptly end without any error message.

The root cause was as follows.  I had (incorrectly) used a Fortran “stop” statement in my Abaqus user subroutine instead of the vendor-recommended XIT() procedure (I should have used “call XIT()”).

In oneAPI versions of ifort, the “stop” statement is linking to a for_stop_quiet() procedure in the runtime libs.  Apparently, older compilers called for_stop() and it seems for_stop_quiet() is new to oneAPI versions so the new procedure does not exist in older ifort runtime libs.

The problem is that recent versions of Abaqus are still distributed with older (pre-oneAPI) versions of the ifort runtime which do not contain the needed for_stop_quiet() procedure.  As a result, if you compile your user subroutine with oneAPI but then do not make sure the oneAPI runtime libs are first in the Abaqus path, the dll will try to link to the older ifort runtime that is missing the needed for_stop_quiet() procedure so the code just aborts.

I believe the newest versions of Abaqus finally have a oneAPI version of the ifort runtime libs.

The forum user may be able to resolve their issue by eliminating any “stop” or “error stop” statements and replacing with “call XIT()”.  Alternatively, they could also make sure that the oneAPI “setvars” is properly integrated into the Abaqus environment.

 

I_Putu_Widiantara
3,470 Views

Hello,

 

Thank you very much for your suggestion. I tried to change all "stop" or "error stop" statement and replacing them with "call XIT()" as instructed. I still see the "warning LNK4210" BUT my Abaqus analysis was COMPLETED instead of reporting error. I was wondering whether that warning means something. Anyway, so far the result showed convergent with the expected result. I am grateful for all the help I get in this forum. Thank you again for your help and everyone in this forum, I hope you and your family are well. 

In case you need my script, I'd be happy to provide it...

 

Best regards

 

 

0 Kudos
jimdempseyatthecove
Honored Contributor III
4,533 Views

In the past, many years ago, when I experienced linker issues with names not matching between what I compiled and what the library had for entry points, I found it useful to produce the ASM listing to see what the compiler was generating. While this may have been done by looking at a linker map or one of the various object file tools (e.g. DUMPBIN.EXE), I found it more informative to look at the assembler listing. YMMV

 

Jim Dempsey

0 Kudos
I_Putu_Widiantara
3,514 Views

Dear Mrs. Barbara,

 

I have read the blog you mentioned and I found the instruction in the blog is no longer relevant. For instance, the blog instruct us to download the one API Base of 2019 in accordance to the Visual studio we are using. But when I click the link, I could not find the one API Base of 2019 and they only provide the newest version which is 2023.  Is there any way to obtain the old version of 2019?

 

Best regards,

0 Kudos
Barbara_P_Intel
Moderator
3,488 Views

The current release of oneAPI should work just fine with Abaqus. 

You can only get previous versions if you pay for priority support

0 Kudos
Reply