文章目录

  • 介绍
  • 使用GUI创建简单模型
  • 为模型数据库(mdb)创建第一个脚本文件
  • 使用GUI创建输出
  • 为输出数据库创建第一个脚本
  • 为不同用途调整脚本文件的示例
  • 继续使用脚本的说明
  • 附件
    • 第一个EXAMPLE_MDB.py
    • 最终的EXAMPLE_MDB.py
    • 第一个EXAMPLE_ODB.py
    • 最终的EXAMPLE_ODB.py
    • 调整的EXAMPLE_MDB.py

  扫描下方二维码关注我的微信公众号 - 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脚本编程秘籍相关推荐

  1. 干货|怎样在1小时内学会任何一门编程语言? 如Python/Go/JAVA/C++

    学习一门编程语言是有套路的,套路是可以传承的 今天向大家介绍1小时内掌握一门编程语言的方法 此刻挨踢哥仿佛听到达内蓝翔技校挖土机的抗议 这是一场将绳命别在裤腰带上的分享 50分钟了解语言特性 天下编程 ...

  2. # 生成单色位二维码图_如何2个小时内学会ps抠图-纯干货

    本人计划5个月成为设计师,现在从小白开始学起,每周会贴出学习内容总结,喜欢我分享的朋友可以关注我,进行交流哦. 今天花了两个小时学习了最常用的ps抠图流程以及工具使用. 学习前:ps界面每个工具乱点乱 ...

  3. python程序不出结果_超详细的Python入门教程,1小时就可以学会

    为什么使用Python 假设我们有这么一项任务:简单测试局域网中的电脑是否连通.这些电脑的ip范围从192.168.0.101到192.168.0.200. 思路:用shell编程.(Linux通常是 ...

  4. LINUX脚本报错捕捉,Linux01-BASH脚本编程之信号捕捉及任务计划53

    一.脚本编程知识点 1.获取变量中字符的长度:${#VARNAME} 2.变量赋值: a)${parameter:-word}:如果parameter为空或未定义,则变量展开为"word&q ...

  5. 人人都能学会的python编程教程1:第一行代码

    前言 众所周知,现在IT行业很火,行业薪酬也很高,国家在2017年也发布了人工智能教育的推广计划,人人会编程的时代将要到来.不会编程.不懂编程可能有些跟不上时代的节奏,普通人不懂技术也许会觉得这个很难 ...

  6. python仿真界面_基于Python语言的ABAQUS脚本仿真简介

    经常在使用ABAQUS进行仿真的时候,会遇到逆向的仿真需求,如在变形量要求范围内去判定载荷大小,几何尺寸大小等参数,或者有很多重复性的操作.在这个时候其实使用ABAQUS正向分析是比较费时效率也不是很 ...

  7. 电子学会青少年软件编程Python编程等级考试一级真题解析(选择题+判断题)2022年6月

    电子学会青少年软件编程Python编程等级考试一级真题解析(选择题+判断题)2022年6月 一.选择题(共25题,共50分) 在Python编辑器中写好程序代码后,在Run菜单中,下列哪个命令可以用来 ...

  8. 《linux命令行与shell脚本编程大全》第三版 - 核心笔记(3/4):函数与图形化脚本

    <linux命令行与shell脚本编程大全> 全书4部分: ☆ [1]linux命令行(1-10章) ☆ [2]shell脚本编程基础(11-16章) ☆ [3]高级shell脚本编程(1 ...

  9. 《Linux命令行与shell脚本编程大全》(第三版)读书笔记

    第一部分 Linux命令行 第三章.基本的bash shell命令 bash手册 man 命令 例子: man cat 空格翻页.回车下一行.左右键看右侧(左侧)内容.q退出 info info in ...

最新文章

  1. ADO.NET复习总结(5)--工具类SqlHelper 实现登录
  2. Java设计模式(一) -- 工厂方法模式
  3. java8 函数式编程_使用Javaslang进行Java 8中的函数式编程
  4. php create()方法,ThinkPHP中create()方法自动验证实例
  5. 实战 | 手把手教你设计优惠券前后台
  6. 简单的多线程实例下载(供初学者下载学习)
  7. Educational Codeforces Round 67 E.Tree Painting (树形dp)
  8. csdn设置资源下载所需积分
  9. C基础:数组打印直方图
  10. 图解PROFINET——PROFINET IO设备类型
  11. 微信公众号开发之微信支付开发
  12. 大师级思考者是怎么探索事物本质的?
  13. 如何理解客户需求,市场需求,业务需求,功能需求,产品需求,设计需求?
  14. 视频和视频帧:图像,从自然光到01串
  15. 【修色圣典】第一章 色彩、对比度和通道
  16. 页面布局高度塌陷问题和解决方案
  17. java获取字典所有的key_java字典,多层字典,斗地主发牌,实例展示
  18. python皮森发音_python 怎么读
  19. 教室预约系统mysql_PHP+MySQL教室预约管理系统的设计与实现
  20. c语言课程设计可以炒细面,二十五条药方头发浓密没问题.doc

热门文章

  1. 信捷XD/XC系列PLC 控制台达B2系列伺服电机程序,手动自动,循环,循环次数设定
  2. 多卡聚合智能融合通信设备疫情检查站视频传输方案
  3. 2021-05-11sql server导入外部mdf文件发生报错
  4. 织梦响应式炫酷摄影相册图集画册展示网站模板 带手机版
  5. 128陷阱理解(Java中的128陷阱)
  6. HBase启动遇到VM warning ignoring option PermSize=128m support was removed in 8.0
  7. 精益生产现场管理与现场改善的方法和工具
  8. 朗读评价语言集锦_课堂评价语言“集锦”
  9. 【ICHCI 2020】智能计算与人机交互国际研讨会
  10. lsul2014控制软件_2014年的版本控制软件:您有什么选择?