文章目录
扫描下方二维码关注我的微信公众号 - 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