ABAQUS 二次开发概述

随着计算技术和计算机的快速发展,有限元软件的发展速度迅速,功能日渐强大。目前国际上被广泛采用的通用有限元软件有 ANSYS、MSC、ABAQUS 等。利用商业软件进行计算现在已是科学研究中的一项重要手段。由于工程问题的千差万别,不同的用户有不同的专业背景和发展方向,通用软件不免在具体的专业方面有所欠缺,针对这些不足,大部分的通用软件都提供了二次开发功能,以帮助用户减少重复性的编程工作、提高开发起点、缩短研发周期、降低开发成本,并能简化后期维护工作,给用户带来很多方便。基于通用软件平台进行开发,是目前研究的一个重要发展方向。ABAQUS 也提供了若干用户子程序(User Subroutines)接口,它是一个功能非常强大且适用的分析工具,与命令行的程序格式相比,用户子程序的限制少得多,从而使用更加灵活方便。

1. ABAQUS 二次开发概述

ABAQUS 不仅提供标准的有限元分析程序,而且具有良好的开放性,可利用它提供的用户子程序接口生成非标准的分析程序来满足用户的需要,在实际工程中得到广泛应用。ABAQUS 的二次开发包括用户子程序的开发以及 ABAQUS 和其他商业软件接口处理两种方式。本系列主要说明子程序的开发。

ABAQUS 允许用户通过子程序以代码的形式来扩展主程序的功能,并给用户提供了强大而又灵活的用户子程序接口和应用程序接口(Utility Routine),ABAQUS 共有 49 个用户子程序接口,15 个应用程序接口,用户可以定义包括边界条件、荷载条件、接触条件、材料特性以及利用用户子程序和其它应用软件进行数值交换等等。这些用户子程序接口使得用户解决一些问题时有很大的灵活性,同时大大的扩充了 ABAQUS 的功能。例如:通过用户定义单元接口,用户自定义的任何类型的线性或非线性单元都可以被引入模型中,对于线性单元刚度矩阵和质量矩阵可以直接确定。例如:如果荷载条件是时间的函数,这在 ABAQUS/CAE 和 INPUT 文件中是难以实现的,但在用户子程序 DLOAD 中就很容易实现。同时,用户子程序也可被用来定义这些单元的线性和非线性特性。通过用户材料子程序接口,用户可定义任何补充的材料模型,不但任意数量的材料常数都可以作为资料被读取,而且 ABAQUS 对于任何数量的与解相关的状态变量在每一材料计数点都提供了存储功能,以便在这些子程序中应用。

2. 用户子程序特点

  • 如果 ABAQUS 的一些固有选项模型功能有限,用户子程序可以提高 ABAQUS 中这些选项的功能。
  • 通常用户子程序是用 Fortran 语言的代码写成的。
  • 子程序可以以几种不同方式包还在模型中。
  • 由于他们没有储存在 restart 文件中,如果需要的话,可以在重新开始运行时修改。
  • 在有些情况下,子程序可以直接调用 ABAQUS 允许的已有的程序。

3. ABAQUS 用户程序接口与调用方式

ABAQUS 的用户子程序是根据 ABAQUS 提供的相应接口,按照 Fortran 语法,用户自己编写的代码。它是一个独立的程序单元,可以独立的被存储和编译,也能被其它程序单元引用,因此,利用它可带回大量数据供引用程序使用,也可以用它来完成各种特殊的功能。它的一般结构形式是:

SUBROUTINE name (x1,x2,……,xn) 
INCLUDE‘ABA_PARAM.INC’(用于 ABAQUS/Standard 用户子程序中)
OR 
INCLUDE‘VABA_PARAM.INC’(用于 ABAQUS/Explicit 用户子程序中)
…… 
RETURN
END

其中,x1,x2,……,xn 是 ABAQUS 提供的用户子程序的接口参数,有些参数是 ABAQUS 传到用户子程序中的,例如:SUBROUTINE DLOAD 中的 KSTEP、KINC、COORDS;有些是需要用户自己定义的,例如 F。文件 aba_param.inc 和 vaba_param.inc 随着 ABAQUS 软件的安装而包含在操作系统中,它们含有重要的参数,帮助 ABAQUS 主求解程序对用户子程序进行编译和链接。当控制遇到 RETURN 语句时便返回到引用程序单元中去,END 语句是用户子程序结束的标志。

在一个算例中,用户可以用到多个用户子程序,但必须把它们放在一个以。for 为扩展名的文件中。运行带有用户子程序的算例有两种方法:一是在 CAE 中运行,在 EDIT JOB 菜单中的 GENERAL 子菜单的 USER SUBROUTINE FILE 对话框中选择用户子程序所在的文件即可;另外是在 ABAQUS.COMMAND 中运行,语法如下:

ABAQUS job=job-name user={source-file | object-file}

编制用户子程序时应注意:

  • 用户子程序相互之间不能调用,但可以调用用户自己编写的 Fortran 子程序和 ABAQUS 应用程序。ABAQUS 应用程序必须由用户子程序调用。当用户编写 Fortran 子程序时,建议子程序名以 K 开头,以免和 ABAQUS 内部程序冲突。
  • 当用户在用户子程序中利用 OPEN 打开外部文件时,要注意以下两点:一是设备号的选择是有限制的,只能取 15~18 和大于 100 的设备号,其余的都已被 ABAQUS 占用;二是用户需提供外部文件的绝对路径而不是相对路径。
  • 对于不同的用户子程序 ABAQUS 调用的时间是不同的,有的是在每个 STEP 的开始,有的是 STEP 的结尾,有的是在每个 INCREMENT 的开始等等。当 ABAQUS 调用用户子程序时,都会把当前的 STEP 和 INCREMENT 利用用户子程序的两个实参 KSTEP 和 KINC 传给用户子程序,用户可把它们输出到外部文件中,这样就可清楚知道 ABAQUS 何时调用该用户子程序。为保证用户子程序的正确执行,子程序的书写必须遵循 ABAQUS 的相关规定。

此外,ABAQUS 的脚本语言接口非常友好,其自嵌的脚本语言是 Python 系国际上广泛使用、功能强大、具有良好开放性的一种面向对象程序设计语言。所以,应用 Python 在 ABAQUS 中进行二次开发也比较方便,且可移植性强。ABAQUS 以基于 Python 的语法规则向二次开发者提供了许多库函数,这些库函数主要是用来增强 ABAQUS 的交互式(GUI) 操作功能。用户可以通过 ABAQUS 的交互式(GUD 界面实现分析对象的特征造型、指定材料属性、完成网格剖分和控制、提交并监控分析作业,也可以使用 ABAQUS 脚本语言越过 ABAQUS 的交互式(GUI) 界面直接高效地向 ABAQUS 内核提交任务。使用 Python 可以进行参数化建模,修改交互式建立的模型,还可以一次提交多个作业。在国外,众多的有限元分析和研究者热衷于使用 ABAQUS,一个很重要的原因就在于 ABAQUS 给用户提供了功能强大,使用方便的二次开发工具和接口,使得用户可以方便的进行富含个性化的有限元建模、分析和后处理,满足特定工程问题的需要。

  • 分享于 · 2019.02.13 17:47 · 阅读 · 3516

[版权声明] :本文系网友分享,仅以非商业性的交流和科研为目的,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本网( friends@stuch.cn )联系!我们将协调给予处理。转载授权码:确权中,请原作者尽快与我们取得联系,阅读原文(请登录)..

0 条评论

请先 登录 后评论
猜猜我是谁
sister -研究生

10
提问
20
回答
8
文章