一小时内学会Abaqus脚本编程秘籍


  扫描下方二维码关注我的微信公众号 – CAE软件二次开发Lab,查看更多精彩文章!



CAE软件二次开发Lab

本文为Learn Abaqus script in one hour的翻译,原文请点击此处下载。

介绍

脚本是一个强大的工具,它允许您将Abaqus的图形用户界面(GUI)的功能与编程语言Python的强大功能结合起来。本手册并不意味着是一个完整的Abaqus脚本手册。这是从实践的角度介绍Abaqus脚本,并试图解释一种简单、快速的脚本启动方法。如果您没有使用Abaqus GUI或FEM的经验,您应该 先获得该方面的经验。在不熟悉输入文件的情况下,你应该能够在两个小时内阅读完这篇介绍。这本手册用于说明作者对脚本强大性和和简单性的观点。

本手册将介绍以下主题:
– 使用GUI创建一个简单模型
– 为模型数据库(mdb)创建第一个脚本文件
– 使用GUI创建输出
– 为输出数据库(odb)创建第一个脚本文件
– 针对不同用途调整脚本文件的示例
– 继续使用脚本的一些说明

创建脚本的基本思路按如下顺序进行:
– 在GUI中创建模型并保存模型
– 使用Abaqus生成的rpy文件为基础创建脚本文件
– 创建输出
– 通过运行生成的脚本文件重计算
– 调整脚本以创建不同的模型或输出

如您所知,Abaqus GUI将在运行仿真时生成一个输入文件(an input file
)。脚本文件也是如此,脚本文件会创建一个输入文件,并发送到求解器进行计算。

使用GUI创建简单模型

我使用的Abaqus cae版本是6.8-2,但是脚本在Abaqus的更高版本或更早版本可能也可使用。

在这里插入图片描述    图1 Abaqus CAE 6.8-2 GUI主窗口

首先启动Abaqus CAE。为了确保我们讨论的是相同的菜单,图1显示了Abaqus GUI环境。我添加了一些菜单和按钮名称的说明,其将在随后说明。设置正确的工作目录,我们将在稍后创建一些我们将要使用的文件,确保您能够找到它们。在开始创建模型之前,我们将在脚本窗口中输入一行命令。首先,单击图1中所指的Script button按钮转到Script Window.;输入以下命令:

session.journalOptions.setValues(replayGeometry=COORDINATE, recoverGeometry=COORDINATE)

进入脚本窗口,然后按enter键。运行该命令后不会出现任何可见的东西,但是这行代码可使得我们在随后创建集合(sets)、曲面(surfaces)、选择区域(region)等的python脚本更具可读性。现在我们从创建模型开始,执行以下步骤:

  • 创建零件:二维可变形平面壳,近似尺寸:20
  • 绘制第一点为(-5,-1)、第二点为(5,1)的矩形
  • 创建材料:线弹性,E=1e9、ν=0.3
  • 创建截面:实心、均质,使用刚创建的材料
  • 将刚创建的截面指定给零件
  • 创建集合(set):左边缘(left edge)
  • 创建曲面:顶边(top edge)
  • 网格(Mesh):将网格控制(mesh control)设置为结构化( structured)和四边形( quad)
  • 网格(Mesh):将单元类型(element type)设置为标准(Standard)、二次(quadratic)和平面应力(Plane Stress)
  • 网格(Mesh):为零件设置网格种子(seed),全局尺寸约为0.5,划分零件网格
  • 装配(Assembly):创建零件实例(part instance)
  • 分析步(Step):创建通用静态(General Static )分析步,打开几何非线性(Nlgeom)选项,设置初始/最大增量大小为0.1
  • 边界:创建位移边界,选择左边缘(left edge),将其U1,U2和UR3设置为0
  • 载荷:在顶边(top edge)曲面创建压力载荷,并将幅值设置为-1e-5
  • 作业(Job):使用名称EXAMPLE创建作业并提交
  • 另存为:名称为EXAMPLE.cae

您已经创建了模型。确保你的工作目录中包含文件EXAMPLE.jnl(.jnl后缀为旧版自动录制的脚本文件,abaqus6.10及其以后为.rpy后缀)

为模型数据库(mdb)创建第一个脚本文件

我们从创建脚本文件开始。打开EXAMPLE.rpy文件并将此文件另存为EXAMPLE_MDB.py文件。在附录有EXAMPLE_MDB.py文件的完整内容。此时的python文件看起来仍然很凌乱,在其中添加一些结构是一个很好的练习和习惯。让我带您浏览代码,并指出脚本的每一行属于哪一部分。对于完全理解这些命令需要一些经验和练习。不过,可以从其中识别你在GUI中所采取的一些操作步骤。

# -*- coding: mbcs -*-

这行是注释。所以其并不重要,尽管我们知道python注释命令#很有用。

from part import *
from material import *
from section import *
from assembly import *
from step import *
from interaction import *
from load import *
from mesh import *
from job import *
from sketch import *
from visualization import *
from connectorBehavior import *

