ABAQUS Mdb object介绍
1 ABAQUS python中的三大对象:
Session、Mdb和Odb对象,使用python脚本进行编写程序的时候需要创建这三大对象的实例,方法为:from abaqus import * 这样就分别导入了Session、Mdb和Odb对象,同时并实例化了三个对象,其名称分别为session、mdb和odb。 2 ABAQUS Mdb对象:
Mdb对象包括了两大对象:jobs对象和models对象
3 ABAQUS/CAE模块
导入模块的方法:import modulename
4 对象的复制方法:
使用结构来进行复制:ObjectName(name=’name’, objectToCopy=objectToBeCopied) 复制对象可以在同一个mdb中进行复制,也可以在不同对象模型中进行复制 [注意]:这里面的ObjectName必须是容器(Container) 例如:
import material import section
impactModel=mdb.Model(name=’Model A’) mySteel=impactModel.Material(name=’Steel’) #Create a section
firstSection=impactModel.HomogeneousSolidSection(name=’steelSection 1’,material=’Steel’,\\
thickness=1.0)
#Copy the section
secondSection=impactModel.Section(name=’steelSection 2’,objectToCopy=firstSection)
5 删除对象
使用del语句来删除某个对象,但是需要注意的是,当在使用del来删除某个对象所指向的变量时,仅仅删除的是该变量,没有删除该对象,此时需要再用del语句来删除该对象的完整路径,例如:
myMaterial=mdb.models[‘Model-1’].Material(name=’aluminum’) del mdb.models[‘Model-1’].materials[’aluminum’] #此时删除了这个材料对象,但是没有删
除myMaterial变量,该变量仍然存在;
del myMaterial #此时才删除了myMaterial变量
【注意】:同理先删除对象制定的变量名时,该对象仍然存在,可以将该对象重新指定一个
变量,也可以进行删除对象操作
6 ABAQUS中库(Repository)和结构(Structure)的关系:
ABAQUS中的结构是一种方法,该方法是专门用于生成对象的,用结构生成的对象之间具有相似的类型,这些对象就构成了一个库。
结构的首字母总是大写的且是单数表示的,生成相应的库的名称与结构的名称一致,只是全用小写字母表示且是复数形式,访问一个库中的某个对象方法:库名[‘结构生成的对象名称(不是该对象所指向的变量名)’]
7 ABAQUS/CAE序列(sequence) (1) 材料参数表(table)
材料参数表的组织形式为float形式的序表,参数表的行的索引值与序表的索引值是保持一致的,即第i行的参数数据按照“从左到右”的顺序依次放入到该参数表对于的序表的第i个索引值下面。 【注】:序表中数据格式不要求保持一致,但是定义了一个序表后就不能再修改了。 (2) 几何序列(GeomSequence)
一个部件的几何对象,如边(edge或edges)、顶点(vertices)、面(faces)等,这些都是序列对象,它们都有各自的成员(members)和方法(methods)。 【注】:可以使用对象的成员’_members_’和’_keys_’分别列出该对象的所有成员和方法;使用len()函数来查询一个序列的长度。 (3) 网格序列(MeshSequence)
这个序列分别包含网格节点和网格单元两个序列。 (4) 面序列(SurfSequence)
所有面构成的一个序列
8 命名空间(Namespace)
命名空间用于存储变量,同一命名空间中不允许存储同名变量,但是不同命名空间中可以存储同名变量,在ABAQUS的脚本语言中存在两种命名空间,在运行脚本文件时只能在一个命名空间中。 (1) Script namespace
这Script namespace命名空间的名称为main,运行脚本文件和在CAE中输入命令均在
Script namespace命名空间中进行。 (2) Journal namespace
GUI(即利用CAE)进行的操作是在Journal namespace空间中进行的。这些变量存储在replay file中(即abaqus.rpy文件),故应注意进行CAE操作建模和利用脚本文件生成或在CLI窗口中输入命令在是在不同命名空间中进行的,即变量存储于不同命名空间中。即不能CAE和脚本命令混合使用,但是脚本文件和在窗口中输入脚本命令是可以同时配合使用的。 例如:
利用CAE进行操作,生成的replay file为: p1=mdb.models[‘Model A’].parts[‘part 3D A’] e=p1.edges edges=(e[23],)
p1.PartitionEdgeByParam(edges=edges,parameter=0.5)
在利用CLI窗口输入下列命令来分割这条边
p1.PartitionEdgeByParam(edges=edges,parameter=0.75) 此时会提示错误:NameError:p1
这是由于二者命名空间不同,上面的p1存在于Journal命名空间中,故在Script命名空间中找不到p1,所以会出错。 【注】:虽然存在两种命名空间,二者上的变量不能互相利用,但是对象库是通用的,即利用CAE建立的库,在脚本文件和命令中均可以使用,需要使用库的全部路径和库的方法,来完成不同建模方法之间的协调工作。
9 指定视图窗口中显示的内容
利用脚本文件可以很方便的指定视图窗口中想要显示的内容,这些内容包括下面的几种对象类型:
改变视图窗口内容的语法为:
session.viewports[‘name’].setvalues(displayedObject=对象变量)
其中对象变量的类型如上所述,如果对象变量为None,则ABAQUS/CAE将会显示一个空白窗口。
10 指定区域
ABAQUS中常常需要指定一个区域,如:(详情参见:ABAQUS脚本参考文件”Region commands”) a. 施加载荷
b. 划分网格时,需要单元类型和划分网格指定区域 c. 定义集合
ABAQUS的区域要么是一个预先定义的一个集合(包括节点集和单元集)对象或一个面对象,要么是一个临时区域对象(temporary Region object) (1) 直接定义区域
ABAQUS中点、边、面和体均有相应的ID编号,这个编号会自动发生改变(当模型的特征发生改变或不同软件版本),因此,在定义区域时,不要使用ID编号来定义,而是利用findAt()方法来定义点、边、面和体,findAt()方法中的参数为任意个数的点的坐标,返回一个包含参数中包含点的对象。 【注】:findAt()参数中所给定的点不能被其他边、面或体所占有,如果给定的点是两条直线的交点,则findAt()返回的是电脑搜索到的第一条直线,同时点的参数必须写成序表的形式,如:topFace=doorInstance.faces.findAt(((-25,30,10),)) (2) 对已存在的区域进行指定操作
11 人机交互模式
ABAQUS提供了三个要求用户输入并提取用户输入数据的函数: (1) getInput()函数:
a. getInput(‘strings’):其中’strings’为提示用户输入数据的文字,用户在一个文本框中输入一个数据;getInput()函数返回的值为字符串。详细参见“ABAQUS脚本参考手册,section 49.5.1”
Number=float(getInput(‘Enter a number:’))
b. getWarningReply():参数default=’ 字符串’,该字符串为默认显示在对话框中的值; 例如:number=getInput('Enter a number:',default='200')
c. 还可以对该函数进行设置,使得用户的鼠标停留在对话框上时显示一些提示信息,格式
为:getInput(‘Enter a number:\Enter the number of nodes to delete’) d. 用户点击OK,则返回用户填入的值,点击Cancel,则返回None; (2) getInputs()函数
a. 该函数返回一个字符串序列,该序列元素为用户填入的数据,如果用户按Cancel,则返
回None;
b. 该函数的必填参数为:fields=字符串元表序列,例如定义一个元表序列m:
m=((‘Width:’,’10’),(‘Length:’,’20’),(‘Height:’,’30’))
length,width,height=getInputs(fields=m,label=’Specifyblock dimensions:’,dialogTitle=’Create
Block’)
print length,width,height
c. 参数中的字符串序表是一个内部元素也是一个字符串序表,其内部序表格式为:(‘对话
框的描述:’,’默认值’),如果没有默认值,则也必须用(‘对话框的描述:’,’’)来代替,不能省略’’;label参数和dialogTitle参数为可选参数,其含义见上述例子代码。 (3) getWarningReply()函数
该函数返回一个警告窗口,框口中显示的内容由必填参数message提供,按钮的字符由必填参数buttons提供,其中buttons为一个元表序列,同时函数的返回值跟按钮的字符是一致的。 例子:
from abaqus import *
reply=getWarningReply(message='Okay to continue?\\nor No to return None!',buttons=(YES,NO))
12 与ABAQUS/Standard和ABAQUS/Explicit的计算过程进行协同操作 (1) 处理来自ABAQUS/Standard和ABAQUS/Explicit的信息
使用定义信息回调函数(callback function),当ABAQUS/CAE从ABAQUS/Standard或者ABAQUS/Explicit中得到指定的信息,则这个信息回调函数就会执行。(详情见ABAQUS用户脚本文件的Chapter 29,”Messaging commands”) a. 定义信息回调函数的格式:
def functionName(jobName, messageType, data, userData) b. 参数详解:
<1> JobName:用于指定用于监测的job名称,如果想与每个job均进行信息监测,则
ANY_JOB
<2> messageType:这个参数只能用ABAQUS中的常量符号,如果想要出现任何符号就要执
行信息回调函数,则使用ANY_MESSAGE_TYPE,常见的符号常量有:
<3> data:是一个数据对象,包含了信息数据,该对象包含了如下一些成员:
---clientHost:计算机名的一个字符串 ---clientName:可能的取值为:
---phase:符号常量用于指定分析类型,可能的取值为:
---processId:一个整数,用于指定分析过程;
---threadId:一个整数,只用于平行计算或多核处理中,通常设为0; ---timeStamp:一个整数,用于指定信息。
<4>userData:任意一个对象类型或None