abaqus二次开发概述
说明
本系列文章本人基本没有原创贡献,都是在学习过程中找到的相关书籍和教程相关内容的汇总和梳理编辑。为了尊重原创者成果,本人在本系列文章后面列出了参考和引用的文献来源。
abaqus二次开发概述
导语
随着计算技术和计算机的快速发展,有限元软件的发展速度迅速,功能日渐强大。目前国际上被广泛采用的通用有限元软件有 ANSYS、MSC、ABAQUS 等。利用商业软件进行计算现在已是科学研究中的一项重要手段。由于工程问题的千差万别,不同的用户有不同的专业背景和发展方向,通用软件不免在具体的专业方面有所欠缺,针对这些不足,大部分的通用软件都提供了二次开发功能,以帮助用户减少重复性的编程工作、提高开发起点、缩短研发周期、降低开发成本,并能简化后期维护工作,给用户带来很多方便。基于通用软件平台进行开发,是目前研究的一个重要发展方向。ABAQUS 也提供了若干用户子程序(User Subroutines)接口,它是一个功能非常强大且适用的分析工具,与命令行的程序格式相比,用户子程序的限制少得多,从而使用更加灵活方便。
ABAQUS不仅提供标准的有限元分析程序,而且具有良好的开放性,可利用它提供的用户子程序接口生成非标准的分析程序来满足用户的需要,在实际工程中得到广泛应用。abaqus的二次开发包括用户子程序的开发以及abaqus和其他商业软件接口处理两种方式。本系列主要说明子程序的开发。
ABAQUS 允许用户通过子程序以代码的形式来扩展主程序的功能,并给用户提供了强大而又灵活的用户子程序接口和应用程序接口(Utility Routine),ABAQUS共有49个用户子程序接口,15个应用程序接口,用户可以定义包括边界条件、荷载条件、接触条件、材料特性以及利用用户子程序和其它应用软件进行数值交换等等。这些用户子程序接口使得用户解决一些问题时有很大的灵活性,同时大大的扩充了 ABAQUS 的功能。例如:通过用户定义单元接口,用户自定义的任何类型的线性或非线性单元都可以被引入模型中,对于线性单元刚度矩阵和质量矩阵可以直接确定。例如:如果荷载条件是时间的函数,这在ABAQUS/CAE 和INPUT文件中是难以实现的,但在用户子程序DLOAD中就很容易实现。同时,用户子程序也可被用来定义这些单元的线性和非线性特性。通过用户材料子程序接口,用户可定义任何补充的材料模型,不但任意数量的材料常数都可以作为资料被读取,而且 ABAQUS 对于任何数量的与解相关的状态变量在每一材料计数点都提供了存储功能,以便在这些子程序中应用。
用户子程序特点
- 如果abaqus的一些固有选项模型功能有限,用户子程序可以提高abaqus中这些选项的功能。
- 通常用户子程序是用Fortran语言的代码写成的。
- 子程序可以以几种不同方式包还在模型中。
- 由于他们没有储存在restart文件中,如果需要的话,可以在重新开始运行时修改。
- 在有些情况下,子程序可以直接调用abaqus允许的已有的程序。
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给用户提供了功能强大,使用方便的二次开发工具和接口,使得用户可以方便的进行富含个性化的有限元建模、分析和后处理,满足特定工程问题的需要。
abaqus用户子程序分类
ABAQUS用户子程序大致可以分为7类,下面为具体的分类及用户常用子程序。
- 用户定义的初始条件
利用此类子程序可以在分析时定义初始条件,例如:初始应力场的定义,可以采用SIGINI用户子程序来定义;在渗流场分析时定义初始孔隙水压力分析可采用UPOREP用户子程序;多孔介质初始孔隙度分布的定义可采用VOIDRI用户子程序。 - 用户定义的边界条件
利用此类子程序可以在结构分析或耦合分析时定义特殊类型的边界条件,如定义节点位移,定义分布机械载荷,定义流体流速和流量等。例如:定义非均布的渗流流速和流量可采用DFLOW和DFLUX用户子程序,以及定义非均布的渗流系数可采用FLOW用户子程序;定义特殊类型的位移边界可采用DISP用户子程序;定义特殊类型分布的面力载荷可采用DLOAD子程序;定义特殊分布的牵引力可采用UTRACLOAD子程序;定义温度场边界的UTEMP子程序。 - 用户定义的材料特性和本构关系
利用此类子程序可以定义各种本构模型,如各向异性或正交各向异性的弹性应力-应变关系,各种非线性弹塑性本构关系、也可以定义蠕变应变率演化方程、定义非线性应力-应变关系,定义加工硬化或应变硬化曲线等。例如:采用UMAT子程序可以定义各类本构模型,包括非线性弹性、弹塑性以及蠕变等模型;例如采用CREEP子程序可以定义各类蠕变或膨胀演化方程;关于材料的热力学特性可以采用UMATHT子程序;定义粘弹性材料或超弹性材料可以采用UHYPEL和UHYPER子程序;Mullins材料模型的损伤特性定义可以采用UMULLINS用户子程序。 - 用户定义的单元
对于特殊类型的单元,可采用UEL子程序进行定义。 - 用户定义的状态变量
状态变量主要包括定义场变量、与求解过程相关的状态变量,以后重新定义材料点的状态变量,主要有UFIELD子程序、SDVINI子程序和USDFLD子程序。此外还包括定义摩擦接触属性的子程序,如定义摩擦接触行为的FRIC子程序,以及接触面行为定义的UINTER子程序等。 - 定义输出量的用户子程序
此类用户子程序可以定义提取单元结果,将单元量输出,写到后处理结果文件中,如UVARM子程序;此外,读取结果文件可采用URDFIL子程序。 - 其他用户子程序
此外,还包括特殊类型用途的子程序,如定义多点约束的子程序MPC,定义局部坐标的ORIENT子程序等。上述子程序的分类仅限于在岩土工程领域,其他领域有不同的分类方法。
常用用户子程序介绍
- 1.DLOAD子程序
- 2.DISP子程序
- 3.CREEP子程序
- 4.FLOW子程序
- 5.DFLOW子程序
- 6.SIGINI子程序
- 7.USDFLD子程序
- 8.UPOREP子程序
- 9.VOIDRI子程序
- 10.UEXTERNALDB子程序
- 11.URDFIL子程序
Refence
- 1.《基于ABAQUS的有限元分析和应用》,庄茁、由小川等 , 清华大学出版社
- 2.《ABAQUSA有限元分析–从入门到精通》, 刘展、钱英莉 ,人民邮电出版社
- 3.《浅谈ABAQUS用户子程序》,李青 清华大学工程力学系
- 4.《ABAQUS_Fortran二次开发》,百度文库xueni408上传文章(找不到原文出处,在此备注)
- 5.《Abaqus二次开发高级专题》,百度文库54yiwei上传
- 6.《ABAQUS二次开发基础》,百度文库千山暮雪婷上传
abaqus二次开发概述的更多相关文章
- Office 365开发概述及生态环境介绍(二)
本文于2017年3月19日首发于LinkedIn,原文链接在这里 在上一篇 文章,我给大家回顾了Office发展过来的一些主要的版本(XP,2003,2007,2013等),以及在Office客户端中 ...
- 浅谈Excel开发:一 Excel 开发概述
做Office相关的开发工作快一年多了,在这一年多里,在插件的开发中遇到了各种各样的问题和困难,还好同事们都很厉害,在和他们的交流讨论中学到了很多的知识.目前Office相关的开发资料是比较少 ...
- [转] GIS二次开发(C#+AE)
乘风莫邪 原文GIS二次开发(C#+AE) 此过程描述了使用ArcGIS控件建立和部署应用的方法和步骤. 你可以在下面的目录下找到相应的样例程序: <</FONT>安装目录>/ ...
- ODI KM二次开发手册
ODI KM二次开发手册 分类: ODI(16) 目录(?)[+] 1 引言 1.1 编写目的 本手册面向的读者对象为具备数据集成业务知识及对ODI操作了解的开发人员,作为其完成基于ODI基础上K ...
- Excel 开发概述
浅谈Excel开发:一 Excel 开发概述 做Office相关的开发工作快一年多了,在这一年多里,在插件的开发中遇到了各种各样的问题和困难,还好同事们都很厉害,在和他们的交流讨论中学到了很多的知识. ...
- OMCS开发手册(04) -- 二次开发流程
在掌握了前面几篇关于OMCS的详细介绍后,我们就可以正式基于OMCS进行二次开发了.下面我们就从服务端和客户端的角度分别介绍开发的步骤. 一.服务端开发 抛开具体的业务逻辑而言,就OMCS的服务端的开 ...
- JAVA之旅(二十二)——Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习
JAVA之旅(二十二)--Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习 继续坚持下去吧,各位骚年们! 事实上,我们的数据结构,只剩下这个Map的知识点了,平时开发中 ...
- 【wireshark】Wireshark原理分析与二次开发系列
1.版权声明 本系列文章是本人花了很多心血写成,wireshark本是开源软件,本人也乐于技术知识和经验的分享,更是欣赏和推崇开源精神,因此任何看到本文的人都可以随意转载,但只有一个要求: 在大段甚至 ...
- 微信小程序开发-概述
微信小程序开发-概述 一.小程序申请&APPID 登录微信平台申请成为小程序开发者,小程序不可直接使用服务号或订阅号的AppID,需要登录微信公众平台管理后台,在网站的"设置&quo ...
随机推荐
- bzoj3771: Triple(容斥+生成函数+FFT)
传送门 咳咳忘了容斥了-- 设\(A(x)\)为斧头的生成函数,其中第\(x^i\)项的系数为价值为\(i\)的斧头个数,那么\(A(x)+A^2(x)+A^3(x)\)就是答案(于是信心满满的打了一 ...
- Java 执行linux命令(转)
转自 http://blog.csdn.net/a19881029/article/details/8063758 java程序中要执行linux命令主要依赖2个类:Process和Runtime 首 ...
- Gym - 101810F ACM International Collegiate Programming Contest (2018)
bryce1010模板 http://codeforces.com/gym/101810 #include<bits/stdc++.h> using namespace std; #def ...
- 剑指 Offer
3.1 找出数组中重复的数 来源:AcWing 题目描述 给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 的范围内. 数组中某些数字是重复的,但不知道有几个数字重复了,也不 ...
- JavaScriptSerializer类序列化日期时需要注意的问题
1.让我们来看看使用JavaScriptSerializer类序列化日期会出现什么问题? 1)创建用于序列化的测试类,如下: public class Person { public int ID { ...
- arcgis jsapi接口入门系列(2):图层基础操作
//图层相关demo layerFun: function () { //获取地图的所有图层(不包括的图层类型:底图图层(basemaps)) let layers = this.map.layers ...
- uvm_misc——杂货铺(miscellaneous)
uvm_misc 是个很有意思的文件夹,本质上就是个UVM的杂货铺,包含一些很重要的class, task, function, 但不知道给归类到哪儿,所以,uvm_misc就很好地承担了这个任务,几 ...
- IOSButton自定义
+ (APCCustomBackButton *)customBackButtonWithTarget:(id)aTarget action:(SEL)anAction tintColor:(UICo ...
- c#网站对服务器的数据库的备份与还原
在网站上备份数据库 1.前台页面 <div> 需要备份的文件名:<asp:TextBox ID="bfFile" runat="server" ...
- tomcat配置 —— 各个目录的作用
tomcat各目录(文件)作用 tomcat-7.0.50解压版,主目录一览: 我们可以看到主目录下有bin,conf,lib,logs,temp,webapps,work 7个文件夹,下面对他们分别 ...