尽管我们在一个python环境中工作,但它不包括Abaqus的所有功能。因此,上述这些行命令将导入本脚本文件中使用的一些Abaqus模块(modulus)。

mdb.models[’Model-1’].ConstrainedSketch(name=’__profile__’, sheetSize=20.0)
mdb.models[’Model-1’].sketches[’__profile__’].rectangle(point1=(-5.0, -1.0),
point2=(5.0, 1.0))
mdb.models[’Model-1’].Part(dimensionality=TWO_D_PLANAR, name=’Part-1’, type=
DEFORMABLE_BODY)
mdb.models[’Model-1’].parts[’Part-1’].BaseShell(sketch=
mdb.models[’Model-1’].sketches[’__profile__’])
del mdb.models[’Model-1’].sketches[’__profile__’]

用这些命令创建草图和零件。

mdb.models[’Model-1’].Material(name=’Material-1’) 
mdb.models[’Model-1’].materials[’Material-1’].Elastic(table=((1000000000.0, 
0.3), )) 
mdb.models[’Model-1’].HomogeneousSolidSection(material=’Material-1’, name= 
’Section-1’, thickness=None) 
mdb.models[’Model-1’].parts[’Part-1’].SectionAssignment(offset=0.0, 
offsetField=’’, offsetType=MIDDLE_SURFACE, region=Region( 
faces=mdb.models[’Model-1’].parts[’Part-1’].faces.findAt(((-1.666667, 
-0.333333, 0.0), (0.0, 0.0, 1.0)), )), sectionName=’Section-1’) 

材料、截面和截面分配是用上面命令完成的。

mdb.models[’Model-1’].parts[’Part-1’].Set(edges= 
mdb.models[’Model-1’].parts[’Part-1’].edges.findAt(((-5.0, -0.5, 0.0), )), 
name=’Set-1’) 
mdb.models[’Model-1’].parts[’Part-1’].Surface(name=’Surf-1’, side1Edges= 
mdb.models[’Model-1’].parts[’Part-1’].edges.findAt(((-2.5, 1.0, 0.0), ))) 

在这里我们创建集合和曲面。注意每行命令末尾的findAt命令。使用了findAt而不是getSequenceFromMask(它是Abaqus使用的一种编号系统),因为在创建模型之前,我们在GUI中的脚本窗口中输入的那行命令。

mdb.models[’Model-1’].parts[’Part-1’].setMeshControls(elemShape=QUAD, regions=
mdb.models[’Model-1’].parts[’Part-1’].faces.findAt(((-1.666667, -0.333333,
0.0), )), technique=STRUCTURED)
mdb.models[’Model-1’].parts[’Part-1’].setElementType(elemTypes=(ElemType(
elemCode=CPS8R, elemLibrary=STANDARD), ElemType(elemCode=CPS6M,
elemLibrary=STANDARD)), regions=(
mdb.models[’Model-1’].parts[’Part-1’].faces.findAt(((-1.666667, -0.333333,
0.0), )), ))
mdb.models[’Model-1’].parts[’Part-1’].seedPart(deviationFactor=0.1, size=0.5)
mdb.models[’Model-1’].parts[’Part-1’].generateMesh()

这些行命令将创建网格控件、单元类型和网格。

mdb.models[’Model-1’].rootAssembly.DatumCsysByDefault(CARTESIAN) 
mdb.models[’Model-1’].rootAssembly.Instance(dependent=ON, name=’Part-1-1’, 
part=mdb.models[’Model-1’].parts[’Part-1’]) 
mdb.models[’Model-1’].rootAssembly.regenerate()

装配过程如上所述。请注意,这里使用了rootAssembly一词,您不必给出程序集的名称。这当然是因为只有一个装配(Assembly)。

mdb.models[’Model-1’].StaticStep(initialInc=0.1, maxInc=0.1, name=’Step-1’,
previous=’Initial’)
mdb.models[’Model-1’].DisplacementBC(amplitude=UNSET, createStepName=’Step-1’,
distributionType=UNIFORM, fieldName=’’, fixed=OFF, localCsys=None, name=
’BC-1’, region=
mdb.models[’Model-1’].rootAssembly.instances[’Part-1-1’].sets[’Set-1’], u1=
0.0, u2=0.0, ur3=0.0)
mdb.models[’Model-1’].Pressure(amplitude=UNSET, createStepName=’Step-1’,
distributionType=UNIFORM, field=’’, magnitude=-100000.0, name=’Load-1’,
region=
mdb.models[’Model-1’].rootAssembly.instances[’Part-1-1’].surfaces[’Surf-1’])

上述命令行定义分析步、边界、载荷。

mdb.Job(contactPrint=OFF, description=’’, echoPrint=OFF, explicitPrecision=
SINGLE, historyPrint=OFF, memory=90, memoryUnits=PERCENTAGE, model=
’Model-1’, modelPrint=OFF, multiprocessingMode=DEFAULT, name=’EXAMPLE’,
nodalOutputPrecision=SINGLE, numCpus=1, numDomains=1,
parallelizationMethodExplicit=DOMAIN, scratch=’’, type=ANALYSIS,
userSubroutine=’’)
mdb.jobs[’EXAMPLE’].submit(consistencyChecking=OFF)

