(完整)在Abaqus中使用.f90格式的子程序的方法
一、前言
Fortran語言發(fā)展至今已經(jīng)推出了若干版本,那么究竟采用哪個版本來編寫Abaqus子程序呢?這是困擾很多同學的問題,因為我們能買的Fortran教材基本都是講解的Fortran90/95以上的版本。但是直接采用90或者95以上的版本編寫子程序,Abaqus卻又不能識別。
這里需要說明一點,Abaqus原生支持的FORTRAN77的語法形式,因此采用77寫子程序肯定是沒有問題的,但是實際上更高級的比如90也是能夠支持的,需要對.env文件進行修改,加入支持90的語句即可。
二、方法
Abaqus默認支持的是固定(FORTRAN77)格式的Fortran子程序。編譯或者調(diào)用子程序時會自動搜索文件后綴為:*.for, *.f, *.C, *.c, *.cc, *.CPP, *.cpp, *.CXX, *.cxx 的源代碼文件。
如果想使用.f90自由格式的Fortran子程序,需要修改Abaqus的環(huán)境配置文件。Abaqus2018環(huán)境配置文件的位置與2016的位置不同,在我的電腦中是:D:\Program Files\Dassault Systemes\SimulationServices\V6R2018x\win_b64\SMA\site\win86_64.env
在該環(huán)境配置文件的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
在執(zhí)行計算任務時將該obj文件作為用戶子程序文件調(diào)用:
abaqus job=myumatjob user=umat-std.obj
這樣就可以正常執(zhí)行計算了。

三、后記
雖然能夠修改使用,那么有沒有必要采用更高級別的版本呢?就個人經(jīng)驗來說,采用77的語法即可,因為Abaqus子程序有其特殊性,并不是一個完整意義上的軟件開發(fā),只是為了實現(xiàn)理論公式的植入或者實現(xiàn)某些算法,比如應力的拉回算法等等。因此無需特別高級Fortran版本就能夠?qū)崿F(xiàn)子程序的編寫,換個角度想想,很多計算力學的理論早已在有限元軟件中實現(xiàn),那時候有如今高版本的Fortran語言嗎?
另外,高版本的Fortran包含了低版本的所有語法形式和函數(shù),因此從應用的角度講,沒必要花費太多的時間去學習Fortran語言,只需要掌握最基本的語法和函數(shù)即可,更多的是需要自己在實際的編寫中鍛煉編程技術(shù),而不是執(zhí)拗于某個版本。切記,比版本重要的是是公式要正確,算法要正確!形式主義要不得。
祝順利,收斂!
技術(shù)鄰普通用戶
附件:
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















