首页/文章/ 详情

使用C++编写abaqus用户子程序

6月前浏览8819

本文摘要(由AI生成):

本文介绍了使用C++代替Fortran编写Abaqus用户子程序的方法。由于Fortran语言可读性差且历史负担重,许多工程师更熟悉C++。Abaqus 6.13之后的版本支持C++编写用户子程序。文章详细阐述了运行环境配置、子程序编写和子程序提交的过程,包括C++编译器的调用、C++函数与Fortran子程序的协调、数据类型映射等。通过对比基于Fortran和C++编写的相同用户子程序,展示了两者之间的差异。最后指出,基于C++编写的Abaqus用户子程序的提交方式与基于Fortran的方式相同。


       Fortran语言的可读性差,代码的历史负担重,造成基于Fortran的开发和维护非常困难。从一个有限元分析工程师的角度,大多数人在编程语言方面的知识体系里,对C++的熟悉程度远超过Fortran。

       在abaqus6.13之后的版本,对于使用C++编写abaqus用户子程序是完全支持的。

1.      运行环境配置

       基于C++编写abaqus用户子程序的运行环境配置方式与基于Fortran编写用户子程序基本相同,唯一的区别在于,假如在visual studio安装时,没有勾选C++编译器,需手动勾选安装,如下图所示。

11.png

在abaqus中通过各种方式提交包含基于C++编写的子程序(后缀为.c/.cpp等)的分析任务后,会首先调用C++编译器,编译子程序,然后调用Fortran编译器,链接子程序。


在abaqus command中输入命令abaqus information=system,查看C++编译器的运行情形,如下图,则表示运行环境配置成功。

12.png

2.      子程序编写

      使用C++编写用户子程序时,子程序写作成一个C++函数。通过下面的两个步骤,实现C++用户子程序与Fortran用户子程序的协调。

a.将外部的C++名字映射到外部的Fortran名字

             通过包含abaqus内置的宏文件aba_for_c.h,并使用FOR_NAME宏来声明子程序的名字,这样C++子程序中的函数名可以与Fortran子程序相协调,这样基于C++编写的子程序能被abaqus中的Fortran代码调用。

#include <aba_for_c.h>

Extern “C”

Void FOR_NAME(dload, DLOAD)()

b. 将C++数据类型映射到Fortran数据类型

所有子程序的参数与Fortran子程序相同,但是需要通过引用的方式传入。

 (double & F, int & KSTEP, int & KINC, double (& TIME)[2],int & NOEL,
int & NPT, int & LAYER, int & KSPT, double (& COORDS)[3], int & JLTYP, char (& SNAME)[80])

基于C++的用户子程序内代码块遵循C++的编写代码规范,涉及到子程序中需要调用abaqus中的功能程序时,正常调用即可。这样,就可以完全抛开Fortran的代码,使用自己熟悉的C++进行子程序的编写了。


下面是分别是基于Fortran和基于C++编写的相同的用户子程序,通过对比,可以很清晰地发现两者的差别。

13.png


图  基于C++的Dload用户子程序

14.png

图 基于Fortran的Dload用户子程序

3.      子程序提交

基于C++编写的abaqus用户子程序,提交任务运行的方式,与基于Fortran编写的abaqus用户子程序完全相同。可以使用abaqus/CAE的交互界面提交,也可以基于abaqus command用如下命令行提交

Abaqus  job=    ,user=   , cpus=   


Abaqus新能源多尺度
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2020-09-14
最近编辑:6月前
DS_Kevin
签名征集中
获赞 7粉丝 59文章 8课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