上述命令创建作业(job)并提交作业进行分析。上述最后一行后面的代码都是无关紧要的。你可以删除。最终的脚本EXAMPLE_MDB.py文件可以在附件中找到。

运行此脚本之前,请从你的工作中目录中删除除“EXAMPLE”之外的文件。如果你的Abaqus GUI用户界面仍然是打开的,请启动一个不要保存任何东西的新模型。现在要运行脚本文件,请转到顶部菜单,单击File(文件),然后单击运行脚本(Run script),然后选择脚本文件。如果一切都做得正确,你的模型运行应该没有任何问题。此时在你的工作目录中中生成文件EXAMPLE.odb。如果你不想删除你工作目录中的文件,abaqus将覆盖这些文件。这也没问题,但在本手册中,您需要查看文件是否已创建相应的文件。

使用GUI创建输出

关闭并打开Abaqus CAE以重新开始脚本的录制。通过顶部菜单File,然后点击Open选择工作目录下的EXAMPLE.odb文件。我们将使用与为模型创建脚本文件相同的方法。最重要的区别是你所做的行为都记录在Abaqus.rpy文件而不是Abaqus.jnl, 让我们创建一个变形状态下的应力图。执行以下步骤:

  • 绘制变形状态下的应力。现在通过顶部菜单中的File菜单下人Print保存图片为名为EXAMPLE,图片格式为tiff。

你不必保存odb文件。如果在启动Abaqus CAE的初始工作目录中,您无法找到Abaqus.rpy,那么从你的工作目录中找。

为输出数据库创建第一个脚本

保存文件Abaqus.rpy为EXAMPLE.py。 本脚本的内容见附件。下面是脚本文件的简短排序。

from abaqus import *
from abaqusConstants import *
session.Viewport(name=’Viewport: 1’, origin=(0.0, 0.0), width=268.952117919922,
height=154.15299987793)
session.viewports[’Viewport: 1’].makeCurrent()
session.viewports[’Viewport: 1’].maximize()
executeOnCaeStartup()
o1 = session.openOdb(name=’/home/overveld/ScriptManual/EXAMPLE.odb’)
session.viewports[’Viewport: 1’].setValues(displayedObject=o1)

这些命令导入一些模块,创建视口并打开odb。

session.viewports[’Viewport: 1’].odbDisplay.display.setValues(plotState=( 
CONTOURS_ON_DEF, )) 
session.printToFile(fileName=’EXAMPLE’, format=TIFF, canvasObjects=( 
session.viewports[’Viewport: 1’], )) 

这些命令将显示设置为变形形状的应力,并保存图像。输出的最终脚本文件见附件。

为不同用途调整脚本文件的示例

我将给出一个调整脚本的例子。我将调整:

  • 不使用固定的数值来创建零件,我将通过更改脚本文件开头的两个常量来定义形状。
  • 我将合并mdb和odb脚本文件。

我将在附件中添加文件并突出显示不同之处。我不会详细解释我所做的不同之处。弄清楚这一点是你训练的一部分。

这次我不会通过GUI运行脚本,我会直接从终端运行它。我们可以使用两个不同的命令:

abaqus cae script=EXAMPLE MDB.py 
abaqus cae noGUI=EXAMPLE MDB.py

第一行将打开abaqus cae,您将能够看到它的运行过程。最后一行将在没有GUI的情况下打开abaqus,你只会得到结果。

继续使用脚本的说明

现在你应该已经熟悉了工作方法:让Abaqus完成所有困难的工作,组织好文件并重新运行。我也希望我没有撒谎,你已经花了一个小时或更少的时间到达这里。我想用一些有用的提示来结束本手册:

  • 如果您在日常模拟中使用python语言和脚本,您就会习惯它。这是学习它的最好方法。 我花了2.5个月的时间编写了一本手册。
  • 您可以在互联网上找到很多关于python的信息。谷歌是一个有用的工具。您会发现关于脚本编写的内容较少,但请尝试访问以下网站:http://abaqusdoc.ucalgary.ca/v6.9/。您可以找到所有脚本命令的完整参考。
  • 尝试从MATLAB调用Abaqus CAE。这将为你添加了一个大的数学工具箱。可尝试如下命令:
    – unix([abaqus cae script=EXAMPLE MDB.py])
    – system([abaqus cae script=EXAMPLE MDB.py])

附件

第一个EXAMPLE_MDB.py

