ABAQUS关联FORTRAN(传统方法)
ABAQUS关联FORTRAN(传统方法)
前言
abaqus求解器采用Fortran进行计算。如果需要使用一些二次开发Fortran子程序(subroutine)的话,需要关联Fortran编译器。
本文所谓传统方法,就是网络上抄得最多的这一套ABAQUS+ONEAPI+VS的解决方案。我在此处再抄一遍,然后顺便总结一下我发现的可能出错的问题。
步骤
ABAQUS的安装顺序无关紧要,什么时候都可以。唯一需要注意的是,必须安装CAA API。关于Fortran的编译环境,需要按照这个顺序进行安装和设置。
- 先安装Visual Studio(简称VS)
- 安装oneAPI Base Toolkit
- 安装oneAPI HPC Toolkit
- 将abaqus启动命令关联Fortran编译器
组件的简介和版本搭配
Visual Studio是一个IDE(注意,不是Visual Studio Code),可以直接搜索引擎找到微软官网,然后下载。
Intel oneAPI 是一个统一的编程模型,我们需要的是base Toolkit和HPC Toolkit两个产品。第一个Base Toolkit是所有场景都一定要下载的,第二个HPC Toolkit包括我们需要的Fortran。
需要注意的是,Visual Studio和ONEAPI的版本不能太高,最好不高过Abaqus的版本,否则可能会出问题。关于版本搭配,建议在网上找到已有的教程,然后严格按照人家的版本搭配来做。
虽然下面我会说最少建议安装哪些模块,但是在你不知道这些选择分别意味着什么,且你的硬盘没有压力的情况下,可以考虑把所有组件一并安装,以免你的系统存在某些奇葩设置导致过程中出现一些奇怪的问题(也可以说是为了提升$robustness$)。
如果这套东西在安装完后无法运行,就得从头开始再来一遍,完全卸载再完全重装,我觉得这个过程真的很折腾。
安装过程
安装Visual Studio
在微软官网上面安装的VS默认最新版,前面提到可能存在版本问题,所以建议在网上自己找匹配版本的安装包。选择社区版(community)就够用了。这是VS2022的链接。

安装过程为:确定确定确定确定,一路冲下去。在workload/选择安装组件那步,如果你真的只用这玩意当一个C++和Fortran的编译环境组件的话,选择“使用C++的桌面开发”即可。
自定义安装路径的时候,一定不能有特殊字符,只能有英文+英文标点。下同。
全都安装的话,大概要50G吧,还是挺大的。

安装oneAPI Base Toolkit
一路确定下一步即可。
在右下角customize处调整安装路径,安装的组件等。

建议至少选框选出来这些东西,因为全选的话需要31.2GB,硬盘还是有点压力的。

我们最需要的是其中的C++ comlier,在你取消选择某些组件的时候,会弹出提示“This tool is required for other tool(s) in your download package [toolnameA]。意思是说,如果需要安装toolnameA,就必须先安装这个东西作为前置条件。遇到这种情况建议保留这个工具。

如果机器没有显卡的话,它会提示你,需要开发运行GPU加速应用时候需要安显卡,这一步确认过去即可(此处截图的地方是虚拟机)。有没有显卡自己肯定清楚。

关联版本,安装多个版本vs也只能选一个。

最后用户协议确定就可以安装了。
安装oneAPI HPC Toolkit
HPC Toolkit过程类似,选择组件的时候至少选择Fortran complier

其他东西一样,一路确定即可。
将abaqus启动命令关联Fortran编译器
添加环境变量
需要把oneAPI的vars.bat和vs2022的vcvarsall.bat的文件路径添加到windows环境变量Path里面。
如果安装得是盗版abaqus,添加环境变量你一定做过一次了,跳过这部分吧如果忘了怎么添加环境变量,通过我的电脑→属性→高级系统设置→环境变量→在系统变量中找到Path→编辑→新建找到,或者直接windows左下角搜索“环境变量”进去。
默认安装的话,两个路径分别是
C:\Program Files (x86)\Intel\oneAPI\compiler\2022.2.1\env
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build
oneAPI的vars.bat一定要找complier文件夹下面那个。
编辑abaqus的启动命令
在安装abaqus的时候,会让你设置一个命令文件夹,即,你的abaqus命令都在这里面。如下图所示:

