Learn Abaqus script in one hourOriginal author: J.T.B Overvelde 引言Abaqus脚本是一个强大的处理工具,它能够有效地将Abaqus的GUI功能和Python功能结合起来。这一教程不是一个完整的Abaqus脚本手册,只是从实用的角度出发对Abaqus脚本的简要介绍。如果你对Abaqus的GUI及有限元法不熟悉,那你最好先去了解一下它们再来阅读这份教程。当然,你无需对inp文件的结构非常熟悉。正常的话,完整阅读这份文档不会花费你超过2个小时。 这份教程将主要介绍一下几个主题:
创建脚本文件的基本原则如下:
有经验的Abaqus用户应该知道,使用Abaqus的GUI数值模拟时会生成一个inp文件。脚本文件运行时也一样,会生成一个inp文件并传递给求解器。 使用GUI创建简单模型我使用的版本是Abaqus cae 6.8-2,但Abaqus不同版本界面的差别不大,更早或之后的版本也大同小异。 首先启动Abaqus CAE,进入如上图GUI界面。上图中已经示意了几个将会用到的按钮和窗口部件。选择一个可用的工作目录(Working directory),操作产生的文件会出现在这一目录中。 session.journalOptions.setValues(replayGeometry=COORDINATE, recoverGeometry=COORDINATE) 命令执行后GUI界面不会出现什么明显变化,实际上,这一命令将使使用Python语言创建sets、surfaces、选择region等操作的脚本更具可读性。如果不理解也不必纠结于此。
到此为止,你已经创建了一个完整模型。正常情况下,工作目录下应该生成了文件”EXAMPLE.jnl”。 创建你的第一个模型数据库脚本文件(mdb)我们从创建脚本文件开始。打开'EXAMPLE.jnl’文件,并将该文件另存为 'EXAMPLE.py’ 。我将在文档的最后附上'EXAMPLE.py’的内容。Python 文件看 起来一团糟,给他建立一个结构是一个好的习惯。让我带你来浏览一下代码,告 诉你脚本的每一行分属那一块。 对这些脚本的透彻的理解还需要更多的经验和练 习。但是,试试看吧,看你能不能识别出一些你在用户图形界面中的操作。
这一行是注释,所以不会被编译。需要了解的是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的命令并不包含在原始的Python环境中。这段命令就可以在脚本中引入Abaqus相关的模块功能。
这一段命令就是在创建Sketch和Part。 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') 这段命令是在执行创建Material、Section及SectionAssignment的功能。
这里创建了Set和Surface。注意:每一行结尾的”findAt”命令,这个命令是被用于 替代 getSequenceFromMask(abaqus 用的数字系统) ,因为我们是在建立 abaqus 模型之前将指令输入脚本窗口。 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() 这段命令设置了Mesh Control、Element Type并执行Mesh
这段命令相当于组装过程。注意,当用到 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']) 这一部分指令相当于施加了边界条件和荷载。
这里创建了 job 并提交 job 进行分析。这些代码后面的所有行都是不重要的 信息,你可以删去他们。 在运行这个脚本之前,将你工作目录下除去'EXAMPLE.py’的左右文件都删掉。 如果你的用户图形界面还打开着一个新的模型, 请不要保存任何东西。 现在, 在左上角的菜单栏中点击 File,然后点击 Run script…,然后选择你的脚本文件。 如果每一步都准确无误的完成了,那么你的模型应该没有什么问题。确保文件 'EXAMPLE.odb’存在于你的工作目录下。如果你没有在你的工作目录下把之前 的文件删除,abaqus 将会覆盖他们。这不会出现任何问题,不过,这里的目的 是为了让你看看 odb 文件被创建的过程。 使用GUI输出数据关闭后重新打开 abaqus CAE 来重新记录脚本。 现在点击左上角菜单栏的 File 点击'Open…’ ,在工作目录下选择并打开文件'EXAMPLE.odb’ 。我们用创建模 型脚本一样的方法创建输出文件的脚本。 最重要的不同之处在于这个过程被记录 在'Abaqus.rpy’中而不是'EXAMPLE.jnl’ 。让我们在变形情况下创建一个应力 的图形,按如下步骤操作: Plot 变形状态下的应力。在 File 中点击 print,destination 选择 file,保存.tiff 格式的图形。命名为 EXAMPLE。 你必须要保存 odb 文件。 确保 abaqus.rpy 存在于你的工作目录下。 如果你找 不到你可以试试在启动 abaqus CAE 的原始工作目录下找找看。 创建你的第一个输出数据库脚本文件(odb)将'abaqus.rpy’保存为'EXAMPLE_ODB.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文件。
这一步设置了显示的图形是受力变形后的应力并将图形保存。 修改脚本文件实现其他功能的例子我将给出一个修改脚本的范例。修改的地方有两处:
附件里给出了这些文件,并且修改的地方都有注释。我不在详细地解释这些指令,你可以作为一个联系去解读它。 这里我不再从GUI界面运行这些脚本,而是直接从命令窗运行。用下面两条命令即可: abaqus cae script=EXAMPLE_MDB.py
abaqus cae noGUI=EXAMPLE_MDB.py 第一行会打开Abaqus cae,你会看到中间过程。后面一行命令则不会打开GUI界面,你只能看到结果。 进一步使用脚本的一些建议截至到这里,你应该已经比较熟悉我们的操作方法了:让Abaqus来做那些繁琐的工作,组织文件,反复运行。我希望我没有食言,你看到这里花费的时间应该不超过1小时。教程最后我还是给出几个实用的建议:
附件脚本文件可点击原文,参阅文本的英文原始文件。 |
|