# -*- coding: mbcs -*- 
from part import * 
from material import * 
from section import * 
from assembly import * 
from step import * 
from interaction import * 
from load import * 
from mesh import * 
from job import * 
from sketch import * 
from visualization import * 
from connectorBehavior import * 
mdb.models[’Model-1’].ConstrainedSketch(name=’__profile__’, sheetSize=20.0) 
mdb.models[’Model-1’].sketches[’__profile__’].rectangle(point1=(-5.0, -1.0), 
point2=(5.0, 1.0)) 
mdb.models[’Model-1’].Part(dimensionality=TWO_D_PLANAR, name=’Part-1’, type= 
DEFORMABLE_BODY) 
mdb.models[’Model-1’].parts[’Part-1’].BaseShell(sketch= 
mdb.models[’Model-1’].sketches[’__profile__’]) 
del mdb.models[’Model-1’].sketches[’__profile__’] 
mdb.models[’Model-1’].Material(name=’Material-1’) 
mdb.models[’Model-1’].materials[’Material-1’].Elastic(table=((1000000000.0, 
0.3), )) 
mdb.models[’Model-1’].HomogeneousSolidSection(material=’Material-1’, name= 
’Section-1’, thickness=None) 
mdb.models[’Model-1’].parts[’Part-1’].SectionAssignment(offset=0.0, 
offsetField=’’, offsetType=MIDDLE_SURFACE, region=Region( 
faces=mdb.models[’Model-1’].parts[’Part-1’].faces.findAt(((-1.666667, 
-0.333333, 0.0), (0.0, 0.0, 1.0)), )), sectionName=’Section-1’) 
mdb.models[’Model-1’].parts[’Part-1’].Set(edges= 
mdb.models[’Model-1’].parts[’Part-1’].edges.findAt(((-5.0, -0.5, 0.0), )), 
name=’Set-1’) 
mdb.models[’Model-1’].parts[’Part-1’].Surface(name=’Surf-1’, side1Edges= 
mdb.models[’Model-1’].parts[’Part-1’].edges.findAt(((-2.5, 1.0, 0.0), ))) 
mdb.models[’Model-1’].parts[’Part-1’].setMeshControls(elemShape=QUAD, regions= 
mdb.models[’Model-1’].parts[’Part-1’].faces.findAt(((-1.666667, -0.333333, 
0.0), )), technique=STRUCTURED) 
mdb.models[’Model-1’].parts[’Part-1’].setElementType(elemTypes=(ElemType( 
elemCode=CPS8R, elemLibrary=STANDARD), ElemType(elemCode=CPS6M, 
elemLibrary=STANDARD)), regions=( 
mdb.models[’Model-1’].parts[’Part-1’].faces.findAt(((-1.666667, -0.333333, 
0.0), )), )) 
mdb.models[’Model-1’].parts[’Part-1’].seedPart(deviationFactor=0.1, size=0.5) 
mdb.models[’Model-1’].parts[’Part-1’].generateMesh() 
mdb.models[’Model-1’].rootAssembly.DatumCsysByDefault(CARTESIAN) 
mdb.models[’Model-1’].rootAssembly.Instance(dependent=ON, name=’Part-1-1’, 
part=mdb.models[’Model-1’].parts[’Part-1’]) 
mdb.models[’Model-1’].rootAssembly.regenerate() 
mdb.models[’Model-1’].StaticStep(initialInc=0.1, maxInc=0.1, name=’Step-1’, 
previous=’Initial’) 
mdb.models[’Model-1’].DisplacementBC(amplitude=UNSET, createStepName=’Step-1’, 
distributionType=UNIFORM, fieldName=’’, fixed=OFF, localCsys=None, name= 
’BC-1’, region= 
mdb.models[’Model-1’].rootAssembly.instances[’Part-1-1’].sets[’Set-1’], u1= 
0.0, u2=0.0, ur3=0.0) 
mdb.models[’Model-1’].Pressure(amplitude=UNSET, createStepName=’Step-1’, 
distributionType=UNIFORM, field=’’, magnitude=-100000.0, name=’Load-1’, 
region= 
mdb.models[’Model-1’].rootAssembly.instances[’Part-1-1’].surfaces[’Surf-1’]) 
mdb.Job(contactPrint=OFF, description=’’, echoPrint=OFF, explicitPrecision= 
SINGLE, historyPrint=OFF, memory=90, memoryUnits=PERCENTAGE, model= 
’Model-1’, modelPrint=OFF, multiprocessingMode=DEFAULT, name=’EXAMPLE’, 
nodalOutputPrecision=SINGLE, numCpus=1, numDomains=1, 
parallelizationMethodExplicit=DOMAIN, scratch=’’, type=ANALYSIS, 
userSubroutine=’’) 
mdb.jobs[’EXAMPLE’].submit(consistencyChecking=OFF) 
mdb.jobs[’EXAMPLE’]._Message(STARTED, {’phase’: BATCHPRE_PHASE, 
’clientHost’: ’wumpus.seas.harvard.edu’, ’handle’: 0, 
’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(WARNING, {’phase’: BATCHPRE_PHASE, 
’message’: ’DEGREE OF FREEDOM 6 IS NOT ACTIVE IN THIS MODEL AND CAN NOT BE RESTRAINED’, 
’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(ODB_FILE, {’phase’: BATCHPRE_PHASE, 
’file’: ’/home/overveld/ScriptManual/EXAMPLE.odb’, ’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(COMPLETED, {’phase’: BATCHPRE_PHASE, 
’message’: ’Analysis phase complete’, ’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(STARTED, {’phase’: STANDARD_PHASE, 
’clientHost’: ’wumpus.seas.harvard.edu’, ’handle’: 0, 
’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(STEP, {’phase’: STANDARD_PHASE, ’stepId’: 1, 
’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(ODB_FRAME, {’phase’: STANDARD_PHASE, ’step’: 0, 
’frame’: 0, ’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(STATUS, {’totalTime’: 0.0, ’attempts’: 0, 
’timeIncrement’: 0.1, ’increment’: 0, ’stepTime’: 0.0, ’step’: 1, 
’jobName’: ’EXAMPLE’, ’severe’: 0, ’iterations’: 0, 
’phase’: STANDARD_PHASE, ’equilibrium’: 0}) 
mdb.jobs[’EXAMPLE’]._Message(ODB_FRAME, {’phase’: STANDARD_PHASE, ’step’: 0, 
’frame’: 1, ’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(STATUS, {’totalTime’: 0.1, ’attempts’: 1, 
’timeIncrement’: 0.1, ’increment’: 1, ’stepTime’: 0.1, ’step’: 1, 
’jobName’: ’EXAMPLE’, ’severe’: 0, ’iterations’: 1, 
’phase’: STANDARD_PHASE, ’equilibrium’: 1}) 
mdb.jobs[’EXAMPLE’]._Message(ODB_FRAME, {’phase’: STANDARD_PHASE, ’step’: 0, 
’frame’: 2, ’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(STATUS, {’totalTime’: 0.2, ’attempts’: 1, 
’timeIncrement’: 0.1, ’increment’: 2, ’stepTime’: 0.2, ’step’: 1, 
’jobName’: ’EXAMPLE’, ’severe’: 0, ’iterations’: 1, 
’phase’: STANDARD_PHASE, ’equilibrium’: 1}) 
mdb.jobs[’EXAMPLE’]._Message(ODB_FRAME, {’phase’: STANDARD_PHASE, ’step’: 0, 
’frame’: 3, ’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(STATUS, {’totalTime’: 0.3, ’attempts’: 1, 
’timeIncrement’: 0.1, ’increment’: 3, ’stepTime’: 0.3, ’step’: 1, 
’jobName’: ’EXAMPLE’, ’severe’: 0, ’iterations’: 1, 
’phase’: STANDARD_PHASE, ’equilibrium’: 1}) 
mdb.jobs[’EXAMPLE’]._Message(ODB_FRAME, {’phase’: STANDARD_PHASE, ’step’: 0, 
’frame’: 4, ’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(STATUS, {’totalTime’: 0.4, ’attempts’: 1, 
’timeIncrement’: 0.1, ’increment’: 4, ’stepTime’: 0.4, ’step’: 1, 
’jobName’: ’EXAMPLE’, ’severe’: 0, ’iterations’: 1, 
’phase’: STANDARD_PHASE, ’equilibrium’: 1}) 
mdb.jobs[’EXAMPLE’]._Message(ODB_FRAME, {’phase’: STANDARD_PHASE, ’step’: 0, 
’frame’: 5, ’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(STATUS, {’totalTime’: 0.5, ’attempts’: 1, 
’timeIncrement’: 0.1, ’increment’: 5, ’stepTime’: 0.5, ’step’: 1, 
’jobName’: ’EXAMPLE’, ’severe’: 0, ’iterations’: 1, 
’phase’: STANDARD_PHASE, ’equilibrium’: 1}) 
mdb.jobs[’EXAMPLE’]._Message(ODB_FRAME, {’phase’: STANDARD_PHASE, ’step’: 0, 
’frame’: 6, ’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(STATUS, {’totalTime’: 0.6, ’attempts’: 1, 
’timeIncrement’: 0.1, ’increment’: 6, ’stepTime’: 0.6, ’step’: 1, 
’jobName’: ’EXAMPLE’, ’severe’: 0, ’iterations’: 1, 
’phase’: STANDARD_PHASE, ’equilibrium’: 1}) 
mdb.jobs[’EXAMPLE’]._Message(ODB_FRAME, {’phase’: STANDARD_PHASE, ’step’: 0, 
’frame’: 7, ’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(STATUS, {’totalTime’: 0.7, ’attempts’: 1, 
’timeIncrement’: 0.1, ’increment’: 7, ’stepTime’: 0.7, ’step’: 1, 
’jobName’: ’EXAMPLE’, ’severe’: 0, ’iterations’: 1, 
’phase’: STANDARD_PHASE, ’equilibrium’: 1}) 
mdb.jobs[’EXAMPLE’]._Message(ODB_FRAME, {’phase’: STANDARD_PHASE, ’step’: 0, 
’frame’: 8, ’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(STATUS, {’totalTime’: 0.8, ’attempts’: 1, 
’timeIncrement’: 0.1, ’increment’: 8, ’stepTime’: 0.8, ’step’: 1, 
’jobName’: ’EXAMPLE’, ’severe’: 0, ’iterations’: 1, 
’phase’: STANDARD_PHASE, ’equilibrium’: 1}) 
mdb.jobs[’EXAMPLE’]._Message(ODB_FRAME, {’phase’: STANDARD_PHASE, ’step’: 0, 
’frame’: 9, ’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(STATUS, {’totalTime’: 0.9, ’attempts’: 1, 
’timeIncrement’: 0.1, ’increment’: 9, ’stepTime’: 0.9, ’step’: 1, 
’jobName’: ’EXAMPLE’, ’severe’: 0, ’iterations’: 1, 
’phase’: STANDARD_PHASE, ’equilibrium’: 1}) 
mdb.jobs[’EXAMPLE’]._Message(ODB_FRAME, {’phase’: STANDARD_PHASE, ’step’: 0, 
’frame’: 10, ’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(STATUS, {’totalTime’: 1.0, ’attempts’: 1, 
’timeIncrement’: 0.1, ’increment’: 10, ’stepTime’: 1.0, ’step’: 1, 
’jobName’: ’EXAMPLE’, ’severe’: 0, ’iterations’: 1, 
’phase’: STANDARD_PHASE, ’equilibrium’: 1}) 
mdb.jobs[’EXAMPLE’]._Message(END_STEP, {’phase’: STANDARD_PHASE, ’stepId’: 1, 
’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(COMPLETED, {’phase’: STANDARD_PHASE, 
’message’: ’Analysis phase complete’, ’jobName’: ’EXAMPLE’}) 
mdb.jobs[’EXAMPLE’]._Message(JOB_COMPLETED, { 
’time’: ’Wed Nov 17 21:09:11 2010’, ’jobName’: ’EXAMPLE’}) 
# Save by overveld on Wed Nov 17 21:09:48 2010 

最终的EXAMPLE_MDB.py

#load modulus 
from part import * 
from material import * 
from section import * 
from assembly import * 
from step import * 
from interaction import * 
from load import * 
from mesh import * 
from job import * 
from sketch import * 
from visualization import * 
from connectorBehavior import * 
### PART ### 
mdb.models[’Model-1’].ConstrainedSketch(name=’__profile__’, sheetSize=20.0) 
mdb.models[’Model-1’].sketches[’__profile__’].rectangle(point1=(-5.0, -1.0), 
point2=(5.0, 1.0)) 
mdb.models[’Model-1’].Part(dimensionality=TWO_D_PLANAR, name=’Part-1’, type= 
DEFORMABLE_BODY) 
mdb.models[’Model-1’].parts[’Part-1’].BaseShell(sketch= 
mdb.models[’Model-1’].sketches[’__profile__’]) 
del mdb.models[’Model-1’].sketches[’__profile__’] 
### MATERIAL & SECTION ### 
mdb.models[’Model-1’].Material(name=’Material-1’) 
mdb.models[’Model-1’].materials[’Material-1’].Elastic(table=((1000000000.0, 
0.3), )) 
mdb.models[’Model-1’].HomogeneousSolidSection(material=’Material-1’, name= 
’Section-1’, thickness=None) 
mdb.models[’Model-1’].parts[’Part-1’].SectionAssignment(offset=0.0, 
offsetField=’’, offsetType=MIDDLE_SURFACE, region=Region( 
faces=mdb.models[’Model-1’].parts[’Part-1’].faces.findAt(((-1.666667, 
-0.333333, 0.0), (0.0, 0.0, 1.0)), )), sectionName=’Section-1’) 
### SET & SURFACE ### 
mdb.models[’Model-1’].parts[’Part-1’].Set(edges= 
mdb.models[’Model-1’].parts[’Part-1’].edges.findAt(((-5.0, -0.5, 0.0), )), 
name=’Set-1’) 
mdb.models[’Model-1’].parts[’Part-1’].Surface(name=’Surf-1’, side1Edges= 
mdb.models[’Model-1’].parts[’Part-1’].edges.findAt(((-2.5, 1.0, 0.0), ))) 
### MESH ### 
mdb.models[’Model-1’].parts[’Part-1’].setMeshControls(elemShape=QUAD, regions= 
mdb.models[’Model-1’].parts[’Part-1’].faces.findAt(((-1.666667, -0.333333, 
0.0), )), technique=STRUCTURED) 
mdb.models[’Model-1’].parts[’Part-1’].setElementType(elemTypes=(ElemType( 
elemCode=CPS8R, elemLibrary=STANDARD), ElemType(elemCode=CPS6M, 
elemLibrary=STANDARD)), regions=( 
mdb.models[’Model-1’].parts[’Part-1’].faces.findAt(((-1.666667, -0.333333, 
0.0), )), )) 
mdb.models[’Model-1’].parts[’Part-1’].seedPart(deviationFactor=0.1, size=0.5) 
mdb.models[’Model-1’].parts[’Part-1’].generateMesh() 
### ASSEMBLY ### 
mdb.models[’Model-1’].rootAssembly.DatumCsysByDefault(CARTESIAN) 
mdb.models[’Model-1’].rootAssembly.Instance(dependent=ON, name=’Part-1-1’, 
part=mdb.models[’Model-1’].parts[’Part-1’]) 
mdb.models[’Model-1’].rootAssembly.regenerate() 
### STEP, BC & LOAD ### 
mdb.models[’Model-1’].StaticStep(initialInc=0.1, maxInc=0.1, name=’Step-1’, 
previous=’Initial’) 
mdb.models[’Model-1’].DisplacementBC(amplitude=UNSET, createStepName=’Step-1’, 
distributionType=UNIFORM, fieldName=’’, fixed=OFF, localCsys=None, name= 
’BC-1’, region= 
mdb.models[’Model-1’].rootAssembly.instances[’Part-1-1’].sets[’Set-1’], u1= 
0.0, u2=0.0, ur3=0.0) 
mdb.models[’Model-1’].Pressure(amplitude=UNSET, createStepName=’Step-1’, 
distributionType=UNIFORM, field=’’, magnitude=-100000.0, name=’Load-1’, 
region= 
mdb.models[’Model-1’].rootAssembly.instances[’Part-1-1’].surfaces[’Surf-1’]) 
### JOB & CALCULATE ### 
mdb.Job(contactPrint=OFF, description=’’, echoPrint=OFF, explicitPrecision= 
SINGLE, historyPrint=OFF, memory=90, memoryUnits=PERCENTAGE, model= 
’Model-1’, modelPrint=OFF, multiprocessingMode=DEFAULT, name=’EXAMPLE’, 
nodalOutputPrecision=SINGLE, numCpus=1, numDomains=1, 
parallelizationMethodExplicit=DOMAIN, scratch=’’, type=ANALYSIS, 
userSubroutine=’’) 
mdb.jobs[’EXAMPLE’].submit(consistencyChecking=OFF) 

第一个EXAMPLE_ODB.py

# -*- coding: mbcs -*- 
# 
# Abaqus/CAE Version 6.8-2 replay file 
# Internal Version: 2008_07_21-07.21.56 87172 
# Run by overveld on Wed Nov 17 23:00:22 2010 
# 
# from driverUtils import executeOnCaeGraphicsStartup 
# executeOnCaeGraphicsStartup() 
#: Executing "onCaeGraphicsStartup()" in the site directory ... 
from abaqus import * 
from abaqusConstants import * 
session.Viewport(name=’Viewport: 1’, origin=(0.0, 0.0), width=268.952117919922, 
height=154.15299987793) 
session.viewports[’Viewport: 1’].makeCurrent() 
session.viewports[’Viewport: 1’].maximize() 
from caeModules import * 
from driverUtils import executeOnCaeStartup 
executeOnCaeStartup() 
o1 = session.openOdb(name=’/home/overveld/EXAMPLE.odb’) 
session.viewports[’Viewport: 1’].setValues(displayedObject=o1) 
#: Model: /home/overveld/EXAMPLE.odb 
#: Number of Assemblies: 1 
#: Number of Assembly instances: 0 
#: Number of Part instances: 1 
#: Number of Meshes: 1 
#: Number of Element Sets: 2 
#: Number of Node Sets: 2 
#: Number of Steps: 1 
session.viewports[’Viewport: 1’].odbDisplay.display.setValues(plotState=( 
CONTOURS_ON_DEF, )) 
session.printToFile(fileName=’EXAMPLE’, format=TIFF, canvasObjects=( 
session.viewports[’Viewport: 1’], )) 

最终的EXAMPLE_ODB.py

#open modulus, create viewport and open odb 
from abaqus import * 
from abaqusConstants import * 
session.Viewport(name=’Viewport: 1’, origin=(0.0, 0.0), width=268.952117919922, 
height=154.15299987793) 
session.viewports[’Viewport: 1’].makeCurrent() 
session.viewports[’Viewport: 1’].maximize() 
from caeModules import * 
from driverUtils import executeOnCaeStartup 
executeOnCaeStartup() 
o1 = session.openOdb(name=’/home/overveld/EXAMPLE.odb’) 
session.viewports[’Viewport: 1’].setValues(displayedObject=o1) 
### CREATE OUTPUT ### 
session.viewports[’Viewport: 1’].odbDisplay.display.setValues(plotState=( 
CONTOURS_ON_DEF, )) 
session.printToFile(fileName=’EXAMPLE’, format=TIFF, canvasObjects=( 
session.viewports[’Viewport: 1’], )) 

调整的EXAMPLE_MDB.py

#load modulus 
from part import * 
from material import * 
from section import * 
from assembly import * 
from step import * 
from interaction import * 
from load import * 
from mesh import * 
from job import * 
from sketch import * 
from visualization import * 
from connectorBehavior import * 
height=0.2 ####################change 
width=0.1 ####################change 
### PART ### 
mdb.models[’Model-1’].ConstrainedSketch(name=’__profile__’, sheetSize=20.0) 
mdb.models[’Model-1’].sketches[’__profile__’].rectangle(point1=(-width/2.0, -height/2.0), 
point2=(width/2.0, height/2.0)) ####################change 
mdb.models[’Model-1’].Part(dimensionality=TWO_D_PLANAR, name=’Part-1’, type= 
DEFORMABLE_BODY) 
mdb.models[’Model-1’].parts[’Part-1’].BaseShell(sketch= 
mdb.models[’Model-1’].sketches[’__profile__’]) 
del mdb.models[’Model-1’].sketches[’__profile__’] 
### MATERIAL & SECTION ### 
mdb.models[’Model-1’].Material(name=’Material-1’) 
mdb.models[’Model-1’].materials[’Material-1’].Elastic(table=((1000000000.0, 
0.3), )) 
mdb.models[’Model-1’].HomogeneousSolidSection(material=’Material-1’, name= 
’Section-1’, thickness=None) 
mdb.models[’Model-1’].parts[’Part-1’].SectionAssignment(offset=0.0, 
offsetField=’’, offsetType=MIDDLE_SURFACE, region=Region( 
faces=mdb.models[’Model-1’].parts[’Part-1’].faces.findAt(((0.0, 
0.0, 0.0), (0.0, 0.0, 1.0)), )), sectionName=’Section-1’) #####################change 
### SET & SURFACE ### 
mdb.models[’Model-1’].parts[’Part-1’].Set(edges= 
mdb.models[’Model-1’].parts[’Part-1’].edges.findAt(((-width/2.0, -height/4.0, 0.0), )), 
name=’Set-1’) ####################change 
mdb.models[’Model-1’].parts[’Part-1’].Surface(name=’Surf-1’, side1Edges= 
mdb.models[’Model-1’].parts[’Part-1’].edges.findAt(((-width/4.0, height/2.0, 0.0), ))) ####################change 
### MESH ### 
mdb.models[’Model-1’].parts[’Part-1’].setMeshControls(elemShape=QUAD, regions= 
mdb.models[’Model-1’].parts[’Part-1’].faces.findAt(((0.0, 0.0, 
0.0), )), technique=STRUCTURED) ####################change 
mdb.models[’Model-1’].parts[’Part-1’].setElementType(elemTypes=(ElemType( 
elemCode=CPS8R, elemLibrary=STANDARD), ElemType(elemCode=CPS6M, 
elemLibrary=STANDARD)), regions=( 
mdb.models[’Model-1’].parts[’Part-1’].faces.findAt(((0.0, 0.0, 
0.0), )), )) ####################change 
mdb.models[’Model-1’].parts[’Part-1’].seedPart(deviationFactor=0.1, size=height/4) ####################change 
mdb.models[’Model-1’].parts[’Part-1’].generateMesh() 
### ASSEMBLY ### 
mdb.models[’Model-1’].rootAssembly.DatumCsysByDefault(CARTESIAN) 
mdb.models[’Model-1’].rootAssembly.Instance(dependent=ON, name=’Part-1-1’, 
part=mdb.models[’Model-1’].parts[’Part-1’]) 
mdb.models[’Model-1’].rootAssembly.regenerate() 
### STEP, BC & LOAD ### 
mdb.models[’Model-1’].StaticStep(initialInc=0.1, maxInc=0.1, name=’Step-1’, 
previous=’Initial’) 
mdb.models[’Model-1’].DisplacementBC(amplitude=UNSET, createStepName=’Step-1’, 
distributionType=UNIFORM, fieldName=’’, fixed=OFF, localCsys=None, name= 
’BC-1’, region= 
mdb.models[’Model-1’].rootAssembly.instances[’Part-1-1’].sets[’Set-1’], u1= 
0.0, u2=0.0, ur3=0.0) 
mdb.models[’Model-1’].Pressure(amplitude=UNSET, createStepName=’Step-1’, 
distributionType=UNIFORM, field=’’, magnitude=-100000.0, name=’Load-1’, 
region= 
mdb.models[’Model-1’].rootAssembly.instances[’Part-1-1’].surfaces[’Surf-1’]) 
### JOB & CALCULATE ### 
mdb.Job(contactPrint=OFF, description=’’, echoPrint=OFF, explicitPrecision= 
SINGLE, historyPrint=OFF, memory=90, memoryUnits=PERCENTAGE, model= 
’Model-1’, modelPrint=OFF, multiprocessingMode=DEFAULT, name=’EXAMPLE’, 
nodalOutputPrecision=SINGLE, numCpus=1, numDomains=1, 
parallelizationMethodExplicit=DOMAIN, scratch=’’, type=ANALYSIS, 
userSubroutine=’’) 
mdb.jobs[’EXAMPLE’].submit(consistencyChecking=OFF) 
mdb.jobs[’EXAMPLE’].waitForCompletion() ####################change 
### OUPUT ### 
execfile(’EXAMPLE_ODB.py’) ####################change 

本文链接:一小时内学会Abaqus脚本编程秘籍

转载声明:本站文章若无特别说明,皆为原创,转载请注明来源:CAECoder,谢谢!^^


发表评论