ABAQUS-UMAT弹塑本构二次开发的实现

合集下载

第 章 ABAQUS用户材料子程序二次开发及应用

第 章 ABAQUS用户材料子程序二次开发及应用

图 10-1 ABAQUS 调用 UMAT 的过程示意图
10.3 本构积分算法
材料本构模型的有限元实现主要包括两方面的内容: 采用一定的方法对本构方程进行局部积分以得到在给定应变增量下的应力增量; 推导相应的一致性切线刚度矩阵。 当应力超出屈服面后,要进行应力调整,使之返回更新后的屈服面,采用的方法称为本构积分 算法。近年来,对金属材料本构模型各种积分算法的理论分析与研究取得重大进展,发现隐式积分 法具有精度好、效率高、无条件稳定等许多优点,且已越来越广泛地应用于非线性计算力学中,出 现了各种一致性切线刚度法。然而目前对岩土非线性本构模型的隐式积分算法的研究不如金属材料 这么成熟,其原因在于:一方面由于采用非相关联流动法则使切线刚度矩阵不对称,给有限元计算 与程序设计造成一些特殊困难;另一方面, 岩土本构模型的复杂性如“奇异角点”问题也使直接计 算岩土弹塑性本构矩阵和切线刚度矩阵遇到困难。
第 10 章 ABAQUS 用户材料子程序二次开发及应用
知识要点:
; ABAQUS 材料模型库和单元库简介 ; 用户子程序 UMAT 接口原理 ; 本构积分算法 ; ABAQUS 对于材料非线性问题的处理 ; UMAT 材料子程序实现及应用 ; D-P 模型与 M-C 模型参数之间的关系 ; 算例分析
本章导读:
本章主要介绍了 ABAQUS 材料模型库和单元库、用户子程序 UMAT 接口原理以及 ABAQUS 对于材料非线性问题的处理,然后就岩土介质弹塑性本构积分算法以及 Drucker-Prager 模型和 Mohr-Coulomb 模型参数之间的转换关系进行了推导。最后,以修正的 Mohr-Coulomb 模型为例, 对用户材料子程序 UMAT 二次开发进行了讲解,并给出算例验证所开发子程序的可靠性和精确性。

ABAQUS后处理二次开发在塑性成形模拟中的应用

ABAQUS后处理二次开发在塑性成形模拟中的应用
ABAQUS/ CAE 模块是一个完整的 ABAQUS 环 境 , 提供一个简单一致的接口 , 可以用于创建、提交、 监视 和 评 价 模 拟 所 得 到 的 结 果[3] 。用 户 在 使 用 ABAQUS/ CAE 的图形化用户界面 ( GUI) 创建模型和 浏览结果时 , 每个操作都有命令提交给 ABAQUS/ CAE。GUI 使用 Python 语言产生这些命令 , 并提交给 ABAQUS/ CAE 内核。内核解释这些命令并执行[1] 。
的压下挠度矫直后 , 产品残余几何形态合格 。
参考文献 : [ 1 ] 李忠富 , 臧勇 , 王会刚1 H 型钢九辊变辊距矫直力能参数与压
弯挠度关系解析 [J ] 1 北京科技大学学报 , 2004 , (5) : 92 941 [ 2 ] 崔甫1 矫直原理与轿直机械 [M] 1 北京: 冶金工业出版社120021 [ 3 ] 王会刚 1 H 型钢矫直机理及有限元动态仿真 [ D ] 1 北京科技
关键词 : ABAQU S ; Pyt ho n ; 后处理 ; 数值模拟 ; 塑性成形 中图分类号 : TP391 文献标识码 : A 文章编号 : 100023940 ( 2006) 0420111204
Appl ication of second2developed ABAQUS post2process on numerical simulation of plastic forming
模拟的结果 , 本文提出使用 Pyt ho n 语言对 ABAQU S 后处理进行二次开发来达到这一目的 。文中探讨了二次开发 实现的原理 , 以及其中文件的读写与复制 、数据读取与处理 、结果输出与查看等关键技术 , 并以一个厚度处理的实 例来说明 。结果表明使用 Pyt ho n 对 ABAQU S 模拟产生的结果数据库进行处理 , 可以得到所要查看的厚度数据 , 从而为浏览结果以及指导后续的模拟优化提供了便利 。

abaqus二次开发

abaqus二次开发

Abaqus 使用FQA:Q: abaqus的图形如何copy?A: file>print>file格式为png,可以用Acdsee打开。

Q: 用Abaqus能否计算[Dep]不对称的问题?A: 可以,并且在step里面的edit step对话框other里面的matrix solver有个选项。

Q: 弹塑性矩阵【D】与ddsdde有何联系?A: stress=D*stran;d(stress)=ddsdde*d(stran)。

Q: 在abaqus中,如果采用umat,利用自己的本构,如何让abaqus明白这种材料的弹塑性应变,也就是说,如何让程序返回弹性应变与塑性应变,好在output中输出,我曾想用最笨地方法,在uvarm中定义输出,利用getvrm获取材料点的值,但无法获取增量应力,材料常数等,研究了帮助中的例子,umatmst3.inp,umatmst3.for,他采用mises J2 流动理论,我在output history 显示他已进入塑性状态,但他的PE仍然为0!!?A: 用uvar( )勉强成功。

Q: 本人在用umat作本构模型时,*static,1,500,0.000001,0.1 此时要求的增量步很多,即每次增量要很小,*static1,500 时,在弹性向塑性过度时,出现错误,增量过大,出现尖点.?A: YOU CAN TRY AS FOLLOWS:*STEP,EXTRAPOLA TION=NO,INC=2000000*STA TIC0.001,500.0,0.00001,0.1。

Q: 模型中存在两个物体的接触,计算过程中报错,怎么回事?A: 接触问题不收敛有两个方面不妨试试:一、在*CONTACT PAIR 里调试ADJUST参数;二、调一些模型参数,比如FRICTION等。

Q: 在边界条件和加载时,总是有initial这个步,然后是我们自己定义的加载步,请问这个initial步,主要作用是什么?能不能去掉?A: 不能去掉,所有的分析都有,是默认的步。

第 章 ABAQUS用户材料子程序二次开发及应用

第 章 ABAQUS用户材料子程序二次开发及应用
C INCLUDE 'ABA_PARAM.INC'
C CHARACTER*80 CMNAME DIMENSION STRESS(NTENS),STATEV(NSTATV),
1 DDSDDE(NTENS,NTENS),DDSDDT(NTENS),DRPLDE(NTENS), 2 STRAN(NTENS),DSTRAN(NTENS),TIME(2),PREDEF(1),DPRED(1), 3 PROPS(NPROPS),COORDS(3),DROT(3,3),DFGRD0(3,3),DFGRD1(3,3)
PROPS (NPROPS):材料常数数组。材料常数的个数,等于关键词“*USER MATERIAL”中 “CONSTANTS”常数设定的值。矩阵中元素的数值对应于关键词“USER MATERIAL”下面的数 据行。
SSE,SPD,SCD:分别定义每一增量步的弹性应变能,塑性耗散和蠕变耗散。它们对计算结 果没有影响,仅仅作为能量输出。 STRAN (NTENS):应变数组。
本章导读:
本章主要介绍了 ABAQUS 材料模型库和单元库、用户子程序 UMAT 接口原理以及 ABAQUS 对于材料非线性问题的处理,然后就岩土介质弹塑性本构积分算法以及 Drucker-Prager 模型和 Mohr-Coulomb 模型参数之间的转换关系进行了推导。最后,以修正的 Mohr-Coulomb 模型为例, 对用户材料子程序 UMAT 二次开发进行了讲解,并给出算例验证所开发子程序的可靠性和精确性。
挖掘等领域;Cam-Clay 模型,适合于粘土类土壤材料模拟;Mohr-Coulomb 模型,这种模型与 Capped Drucker-Prager 模型相似,但可以考虑不光滑小表面情况;泡沫材料模型可以模拟高度挤压材料, 可用于消费品包装及车辆安全装置等领域;混凝土材料模型,体现混凝土弹塑性破坏理论;渗透性 材料模型,定义依赖孔隙比率、饱和度和流速的各向同性和各向异性的渗透性材料。

ABAQUS子程序UMAT里弹塑本构的实现

ABAQUS子程序UMAT里弹塑本构的实现

前言有限元法是工程中广泛使用的一种数值计算方法。

它是力学、计算方法和计算机技术相结合的产物。

在工程应用中,有限元法比其它数值分析方法更流行的一个重要原因在于:相对与其它数值分析方法,有限元法对边界的模拟更灵活,近似程度更高。

所以,伴随着有限元理论以及计算机技术的发展,大有限元软件的应用证变得越来越普及。

ABAQUS软件一直以非线性有限元分析软件而闻名,这也是它和ANSYS,Nastran等软件的区别所在。

非线性有限元分析的用处越来越大,因为在所用材料非常复杂很多情况下,用线性分析来近似已不再有效。

比方说,一个复合材料就不能用传统的线性分析软件包进行分析。

任何与时间有关联,有较大位移量的情况都不能用线性分析法来处理。

多年前,虽然非线性分析能更适合、更准确的处理问题,但是由于当时计算设备的能力不够强大、非线性分析软件包线性分析功能不够健全,所以通常采用线性处理的方法。

这种情况已经得到了极大的改善,计算设备的能力变得更加强大、类似ABAQUS这样的产品功能日臻完善,应用日益广泛。

非线性有限元分析在各个制造行业得到了广泛应用,有不少大型用户。

航空航天业一直是非线性有限元分析的大客户,一个重要原因是大量使用复合材料。

新一代波音 787客机将全部采用复合材料。

只有像 ABAQUS这样的软件,才能分析包括多个子系统的产品耐久性能。

