数据类型

符号常量(SymbolicConstants)

abaqus/python中许多函数需要使用一些默认的参数,比如定义弹性材料时有ISOTROPIC、ORTHOTROPIC。这些就是符号常量,使用时需要导入以下模块。

from AbaqusConstants import*
from SymbolicConstants import*

布尔值(Booleans)

Abaqus自定义了一种布尔对象,ON与OFF,分别表示真与假,这两个布尔值与python中的True与False是通用的,具体使用看个人喜好,推荐使用Python中的bool标准值。

a = mdb.models['mymodel'].rootAssembly
p11 = a.Instance(name='Part1-1',part=p1,dependent=ON)
a = mdb.models['mymodel'].rootAssembly
p11 = a.Instance(name='Part1-1',part=p1,dependent=True)

序列(Sequences)

数据序列(table)

定义一个table,table=((345,0.0),(450,0.2)),可以看到其实质是一个二维元组。我们在定义材料属性是会大量使用table,如定义塑性数据时:

table = ((345,0.0),(450,0.2))
mdb.models['mymodel'].materials['steel'].Plastic(table=table)

几何序列(GeomSequences)

这里的几何包括点(Vertex)、边(Edge)、面(Face)和体(Cell)。对象名字分别为VertexArray、EdgeArrary、EdgeArray、FaceArray和CellArray。这几种几何序列存在于部件或者实例中,通过 part对象或者 rootAssembly对象访问。

abaqus中提供了几种方法根据一个集合序列生成一个新的几何序列。

几何序列生成方法名 描述
findAt() 使用一组坐标来查找并生成满足条件的几何序列
getSequences() 使用压缩序列生成几何序列
getByBoundingBox() 生成在指定方形区域中的几何组成的几何序列
getByBoundingCylinder() 生成在指定圆柱区域中的几何组成的几何序列
getByBoundingSphere() 生成在指定圆形区域中的几何组成的几何序列
getBoundingBox() 获得某个几何序列的坐标界限

网格序列(MeshSequences)

由一系列网格节点(node)、单元(element)以及其表面和边所组成序列,生成网格序列的方法如下。

网格序列生成方法名 描述
getSequences() 使用压缩序列生成网格序列
getByBoundingBox() 生成在指定方形区域中的网格或节点组成的网格序列
getByBoundingCylinder() 生成在指定圆柱区域中的网格或节点组成的网格序列
getByBoundingSphere() 生成在指定圆形区域中的网格或节点组成的网格序列
getBoundingBox() 获得某个网格序列的坐标界限

表面序列(SurfaceSequences)

表面序列是一种特殊的符合序列,其中的元素可以是边、面、单元或者节点。该类型中面需要考虑方向,因此其参数包含一个用来指定方向的参数。比如对于一般的部件表面,存在两个参数side1Faces/side2Faces来指明方向,对于六面体网格使用face1Elements/face2Elements来指定具体的面。

仓库(Repositories)

仓库是abaqus/python环境中最重要的概念之一。abaqus中有许多对象都是以仓库的形式存储的。例如模型仓库 mdb.models,部件仓库 mdb.models['mymodel'].parts,草图仓库 mdb.models['mymodel'].sketches,odb仓库 session.odbs 等等。

仓库对象的方法 描述
keys() 返回键名形成的列表
has_key() 判断仓库中是否存在某个键值
value() 返回键值数据形成的列表
items() 返回(键名,键值)形成的列表
changeKey(fromName,toName) 修改某个键值

对象的访问与创建

打印对象的成员变量 .__members__,打印对象的成员方法 .__methods__