如果你忘记了这个文件夹的位置,可以通过开始菜单找到abaqus cae的快捷方式,然后右键菜单选择“属性”,找到目标位置,一层层往下找,直到找到一个bat文件为止。
此外,建议找到abaqus_v6.env这个文件(一般在C:\SIMULIA\Dassault Systemes\SimulationServices\V6R2022x\win_b64\SMA\site文件夹里面,找不到就自己搜索)最后面加一行compile_Fortran += ['/names:lowercase',]意思是开启Fortran代码的小写支持。
现在前置工作都弄完了,有两种bat文件的编辑方案:
注意:编辑之前,请把原来的.bat文件都复制一份作为备份。
第一种:
找到abq2022.bat或者abaqus.bat(只有一个abaqus版本的话,建议添加到abaqus.bat里面),在第一行添加这些内容(原来的别删):
call "C:\Program Files (x86)\Intel\oneAPI\compiler\2022.1.1\env\vars.bat" amd64 vs2022
完成。
如果感觉不好用,就再加一行,变成:
call "C:\Program Files (x86)\Intel\oneAPI\compiler\2022.1.1\env\vars.bat"
call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
第二种:
新建一个.txt文件(建议添加到abaqus 的commands directory里面),输入这些玩意
@"C:\Program Files (x86)\Intel\oneAPI\compiler\2022.2.1\env\vars.bat"^
-arch amd64 vs2022 & abq2022 cae
然后修改后缀名为.bat。起一个名字。两种写法是等效的。
验证是否成功关联
打开abaqus commands快捷方式(或者随便在哪里打开一个终端),第一步:输入:
abaqus info=system
此时会出来一堆信息,查看有没有Fortran Complier即可。
然后再分别输入
abaqus verify -user_exp
和
abaqus verify -user_std
分别检查你的complier是否关联到了explicit求解器和standard求解器。
如果报错,就按照给的错误提示修改,一般情况下,错误原因都是某某地方的环境变量没添加上。这些个东西,若无意外都是安装过程中自动添加的。
abaqus verify这个命令会检查很多东西,我们输入后面这俩的目的是仅仅检查这两小部分。abaqus遇到其他未知问题的话可以用这个abaqus verify整个过一遍看看问题发生在哪,当然时间会很长。
关于bat文件编辑的一些说明
为什么写到abaqus.bat里面?
abaqus.bat文件,默认长这样:
@echo off
"C:\SIMULIA\Commands\abq2022\abq2022.bat" %*
可以看到,abaqus.bat的作用其实就是打开abq2022.bat。
至于,abq2022.bat文件,默认长这样:
@echo off
setlocal
set ABA_COMMAND=%~nx0
set ABA_COMMAND_FULL=%~f0
"C:\SIMULIA\EstProducts\2022\win_b64\code\bin\SMALauncher.exe" %*
endlocal
也就是说,当你在电脑终端里面输入abaqus cae的时候,电脑是通过abaqus.bat启动abq2022.bat,再通过abq2022.bat启动了abaqus的前处理cae。
所以如果你把关联命令添加到了abaqus.bat,当你在终端输入abaqus cae的时候,可以关联启动Fortran编译环境,而输入abq2022 cae的时候,就不会启动这个编译环境。这个编译环境会拖慢运行速度,所以我非必要不启动。
因为我电脑里有abaqus2022和2024两个版本,所以我的做法是,额外写了两个命令,关联到abq2022.bat和abq2024.bat里面。比如,我写了一个abq2022f.bat,长这样:
call "C:\Program Files (x86)\Intel\oneAPI\compiler\2022.2.1\env\vars.bat" amd64 vs2022
call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
@echo off
"C:\SIMULIA\Commands\abq2022\abq2022.bat" %*
这样的话:
我在终端输入abaqus cae 运行的是有fortran的2024(2024后装)
输入abq2022 cae和abq2024 cae,分别运行没有fortran的2022和2024;
输入abq2022f cae和abq2024f cae,分别运行有fortran的2022和2024;
同理,把abq2022f写成“第二种”样式也行,这样就是运行有fortran的2022。这个abq2022f是我自己命名,愿意命名成abq114514之类的都随便。
@"C:\Program Files (x86)\Intel\oneAPI\compiler\2022.2.1\env\vars.bat"^
-arch amd64 vs2022 & abq2022 cae
显然,如果你没动abaqus.bat,而是创建了一个abq2022f.bat关联启动fortran编译器的话,验证部分的那些命令中,abaqus都要改成abq2022f。
为什么新写的命令放到commands文件夹里面?
因为这样,我可以通过终端直接启动abaqus,方便指定abaqus的工作目录。在桌面随便写一个.bat,是没办法直接做到在任意文件夹都直接打开终端然后运行的。这个然可以设置,但直接扔到abaqus自己的文件夹里面比较快。
安装后卡顿
关联Fortran编译器后,ABAQUS运行会变卡,所以我一般是到了需要求解的时候再关联,平时运行不关联fortran的那个bat文件。
==如果想要每次启动都带着这玩意还不影响速度的话,解决方案我还没找到,等找到了就补充进来。==
版权声明:
作者:chli2956
链接:https://www.cdli2956.top/mystudy/software/2024/07/abaqus%e5%85%b3%e8%81%94fortran%ef%bc%88%e4%bc%a0%e7%bb%9f%e6%96%b9%e6%b3%95%ef%bc%89/
来源:cdli学习测试
文章版权归作者所有,未经允许请勿转载。

共有 0 条评论