在汽车业,用线性有限元分析来做四轮耐久性分析不可能得到足够准确的结果。

分析汽车的整体和各个子系统的性能要求(如悬挂系统等)需要进行非线性分析。

在土木工程业, ABAQUS能处理包括混凝土静动力开裂分析以及沥青混凝土方面的静动力分析,还能处理高度复杂非线性材料的损伤和断裂问题,这对于大型桥梁结构,高层建筑的结构分析非常有效。

瞬态、大变形、高级材料的碰撞问题必须用非线性有限元分析来计算。

线性分析在这种情况下是不适用的。

以往有一些专门的软件来分析碰撞问题,但现在ABAQUS在通用有限元软件包就能解决这些问题。

ABAQUS二次开发教程

ABAQUS二次开发教程

ABAQUS(Python语言)二次开发人生苦短,我用Python作者:Fan Shengbao2017年12月目录第一章 Python程序基本语法 (1)1.1 Python语法结构 (1)1.2 Python元组 (1)1.3 Python列表 (2)1.4 Python字典 (3)1.5 Python集合 (3)1.6 Python字符串 (4)1.7 Python分支语句 (5)1.8 Python循环语句 (5)1.8.1for循环51.8.2while循环51.9 Python定义函数 (6)1.10 Python模块 (7)1.11 Python包 (7)1.12 Python文件和目录 (7)1.12.1 目录操作 (7)1.12.2 文件操作 (8)1.13 Python异常处理 (8)第二章 ABAQUS/Python二次开发 (9)2.1 ABAQUS执行Python程序 (9)2.2 编写ABAQUS/Python程序 (10)2.3 ABAQUS录制Python程序 (10)2.4 ABAQUS/Python对象介绍 (11)2.4.1 session对象 (11)2.4.2 mdb对象 (11)2.4.3 odb对象 (13)2.5 ABAQUS完整二次开发示例 (14)2.6 ABAQUS二次开发常用函数 (16)。

2.6.1 Part模块常用函数 (16)3ABAQUS(Python语言)二次开发教程第一章 Python程序基本语法1.1Python语法结构Python语言以缩进来约束每个程序块,编写程序时要特别注意每一行的缩进量,同一层次的语句应具有相同的缩进量。

下面是一段Python程序示例:#-*- coding:utf-8 -*-for i in range(1,10):for j in range(1,i+1):print str(j)+'x'+str(i)+' = '+str(i*j),print该段程序主要功能是实现乘法口诀表输出打印,其中“#-*- coding:utf-8 -*-”是约定文档的编码方式。

Abaqus二次开发介绍

Abaqus二次开发介绍

Abaqus⼆次开发介绍ABAQUS提供了两种⼆次开发的接⼝,⼀是⼦程序接⼝(user subroutine),⼀种是脚本接⼝(Abaqus scripting interface),Abaqus的脚本语⾔是在python语⾔的基础上进⾏的定制开发,它扩充了python的对象模型和数据类型,使Abaqus脚本接⼝的功能更加强⼤,⼀般来说,Abaqus脚本接⼝可以实现以下功能①创建、修改ABAQUS模型中的属性,如部件、材料、荷载和分析步等②创建、修改和提交分析作业③读取和写⼊ABAQUS输出数据⽂件④查看分析结果Abaqus中python脚本的通信关系如下图所⽰从图中可以看出,ABAQUS可以通过三种⽅式运⾏脚本⽂件(1)GUI。

Abaqus在采⽤GUI进⾏建模的同时,会⽣成⼀个rpy格式的脚本⽂件。

当然,也可以通过macro管理器录制⼀段宏命令(2)命令⾏。

在abaqus CAE界⾯底端的命令⾏键⼊python命令,点击回车后即可⾃动运⾏。

(3)编辑脚本⽂件。

预先编辑好脚本⽂件,在start session 对话框或者file按钮⾥选择run script运⾏脚本。

也可以在ABAQUS command窗⼝中键⼊命令运⾏脚本Abaqus cae script=myscript.pyAbaqus cae startup=myscript.py启动CAE界⾯并运⾏脚本Abaqus viewer script=myscript.pyAbaqus viewer startup=myscript.py启动Viewer并运⾏脚本Abaqus cae noGUI=myscript.pyAbaqus viewer noGUI=myscript.py不启动CAE或者Viewer运⾏脚本此外,ABAQUS也提供了⼀个python编译器,可以通过file→abaqus pde运⾏详细的python命令,⼤家可以通过帮助⽂件中的Abaqus Scripting Reference Guide进⾏查看。

(完整word)ABAQUS-UMAT弹塑本构二次开发的实现

(完整word)ABAQUS-UMAT弹塑本构二次开发的实现

前言有限元法是工程中广泛使用的一种数值计算方法。

它是力学、计算方法和计算机技术相结合的产物。

在工程应用中,有限元法比其它数值分析方法更流行的一个重要原因在于:相对与其它数值分析方法,有限元法对边界的模拟更灵活,近似程度更高。

所以,伴随着有限元理论以及计算机技术的发展,大有限元软件的应用证变得越来越普及。

ABAQUS软件一直以非线性有限元分析软件而闻名,这也是它和ANSYS,Nastran等软件的区别所在。

非线性有限元分析的用处越来越大,因为在所用材料非常复杂很多情况下,用线性分析来近似已不再有效。

比方说,一个复合材料就不能用传统的线性分析软件包进行分析。

任何与时间有关联,有较大位移量的情况都不能用线性分析法来处理。

多年前,虽然非线性分析能更适合、更准确的处理问题,但是由于当时计算设备的能力不够强大、非线性分析软件包线性分析功能不够健全,所以通常采用线性处理的方法。

这种情况已经得到了极大的改善,计算设备的能力变得更加强大、类似ABAQUS这样的产品功能日臻完善,应用日益广泛。

非线性有限元分析在各个制造行业得到了广泛应用,有不少大型用户。

航空航天业一直是非线性有限元分析的大客户,一个重要原因是大量使用复合材料。

新一代波音 787客机将全部采用复合材料。

只有像 ABAQUS这样的软件,才能分析包括多个子系统的产品耐久性能。

在汽车业,用线性有限元分析来做四轮耐久性分析不可能得到足够准确的结果.分析汽车的整体和各个子系统的性能要求(如悬挂系统等)需要进行非线性分析。

在土木工程业, ABAQUS能处理包括混凝土静动力开裂分析以及沥青混凝土方面的静动力分析,还能处理高度复杂非线性材料的损伤和断裂问题,这对于大型桥梁结构,高层建筑的结构分析非常有效。

瞬态、大变形、高级材料的碰撞问题必须用非线性有限元分析来计算。

线性分析在这种情况下是不适用的。

以往有一些专门的软件来分析碰撞问题,但现在ABAQUS在通用有限元软件包就能解决这些问题。

abaqus-python二次开发方法

abaqus-python二次开发方法

abaqus-python二次开发方法(超实用)基于的二次开发对于很多新手来说都是一个神秘的,感觉是高难度的问题,致使很多新手对二次开发的研究都处于初级了解阶段,或完全不感冒阶段。

其实二次开发很简单,某种意义上讲,常用的ABAQUS二次开发方式有两种,(1)直接修改inp文件,这种方式需要对inp文件中大量的节点和单元进行操作,一般不建议采用inp文件进行二次开发(除非有特殊的关键字或标识符,其实关键字也可以用python语言来进行二次开发,笔者亲证)。

采用inp文件进行二次开发数据量大,行数多,一旦发生问题难以检测错误原因(2)采用abaqus语言,自编脚本,简单容易,非常适合初学者。

这里主要介绍python入门python语言的开发远没有想象中的难,其实基于abaqus语言的二次开发更像是word或excel里的VBA,我们只要通过录制一段宏文件,就可以简单迅速的完成一个模型的建立,当我们人为的对这段宏文件进行修改,就可以完成对该模型的修改,非常适合有大量相同或类似模型的建立,防止用户一遍又一遍繁琐的建模操作。

简单的步骤如下:1.在建模前先打开file--Macro Manager,然后新建一个宏文件(在Home或Work都行,只要你最终能找到这个文件),此时会弹出Record Macro对话框,托至不碍事的地方2.进行正常的cae建模就行,至到建模完成3.点击Record Macro对话框的Stop Mecording,此时命令栏会显示“Macro "Macroname" has been added to "E:\Temp\Macroname.py"”,前期任务搞定4.此时用文本编辑器打开此py文件,py文件中有些文字是没有用的,把“def Macro1 ...import connectorBehavior”都可以删掉,每行字前的空格都要去掉(文本编辑器里一般有列模式,用列模式可以对整个文本的进行操作)5.复制你新生成的python文件,并对该文件中的参数进行修改,在提交给abaqus--cae就可以完成重复建模了,如此可以无限重复,其实python语言都是大白话,你能看懂的需要指出的是:1.可以结合其它编程语言如VB、VC 配合修改参数并生成py文件,使用更为灵活2.生成py文件可以直接在cae中选择file-run script,选择你生成的python文件3.可以用python文件直接生成cae模型文件,可在py文件最后添加"mdb.saveAs(pathName='" *** "')"4.可以通过cmd命令直接将py文件提交个abaqus内核,让abaqus进行运算,cmd命令为“Shell"C:\Windows\SysWOW64\cmd.exe /k abaqus cae noGUI=" **** ".py ", vbHide等待abaqus运算的py语言"myJob.submit(consistencyChecking=OFF, datacheckJob=True)"。

ABAQUS后处理二次开发在结构弹塑性分析中的应用

ABAQUS后处理二次开发在结构弹塑性分析中的应用