>>> print mdb.__members__
['acis', 'adaptivityProcesses', 'annotations', 'coexecutions', 'jobs', 'lastChangedCount', 'meshEditOptions', 'models', 'optimizationProcesses', 'pathName', 'version']
>>> print mdb.__methods__
['AdaptivityProcess', 'Annotation', 'Arrow', 'Coexecution', 'CombineOptResults', 'Job', 'JobFromInputFile', 'Model', 'ModelFromAnsysInputFile', 'ModelFromInputFile', 'ModelFromNastranInputFile', 'ModelFromOdbFile', 'OptimizationProcess', 'Text', 'close', 'closeAuxMdb', 'copyAuxMdbModel', 'getAuxMdbModelNames', 'openAcis', 'openAuxMdb', 'openCatia', 'openEnf', 'openIges', 'openParasolid', 'openProE', 'openSolidworks', 'openStep', 'openVda', 'save', 'saveAs', 'setValues']
>>> print mdb.models['mymodel'].__members__
['absoluteZero', 'adaptiveMeshConstraints', 'adaptiveMeshControls', 'allFields', 'amplitudes', 'analyticalFields', 'aquaAnalysis', 'boundaryConditions', 'calibrations', 'constraints', 'contactControls', 'contactInitializations', 'contactStabilizations', 'copyConnectors', 'copyConstraints', 'copyInteractions', 'description', 'discreteFields', 'endRestartStep', 'eventSeriesDatas', 'eventSeriesTypes', 'featureOptions', 'fieldOutputRequests', 'filters', 'fluidMassDensity', 'globalJob', 'gravitationalConstant', 'historyOutputRequests', 'inputFileBlocks', 'integratedOutputSections', 'interactionProperties', 'interactions', 'keywordBlock', 'lastChangedCount', 'linkedInstances', 'linkedParts', 'loads', 'materials', 'modelType', 'name', 'noPartsInputFile', 'optimizationTasks', 'parts', 'predefinedFields', 'profiles', 'remeshingRules', 'restartIncrement', 'restartJob', 'restartStep', 'rootAssembly', 'seabedElevation', 'sections', 'shellToSolid', 'sketches', 'steadyCurrentData', 'stefanBoltzmann', 'steps', 'stillFluidSurfaceElevation', 'surfaceProperties', 'tableCollections', 'timePoints', 'universalGas', 'waveFormulation']

对象的创建

mymodel = mdb.Model('mymodel')
mypart =mymodel.Part('mypart')	#默认创建三维可变形部件,需要其他类型要指定其他参数
mypart = mdb.models['mymodel'].Part('mypart')
#可以看到如果访问的方法或者成员路径非常长,可以使用变量缩短访问路径。

#创建一个基准点,通过Part类或者rootAssembly类,这两种方法创建的基准是分开储存在不同的仓库下的。
point = mypart.DatumPointByCoordinate((1,1,1))
point = mymodel.rootAssmbly.DatumPointBycoordinate((1,1,1))

对象的访问

#对象名.成员名
#访问仓库对象
mdb.models['mymodel']
#访问几何序列
pickfaces = mdb.models['mymodel'].parts['mypart'].faces[:]	#选取mypart部件所有的面序列赋值给pickfaces。

对象的修改

abaqus中对象的成员变量不能通过简单赋值的方法修改,必须通过abaqus内置的函数 setValues()来修改。

mymodel = mdb.Model['model-1']
mymodel.setVaules(name='model-2')	#输入:key=value,可以包含多个key=value

小工具

我们知道abaqus中有非常多的类名与方法名,如何快速的掌握它是有一定难度的,这里推荐两个小工具。

  • PythonReader,可以实时记录在gui界面的每一个命令。
  • abqpy是一个python包

abqpy 是一个 Python 包,提供了一些类型提示,用于快速编写你的 Abaqus/Python 脚本,即便不打开 Abaqus/CAE。它还提供了一些简单的 API 用于调用 Abaqus 命令执行你的 Python 脚本,以便使用 Python 脚本快速构建 Abaqus 模型,并提交作业给 Abaqus 进行计算,并从计算结果中提取数据。

  • abaqus帮助文档
    对于命令的用法可以借助abaqus帮助文档。

image-20231029212347955.png