ABAQUS二次开发教程
- 格式:doc
- 大小:709.50 KB
- 文档页数:19
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是一款强大的工程仿真软件,而Python则是一种高效、易学的编程语言。
通过Python 对Abaqus进行二次开发,可以大大提高仿真效率。
以下是Abaqus Python二次开发入门案例的步骤:
安装Abaqus和Python
首先需要安装Abaqus和Python。
Abaqus可以从官网下载安装包,而Python则可以从官网下载安装。
了解Abaqus Python API
在Abaqus中,Python API是用来编写脚本和插件的工具。
通过Python API,可以实现对Abaqus 的二次开发。
需要了解Abaqus Python API的基本知识,包括模块、工具、数据对象等等。
编写Python脚本
根据需求,编写Python脚本来实现特定的功能。
例如,可以编写一个脚本,用来自动生成模型、执行仿真、结果后处理等等。
在编写脚本的过程中,需要使用Abaqus Python API提供的函数和方法。
运行Python脚本
将编写的Python脚本保存,并在Abaqus中运行。
在运行脚本之前,需要确保Abaqus已经启动,并且已经连接到了Python解释器。
调试和优化
在运行脚本的过程中,可能会遇到各种问题,需要进行调试和优化。
需要对Python脚本进行逐步调试,找到问题所在,并且优化代码,提高仿真效率。
以上是Abaqus Python二次开发入门案例的基本步骤。
在开发过程中,需要不断学习和积累经验,才能够更好地利用Python API实现对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(Python语言)二次开发人生苦短,我用Python作者:FanShengbaoPython2.7精心整理目录第一章Python程序基本语法....................................................1.1Python语法结构......................................................1.2Python元组..........................................................1.3Python列表..........................................................1.4Python字典..........................................................2.4.2mdb对象........................................................2.4.3odb对象........................................................2.5ABAQUS完整二次开发示例..............................................2.6ABAQUS二次开发常用函数..............................................2.6.1Part模块常用函数...............................................精心整理第一章Python程序基本语法1.1Python语法结构Python语言以缩进来约束每个程序块,编写程序时要特别注意每一行的缩进量,同一层次tt1=(1,2,3,4,5)print tt1[1]程序执行结果:21.3P ython列表Python中的列表(list)相当于C语言中的数组,但比C语言中的数组使用起来更加方便灵活。
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进⾏查看。
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二次开发基础第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 (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 语言以缩进来约束每个程序块,编写程序时要特别注意每一行的缩进量,同一层次的语句应具有相同的缩进量。
#开头的为注释行.第一步, 建立建模环境, 这一步中py将从abaqus中导入建模所需的所有程序模块.from part import *接下来定义草图环境mdb.models['Model A'].Sketch(name='__profile__', sheetSize=200.0)mdb.models['ModelA'].sketches['__profile__'].sketchOptions.setValues(constructionGeometry=ON, decimalPlaces=2, dimensionTextHeight=5.0, grid=ON,gridFrequency=2, gridSpacing=5.0, sheetSize=200.0, viewStyle=AXISYM)上面的设定为大小200*200, 格栅间距为5, 文字标注高度为5.mdb.models['Model A'].sketches['__profile__'].ObliqueConstructionLine(point1=(0.0, -100.0), point2=(0.0, 100.0))本句语句设定轴对称模型的对称轴线位置mdb.models['Model A'].sketches['__profile__'].rectangle(point1=(0.0, 0.0),point2=(40.0, -40.0))该语句绘制矩形, 从点0,0 至点40,-40mdb.models['Model A'].Part(dimensionality=AXISYMMETRIC, name='Boden',type=DEFORMABLE_BODY)定义模型为轴对称, 名字为boden,为可变形体mdb.models['Model A'].parts['Boden'].BaseShell(sketch=mdb.models['ModelA'].sketches['__profile__'])del mdb.models['Model A'].sketches['__profile__']绘图完成不要忘记收回建模环境所占的内存第二节: 材料定义 -------------------- 2楼第三节: 装配 -------------------- 3楼第四节: 分析步定义 -------------------- 4楼第五节: 接触定义 -------------------- 5楼第六节: 荷载边界定义 ----------------- 6楼第七节: 网格划分控制 ------------------ 7楼第八节, 任务提交及杂项功能 -------- 8楼关于如何在python中提交多个任务的问题 9楼第二节, 材料定义from material import *from section import *从ABAQUS提供的接口中导入材料库和组件库mdb.models['Model-A'].Material(name='Boden')定义材料名mdb.models['Model A'].materials['Boden'].Density(table=((2000.0, ), ))定义材料密度mdb.models['Model A'].materials['Boden'].Elastic(table=((210546.3, 0.3333), ))定义材料线弹性模量和泊松比, 其它的材料, 如弹塑性, 粘弹性材料均对应不同的对象函数. mdb.models['Model A'].HomogeneousSolidSection(material='Boden',name='boden',thickness=1.0)mdb.models['ModelA'].parts['Boden'].assignSection(region=Region(faces=mdb.models['ModelA'].parts['Boden'].faces[0:1]), sectionName='boden')设定组件为坐标无关性材料,厚度为单位厚度, 并将属性附给所用的组件第三节, 装配from assembly import *首先, 导入装配所用到的对象mdb.models['ModelA'].rootAssembly.DatumCsysByThreePoints(coordSysType=CYLINDRICAL, origin=(0.0, 0.0, 0.0), point1=(1.0, 0.0, 0.0), point2=(0.0,0.0, -1.0))定义坐标类型为柱坐标, 原点0,0,0,另外两个为单位向量, 确定该坐标轴的方向.mdb.models['Model A'].rootAssembly.Instance(name='Boden-1',part=mdb.models['Model A'].parts['Boden'])生成草图对像boden的实体, 名字叫Boden-1. 无偏移插入第四节, 定义分析步from step import *象其它步一样, 先导入分析步要用到的模块mdb.models['Model A'].ImplicitDynamicsStep(initialInc=0.005,maxNumInc=1024,name='Step-1', noStop=OFF, nohaf=OFF,previous='Initial',timeIncrementationMethod=FIXED, timePeriod=5.12)定义对动力隐式分析, 时长为0.005*1024=5.12个时间单位, 前一步为Initialmdb.models['Model A'].fieldOutputRequests['F-Output-1'].setValues(variables=('U',))定义输出到ODB文件的数据, 这里只定义了位移输出mdb.models['Model A'].fieldOutputRequests['F-Output-1'].setValues(frequency=1)定义位移输出的频率为每步都输出mdb.models['Model A'].steps['Step-1'].Restart(frequency=1, overlay=ON)定义重启动析, 每一步记录, 只记录最后一次的正确状态第五节, 定义接触from interaction import *依然是先导入所用的模块mdb.models['Model A'].rootAssembly.PartitionEdgeByParam(edges=(mdb.models['Model A'].rootAssembly.instances['Boden-1'].edges[3], ), parameter=0.975)在上部即第3面的97.5%的地方设定一个点, 用于定义接触mdb.models['Model A'].ContactProperty('IntProp-1')定义接触属性名mdb.models['Model A'].interactionProperties['IntProp-1'].TangentialBehavior(formulation=FRICTIONLESS)mdb.models['Model A'].interactionProperties['IntProp-1'].NormalBehavior(allowSeparation=OFF, augmentedLagrange=OFF, pressureOverclosure=HARD)定义接触特性,为无摩擦硬接触不允许分开mdb.models['Model A'].SurfaceToSurfaceContactStd(adjustMethod=NONE,createStepName='Initial', interactionProperty='IntProp-1', master=Region(side1Edges=mdb.models['Model A'].rootAssembly.instances['fun-1'].edges[0:1]), name='Int-1', slave=Region(side1Edges=mdb.models['Model A'].rootAssembly.instances['Boden-1'].edges[4:5]), sliding=FINITE)这一句是建立接触对, 分别为两个面上的一条边, 这里边的定义由ABAQUS内定, 具体可以查阅参考手册第六节, 荷载边界定义from load import *mdb.models['Model A'].PeriodicAmplitude(a_0=1.0, data=((3.0, 1.1), (3.2, 1.7)), frequency=2.454, name='Fourier',start=0.0, timeSpan=STEP)定义fourier级数表示的荷载mdb.models['Model A'].Pressure(amplitude='Fourier', createStepName='Step-1', distribution=UNIFORM, magnitude=50.0, name='Load-1', region=Region(side1Edges=mdb.models['Model A'].rootAssembly.instances['fun-1'].edges[2:3]))定义压强, 设定加载的分析步,区域及放大系数mdb.models['Model A'].DisplacementBC(amplitude=UNSET,createStepName='Initial',distribution=UNIFORM, localCsys=None, name='BC-1', region=Region(edges=mdb.models['Model A'].rootAssembly.instances['Boden-1'].edges[0:1]+\mdb.models['Model A'].rootAssembly.instances['Boden-1'].edges[2:3]+\mdb.models['Model A'].rootAssembly.instances['fun-1'].edges[3:4]),u1=SET,u2=UNSET, ur3=UNSET)mdb.models['Model A'].DisplacementBC(amplitude=UNSET, createStepName='Initial', distribution=UNIFORM, localCsys=None, name='BC-2', region=Region(edges=mdb.models['Model A'].rootAssembly.instances['Boden-1'].edges[1:2]),u1=UNSET, u2=SET, ur3=UNSET)设定边界位移为0的边界条件, 注意语法中对象相加的方法.第七节, 网格划分控制from mesh import *import mesh导入网格划分模块elemType1 = mesh.ElemType(elemCode=CAX8,elemLibrary=STANDARD,secondOrderAccuracy=OFF, hourglassControl=STIFFNESS, distortionControl=OFF)elemType2 = mesh.ElemType(elemCode=CAX6M, elemLibrary=STANDARD)a1 = mdb.models['Model A'].rootAssemblyf1 = a1.instances['Boden-1'].facesfaces1 = f1[0:1]regions =(faces1, )a1.setElementType(regions=regions, elemTypes=(elemType1, elemType2))定义其中一个物体的网格为二次8结点单元, 如果其中有无法划分成四边形单元的情况, 则用三角形二次6结点单元.elemType1 = mesh.ElemType(elemCode=CAX4, elemLibrary=STANDARD)elemType2 = mesh.ElemType(elemCode=CAX3, elemLibrary=STANDARD)a1 = mdb.models['Model A'].rootAssemblyf1 = a1.instances['fun-1'].facesfaces1 = f1[0:1]regions =(faces1, )a1.setElementType(regions=regions, elemTypes=(elemType1, elemType2))定义其中一个物体的网格为一次4结点单元,如果其中有无法划分成四边形单元的情况, 则用三角形一次3结点单元.mdb.models['Model A'].rootAssembly.seedPartInstance(regions=(mdb.models['Model A'].rootAssembly.instances['fun-1'], ), size=0.5)mdb.models['Model A'].rootAssembly.seedPartInstance(regions=(mdb.models['Model A'].rootAssembly.instances['Boden-1'], ), size=1)定义网格划分全局单元大小.mdb.models['Model A'].rootAssembly.generateMesh(regions=(mdb.models['ModelA'].rootAssembly.instances['Boden-1'],mdb.models['ModelA'].rootAssembly.instances['fun-1']))按照定义划分单元第八节, 任务提交及杂项功能mdb.models.changeKey(fromName='Model A', toName='Fall-Muster')修改模型名称mdb.Model(name='Fall-015', objectToCopy=mdb.models['Fall-Muster'])拷贝模型mdb.models['Fall-015'].materials['Boden'].elastic.setValues(table=((210546.3, 0.15),))修改模型中的材料属性mdb.Job(contactPrint=OFF, description='', echoPrint=OFF, explicitPrecision=SINGLE, historyPrint=OFF, model='Fall-015', modelPrint=OFF,multiprocessingMode=THREADS, name='Job-015', nodalOutputPrecision=SINGLE, numCpus=1, numDomains=1, parallelizationMethodExplicit=LOOP,parallelizationMethodStandard=TREE, preMemory=1024.0, scratch='',standardMemory=2048.0, standardMemoryPolicy=MODERATE, type=ANALYSIS,userSubroutine='')生成任务mdb.saveAs(pathName='D:/temp/FundamentSchwingungStudie')保存模型mdb.jobs['Job-015'].submit()提交任务关于如何在python中提交多个任务的问题:如果您使用下面这样的命令做的提交mdb.jobs['Job-01'].submit()mdb.jobs['Job-02'].submit()mdb.jobs['Job-03'].submit()你就会看到, 所有的任务是一次性提交的, 多个任务在一起运行, 这肯定不是你想看到的结果, 如何完成一个接着一个的提交呢, 其实很简单, 在每个任务后面加上一句mdb.jobs['Job-01'].waitForCompletion()就可以了.那么上面的语句就改为mdb.jobs['Job-01'].submit()mdb.jobs['Job-01'].waitForCompletion()mdb.jobs['Job-02'].submit()mdb.jobs['Job-02'].waitForCompletion()mdb.jobs['Job-03'].submit()mdb.jobs['Job-03'].waitForCompletion()......就一切OK了。
ABAQUS(Python语言)二次开发人生苦短,我用Python作者:Fan ShengbaoPython2、72017年12月目录第一章Python程序基本语法 (1)1、1Python语法结构11、2Python元组11、3Python列表11、4Python字典21、5Python集合31、6Python字符串31、7Python分支语句41、8Python循环语句51、8、1for循环51、8、2while循环51、9Python定义函数51、10Python模块61、11Python包71、12Python文件与目录71、12、1目录操作71、12、2文件操作71、13Python异常处理8第二章ABAQUS/Python二次开发 (9)2、1ABAQUS执行Python程序92、2编写ABAQUS/Python程序102、3ABAQUS录制Python程序102、4ABAQUS/Python对象介绍112、4、1 session对象 (11)2、4、2 mdb对象 (11)2、4、3 odb对象 (13)2、5ABAQUS完整二次开发示例132、6ABAQUS二次开发常用函数152、6、1 Part模块常用函数 (15)第一章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=81 Python程序中一行中“#”号后面的内容为注释,“#”号只支持单行注释,多行注释可使用“’’’ …‘’’”注释符。
'''Abaqus6、14 Python'''1.2Python元组Python中的元组(tuple)相当于C语言中的数组简化版,其内容与长度均不可变,只能对其内容进行访问。
tt1 =(1,2,3,4,5)print tt1[1]程序执行结果:21.3Python列表Python中的列表(list)相当于C语言中的数组,但比C语言中的数组使用起来更加方便灵活。
其长度与内容均可修改,列表就是编程时使用较多的结构。
list1 =[1,2,3,4,5]print list1[1]list1[1]=5print list1list1、append(6)print list1程序执行结果:2[1, 5, 3, 4, 5][1, 5, 3, 4, 5, 6]Python列表常用操作方法:表1-1 Python列表常用操作方法操作方法功能list1、append() list1、append(1) 在列表末尾追加元素list1、extend() list1、extend([7,8,9]) 合并两个列表list1、insert() list1、insert(2, ’1’) 在列表指定位置插入元素list1、pop() list1、pop(n) 输出并删除指定位置的元素,不指定n值时则弹出末尾元素list1、index() list1、index(5) 在列表中搜索该元素第一次出现的位置list1、count() list1、count(1) 在列表中搜索该元素出现的次数list1、reverse() list1、reverse() 反转列表排序,也可使用list1[::-1]list1、sort() list1、sort() 对列表进行排序对列表进行切片操作(元组也能进行相应的操作):list1 =[1,2,'3','a','b',5]print list1[2:4]print list1[2:]print list1[1::2]print list1[:-2]输出结果:['3', 'a']['3', 'a', 'b', 5][2, 'a', 5][1, 2, '3', 'a']1.4Python字典Python中的字典(dict)对于存储数据非常有用,其存储的数据就是无序的,每一个键对应着一个键值,就是一种映射型数据类型。
dict1 ={'author':'Fan Shengbao','software':'Abaqus'}dict1['data']='2017'#添加一个字典元素print dict1['software']#打印‘software’键的键值print dict1、keys()#打印所有键print dict1、values()#打印所有的键值print dict1、items()#打印所有键及其键值程序输出结果:Abaqus['software', 'Data', 'author']['Abaqus', '2017', 'Fan Shengbao'][('software','Abaqus'),('Data','2017'),('author','Fan Shengbao')]从打印的结果可以瞧出,字典的存储就是无顺序的。
获取字典键值需通过键来访问,键就是唯一的,多个键可以对应相同的内容。
1.5Python集合Python中集合(set)的概念来源于数学在的集合,集合中的每个元素都就是唯一存在,多次添加同一元素只存在一个。
集合区别于列表与元组,其不能通过下表进行访问,但可以将其转换位列表后再进行其她操作。
set1 = set('abcde')print set1set1、add('f') #添加’f’元素set1、add('b') #添加’b’元素print set1print list(set1)输出结果:set(['a', 'c', 'b', 'e', 'd'])set(['a', 'c', 'b', 'e', 'd', 'f'])['a', 'c', 'b', 'e', 'd', 'f']Python中集合常见操作方法:表1-2 Python中集合常见操作方法操作方法功能list1 – list2 list1与list2的差集list1 & list2 list1与list2的交集list1 | list2 list1与list2的并集list1、add() list1、add(‘a’)向list1中添加一个元素list1、updata() list1、updata([1,2,3])向list1中添加多个元素list1、remove() list1、remove(‘a’)移除list1中的’a’元素1.6Python字符串Python中的字符串就是一种只能访问的数据类型,定义之后不能对其内容进行修改,否则程序将抛出异常。
str1 ='Abaqus 6、14 Python'print str1[0:6]print str1、center(30,'-')程序运行结果:Abaqus------Abaqus 6、14 Python------Python字符串常见操作方法:表1-3 Python字符串常见操作方法操作方法功能str1、find() str1、find(substr,start,end) 从str1中搜索substr,不指定start与end时指搜索整个字符串,可以只单独指定startstr1、count() str1、count(substr,start,end) 获取字符出现次数str1、startswith() str1、startswith(str) 就是否以str开始str1、endswith() str1、endswith(str) 就是否以str结尾str1、center() str1、center(n,char) 以str1为中心获取n个字符,不够部分使用char填充str1、ljust() str1、ljust(n,char) 以str1为左对齐获取n个字符,不够部分使用char 填充str1、rjust() str1、rjust(n,char) 以str1为右对齐获取n个字符,不够部分使用char 填充str1、upper() 将str1全部转换为大写str1、lower() 将str1全部转换为小写str1、replace() str1、replace(old,new,count) count为替换次数,若省略只替换一次str1、strip() str1、strip(char) 去除str1前后的char,若省略则去除前后空格str1、split() str1、split(sep,maxcount) 以sep分割字符串,maxcount为最大分割次数(可省略),省略sep则使用空格进行分割1.7Python分支语句if分支语句有以下三种基本形式,可根据不同情况选用不同的形式,使用时需替换pass占位语句:形式一形式二形式三if condition:pass if condition:passelse:passif condition1:passelif condition2:passelse:pass1.8Python循环语句Python编程语言只包含两种循环结构,分别就是for循环与while循环。