第33卷增刊2013年12月防灾减灾工程学报Journal of Disaster Prevention and Mitigation EngineeringVol.33Suppl.Dec.2013ABAQUS后处理二次开发在结构弹塑性分析中的应用*滕 军1,2,张 何3,李祚华2(1.福建工程学院,福州350108;2.哈尔滨工业大学深圳研究生院,广东深圳518055;3.中铁第四勘察设计研究院集团有限公司,武汉430063)摘要:在弹塑性分析的后处理阶段,通常需要依托大量的分析结果数据对结构进行抗震性能评价,而目前通用有限元软件ABAQUS的后处理功能无法详细提供结构设计过程中所需的数据。

为高效、准确的提高结构大震弹塑性分析的效率,节省工程人员在后处理分析时所花费的时间和精力,利用面向对象的脚本语言Python对有限元软件ABAQUS进行了二次开发,实现层间位移角和结构损伤指标的自动计算,并将计算结果以曲线方式输出。

文中讨论了ABAQUS自定义功能内核脚本的编写方法和图形用户界面开发的基本方法和流程,分析了插件程序开发中的问题及解决措施,并通过两个算例验证开发插件的正确性。

关键词:ABAQUS/CAE;GUI程序开发;后处理;结构损伤分析中图分类号:TU311.41 文献标识码:A 文章编号:1672-2132(2013)增刊-0009-06The Application of Secondary Development of Post-processingof ABAQUS in Structural Elastoplastic AnalysisTENG Jun1,2,ZHANG He3,LI Zuo-hua2(1.Fujian University of Technology,Fuzhou 350108,China;2.Shenzhen Graduate School Harbin Institute of Technology,Shenzhen 518055,China;3.China Railway Siyuan Survey and Design Group Co.Ltd,Wuhan 430063,China)Abstract:After calculation and analysis by ABAQUS,data such as inter-story drift angle anddamage index should be extracted to evaluate seismic performance of the structure.The basicpost-processing function of ABAQUS usually can not provide the result data for structure designin the elastoplastic analysis.In order to improve the accuracy and efficiency of elastoplastic analy-sis,this paper conducted secondary development based on ABAQUS using Python.The Python,the scripting language of ABAQUS,can realize the automatic processing of inter-story drift angleand structural damage value.Two basic methods for secondary development of ABAQUS and de-sign flow of plug-in program were introduced in this paper,and the correctness of the plug-inprogram for inter-story drift angle and structural damage evaluation was verified by two exact ex-amples.Key words:ABAQUS/CAE;GUI program development;post-processing;structural damageanalysis*收稿日期:2013-05-10;修回日期:2013-09-04基金项目:国家自然科学基金项目(50938001、51008048)资助作者简介:滕 军(1962-),男,教授,博导。

ABAQUS-二次开发资料-UMAT

ABAQUS-二次开发资料-UMAT

