Abaqus子程序:基础知识概述1
1
简介
用户子程序被提供来增加一些 Abaqus的功能,为分析提供强有力的和灵活的工具;编写成C、C++或者FORTRAN代码,并且在执行分析时必须包含在模型中,不能相互之间调用;可以在某些情况下调用Abaqus中也提供的工具程序。
2
模型中包含子程序
可以通过指定一个C、C++或者FORTRAN 源码或者包含子程序的预编译目标文件,在一个模型中包括一个或者多个用户子程序。有两种使用方法:
(1)在命令行中敲入下面的输入:
abaqus job =工作名称 user =源文件
(2) Abaqus/CAE用法:
Job 模块—— job editor——General——User subroutine file
3
信息管理与交互
在Abaqus/Standard 中,有时候需要建立运行时间环境并管理与外部数据文件之间的交互作用,或者与用户子程序连接中使用的并行进程之间的交互作用。例如,可以用在分析过程中的外部计算得到的历史相关量,每个增量一次;或者可能为了后处理,需要将用户子程序中的COMMON 块变量所具有的在多个单元上积累得到的输出量,在一个收敛的增量末尾处写入到外部文件中。这样的操作可以使用用户子程序UEXTERNALDB来执行。此用户接口可以潜在地用来与其他程序交换数据,允许 Abaqus/Stand-ard 和其他程序之间的交换信息。
4
子程序编写流程
(1)需要 include的头文件
对于Fortran编写的子程序,每一个以FORTRAN编写的用户子程序必须包括一个下面的声明,作为参数列表后的第一个声明:
Abaqus/Standard中 :
include'aba_param.inc'
Abaqus/Explicit中:
include'vaba_param.inc'
如果变量在主要用户子程序和后续子程序之间交换,则应当在所有子程序中指定上面的包括声明来保持精度。
对于C和C++编写的子程序,每一个C 和 C++用户子程序必须包括声明:
#include < aba_for_c.h >
此文件包含FORTRAN-C接口互用的宏。
文件aba_param. inc、vaba_param.inc和 aba_for_c.h由 Abaqus安装程序在系统上安装,并且包含重要的安装参数。这些声明告诉Abaqus执行程序将用户子程序编译并且链接到Abaqus 余下的部分,来自动地包括aba_param. inc或者vaba_param. inc 文件。因为Abaqus将知道它们在哪里,所以不需要用户找到此文件并将它复制到任何特定的目录。
(2)命名约定
如果用户子程序调用其他子程序(非用户子程序)或使用 COMMON 块传递信息,则此类子程序或 COMMON 块应以字母 K 开头,因为该字母在 Abaqus 中绝不会用于任何子程序或 COMMON 块的名称开头。
用 C 或 C++ 编写的用户子程序将从 Fortran 中调用;因此,它们必须符合 Fortran 调用约定:C 或 C++ 子程序的名称必须包含在 FOR_NAME 宏中,并且参数必须通过引用传递和接收。;例如,
extern “C“ void FOR_NAME(film,FILM) (double & arg1, ...) { ˙˙˙ }
(3)要定义或者更新的变量
用户子程序必须执行它们的既有的功能,而不覆盖Abaqus 的其他部分。用户应当仅仅重新定义如“定义得到的变量”节中确定的那些变量。重新定义“为信息传递进的变量”将具有不可预测的影响。
(4)编译和链接问题
如果在编译或链接子程序期间遇到问题,请确保 Abaqus 环境文件(该文件的默认位置是 Abaqus 安装的 site 子目录)包含系统自定义参数中指定的正确编译和链接命令。这些命令应由 Abaqus 站点管理员在安装过程中设置。参数的数量和类型必须与文档中指定的相对应。参数类型或数量的不匹配可能会导致平台相关的链接或运行时错误。
(5)内存分配注意事项
我们的用户子程序将与 Abaqus 共享内存资源。当需要使用大型数组或其他大型数据结构时,应该动态分配它们的内存,以便从堆而不是堆栈中分配内存。未能动态分配大型数组可能会导致堆栈溢出错误并退出 Abaqus 分析。有关使用本机 Fortran 可分配数组进行动态分配的示例,未来我研究明白了再讲,实际上大多数情况是不用考虑的。
(6)测试与调试
开发用户子程序时,在尝试将它们用于生产分析工作之前,最好在较小的示例中测试它们,其中用户子程序是模型中唯一复杂的方面。如果需要,可以使用 Fortran 单元 7(这里单元是文件的unit,fortran中每个文件对应一个唯一的unit号)将调试输出写入Abaqus/Standard 信息 (.msg) 文件,或者使用 Fortran 单元 6 将调试输出写入 Abaqus/Standard 数据 (.dat) 文件或 Abaqus/Explicit 日志 (.log) 文件;这些单元不应由你的子程序打开,因为它们已由 Abaqus 打开。Fortran 单元 15 到 18 或大于 100 的单元可用于读取或写入其他用户指定的信息。使用其他 Fortran 单元可能会干扰 Abaqus 文件操作;你必须打开这些 Fortran 单元;由于使用了临时目录,因此 OPEN 语句中必须使用文件的完整路径名。
(7)终止分析
当从用户子程序中终止分析时,应使用实用例程 XIT (Abaqus/Standard) 或 XPLB_EXIT (Abaqus/Explicit) 而不是 stop 。这将确保与分析相关的所有文件都正确关闭(终止分析)。
文章来源: 力学混子爱AI