浅谈ABAQUS数值模拟中的二次开发问题
ABAQUS-二次开发-边界条件
ABAQUS-二次开发-边界条件这个例子模拟三峡库区的水位涨落时,涉水土质滑坡的渗流场分布情况的,是以前做的,蛮好玩的。
如果大家关心些新闻的话,三峡库区有涨水、蓄水、排水、枯水这个一年一次循环的周期,关键问题就在于怎么在数值模拟中考虑这个时间单位这里用的是“天”,任何问题,只要把单位统一化,就可以实现自己所定义的单位系统下的问题,这个大家应该是很熟悉的了。
t=2天t=4天t=8天t=16天t=20天t=26天图2 浸润线位置随涨水时间t变化图数值模拟中实现这个问题,需要对边界条件上加载孔隙水压力的方式动手脚了,首先把时间定下来,然后把每个时间对应的水位高度定下来,然后就是写对应的程序了,关键就在于,需要在各个位置的节点处定义不同的pp_t幅值曲线。
这个问题使用子程序会很方便,也可以不用,只需要定义一堆关键字吧,但是GUI方式是完全没法实现的。
其实软件关键字的背后也就是他的脚本语言,就好像是FLAC里写一句struct cable,这个命令本身只有给你看懂那么一个傻瓜意义意义。
看看关键字怎么定义的:*AMPLITUDE,name=down1,VALUE=ABSOLUTE0,0,30,-300,180,-300*AMPLITUDE,name=down2,VALUE=ABSOLUTE0,10,1,0,30,-290,180,-290*AMPLITUDE,name=down3,VALUE=ABSOLUTE0,20,2,0,30,-280,180,-280*AMPLITUDE,name=down4,VALUE=ABSOLUTE0,30,3,0,30,-270,180,-270*AMPLITUDE,name=down5,VALUE=ABSOLUTE0,40,4,0,30,-260,180,-260*AMPLITUDE,name=down6,VALUE=ABSOLUTE0,50,5,0,30,-250,180,-250*AMPLITUDE,name=down7,VALUE=ABSOLUTE0,60,6,0,30,-240,180,-240*AMPLITUDE,name=down8,VALUE=ABSOLUTE0,70,7,0,30,-230,180,-230*AMPLITUDE,name=down9,VALUE=ABSOLUTE0,80,8,0,30,-220,180,-220*AMPLITUDE,name=down10,VALUE=ABSOLUTE0,90,9,0,30,-210,180,-210*AMPLITUDE,name=down11,VALUE=ABSOLUTE 0,100,10,0,30,-200,180,-200*AMPLITUDE,name=down12,VALUE=ABSOLUTE 0,110,11,0,30,-190,180,-190*AMPLITUDE,name=down13,VALUE=ABSOLUTE 0,120,12,0,30,-180,180,-180*AMPLITUDE,name=down14,VALUE=ABSOLUTE 0,130,13,0,30,-170,180,-170*AMPLITUDE,name=down15,VALUE=ABSOLUTE 0,140,14,0,30,-160,180,-160*AMPLITUDE,name=down16,VALUE=ABSOLUTE 0,150,15,0,30,-150,180,-150*AMPLITUDE,name=down17,VALUE=ABSOLUTE 0,160,16,0,30,-140,180,-140*AMPLITUDE,name=down18,VALUE=ABSOLUTE 0,170,17,0,30,-130,180,-130*AMPLITUDE,name=down19,VALUE=ABSOLUTE 0,180,18,0,30,-120,180,-120*AMPLITUDE,name=down20,VALUE=ABSOLUTE 0,190,19,0,30,-110,180,-110*AMPLITUDE,name=down21,VALUE=ABSOLUTE 0,200,20,0,30,-100,180,-100*AMPLITUDE,name=down22,VALUE=ABSOLUTE 0,210,21,0,30,-90,180,-90*AMPLITUDE,name=down23,VALUE=ABSOLUTE 0,220,22,0,30,-80,180,-80*AMPLITUDE,name=down24,VALUE=ABSOLUTE 0,230,23,0,30,-70,180,-70*AMPLITUDE,name=down25,VALUE=ABSOLUTE0,240,24,0,30,-60,180,-60*AMPLITUDE,name=down26,VALUE=ABSOLUTE0,250,25,0,30,-50,180,-50*AMPLITUDE,name=down27,VALUE=ABSOLUTE0,260,26,0,30,-40,180,-40*AMPLITUDE,name=down28,VALUE=ABSOLUTE0,270,27,0,30,-30,180,-30*AMPLITUDE,name=down29,VALUE=ABSOLUTE0,280,28,0,30,-20,180,-20*AMPLITUDE,name=down30,VALUE=ABSOLUTE0,290,29,0,30,-10,180,-10*AMPLITUDE,name=down31,VALUE=ABSOLUTE0,300,29.9,0,180,0*BOUNDARY,AMPLITUDE=down1Part-1-1.nod30,8,,0*BOUNDARY,AMPLITUDE=down2Part-1-1.nod29,8,,10*BOUNDARY,AMPLITUDE=down3Part-1-1.nod28,8,,20*BOUNDARY,AMPLITUDE=down4*BOUNDARY,AMPLITUDE=down5 Part-1-1.nod26,8,,40*BOUNDARY,AMPLITUDE=down6 Part-1-1.nod25,8,,50*BOUNDARY,AMPLITUDE=down7 Part-1-1.nod24,8,,60*BOUNDARY,AMPLITUDE=down8 Part-1-1.nod23,8,,70*BOUNDARY,AMPLITUDE=down9 Part-1-1.nod22,8,,80*BOUNDARY,AMPLITUDE=down10 Part-1-1.nod21,8,,90 *BOUNDARY,AMPLITUDE=down11 Part-1-1.nod20,8,,100 *BOUNDARY,AMPLITUDE=down12 Part-1-1.nod19,8,,110 *BOUNDARY,AMPLITUDE=down13 Part-1-1.nod18,8,,120 *BOUNDARY,AMPLITUDE=down14 Part-1-1.nod17,8,,130*BOUNDARY,AMPLITUDE=down15 Part-1-1.nod16,8,,140*BOUNDARY,AMPLITUDE=down16 Part-1-1.nod15,8,,150*BOUNDARY,AMPLITUDE=down17 Part-1-1.nod14,8,,160*BOUNDARY,AMPLITUDE=down18 Part-1-1.nod13,8,,170*BOUNDARY,AMPLITUDE=down19 Part-1-1.nod12,8,,180*BOUNDARY,AMPLITUDE=down20 Part-1-1.nod11,8,,190*BOUNDARY,AMPLITUDE=down21 Part-1-1.nod10,8,,200*BOUNDARY,AMPLITUDE=down22 Part-1-1.nod9,8,,210*BOUNDARY,AMPLITUDE=down23*BOUNDARY,AMPLITUDE=down24Part-1-1.nod7,8,,230*BOUNDARY,AMPLITUDE=down25Part-1-1.nod6,8,,240*BOUNDARY,AMPLITUDE=down26Part-1-1.nod5,8,,250*BOUNDARY,AMPLITUDE=down27Part-1-1.nod4,8,,260*BOUNDARY,AMPLITUDE=down28Part-1-1.nod3,8,,270*BOUNDARY,AMPLITUDE=down29Part-1-1.nod2,8,,280*BOUNDARY,AMPLITUDE=down30Part-1-1.nod1,8,,290*BOUNDARY,AMPLITUDE=down31Part-1-1.nod0,8,,300以上是一部分关键字,其实根本问题就是找到对应节点,对各个节点附上与时间相关的边界。
浅谈ABAQUS数值模拟中的二次开发问题
例子:一个基于J2理论的针对大变形弹塑性材料 的本构方程 (例:umat\umat.doc)
1.3.4其他(VMAT、URDFIL…)
功能:比如VMAT是指动力学计算中的用户自定 义材料本构,通过URDFIL可以把计算数据写 入指定文件,USDFLD可以定义场变量(一个 场变量对应一个参数值)为状态变量(位移、 应力)的函数等。
浅谈数值模拟中的 二次开发问题
二次开发问题的分类
1 改变软件初始环境变量
2 创建新的图形用户界面 3 子程序开发
1. 1 改变软件初始环境变量
软件差异较大 不具有通用意义
1.2 创建新的图形用户界面
1.2.1 前后处理小插件(例:1\1.2.1.doc) 1.2.2 创建的方式 ① 软件脚本语言(上例) ② 面向对象语言,如C++,java等 ③ bat文件(例:1\1.2.2.3.doc)
例2 边界条件与时间和坐标相关
(例:dload\例2水位 变化\up-down.avi,dload\例2水位变化\边界条件.doc)
例3 非均布载荷 (例:dload\例3非均布载荷\非均布载荷.doc) 例4 载荷随分析步变化 (例:dload\例4不同step不同载荷\
载荷随分析步变化.doc)
2 结语
数值模拟没有以前理解中的那么局限,好 好研究一下,会发现是自.3.1 定义复杂边界条件
1.3.2 用户自定义单元子程序(UEL)
1.3.3 用户自定义材料子程序(UMAT)
1.3.4 其他(VMAT、URDFIL…)
1.3.1定义复杂边界条件
例1 移动载荷 (例:dload\例1移动载荷\dz.avi,dload\例1移
Abaqus二次开发
Abaqus二次开发——Abaqus/python入门体会入门实例#===========================================================自己的论文要用到有限元进行数值模拟分析,以前都用ansys计算,可ansys中岩土的本构模型只有D-P模型,无法准确的反映土的硬化/软化性质,模拟计算出的结果因此也和实际差别很大。
Abaqus有着丰富的材料模型,超强的非线性分析能力,岩土的模型也很多,因此才转学Abaqus。
Abaqus的cae建模功能还是很好的,但科研课题一般都要进行参数分析,采用cae的建模方法有些不切实际,学了没几天就放弃cae开始学习inp,也是学了一阵子才知道inp不能建立实体模型,只能直接建节点和单元。
复杂的模型inp也无法建立,但采用Python建模就可以解决这个问题。
由于Abaqus的学习资料不多,过了好些日子才知道Abaqus也可以采用Python语言进行建模计算,只是比Ansys的Apdl语言复杂得多,并且除了手册上的Script资料之外,没有较为系统的教程,刚一接触真是让人头痛。
通过查看Simwe论坛上关于Python的帖子,和论坛朋友的帮助,自己在慢慢积累,现在对Python有了一点点了解,算是入了个门。
接触Abaqus也没多久,对python更是一知半解,绝大多数地方根本都不清楚,抽空写一点认识体会主要是给像自己一样刚学习Abqus Python的朋友,能少走一些弯路,节约一些时间。
同时希望大家批评指正、共同讨论、补充。
#--------------------------------------------------------------------------------------------------学习Abaqus/Python基础:Abaqus的cae建模有比较全面的认识;了解一些Python语法知识(大家都不会有太多时间单独学习Python语言本身,只需要有概念了解即可,不懂的地方可以随时查询Python script手册)Abaqus/Python学会使用不太难,可要精通应用还是要付出一定的劳动。
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进⾏查看。
Python在ABAQUS二次开发中的应用实例2
;
不同数据类型之间可通过函数转换,如int()、float()。
可以用替代符号表示定制字符串,如
stress=1234.56 print ‘The stress is %f MPa’ % stress
即可输出: The stress is 1234.56 Mpa
符号 %c %s %d %u 描述 定制字符及其ASCII码 定制字符串 定制整数 定制无符号整数 符号 %o %x %f %e 描述 定制无符号八进制数 定制无符号十六进制数 定制浮点型数据 用科学计数法定义浮点型数据
编写脚本可以实现以下功能:
自动执行重复任务; 进行参数分析; 创建和修改模型;
访问输出数据库(ODB文件);
定制ABAQUS环境文件; 创建ABAQUS插件程序。
编写完成的脚本文件,可以直接在ABAQUS运行:
File → Run Script,打开相应的.py文件,即可执行; 刚打开ABAQUS界面,直接选择Run Script也可; 可以在GUI界面下部的命令行接口输入脚本语句执行。
打开方式
File → Abaqus PDE,然后打开相应的.py文件,即可编辑调试。
ABAQUS 脚本概述
调试ABAQUS脚本
点 点 点 点 点
按钮可以调试整个脚本文件; 按钮可以逐行调试脚本文件,调试行显示为蓝色; 按钮可以停止调试文件; 按钮可以设置断点,调试时将调到此行为止; 按钮,然后点 按钮,可以录制CAE中的操作,点 可以停止录制。
语句前加上 # 号,表示是注释内容,这个语句将不被执行; 使用中文注释,要在文件最开始加上:# -*- coding: UTF-8-*以换行来识别一个逻辑语句的结束。如果需要在一个物理行中编写多个逻辑语 句,需要用分号分开。如:x=1;y=2;z=3。如果一个逻辑语句太长需要分行写, 需要用反斜杠‚\‛进行连接(有括号括起来的内容就不用)。 不同代码块之间要注意用冒号和缩进来区分代码块之间的层次关系,如:
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二次开发基础第9章知识要点:ABAQUS 二次开发基础; ; ; ;ABAQUS 二次开发概述 ABAQUS 用户子程序接口 ABAQUS 用户子程序介绍应用举例本章导读:本章主要介绍了大型有限元软件 ABAQUS 二次开发的基本情况,主要包括:ABAQUS 二次开发概述、ABAQUS 用户子程序接口、ABAQUS 用户子程序介绍等,最后给出两个算例,介绍采用ABAQUS 进行二次开发以及建立ABAQUS 主程序与用户子程序之间口的基本过程。
9.1 ABAQUS 二次开发概述随着计算技术和计算机的快速发展,有限元软件的发展速度迅速,功能日渐强大。
目前国际上被广泛采用的通用有限元软件有 ANSYS、MSC、ABAQUS 等。
利用商业软件进行计算现在已是科学研究中的一项重要手段。
由于工程问题的千差万别,不同的用户有不同的专业背景和发展方向,通用软件不免在具体的专业方面有所欠缺,针对这些不足,大部分的通用软件都提供了二次开发功能,以帮助用户减少重复性的编程工作、提高开发起点、缩短研发周期、降低开发成本,并能简化后期维护工作,给用户带来很多方便。
基于通用软件平台进行开发,是目前研究的一个重要发展方向。
ABAQUS 也提供了若干用户子程序(User Subroutines)接口,它是一个功能非常强大且适用的分析工具,与命令行的程序格式相比,用户子程序的限制少得多,从而使用更加灵活方便。
ABAQUS 不仅提供标准的有限元分析程序,而且具有良好的开放性,可利用它提供的用户子程序接口生成非标准的分析程序来满足用户的需要,在实际工程中得到广泛应用。
ABAQUS 允许用户通过子程序以代码的形式来扩展主程序的功能,并给用户提供了强大而又灵活的用户子程序接口和应用程序接口(Utility Routine),ABAQUS 共有 42 个用户子程序接口,15 个应用程序接口,用户可以定义包括边界条件、荷载条件、接触条件、材料特性以及利用用户子程序和其它应用软件进行数值交换等等。
ABAQUS二次开发教程
ABAQUS (Python 语言)二次开发人生苦短,我用 Python作者: Fan ShengbaoPython2.72017 年 12 月目录1第一章 Python 程序基本语法 ......................................................................................................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)9第二章 ABAQUS/Python 二次开发 .............................................................................................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.1 Python 语法结构Python 语言以缩进来约束每个程序块,编写程序时要特别注意每一行的缩进量,同一层次的语句应具有相同的缩进量。
ABAQUSFortran二次开发
本文采用的本构关系是经过归纳和抽象的,也就是说本文的程序并不仅仅是只针对某个具体模型和问题,而是针对所有符合抽象出的各向同性硬化材料,这样做的好处是能保证程序的通用性和复用性,避免以后的重复劳动,当然,这也是符合ABAQUS软件设计UMAT接口的宗旨的。
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=63 8x9=72 9x9=81Python程序中一行中“#”号后面的内容为注释,“#”号只支持单行注释,多行注释可使用“’’’ … ‘’’”注释符。
'''Python'''1.2Python元组Python中的元组(tuple)相当于C语言中的数组简化版,其内容和长度均不可变,只能对其内容进行访问。
基于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(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 -*-”是约定文档的编码方式。
Abaqus中的二次开发
Abaqus中的二次开发Abaqus中的二次开发可以分为两大类:1)基于FORTRAN语言的用户子程序开发;2)基于Python的脚本开发。
其中第二大类基于Python的脚本开发又可以细分为如下三大类:1)通过Python脚本实现Abaqus参数化建模;2)通过Python脚本实现用户定制化后处理;3)应用Python语言通过FoxGUI Toolkit编写GUI(可视化用户界面)。
今天首先对Abaqus子程序二次开发进行一个概括性的介绍。
虽然Abaqus为用户提供了大量的单元库和求解模型,使用户能够利用这些模型处理绝大多数的问题,但是实际问题毕竟非常复杂,Abaqus不可能求解所有可能出现的问题,所以Abaqus提供了大量的用户自定义子程序(UserSubroutine),允许用户再找不到合适模型的情况下自定义符合自己问题的模型。
这些用户子程序涵盖了建模、载荷到单元的几乎各个部分。
用户子程序具有以下功能和特点:1、如果Abaqus的一些固有模块功能有限,用户子程序可以提高和扩展Abaqus中相应的功能;2、通常用户子程序是用FORTRAN语言的代码写成(Abaqus也提供C++接口);3、它可以以不同的方式运行在模型的不同计算步骤和位置;4、可以在一次计算中包含多个用户子程序。
常用的Abaqus用户子程序举例:DLOAD:用户自定义载荷,例如在复杂工况下,载荷随时间和温度变化;FILM:用户自定义film coefficient,例如定义复杂热交换界面上的热交换系数;UEL:用户自定义单元,是Abaqus用户子程序中功能最强大的,理论上可以实现任意类型的有限元单元定义,通过用户自定义单元和Abaqus的高效求解器,实现任意类型的偏微分方程问题的数值求解;UMAT:用户自定义材料属性,可以用来定义复杂材料的连续模型,用以补充Abaqus材料定义模块功能,例如:自定义复杂特殊塑性模型,自定义复杂特殊损伤模型。
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,EXTRAPOLATION=NO,INC=2000000*STATIC0.001,500.0,0.00001,0.1。
Q: 模型中存在两个物体的接触,计算过程中报错,怎么回事?A: 接触问题不收敛有两个方面不妨试试:一、在*CONTACT PAIR 里调试ADJUST参数;二、调一些模型参数,比如FRICTION等。
Q: 在边界条件和加载时,总是有initial这个步,然后是我们自己定义的加载步,请问这个initial步,主要作用是什么?能不能去掉?A: 不能去掉,所有的分析都有,是默认的步。
(完整word)ABAQUS-UMAT弹塑本构二次开发的实现
前言有限元法是工程中广泛使用的一种数值计算方法。
它是力学、计算方法和计算机技术相结合的产物。
在工程应用中,有限元法比其它数值分析方法更流行的一个重要原因在于:相对与其它数值分析方法,有限元法对边界的模拟更灵活,近似程度更高。
所以,伴随着有限元理论以及计算机技术的发展,大有限元软件的应用证变得越来越普及。
ABAQUS软件一直以非线性有限元分析软件而闻名,这也是它和ANSYS,Nastran等软件的区别所在。
非线性有限元分析的用处越来越大,因为在所用材料非常复杂很多情况下,用线性分析来近似已不再有效。
比方说,一个复合材料就不能用传统的线性分析软件包进行分析。
任何与时间有关联,有较大位移量的情况都不能用线性分析法来处理。
多年前,虽然非线性分析能更适合、更准确的处理问题,但是由于当时计算设备的能力不够强大、非线性分析软件包线性分析功能不够健全,所以通常采用线性处理的方法。
这种情况已经得到了极大的改善,计算设备的能力变得更加强大、类似ABAQUS这样的产品功能日臻完善,应用日益广泛。
非线性有限元分析在各个制造行业得到了广泛应用,有不少大型用户。
航空航天业一直是非线性有限元分析的大客户,一个重要原因是大量使用复合材料。
新一代波音 787客机将全部采用复合材料。
只有像 ABAQUS这样的软件,才能分析包括多个子系统的产品耐久性能。
在汽车业,用线性有限元分析来做四轮耐久性分析不可能得到足够准确的结果.分析汽车的整体和各个子系统的性能要求(如悬挂系统等)需要进行非线性分析。
在土木工程业, ABAQUS能处理包括混凝土静动力开裂分析以及沥青混凝土方面的静动力分析,还能处理高度复杂非线性材料的损伤和断裂问题,这对于大型桥梁结构,高层建筑的结构分析非常有效。
瞬态、大变形、高级材料的碰撞问题必须用非线性有限元分析来计算。
线性分析在这种情况下是不适用的。
以往有一些专门的软件来分析碰撞问题,但现在ABAQUS在通用有限元软件包就能解决这些问题。
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材料库中没有包含的材料进⾏计算,扩充程序功能。
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了。
使用python进行ABAQUS的二次开发的简要说明(byYoung2017.06.27)
使用python进行ABAQUS的二次开发的简要说明(byYoung2017.06.27)(所有用词以英文为准,翻译仅供参考)一、abaqus二次开发总述:首先最重要的知识点需要明确,abaqus在求解核心(Solver/ Kernel)和图形用户界面(GUI)之间使用的交互语言天然就是python,因此使用python进行abaqus二次开发是十分自然的选择(当然你也可以用C++,但是鉴于python所拥有的各类开源库函数的优势,python应当是二次开发的首选)。
abaqus已经使用python 写好了很多用于计算、建模、GUI等操作的模块,因此二次开发的重点在于灵活调用这些模块,完成自己的设计计算需求。
所以原则上,所有能通过abaqus/CAE交互完成的操作,使用脚本都可以实现。
并且由于Python提供的丰富的函数资源库,会使得很多复杂的建模的过程更加参数化,更加可控,有时候甚至更加简单。
其次二次开发的学习要点在于勤查手册,其中Abaqus Scripting User's Manual和Abaqus Scripting User's Reference Manual是查阅的重点,其中后者是abaqus中各个object内置方法,路径,输入参数等的详细说明。
最后关于调用脚本的几种用法说明:(1)直接在命令行调用调用脚本并打开cae界面: abaqus cae script=myscript.py调用用于可视化操作脚本,打开显示界面(注意:此时只有visualization模块被激活): abaqus cae viewer=myscript.py 调用脚本在命令行执行,同时不打开GUI界面,但会进入python 交互界面:abaqus cae noGUI=myscript.py(2)在abaqus的GUI界面调用按照Main Menu: File->Run Script,选择需要调用的脚本文件,abaqus会进行执行(3)在abaqus的命令行交互界面调用(command line interface,在abaqus的GUI界面打开之后,窗口的最下方会有命令输入的位置,在这里也可以调用python脚本,执行方法是键入命令:execfile('myscript.py')abaqus的python脚本其实和其他应用场景下的python脚本没有太多区别,只不过有很多abaqus已经开发好的对象库可供使用,其学习过程和学习任何其他python库都是一致的。
ABAQUS二次开发基础
第9章 ABAQUS二次开发基础知识要点:;ABAQUS二次开发概述;ABAQUS用户子程序接口;ABAQUS用户子程序介绍;应用举例本章导读:本章主要介绍了大型有限元软件ABAQUS二次开发的基本情况,主要包括:ABAQUS二次开发概述、ABAQUS用户子程序接口、ABAQUS用户子程序介绍等,最后给出两个算例,介绍采用ABAQUS进行二次开发以及建立ABAQUS主程序与用户子程序之间口的基本过程。
9.1 ABAQUS二次开发概述随着计算技术和计算机的快速发展,有限元软件的发展速度迅速,功能日渐强大。
目前国际上被广泛采用的通用有限元软件有 ANSYS、MSC、ABAQUS 等。
利用商业软件进行计算现在已是科学研究中的一项重要手段。
由于工程问题的千差万别,不同的用户有不同的专业背景和发展方向,通用软件不免在具体的专业方面有所欠缺,针对这些不足,大部分的通用软件都提供了二次开发功能,以帮助用户减少重复性的编程工作、提高开发起点、缩短研发周期、降低开发成本,并能简化后期维护工作,给用户带来很多方便。
基于通用软件平台进行开发,是目前研究的一个重要发展方向。
ABAQUS 也提供了若干用户子程序(User Subroutines)接口,它是一个功能非常强大且适用的分析工具,与命令行的程序格式相比,用户子程序的限制少得多,从而使用更加灵活方便。
ABAQUS不仅提供标准的有限元分析程序,而且具有良好的开放性,可利用它提供的用户子程序接口生成非标准的分析程序来满足用户的需要,在实际工程中得到广泛应用。
ABAQUS 允许用户通过子程序以代码的形式来扩展主程序的功能,并给用户提供了强大而又灵活的用户子程序接口和应用程序接口(Utility Routine),ABAQUS共有42个用户子程序接口,15个应用程序接口,用户可以定义包括边界条件、荷载条件、接触条件、材料特性以及利用用户子程序和其它应用软件进行数值交换等等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.3.1定义复杂边界条件 定义复杂边界条件
例1 移动载荷 (例:dload\例1移动载荷\dz.avi,dload\例1移
功能:定义软件本身没有的材料本构方程 例子:DP准则和延性损伤本构联合(例:umat\DP和
延性损伤.doc )
例子:一个基于J2理论的针对大变形弹塑性材料 的本构方程 (例:umat\umat.doc)
1.3.4其他(VMAT、URDFIL…) 其他( 其他 、 )
功能:比如VMAT是指动力学计算中的用户自定 义材料本构,通过URDFIL可以把计算数据写 入指定文件,USDFLD可以定义场变量(一个 场变量对应一个参数值)为状态变量(位移、 应力)的函数等。
动载荷\移动载荷.doc)
例2 边界条件与时间和坐标相关
(例:dload\例2水位 变化\up-down.avi,dload\例2水位变化\边界条件.doc)
例3 非均布载荷 (例:dload\例3非均布载荷\非均布载荷.doc) 例4 载荷随分析步变化 (例:dload\例4不同step不同载荷\
载荷随分析步变化.doc)
1.3.2 用户自定义单元子程序(UEL) 用户自定义单元子程序(
功能:提供用户编写软件本身不具有的单元功能 (只有静力分析支持UEL,动力分析不支持) 例子:比较ABAQUS自带的弹簧单元和自己定 义的弹簧单元(例:uel\uel.doc)
1.3.3 用户自定义材料子程序(UMAT) 用户自定义材料子程序(
浅谈数值模拟中的 二次开发问题
二次开发问题的分类
1 改变软件初始环境变量 2 创建新的图形用户界面 3 子程序开发
1. 1 改变软件初始环境变量
软件差异较大 不具有通用意义
1.2 创建新的图形用户界面
1.2.1 前后处理小插件(例:1\1.2.1.doc) 1.2.2 创建的方式 ① 软件脚本语言(上例) ② 面向对象语言,如C++,java等 ③ bat文件(例:1\1.2.2.3.doc)
2 结语
数值模拟没有以前理解中的那么局限,好 好研究一下,会发现是自己局限了自己。
谢谢大家!