各个楼层及内容索引2-------------------------------------什么是UMAT3-------------------------------------UMAT功能简介4-------------------------------------UMAT开始的变量声明5-------------------------------------UMAT中各个变量的详细解释6-------------------------------------关于沙漏和横向剪切刚度7-------------------------------------UMAT流程和参数表格实例展示8-------------------------------------FORTRAN语言中的接口程序Interface9-------------------------------------关于UMAT是否可以用Fortran90编写的问题10-17--------------------------------Fortran77的一些有用的知识简介20-25\30-32-----------------------弹塑性力学相关知识简介34-37--------------------------------用户材料子程序实例JOhn-cook模型压缩包下载38-------------------------------------JOhn-cook模型本构简介图40-------------------------------------用户材料子程序实例JOhn-cook模型完整程序+david详细注解[欢迎大家来看看,并提供意见,完全是自己的diy的,不保证完全正确,希望共同探讨,以便更正,带"?"部分,还望各位大师\同仁指教]1 什么是UMAT???1.1 UMAT功能简介!!![-摘自庄茁老师的书UMAT子程序具有强大的功能,使用UMAT子程序:(1)可以定义材料的本构关系,使用ABAQUS材料库中没有包含的材料进行计算,扩充程序功能。

基于abaqus二次开发的钢筋混凝土框架结构弹塑性分析

基于abaqus二次开发的钢筋混凝土框架结构弹塑性分析
Keywords: Dynamic Time-history Analysis; ABAQUS; Constitutive; Fiber Model; Secondary Development
声 明
本人声研究成果除加以标注和致谢的地方外,不包含其他 人已经发表或撰写过的研究成果,也不包括本人为获得其它学位 而使用过的材料。与我共同工作过的同志对本研究所做的任何贡
沈阳建筑大学 硕士学位论文 基于ABAQUS二次开发的钢筋混凝土框架结构弹塑性分析 姓名:潘天林 申请学位级别:硕士 专业:结构工程 指导教师:王强;刘明
2010-01
硕士研究生学位论文
摘要
I
摘要
我国是世界上地震灾害最为严重的国家之一,有地震发生区域广阔而分散、地震强度 高、震源浅、发生频繁等特点。如何抵御地震、减小地震带来的损失更是地震工作者继续 解决的难题。目前我国城市建设的不断发展,出现了越来越多的复杂高层建筑结构,超出 了现行规范的要求。对于那些超限结构,需要对其进行结构的非线性动力时程分析研究, 来预测强震作用下结构的反应和受力情况。这样可以在很大程度上预现结构在将来所遭受 地震灾害时的破坏情况,调整结构的设计方案或加固方法,减少人民生命财产的损失。
弹塑性时程分析方法已发展有半个世纪,然而,由于结构材料弹塑性本构关系和弹塑 性计算的复杂性、人们对弹塑性性能的了解和掌握还不充分及计算工具的限制等原因,使 得弹塑性时程分析方法仍处于研究阶段,在工程上仍处于较低水平。本文依托大型有限元 软件二次开发平台,编写混凝土与钢筋的本构关系程序,并使之与 ABAQUS 软件成功连 接。进行一些算例分析与研究,具体工作如下:
关键词:动力时程分析;ABAQUS;本构关系;纤维模型;二次开发
硕士研究生学位论文

基于Python的Abaqus二次开发实例讲解

基于Python的Abaqus二次开发实例讲解

基于Python的Abaqus二次开发实例讲解(asian58 2013.6.26)基于Python的Abaqus的二次开发便捷之处在于:1、所有的代码均可以先在Abaqus\CAE中操作一遍后再通过rp文件读取,然后再在此基础上进行相应的修改;2、Python是一种解释性语言,读起来非常清晰,因此在修改程序的过程中,不存在程序难以理解的问题;3、Python是一种通用性的、功能非常强大的面向对象编程语言,有许多成熟的类似于Matlab函数的程序在网络上流传,为后期进一步的数据处理提供了方便。

为了更加方便地完成Abaqus的二次开发,需进行一些相关约定:1、所有参数化直接通过点的坐标值进行,直接对几何尺寸的参数化反而更加繁琐;2、程序参数化已不允许在模型中添加太多的Tie,因此不同零部件的绑定直接通过共节点来进行,这就要求建模方法与常规的建模方法有所区别。

思路如下:将一个整机拆成几个大的Part来建立,一个Part中包含许多零件,这样在划分网格式时就可以自动实现共节点的绑定。

不同的零件可通过建立不同的Set来进行区分,不同Part 的绑定可以通过Tie来实现。

将一个复杂的结构拆成几个恰当的Part来建立,一方面可以将复杂的模型简单化,使建立复杂模型成为可能;另一方面,不同的Part可单独调用,从而又可实现程序的模块化,增加程序的适应范围,延长程序的使用寿命,也方便后期程序的维护和修改。

3、通过py文件建立起的模型要进行参数优化,已不适合采用Isight中Abaqus模块,需要用到Isight的Simcode模块。

下面详细解释一个臂架的py文件。

#此程序用来绘制臂架前段#导入相关模块# -*- coding: mbcs -*-from abaqus import *from abaqusConstants import *#定义整个臂架的长、宽、高L0=14300W0=1650H0=800#创建零件P01_12 L1=H0+200 W1=200 T1=12s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=2000.0)g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints s.setPrimaryObject(option=STANDALONE)s.rectangle(point1=(W0/2, L1/2), point2=(W0/2+W1, -L1/2))s.rectangle(point1=(-W0/2, L1/2), point2=(-W0/2-W1, -L1/2))p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=THREE_D, type=DEFORMABLE_BODY)p = mdb.models['Model-1'].parts['Part-1'] p.BaseShell(sketch=s)session.viewports['Viewport: 1'].setValues(displayedObject=p) del mdb.models['Model-1'].sketches['__profile__']#定义零件的厚度p = mdb.models['Model-1'].parts['Part-1'] f = p.faces pickedFaces01 = f.findAt (((W0/2, L1/2, 0),),((-W0/2, L1/2, 0),), ) p.assignThickness(faces=pickedFaces01, thickness=T1) p.Set(faces=pickedFaces01, name='P01_12')#创建辅助平面和辅助坐标系p = mdb.models['Model-1'].parts['Part-1']p.DatumCsysByThreePoints(name='Datum csys-1', coordSysType=CARTESIAN, origin=( 0.0, 0.0, 0.0), line1=(1.0, 0.0, 0.0), line2=(0.0, 1.0, 0.0))p = mdb.models['Model-1'].parts['Part-1']p.DatumPlaneByPrincipalPlane(principalPlane=XYPLANE, offset=L0)#创建零件P02_12 L2=L1 W2=W1 T2=12p = mdb.models['Model-1'].parts['Part-1'] d = p.datums#将草图原点参数化t = p.MakeSketchTransform(sketchPlane=d[5], sketchUpEdge=d[4].axis2, sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, origin=(0.0, 0.0, L0)) s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=29006.85, gridSpacing=725.17, transform=t) g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraints s.setPrimaryObject(option=SUPERIMPOSE)p = mdb.models['Model-1'].parts['Part-1']s.rectangle(point1=(W0/2, L2/2), point2=(W0/2+W2, -L2/2))s.rectangle(point1=(-W0/2, L2/2), point2=(-W0/2-W2, -L2/2))p = mdb.models['Model-1'].parts['Part-1']d2 = p.datumsp.Shell(sketchPlane=d2[5], sketchUpEdge=d2[4].axis2, sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, sketch=s)s.unsetPrimaryObject()del mdb.models['Model-1'].sketches['__profile__']#定义零件的厚度p = mdb.models['Model-1'].parts['Part-1'] Array f = p.facespickedFaces02 = f.findAt(((W0/2, L1/2, L0),),((-W0/2, L1/2, L0),), )p.assignThickness(faces=pickedFaces02, thickness=T2)p.Set(faces=pickedFaces02, name='P02_12')#创建零件P03_12和零件P04_08T3=12T4=8p = mdb.models['Model-1'].parts['Part-1']d = p.datumst = p.MakeSketchTransform(sketchPlane=d[5], sketchUpEdge=d[4].axis2, sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, origin=(0.0, 0.0, L0)) s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=29006.85, gridSpacing=725.17, transform=t)g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraintss.setPrimaryObject(option=SUPERIMPOSE)#创建草图p = mdb.models['Model-1'].parts['Part-1']s.Line(point1=(-W0/2-W1, H0/2), point2=(-W0/2, H0/2))s.Line(point1=(W0/2, H0/2), point2=(W0/2+W1, H0/2))s.Line(point1=(-W0/2-W1, -H0/2), point2=(-W0/2, -H0/2))s.Line(point1=(W0/2, -H0/2), point2=(W0/2+W1, -H0/2))p = mdb.models['Model-1'].parts['Part-1']d2 = p.datumsp.ShellExtrude(sketchPlane=d2[5], sketchUpEdge=d2[4].axis2,sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, sketch=s, depth=L0, flipExtrudeDirection=ON)s.unsetPrimaryObject()del mdb.models['Model-1'].sketches['__profile__']#定义零件P03_12的厚度p = mdb.models['Model-1'].parts['Part-1']f = p.facespickedFaces03 = f.findAt(((-W0/2, H0/2, L0/2),),((W0/2, H0/2, L0/2),),)p.assignThickness(faces=pickedFaces03, thickness=T3)p.Set(faces=pickedFaces03, name='P03_12')#定义零件P04_12的厚度p = mdb.models['Model-1'].parts['Part-1']f = p.facespickedFaces04 = f.findAt(((-W0/2, -H0/2, L0/2),),((W0/2, -H0/2, L0/2),),)p.assignThickness(faces=pickedFaces04, thickness=T4)p.Set(faces=pickedFaces04, name='P04_12')#创建零件P05_08T5=8p = mdb.models['Model-1'].parts['Part-1']d = p.datumst = p.MakeSketchTransform(sketchPlane=d[5], sketchUpEdge=d[4].axis2, sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, origin=(0.0, 0.0, L0))s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__',sheetSize=29006.85, gridSpacing=725.17, transform=t)g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraintss.setPrimaryObject(option=SUPERIMPOSE)p = mdb.models['Model-1'].parts['Part-1']s.Line(point1=(-W0/2-W1/2, H0/2), point2=(-W0/2-W1/2, -H0/2))s.Line(point1=(W0/2+W1/2, H0/2), point2=(W0/2+W1/2, -H0/2))p = mdb.models['Model-1'].parts['Part-1']d2 = p.datumsp.ShellExtrude(sketchPlane=d2[5], sketchUpEdge=d2[4].axis2,sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, sketch=s, depth=L0,flipExtrudeDirection=ON)s.unsetPrimaryObject()del mdb.models['Model-1'].sketches['__profile__']#定义零件P05_8的厚度p = mdb.models['Model-1'].parts['Part-1']f = p.facespickedFaces05 = f.findAt(((-W0/2-W1/2, 0, L0/2),),((W0/2+W1/2, 0, L0/2),),)p.assignThickness(faces=pickedFaces05, thickness=T5)p.Set(faces=pickedFaces05, name='P05_08')#创建零件P06_08L6=W0+W1n=L0//2520+1T6=8p = mdb.models['Model-1'].parts['Part-1']f, d = p.faces, p.datumst = p.MakeSketchTransform(sketchPlane=f[0], sketchUpEdge=d[4].axis2, sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, origin=(W0/2+W1/2, -H0/2,0))s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__',sheetSize=28684, gridSpacing=717, transform=t)g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraintss.setPrimaryObject(option=SUPERIMPOSE)p = mdb.models['Model-1'].parts['Part-1']#循环命令绘制平行隔板for i in range(0,n): Array s.Line(point1=(-500-(i*2520), H0), point2=(-500-(i*2520), 0.0))p = mdb.models['Model-1'].parts['Part-1']f1, d2 = p.faces, p.datumsp.ShellExtrude(sketchPlane=f1[0], sketchUpEdge=d2[4].axis2,sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, sketch=s, depth=L6,flipExtrudeDirection=ON)s.unsetPrimaryObject()del mdb.models['Model-1'].sketches['__profile__']#定义零件P06_08的厚度p = mdb.models['Model-1'].parts['Part-1']f = p.facesfor i in range(0,n): Array pickedFaces = f.findAt(((0, H0/4, 500+i*2520),))p.assignThickness(faces=pickedFaces, thickness=T6)p.Set(faces=pickedFaces, name='P06_08_'+str(1+i))#创建零件P07_12,P08_12W7=200L7=W0+W1T7=12T8=12p = mdb.models['Model-1'].parts['Part-1']f, e = p.faces, p.edgest = p.MakeSketchTransform(sketchPlane=f.findAt(coordinates=(W0/2+W1/2, 0.0, 100.0)),sketchUpEdge=e.findAt(coordinates=(W0/2+W1/2, 0.0, 0.0)),sketchOrientation=RIGHT,sketchPlaneSide=SIDE1,origin=(W0/2+W1/2, -H0/2, 0.0))s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__',sheetSize=53678, gridSpacing=1341, transform=t)g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraintss.setPrimaryObject(option=SUPERIMPOSE)p = mdb.models['Model-1'].parts['Part-1']#循环命令绘制平行隔板for i in range(0,n):s.Line(point1=(400+i*2520, -H0), point2=(600+i*2520, -H0))s.Line(point1=(400+i*2520, 0), point2=(600+i*2520, 0))p = mdb.models['Model-1'].parts['Part-1']f1, e1 = p.faces, p.edgesp.ShellExtrude(sketchPlane=f.findAt(coordinates=(W0/2+W1/2, 0.0, 100.0)),sketchUpEdge=e.findAt(coordinates=(W0/2+W1/2, 0.0, 0.0)),sketchPlaneSide=SIDE1,sketchOrientation=RIGHT, sketch=s, depth=W0+W1, flipExtrudeDirection=ON, keepInternalBoundaries=ON)s.unsetPrimaryObject()del mdb.models['Model-1'].sketches['__profile__']#定义零件P07_12的厚度p = mdb.models['Model-1'].parts['Part-1']f = p.facesfor i in range(0,n):pickedFaces07 = f.findAt(((0, H0/2, 400+i*2520),),((0, H0/2, 600+i*2520),),) p.assignThickness(faces=pickedFaces07, thickness=T7)p.Set(faces=pickedFaces07, name='P07_12_'+str(1+i))fp=[]for i in range(0,2):fp.append(f.findAt(((0, H0/2, 400+i*2520),),((0, H0/2, 600+i*2520),),))p.Set(faces=fp, name='P07_fp')#定义零件P08_12的厚度p = mdb.models['Model-1'].parts['Part-1']f = p.facesfor i in range(0,n):pickedFaces08 = f.findAt(((0, -H0/2, 400+i*2520),),((0, -H0/2, 600+i*2520),),) p.assignThickness(faces=pickedFaces08, thickness=T7)p.Set(faces=pickedFaces08, name='P08_12_'+str(1+i))#为中间隔板创建空腔#定义相关参数边界距离、圆角d0=100r0=100p = mdb.models['Model-1'].parts['Part-1']f1, e1 = p.faces, p.edgest = p.MakeSketchTransform(f.findAt(coordinates=(0, 0.0, 500.0)),sketchUpEdge=e.findAt(coordinates=(W0/2+W1/2, 0.0, 500.0)),sketchPlaneSide=SIDE1, sketchOrientation=RIGHT,origin=(0.0, 0.0, 500.0))s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__',sheetSize=5910.0, gridSpacing=147.0, transform=t)g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraintss.setPrimaryObject(option=SUPERIMPOSE)p = mdb.models['Model-1'].parts['Part-1']p.projectReferencesOntoSketch(sketch=s, filter=COPLANAR_EDGES)#创建矩形s.rectangle(point1=(-W0/2-W1/2+d0, H0/2-d0), point2=(W0/2+W1/2-d0, -H0/2+d0)) #创建圆角s.FilletByRadius(radius=r0,curve1=g[29], nearPoint1=(-W0/2-W1/2+d0, H0/2-d0), curve2=g[26], nearPoint2=(-W0/2-W1/2+d0, H0/2-d0))s.FilletByRadius(radius=r0, curve1=g[26], nearPoint1=(-W0/2-W1/2+d0, -H0/2+d0), curve2=g[27], nearPoint2=(-W0/2-W1/2+d0, -H0/2+d0)) s.FilletByRadius(radius=r0, curve1=g[27], nearPoint1=(W0/2+W1/2-d0, -H0/2+d0), curve2=g[28], nearPoint2=(W0/2+W1/2-d0, -H0/2+d0)) s.FilletByRadius(radius=r0, curve1=g[28], nearPoint1=(W0/2+W1/2-d0, H0/2-d0), curve2=g[29], nearPoint2=(W0/2+W1/2-d0, H0/2-d0))p = mdb.models['Model-1'].parts['Part-1']f1, d2 = p.faces, p.datumsp.CutExtrude(f.findAt(coordinates=(0, 0.0, 500.0)),sketchUpEdge=e.findAt(coordinates=(W0/2+W1/2, 0.0, 500.0)),sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, sketch=s, depth=L0, flipExtrudeDirection=OFF)s.unsetPrimaryObject()del mdb.models['Model-1'].sketches['__profile__']#开始建立梁Beam_1p = mdb.models['Model-1'].parts['Part-1']f, d = p.faces, p.datums#绘制参考面p.DatumPlaneByOffset(plane=f.findAt(coordinates=(W0/2, -H0/2, 100.0)),flip=SIDE2, offset=8.0)dp1 = d.keys()[-1]p = mdb.models['Model-1'].parts['Part-1']d = p.datumst = p.MakeSketchTransform(sketchPlane=d[dp1], sketchUpEdge=d[4].axis1,sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, origin=(0.0, 0.0,0.0))s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=31857.0, gridSpacing=796.0, transform=t)g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraintss.setPrimaryObject(option=SUPERIMPOSE)p = mdb.models['Model-1'].parts['Part-1']#计算中间加强梁的数量if n%2==1:n1=n//2 n2=n//2 else:n1=n//2 n2=n//2-1 for i in range(0,n1):s.Line(point1=(-500-i*2520*2, W0/2+W1/2), point2=(-500-2520-i*2520*2,-W0/2-W1/2 )) for i in range(0,n2):s.Line(point1=(-500-2520-i*2520*2,-W0/2-W1/2), point2=(-500-2*2520-i*2520*2,W0/2+W1/2 ))#在基准平面dp1上面绘制梁p = mdb.models['Model-1'].parts['Part-1'] d2 = p.datums e = p.edgesp.Wire(sketchPlane=d2[dp1], sketchUpEdge=d2[4].axis1, sketchPlaneSide=SIDE1, sketchOrientation=RIGHT, sketch=s) s.unsetPrimaryObject()del mdb.models['Model-1'].sketches['__profile__'] edges1=[] for i in range(0,n-1): edges1.append (e.findAt(((0, -H0/2-8, 500+2520/2+i*2520),),)) p.Set(edges=edges1, name='Beam_1') ############################开始定义有限元分析的相关参数 #定义材料mdb.models['Model-1'].Material(name='steel')mdb.models['Model-1'].materials['steel'].Elastic(table=((210000.0, 0.3), )) mdb.models['Model-1'].materials['steel'].Density(table=((7.8e-06, ), ))#定义壳单元属性mdb.models['Model-1'].HomogeneousShellSection(name='shell', preIntegrate=OFF, material='steel', thicknessType=UNIFORM, thickness=10.0, thicknessField='', idealization=NO_IDEALIZATION, poissonDefinition=DEFAULT,thicknessModulus=None, temperature=GRADIENT, useDensity=OFF, integrationRule=SIMPSON, numIntPts=5) #赋所有壳单元属性p = mdb.models['Model-1'].parts['Part-1']for i in range(1,5):region1 = p.sets['P0'+str(i)+'_12']p.SectionAssignment(region=region1, sectionName='shell', offset=0.0,offsetType=FROM_GEOMETRY , offsetField='',thicknessAssignment=FROM_GEOMETRY )region2 = p.sets['P05_08']p.SectionAssignment(region=region2, sectionName='shell', offset=0.0, offsetType=FROM_GEOMETRY, offsetField='',thicknessAssignment=FROM_GEOMETRY)for i in range(1,n+1): Array region3 = p.sets['P06_08_'+str(i)]p.SectionAssignment(region=region3, sectionName='shell', offset=0.0,offsetType=FROM_GEOMETRY, offsetField='',thicknessAssignment=FROM_GEOMETRY)for i in range(1,n+1):region4 = p.sets['P07_12_'+str(i)]p.SectionAssignment(region=region4, sectionName='shell', offset=0.0,offsetType=FROM_GEOMETRY, offsetField='',thicknessAssignment=FROM_GEOMETRY)for i in range(1,n+1):region5 = p.sets['P08_12_'+str(i)]p.SectionAssignment(region=region5, sectionName='shell', offset=0.0,offsetType=FROM_GEOMETRY, offsetField='',thicknessAssignment=FROM_GEOMETRY)#定义梁单元属性mdb.models['Model-1'].LProfile(name='L_65', a=65.0, b=65.0, t1=7.0, t2=7.0)mdb.models['Model-1'].BeamSection(name='B_65', integration=DURING_ANALYSIS,poissonRatio=0.0, profile='L_65', material='steel', temperatureVar=LINEAR,consistentMassMatrix=False)#赋所有梁单元属性p = mdb.models['Model-1'].parts['Part-1']region = p.sets['Beam_1']p.SectionAssignment(region=region, sectionName='B_65', offset=0.0,offsetType=MIDDLE_SURFACE, offsetField='',thicknessAssignment=FROM_SECTION)p.assignBeamSectionOrientation(region=region, method=N1_COSINES, n1=(0.0, 0.0,-1.0))#定义装配体import assemblya = mdb.models['Model-1'].rootAssemblya.DatumCsysByDefault(CARTESIAN)p = mdb.models['Model-1'].parts['Part-1']a.Instance(name='Part-1-1', part=p, dependent=ON)#定义分析步import stepmdb.models['Model-1'].StaticStep(name='Step-1', previous='Initial')#定义底面与梁的tiedimport interactiona = mdb.models['Model-1'].rootAssemblyregion1=a.instances['Part-1-1'].sets['P04_12']region2=a.instances['Part-1-1'].sets['Beam_1']mdb.models['Model-1'].Tie(name='Constraint-1', master=region1, slave=region2, positionToleranceMethod=COMPUTED, adjust=OFF, tieRotations=ON, thickness=ON)#开始定义耦合#导入相关模块import regionToolseta = mdb.models['Model-1'].rootAssemblyd, r = a.datums, a.referencePoints#定义参考点a.ReferencePoint(point=(0.0, H0/2, 500+2520/2))rp1 = r.keys()[-1]refPoints1=(r1[rp1], )region1=regionToolset.Region(referencePoints=refPoints1)s1 = a.instances['Part-1-1'].facesregion2 = a.instances['Part-1-1'].sets['P07_fp']mdb.models['Model-1'].Coupling(name='Constraint-2', controlPoint=region1, surface=region2, influenceRadius=WHOLE_SURFACE, couplingType=DISTRIBUTING, localCsys=None, u1=ON, u2=ON, u3=ON, ur1=ON, ur2=ON, ur3=ON)#########################定义边界条件import loada = mdb.models['Model-1'].rootAssemblyd, r = a.datums, a.referencePointsregion = a.instances['Part-1-1'].sets['P02_12']mdb.models['Model-1'].DisplacementBC(name='SPC', createStepName='Initial', region=region, u1=SET, u2=SET, u3=SET, ur1=SET, ur2=SET, ur3=SET,amplitude=UNSET, distributionType=UNIFORM, fieldName='', localCsys=None)a = mdb.models['Model-1'].rootAssemblyregion = a.instances['Part-1-1'].sets['P08_12_'+str(n-1)]mdb.models['Model-1'].DisplacementBC(name='SPC2', createStepName='Initial', region=region, u1=SET, u2=SET, u3=SET, ur1=SET, ur2=SET, ur3=SET,amplitude=UNSET, distributionType=UNIFORM, fieldName='', localCsys=None)r1 = a.referencePointsrefPoints1=(r1[rp1], )region = regionToolset.Region(referencePoints=refPoints1)mdb.models['Model-1'].ConcentratedForce(name='force', createStepName='Step-1',region=region, cf2=-10000.0, distributionType=UNIFORM, field='',localCsys=None)mdb.models['Model-1'].Gravity(name='G', createStepName='Step-1', comp2=-9.8, distributionType=UNIFORM, field='')#################划分网格import meshp = mdb.models['Model-1'].parts['Part-1']p.seedPart(size=20.0, deviationFactor=0.1, minSizeFactor=0.1)p.generateMesh()a = mdb.models['Model-1'].rootAssembly###############创建作业并提交分析import jobmdb.Job(name='006', model='Model-1', description='', type=ANALYSIS, atTime=None, waitMinutes=0, waitHours=0, queue=None, memory=90,memoryUnits=PERCENTAGE, getMemoryFromAnalysis=True,explicitPrecision=SINGLE, nodalOutputPrecision=SINGLE, echoPrint=OFF,modelPrint=OFF, contactPrint=OFF, historyPrint=OFF, userSubroutine='',scratch='', multiprocessingMode=DEFAULT, numCpus=4, numDomains=4) mdb.jobs['006'].submit(consistencyChecking=ON)mdb.jobs['006'].waitForCompletion()###############进入后处理模块import visualizationo3 = session.openOdb(name='F:/ABAQUS/006.odb')session.viewports['Viewport: 1'].setValues(displayedObject=o3)session.viewports['Viewport: 1'].odbDisplay.display.setValues(plotState=( CONTOURS_ON_DEF, ))session.viewports['Viewport: 1'].view.setValues(session.views['Iso'])mdb.saveAs(pathName='F:/ABAQUS/006.cae')第11 页共11 页。

ABAQUS二次开发教程

ABAQUS二次开发教程

ABAQUS二次开发教程ABAQUS(Python语言)二次开发人生苦短,我用Python作者:Fan Shengbao2017年12月目录Python程序基本语法1.1Python语法结构Python语言以缩进来约束每个程序块,编写程序时要特别注意每一行的缩进量,同一层次的语句应具有相同的缩进量。

下面是一段Python程序示例:#-*- coding:utf-8 -*-for i in range(1,10):for j in range(1,i+1):print str(j)+'x'+str(i)+' = '+str(i*j),print该段程序主要功能是实现乘法口诀表输出打印,其中“#-*- coding:utf-8 -*-”是约定文档的编码方式。

程序主体部分由两个嵌套的for循环语句组成,可以看到每一个for循环块的内部都具有相同的缩进量。

程序输出结果如下:1x1=11x2=2 2x2=41x3=3 2x3=6 3x3=91x4=4 2x4=8 3x4=12 4x4=161x5=5 2x5=10 3x5=15 4x5=20 5x5=251x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=361x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=491x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=641x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=638x9=72 9x9=81Python程序中一行中“#”号后面的内容为注释,“#”号只支持单行注释,多行注释可使用“’’’ …‘’’”注释符。

'''Python'''1.2P ython元组Python中的元组(tuple)相当于C语言中的数组简化版,其内容和长度均不可变,只能对其内容进行访问。

ABAQUS-二次开发资料-UMAT

ABAQUS-二次开发资料-UMAT

ABAQUS-⼆次开发资料-UMAT各个楼层及内容索引2-------------------------------------什么是UMAT3-------------------------------------UMAT功能简介4-------------------------------------UMAT开始的变量声明5-------------------------------------UMAT中各个变量的详细解释6-------------------------------------关于沙漏和横向剪切刚度7-------------------------------------UMAT流程和参数表格实例展⽰8-------------------------------------FORTRAN语⾔中的接⼝程序Interface9-------------------------------------关于UMAT是否可以⽤Fortran90编写的问题10-17--------------------------------Fortran77的⼀些有⽤的知识简介20-25\30-32-----------------------弹塑性⼒学相关知识简介34-37--------------------------------⽤户材料⼦程序实例JOhn-cook模型压缩包下载38-------------------------------------JOhn-cook模型本构简介图40-------------------------------------⽤户材料⼦程序实例JOhn-cook模型完整程序+david详细注解[欢迎⼤家来看看,并提供意见,完全是⾃⼰的diy的,不保证完全正确,希望共同探讨,以便更正,带"?"部分,还望各位⼤师\同仁指教]1什么是UMAT1.1 UMAT功能简介[-摘⾃庄茁⽼师的书UMAT⼦程序具有强⼤的功能,使⽤UMAT⼦程序:(1)可以定义材料的本构关系,使⽤ABAQUS材料库中没有包含的材料进⾏计算,扩充程序功能。

第10章 ABAQUS用户材料子程序二次开发及应用

第10章  ABAQUS用户材料子程序二次开发及应用
下面对 UMAT 中用到的一些变量进行说明:
DDSDDE (NTENS NTENS):一个 NTENS×NTENS 的矩阵,称作 Jacobian 矩阵,即 ∂σ ,Δσ ∂ε
是应力的增量, Δε 是应变的增量,DDSDDE(i,j)表示增量步结束时第 j 个应变分量的改变引起的
第 i 个应力分量的变化。通常 Jacobian 矩阵是一个对称矩阵,除非在“*USER MATERIAL”语句 中加入了“UNSYMM”参数。
STATEV (NSTATEV):用于存储与解有关的状态变量的数组,在增量步开始时将数值传递到 UMAT 中,也可在子程序 USDFLD 或 UEXPAN 中先更新数据,然后增量步开始时将更新后的资料 传递到 UMAT 中。在增量步的结束必须更新状态变量矩阵中的数据。和应力张量矩阵不同的是: 对于有限应变问题,除了材料本构行为引起的资料更新以外,与解有关的状态变量矩阵中的任何向 量或者张量都必须通过旋转来考虑材料的刚体运动。状态变量矩阵的维数通过 ABAQUS 输入文件 中的关键词“*DEPVAR”定义,关键词下面数据行的数值即为状态变量矩阵的维数。
10.1.1 ABAQUS 材料库
ABAQUS 具有完善的材料模型库可供选择,它定义了多种材料的本构关系及失效准则,包括: 1. 弹性 线弹性模型可以定义材料的模量、泊松比等弹性特征,具有多种典型失效理论,用于复合材料 结构分析多孔结构弹性模型;用于模拟土壤和可挤压泡沫的弹性行为亚弹性模型;可以考虑应变对 弹性的影响超弹性模型;模拟橡胶类材料的大变形影响粘弹性模型。 2. 塑性 符合 Mises 屈服准则的各向同性和遵循 Hill 屈服准则的各向异性塑性模型;拉伸为 Rankine 屈 服准则,压缩为 Mises 屈服准则的考虑时间硬化和应变硬化的各向同性和各向异性蠕变模型; Drucker-Prager 模型适合于土等粒状材料的模型;Capped Drucker-Prager 模型,适合于地质、隧道

abaqus_二次开发详解

abaqus_二次开发详解

#开头的为注释行.第一步,建立建模环境,这一步中p y将从a b a q u s中导入建模所需的所有程序模块.f r o m p a r t i m p o r t*接下来定义草图环境m d b.m o d e l s['M o d e l A'].S k e t c h(n a m e='__p r o f i l e__',s h e e t S i z e=200.0)m d b.m o d e l s['M o d e lA'].s k e t c h e s['__p r o f i l e__'].s k e t c h O p t i o n s.s e t V a l u e s(c o n s t r u c t i o n G e o m e t r y=O N,d e c i m a l P l a c e s=2,d i m e n s i o n T e x t H e i g h t=5.0,g r i d=O N,g r i d F r e q u e n c y=2,g r i d S p a c i n g=5.0,s h e e t S i z e=200.0,v i e w S t y l e=A X I S Y M)上面的设定为大小200*200,格栅间距为5,文字标注高度为5.m d b.m o d e l s['M o d e l A'].s k e t c h e s['__p r o f i l e__'].O b l i q u e C o n s t r u c t i o n L i n e(p o i n t1=(0.0,-100.0),p o i n t2=(0.0,100.0))本句语句设定轴对称模型的对称轴线位置m d b.m o d e l s['M o d e l A'].s k e t c h e s['__p r o f i l e__'].r e c t a n g l e(p o i n t1=(0.0,0.0),p o i n t2=(40.0, -40.0))该语句绘制矩形,从点0,0至点40,-40m d b.m o d e l s['M o d e l A'].P a r t(d i m e n s i o n a l i t y=A X I S Y M M E T R I C,n a m e='B o d e n',t y p e=D E F O R M A B L E_B O D Y)定义模型为轴对称,名字为b o d e n,为可变形体m d b.m o d e l s['M o d e l A'].p a r t s['B o d e n'].B a s e S h e l l(s k e t c h=m d b.m o d e l s['M o d e lA'].s k e t c h e s['__p r o f i l e__'])d e l m d b.m o d e l s['M o d e l A'].s k e t c h e s['__p r o f i l e__']绘图完成丌要忘记收回建模环境所占的内存第二节:材料定义--------------------2楼第三节:装配--------------------3楼第四节:分析步定义--------------------4楼第五节:接触定义--------------------5楼第六节:荷载边界定义-----------------6楼第七节:网格划分控制------------------7楼第八节,任务提交及杂项功能--------8楼关于如何在p y t h o n中提交多个任务的问题9楼第二节,材料定义f r o m m a t e r i a l i m p o r t*f r o m s e c t i o n i m p o r t*从A B A Q U S提供的接口中导入材料库和组件库m d b.m o d e l s['M o d e l-A'].M a t e r i a l(n a m e='B o d e n')定义材料名m d b.m o d e l s['M o d e l A'].m a t e r i a l s['B o d e n'].D e n s i t y(t a b l e=((2000.0,),))定义材料密度m d b.m o d e l s['M o d e l A'].m a t e r i a l s['B o d e n'].E l a s t i c(t a b l e=((210546.3,0.3333),))定义材料线弹性模量和泊松比,其它的材料,如弹塑性,粘弹性材料均对应丌同的对象函数. m d b.m o d e l s['M o d e l A'].H o m o g e n e o u s S o l i d S e c t i o n(m a t e r i a l='B o d e n',n a m e='b o d e n',t h i c k n e s s=1.0)m d b.m o d e l s['M o d e lA'].p a r t s['B o d e n'].a s s i g n S e c t i o n(r e g i o n=R e g i o n(f a c e s=m d b.m o d e l s['M o d e lA'].p a r t s['B o d e n'].f a c e s[0:1]),s e c t i o n N a m e='b o d e n')设定组件为坐标无关性材料,厚度为单位厚度,并将属性附给所用的组件第三节,装配f r o m a s s e m b l y i m p o r t*首先,导入装配所用到的对象m d b.m o d e l s['M o d e lA'].r o o t A s s e m b l y.D a t u m C s y s B y T h r e e P o i n t s(c o o r d S y s T y p e=C Y L I N D R I C A L,o r i g i n=(0.0, 0.0,0.0),p o i n t1=(1.0,0.0,0.0),p o i n t2=(0.0,0.0,-1.0))定义坐标类型为柱坐标,原点0,0,0,另外两个为单位向量,确定该坐标轴的方向.m d b.m o d e l s['M o d e l A'].r o o t A s s e m b l y.I n s t a n c e(n a m e='B o d e n-1',p a r t=m d b.m o d e l s['M o d e l A'].p a r t s['B o d e n'])生成草图对像b o d e n的实体,名字叨B o d e n-1.无偏移插入第四节,定义分析步f r o m s t e p i m p o r t*象其它步一样,先导入分析步要用到的模块m d b.m o d e l s['M o d e l A'].I m p l i c i t D y n a m i c s S t e p(i n i t i a l I n c=0.005,m a x N u m I n c=1024,n a m e='S t e p-1',n o S t o p=O F F,n o h a f=O F F,p r e v i o u s='I n i t i a l',t i m e I n c r e m e n t a t i o n M e t h o d=F I X E D,t i m e P e r i o d=5.12)定义对劢力隐式分析,时长为0.005*1024=5.12个时间单位,前一步为I n i t i a lm d b.m o d e l s['M o d e l A'].f i e l d O u t p u t R e q u e s t s['F-O u t p u t-1'].s e t V a l u e s(v a r i a b l e s=('U',))定义输出到O D B文件的数据,这里叧定义了位移输出m d b.m o d e l s['M o d e l A'].f i e l d O u t p u t R e q u e s t s['F-O u t p u t-1'].s e t V a l u e s(f r e q u e n c y=1)定义位移输出的频率为每步都输出m d b.m o d e l s['M o d e l A'].s t e p s['S t e p-1'].R e s t a r t(f r e q u e n c y=1,o v e r l a y=O N)定义重启劢析,每一步记录,叧记录最后一次的正确状态第五节,定义接触f r o m i n t e r a c t i o n i m p o r t*依然是先导入所用的模块m d b.m o d e l s['M o d e l A'].r o o t A s s e m b l y.P a r t i t i o n E d g e B y P a r a m(e d g e s=(m d b.m o d e l s['M o d e l A'].r o o t A s s e m b l y.i n s t a n c e s['B o d e n-1'].e d g e s[3],),p a r a m e t e r=0.975)在上部即第3面的97.5%的地方设定一个点,用于定义接触m d b.m o d e l s['M o d e l A'].C o n t a c t P r o p e r t y('I n t P r o p-1')定义接触属性名m d b.m o d e l s['M o d e l A'].i n t e r a c t i o n P r o p e r t i e s['I n t P r o p-1'].T a n g e n t i a l B e h a v i o r(f o r m u l a t i o n=F R I C T I O N L E S S)m d b.m o d e l s['M o d e l A'].i n t e r a c t i o n P r o p e r t i e s['I n t P r o p-1'].N o r m a l B e h a v i o r(a l l o w S e p a r a t i o n=O F F,a u g m e n t e d L a g r a n g e=O F F,p r e s s u r e O v e r c l o s u r e=H A R D)定义接触特性,为无摩擦硬接触丌允许分开m d b.m o d e l s['M o d e l A'].S u r f a c e T o S u r f a c e C o n t a c t S t d(a d j u s t M e t h o d=N O N E,c r e a t e S t e p N a m e='I n i t i a l',i n t e r a c t i o n P r o p e r t y='I n t P r o p-1',m a s t e r=R e g i o n(s i d e1E d g e s=m d b.m o d e l s['M o d e l A'].r o o t A s s e m b l y.i n s t a n c e s['f u n-1'].e d g e s[0:1]) ,n a m e='I n t-1',s l a v e=R e g i o n(s i d e1E d g e s=m d b.m o d e l s['M o d e l A'].r o o t A s s e m b l y.i n s t a n c e s['B o d e n-1'].e d g e s[4:5]),s l i d i n g=F I N I T E)这一句是建立接触对,分别为两个面上的一条边,这里边的定义由A B A Q U S内定,具体可以查阅参考手册第六节,荷载边界定义f r o m l o a d i m p o r t*m d b.m o d e l s['M o d e l A'].P e r i o d i c A m p l i t u d e(a_0=1.0,d a t a=((3.0,1.1),(3.2,1.7)),f r e q u e n c y=2.454,n a m e='F o u r i e r',s t a r t=0.0,t i m e S p a n=S T E P)定义f o u r i e r级数表示的荷载m d b.m o d e l s['M o d e l A'].P r e s s u r e(a m p l i t u d e='F o u r i e r',c r e a t e S t e p N a m e='S t e p-1',d i s t r i b u t i o n=U N I F O R M,m a g n i t u d e=50.0,n a m e='L o a d-1',re g i o n=R e g i o n(s i d e1E d g e s=m d b.m o d e l s['M o d e l A'].r o o t A s s e m b l y.i n s t a n c e s['f u n-1'].e d g e s[2:3]))定义压强,设定加载的分析步,区域及放大系数m d b.m o d e l s['M o d e l A'].D i s p l a c e m e n t B C(a m p l i t u d e=U N S E T,c r e a t e S t e p N a m e='I n i t i a l',d i s t r i b u t i o n=U N I F O R M,l o c a l C s y s=N o n e,n a m e='B C-1',r e g i o n=R e g i o n(e d g e s=m d b.m o d e l s['M o d e l A'].r o o t A s s e m b l y.i n s t a n c e s['B o d e n-1'].e d g e s[0:1]+\m d b.m o d e l s['M o d e l A'].r o o t A s s e m b l y.i n s t a n c e s['B o d e n-1'].e d g e s[2:3]+\m d b.m o d e l s['M o d e l A'].r o o t A s s e m b l y.i n s t a n c e s['f u n-1'].e d g e s[3:4]), u1=S E T,u2=U N S E T,u r3=U N S E T)m d b.m o d e l s['M o d e l A'].D i s p l a c e m e n t B C(a m p l i t u d e=U N S E T,c r e a t e S t e p N a m e='I n i t i a l',d i s t r i b u t i o n=U N I F O R M,l o c a l C s y s=N o n e,n a m e='B C-2',re g i o n=R e g i o n(e d g e s=m d b.m o d e l s['M o d e l A'].r o o t A s s e m b l y.i n s t a n c e s['B o d e n-1'].e d g e s[1:2]),u1=U N S E T,u2=S E T,u r3=U N S E T)设定边界位移为0的边界条件,注意语法中对象相加的方法.第七节,网格划分控制f r o m m e s h i m p o r t*i m p o r t m e s h导入网格划分模块e l e m T y p e1=m e s h.E l e m T y p e(e l e m C o d e=C A X8,e l e m L i b r a r y=S T A N D A R D,s e c o n d O r d e r A c c u r a c y=O F F,h o u r g l a s s C o n t r o l=S T I F F N E S S,d i s t o r t i o n C o n t r o l=O F F)e l e m T y p e2=m e s h.E l e m T y p e(e l e m C o d e=C A X6M,e l e m L i b r a r y=S T A N D A R D)a1=m d b.m o d e l s['M o d e l A'].r o o t A s s e m b l yf1=a1.i n s t a n c e s['B o d e n-1'].f a c e sf a c e s1=f1[0:1]r e g i o n s=(f a c e s1,)a1.s e t E l e m e n t T y p e(r e g i o n s=r e g i o n s,e l e m T y p e s=(e l e m T y p e1,e l e m T y p e2))定义其中一个物体的网格为二次8结点单元,如果其中有无法划分成四边形单元的情况,则用三角形二次6结点单元.e l e m T y p e1=m e s h.E l e m T y p e(e l e m C o d e=C A X4,e l e m L i b r a r y=S T A N D A R D)e l e m T y p e2=m e s h.E l e m T y p e(e l e m C o d e=C A X3,e l e m L i b r a r y=S T A N D A R D)a1=m d b.m o d e l s['M o d e l A'].r o o t A s s e m b l yf1=a1.i n s t a n c e s['f u n-1'].f a c e sf a c e s1=f1[0:1]r e g i o n s=(f a c e s1,)a1.s e t E l e m e n t T y p e(r e g i o n s=r e g i o n s,e l e m T y p e s=(e l e m T y p e1,e l e m T y p e2))定义其中一个物体的网格为一次4结点单元,如果其中有无法划分成四边形单元的情况,则用三角形一次3结点单元.m d b.m o d e l s['M o d e l A'].r o o t A s s e m b l y.s e e d P a r t I n s t a n c e(r e g i o n s=(m d b.m o d e l s['M o d e l A'].r o o t A s s e m b l y.i n s t a n c e s['f u n-1'],),s i z e=0.5)m d b.m o d e l s['M o d e l A'].r o o t A s s e m b l y.s e e d P a r t I n s t a n c e(r e g i o n s=(m d b.m o d e l s['M o d e l A'].r o o t A s s e m b l y.i n s t a n c e s['B o d e n-1'],),s i z e=1)定义网格划分全局单元大小.m d b.m o d e l s['M o d e l A'].r o o t A s s e m b l y.g e n e r a t e M e s h(r e g i o n s=(m d b.m o d e l s['M o d e lA'].r o o t A s s e m b l y.i n s t a n c e s['B o d e n-1'],m d b.m o d e l s['M o d e lA'].r o o t A s s e m b l y.i n s t a n c e s['f u n-1']))按照定义划分单元第八节,任务提交及杂项功能m d b.m o d e l s.c h a n g e K e y(f r o m N a m e='M o d e l A',t o N a m e='F a l l-M u s t e r')修改模型名称m d b.M o d e l(n a m e='F a l l-015',o b j e c t T o C o p y=m d b.m o d e l s['F a l l-M u s t e r'])拷贝模型m d b.m o d e l s['F a l l-015'].m a t e r i a l s['B o d e n'].e l a s t i c.s e t V a l u e s(t a b l e=((210546.3,0.15),))修改模型中的材料属性m d b.J o b(c o n t a c t P r i n t=O F F,d e s c r i p t i o n='',e c h o P r i n t=O F F,e x p l i c i t P r e c i s i o n=S I N G L E,h i s t o r y P r i n t=O F F,m o d e l='F a l l-015',m o d e l P r i n t=O F F,m u l t i p r o c e s s i n g M o d e=T H R E A D S,n a m e='J o b-015',n o d a l O u t p u t P r e c i s i o n=S I N G L E, n u m C p u s=1,n u m D o m a i n s=1,p a r a l l e l i z a t i o n M e t h o d E x p l i c i t=L O O P,p a r a l l e l i z a t i o n M e t h o d S t a n d a r d=T R E E,p r e M e m o r y=1024.0,s c r a t c h='',s t a n d a r d M e m o r y=2048.0,s t a n d a r d M e m o r y P o l i c y=M O D E R A T E,t y p e=A N A L Y S I S, u s e r S u b r o u t i n e='')生成任务m d b.s a v e A s(p a t h N a m e='D:/t e m p/F u n d a m e n t S c h w i n g u n g S t u d i e')保存模型m d b.j o b s['J o b-015'].s u b m i t()提交任务关于如何在p y t h o n中提交多个任务的问题:如果您使用下面这样的命令做的提交m d b.j o b s['J o b-01'].s u b m i t()m d b.j o b s['J o b-02'].s u b m i t()m d b.j o b s['J o b-03'].s u b m i t()你就会看到,所有的任务是一次性提交的,多个任务在一起运行,这肯定丌是你想看到的结果,如何完成一个接着一个的提交呢,其实很简单,在每个任务后面加上一句m d b.j o b s['J o b-01'].w a i t F o r C o m p l e t i o n()就可以了.那么上面的语句就改为m d b.j o b s['J o b-01'].s u b m i t()m d b.j o b s['J o b-01'].w a i t F o r C o m p l e t i o n()m d b.j o b s['J o b-02'].s u b m i t()m d b.j o b s['J o b-02'].w a i t F o r C o m p l e t i o n()m d b.j o b s['J o b-03'].s u b m i t()m d b.j o b s['J o b-03'].w a i t F o r C o m p l e t i o n()......就一切O K了。

ABAQUS_Fortran二次开发

ABAQUS_Fortran二次开发

目录摘要............................................................... ABSTRACT .. (I)1.绪论 01.1.课题的研究背景 01。

2.............................................. 本文的研究内容和方法1 2。

基于ABAQUS软件的二次开发 (2)2。

1。

...................................................... ABAQUS介绍22.2。

................................................ ABAQUS各模块简介22。

3............................................. ABAQUS的二次开发平台4 2。

4。

........................................... ABAQUS的二次开发语言5 3。

用户材料子程序UMAT (7)3.1。

................................................ UMAT开发环境设置73.2.UMAT注意事项 (8)3。

3.................................................... UMAT接口的原理93.4。

................................................... UMAT的使用方法12 4。

材料非线性问题. (13)4。

1。

............................................ 材料的弹塑性本构关系144.2。

............................................. 非线性有限元算法理论174.3.增量理论常刚度法公式推导 (20)4.4.增量理论切线刚度法公式推导 (21)5.UMAT程序设计和编码 (25)5.1.本构关系描述 (25)5。

ABAQUS二次开发教程

ABAQUS二次开发教程

ABAQUS(Python语言)二次开发人生苦短,我用Python作者:Fan ShengbaoPython2.72017年12月目录第一章Python程序基本语法 (1)1.1Python语法结构 (1)1.2Python元组 (1)1.3Python列表 (1)1.4Python字典 (2)1.5Python集合 (3)1.6Python字符串 (3)1.7Python分支语句 (4)1.8Python循环语句 (5)1.8.1for循环 (5)1.8.2while循环 (5)1.9Python定义函数 (5)1.10Python模块 (6)1.11Python包 (7)1.12Python文件和目录 (7)1.12.1目录操作 (7)1.12.2文件操作 (7)1.13Python异常处理 (8)第二章ABAQUS/Python二次开发 (9)2.1ABAQUS执行Python程序 (9)2.2编写ABAQUS/Python程序 (10)2.3ABAQUS录制Python程序 (10)2.4ABAQUS/Python对象介绍 (11)2.4.1 session对象 (11)2.4.2 mdb对象 (11)2.4.3 odb对象 (13)2.5ABAQUS完整二次开发示例 (14)2.6ABAQUS二次开发常用函数 (16)2.6.1 Part模块常用函数 (16)第一章Python程序基本语法1.1Python语法结构Python语言以缩进来约束每个程序块,编写程序时要特别注意每一行的缩进量,同一层次的语句应具有相同的缩进量。

下面是一段Python程序示例:#-*- coding:utf-8 -*-for i in range(1,10):for j in range(1,i+1):print str(j)+'x'+str(i)+' = '+str(i*j),print该段程序主要功能是实现乘法口诀表输出打印,其中“#-*- coding:utf-8 -*-”是约定文档的编码方式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录
摘 要 .........................................................................................................................................I ABSTRACT ............................................................................................................................ II 1. 绪论 ................................................................................................................................... 1
前言
有限元法是工程中广泛使用的一种数值计算方法。它是力学、计算方法和计算机 技术相结合的产物。在工程应用中,有限元法比其它数值分析方法更流行的一个重要 原因在于:相对与其它数值分析方法,有限元法对边界的模拟更灵活,近似程度更高。 所以,伴随着有限元理论以及计算机技术的发展,大有限元软件的应用证变得越来越 普及。
1.1. 课题的研究背景..................................................................................................... 1 1.2. 本文的研究内容和方法......................................................................................... 2 2. 基于 ABAQUS 软件的二次开发..................................................................................... 3 2.1. ABAQUS 介绍 ....................................................................................................... 3 2.2. ABAQUS 各模块简介 ........................................................................................... 3 2.3. ABAQUS 的二次开发平台.................................................................................... 5 2.4. ABAQUS 的二次开发语言.................................................................................... 6 3. 用户材料子程序 UMAT................................................................................................... 8 3.1. UMAT 开发环境设置 ............................................................................................ 8 3.2. UMAT 注意事项 .................................................................................................... 9 3.3. UMAT 接口的原理 ............................................................................................... 10 3.4. UMAT 的使用方法 ............................................................................................... 12 4. 材料非线性问题 ............................................................................................................. 14 4.1. 材料的弹塑性本构关系....................................................................................... 14 4.2. 非线性有限元算法理论....................................................................................... 17 4.3. 增量理论常刚度法公式推导............................................................................... 20 4.4. 增量理论切线刚度法公式推导........................................................................... 21 5. UMAT 程序设计和编码 ................................................................................................. 25 5.1. 本构关系描述....................................................................................................... 25 5.2. 常刚度法程序设计............................................................................................... 27 5.3. 常刚度法程序编码............................................................................................... 29 5.4. 切线刚度法程序设计........................................................................................... 32 5.5. 切线刚度法程序编码........................................................................................... 36 5.6. 程序的调试........................................................................................................... 39 6. 程序验证 ......................................................................................................................... 40
这种情况已经得到了极大的改善,计算设备的能力变得更加强大、类似 ABAQUS 这 样的产品功能日臻完善,应用日益广泛。
非线性有限元分析在各个制造行业得到了广泛应用,有不少大型用户。航空航天 业一直是非线性有限元分析的大客户,一个重要原因是大量使用复合材料。新一代波 音 787 客机将全部采用复合材料。只有像 ABAQUS 这样的软件,才能分析包括多个子 系统的产品耐久性能。在汽车业,用线性有限元分析来做四轮耐久性分析不可能得到 足够准确的结果。分析汽车的整体和各个子系统的性能要求(如悬挂系统等)需要进 行非线性分析。在土木工程业, ABAQUS 能处理包括混凝土静动力开裂分析以及沥青混 凝土方面的静动力分析,还能处理高度复杂非线性材料的损伤和断裂问题,这对于大 型桥梁结构,高层建筑的结构分析非常有效。
瞬态、大变形、高级材料的碰撞问题必须用非线性有限元分析来计算。线性分析 在这种情况下是不适用的。以往有一些专门的软件来分析碰撞问题,但现在 ABAQUS 在 通用有限元软件包就能解决这些问题。所以,ABAQUS 可以在一个软件完成线性和非线 性分析。
ABAQUS 给用户提供了强大二次开发接口,尤其是在材料本构方面,给用户开发符 合实际工程的材料本构模型提供了强大帮助,本文将针对其用户材料子程序展开研究, 总结常用材料模型的开发方法。
ABAQUS 软件一直以非线性有限元分析软件而闻名,这也是它和 ANSYS,Nastran 等 软件的区别所在。非线性有限元分析的用处越来越大,因为在所用材料非常复杂很多 情况下,用线性分析来近似已不再有效。比方说,一个复合材料就不能用传统的线性 分析软件包进行分析。任何与时间有关联,有较大位移量的情况都不能用线性分析法 来处理。多年前,虽然非线性分析能更适合、更准确的处理问题,但是由于当时计算 设备的能力不够强大、非线性分析软件包线性分析功能不够健全,所以通常采用线性 处理的方法。
1
6.1. 问题描述............................................................................................................... 41 6.2. 本构关系............................................................................................................... 42 6.3. ABAQUS 自带材料模型计算 ............................................................................. 42 6.4. 常刚度法的 UMAT 验证 ..................................................................................... 44 6.5. 切线刚度法的 UMAT 验证 ................................................................................. 46 6.6. 两种算法的比较分析........................................................................................... 48 7. 结论与展望 ..................................................................................................................... 52 7.1. 结论....................................................................................................................... 52 7.2. 展望....................................................................................................................... 52 致 谢 ..........................................................................................................ห้องสมุดไป่ตู้........................... 54 参考文献 ................................................................................................................................ 55 附 1:ABAQUS 自带弹塑性材料验证的 INP 文件 ........................................................... 56 附 2:用于算法验证的 INP 文件......................................................................................... 62
相关文档
最新文档