(完整)在Abaqus中使用.f90格式的子程序的方法

一、前言

Fortran语言发展至今已经推出了若干版本,那么究竟采用哪个版本来编写Abaqus子程序呢?这是困扰很多同学的问题,因为我们能买的Fortran教材基本都是讲解的Fortran90/95以上的版本。但是直接采用90或者95以上的版本编写子程序,Abaqus却又不能识别。

这里需要说明一点,Abaqus原生支持的FORTRAN77的语法形式,因此采用77写子程序肯定是没有问题的,但是实际上更高级的比如90也是能够支持的,需要对.env文件进行修改,加入支持90的语句即可。

二、方法

Abaqus默认支持的是固定(FORTRAN77)格式的Fortran子程序。编译或者调用子程序时会自动搜索文件后缀为:*.for, *.f, *.C, *.c, *.cc, *.CPP, *.cpp, *.CXX, *.cxx 的源代码文件。

如果想使用.f90自由格式的Fortran子程序,需要修改Abaqus的环境配置文件。Abaqus2018环境配置文件的位置与2016的位置不同,在我的电脑中是:D:\Program Files\Dassault Systemes\SimulationServices\V6R2018x\win_b64\SMA\site\win86_64.env

在该环境配置文件的Fortran编译选项中增加'/free':

compile_fortran=['ifort',
                 '/c','/DABQ_WIN86_64', '/extend-source', '/fpp',
                 '/iface:cref', '/recursive', '/Qauto-scalar',
                 '/QxSSE3', '/QaxAVX',
                 '/heap-arrays:1',
                 # '/Od', '/Ob0', # <-- Optimization Debugging
                 # '/Zi', # <-- Debugging
                  '/include:%I', '/include:'+abaHomeInc, '%P', '/free']

并且需要将子程序文件后缀改为.for,之后,将该子程序编译为obj文件(umat-std.obj):

abaqus make library=umat.for

在执行计算任务时将该obj文件作为用户子程序文件调用:

abaqus job=myumatjob user=umat-std.obj

这样就可以正常执行计算了。

(完整)在Abaqus中使用.f90格式的子程序的方法的图1

三、后记

虽然能够修改使用,那么有没有必要采用更高级别的版本呢?就个人经验来说,采用77的语法即可,因为Abaqus子程序有其特殊性,并不是一个完整意义上的软件开发,只是为了实现理论公式的植入或者实现某些算法,比如应力的拉回算法等等。因此无需特别高级Fortran版本就能够实现子程序的编写,换个角度想想,很多计算力学的理论早已在有限元软件中实现,那时候有如今高版本的Fortran语言吗?

另外,高版本的Fortran包含了低版本的所有语法形式和函数,因此从应用的角度讲,没必要花费太多的时间去学习Fortran语言,只需要掌握最基本的语法和函数即可,更多的是需要自己在实际的编写中锻炼编程技术,而不是执拗于某个版本。切记,比版本重要的是是公式要正确,算法要正确!形式主义要不得。

祝顺利,收敛!

技术邻普通用户

附件:


登录后免费查看全文
立即登录
App下载
技术邻APP
工程师必备
  • 项目客服
  • 培训客服
  • 平台客服

TOP

5
1
10