打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
长篇连载请收藏:Abaqus二次开发书籍《Python Scripts for Abaqus》翻译【1】

前一期推文中推荐了几本Abaqus Python二次开发的书籍,其中提到一本

很早的外文书《Python Scripts for Abaqus - Learn by Example。今日起,复合材料力学微信公众号将陆续发布该书的翻译整理版,以帮助读者们快速提升Abaqus Python程序开发。

ABAQUS Python脚本应用实例详解

PYTHON SCRIPTS FOR ABAQUS——LEARN BY EXAMPLE

Gautam Puri 著

职场混子 译


第一章初尝脚本之美



备注:文末有代码下载链接


1.1概述

本章基于图示方式介绍如何采用脚本代替Abaqus/CAE中图形用户界面(GUI)中的操作,让读者对Abaqus脚本有个初步了解,并且采用Python脚本实现了GUI手动操作的内容。


1.2使用脚本定义材料

在分析某一特定研究领域的工作时通常需要重复使用某一材料。例如,若分析和模拟的大部分产品都是自己公司生产,且这些产品包含多种钢制组件时,每次新的模拟分析都需要通过Material editor定义材料及其属性,编写脚本可以有效避免每次都需定义材料及其属性的繁琐工作。示例1.1演示该过程。

示例 1.1—定义材料及属性

假设某一产品使用的材料包含Titanium、AISI 1005 Steel和Gold,每种材料的密度、杨氏模量和泊松比如下表所示。

表1-1 Titanium材料属性

性能

公制单位

英制单位

密度

4.50 g/cc

0.163 lb/in3

模量

116 GPa

16800ksi

泊松比

0.34

0.34

表1-2 AISI 1005 Steel材料属性

性能

公制单位

英制单位

密度

7.872 g/cc

0.2844 lb/in3

模量

200 GPa

29000 ksi

泊松比

0.29

0.29

表1-3 Gold材料属性

性能

公制单位

英制单位

密度

19.32 g/cc

0.6980 lb/in3

模量

77.2 GPa

11200 ksi

泊松比

0.42

0.42

Abaqus/CAE中定义这些材料流程如下:

(1) 启动Abaqus/CAE;

(2)点击File > New Model Database > With Standard/Explicit Model

(3)面板左侧模型树中默认模型名为Model-1,模型树中的Materials项左侧无'+’符号表示该项目为空(无材料性能参数);

(4)双击Materials项,弹出Edit Material对话框;

(5)输入材料名称为Titanium

(6)点击General > Density

(7)采用国际单位制MKS(m,kg,s),密度4.5g/cc换算为4500kg/m3,输入密度4500如图所示;

(8)然后点击Mechanical > Elasticity > Elastic

(9)输入弹性模量和泊松比。为保持单位统一需要将杨氏模量116 GPa换算为116e9 Pa(或者116e9 N/m2),泊松比保持0.34不变;

(10)点击OK后该材料便创建完成,左侧模型树中Materials项右侧圆括号中1表示模型中已经存在一种材料,点击旁边的'+’便可以显示材料名称Titanium,双击该材料名称会重新打开Edit Material对话框。

(11)重复以上操作完成AISI 1005SteelGold材料的创建,注意保持单位统一。

(12)完成材料创建后,模型树Materials项如下图所示一样显示3种材料。

以上操作并不难,定义的3种材料可以用于后续的分析。但存在一个问题:每次用Abaqus/CAE重新打开一个新文件对产品进行新的分析时,都需要重新用该方式定义这些材料。尤其是分析需要许多材料且需要定义材料的大量属性时,该过程显得冗长乏味。不光消耗大量时间,还可能输入很难发现不起眼的错误数字,这将为后续的分析引入错误。

解决这种情况的一种方法是将材料添加到材料库中。后续每次创建新的Abaqus文件时直接导入这些材料。另一种方法是使用脚本,将写好的脚本保存为.py的文件,每次需要这些材料时,只需点击File > Run Script…

首先打开一个简单的文本编辑器,我个人最喜欢的是Notepad++。该软件免费且界面简洁,并且在代码旁边显示行号(以便更容易调试错误)。另外也可以使用来自Python.org的Python编辑器,比如PythonWin。其目的是创建一个简单的文本文件,然后用.py扩展名保存它。

使用Notepad++新建文件并输入以下语句:

将文件保存为'ch1ex1.py’文件。在Abaqus CAE中点击File > New新建文件并点击File > Run Script…运行脚本。运行非常快以至于一开始没有注意到任何变化。但仔细观察模型数中的Materials项,右侧圆括号中数字3表示已经定义了3种材料;点击左侧'+’符号将显示3种材料。

双击任一材料名称将重新打开Edit Material窗口且该材料的密度和弹性材料的属性已定义。脚本文件执行了GUI中手动执行的所有操作,以此创建了三种材料并定义了材料的密度、弹性模量和泊松比。若重新打开一个Abaqus/CAE文件并运行脚本,可以在瞬间完成3种材料的定义。通过代码中 'density’、'elastic’和材料名称等字眼,可以对脚本有个大概了解,但是语法的其余部分将在后续章节详细讨论。


1.3是否采用脚本

哪些角度认为编写脚本比将材料存储在材料库中更方便?第一,可以在文本文件中查看所有的材料及其属性,而不是在GUI中打开多个窗口来查看材料和属性。第二,可以创建两三个脚本文件,模拟时只需通过File > Run Script导入材料。另一方面,若将材料存储在材料库中,后续分析使用时需要通过搜索并选择对应的材料。

最后,对于这类简单的应用,两种方法都可以很好的实现。示例1.1的目的是演示脚本的强大功能以及可以实现哪些功能。阅读完本书剩余的部分且擅长编写脚本的读者可以自己决定是否通过脚本协助实现模拟。


1.4 脚本分析示例

上文演示了类似定义材料属性这类简单的工作,脚本并不是局限于执行单个操作,实际上无需打开Abaqus/CAE及GUI界面便可通过脚本完成整个分析。这需要具有使用脚本实现创建零件、定义材料属性、指定截面、施加载荷和约束、定义set和surfaces、定义相互作用和约束、划分网格、运行及后处理。下面的示例便是通过脚本实现以上内容。

示例 1.2—悬臂梁受载

如同前面示例一样,首相在Abaqus/CAE中演示该过程,然后使用脚本实现相同的任务。以长为5米的悬臂梁为例,截面尺寸为0.2*0.2m的矩形且材质为AISI 1005 Steel。梁的一侧固支,固支端无沿X、Y、Z的平动自由度和转动自由度。向下施加10 Pa的压力载荷,悬臂梁自由端出现最大挠度。

场输出记录了载荷步过程中整个系统(分析对象)的状态信息,例如应力和应变。本示例不使用默认设置,设置Abaqus输出应力分量和应力不变量、总应变分量、塑性应变、平动和转动分量、反作用力和力矩以及集中力和力矩。历史输出变量记录节点类等更小的模块在特定时间间隔下的状态信息。本示例选择默认历史输出变量。

采用8节点线性缩减体单元划分网格(C3D8R),网格尺寸为0.2。然后新建job并提交和检查结果。

接下来采用Abaqus CAE的GUI模式来实现这些工作。

(1)启动Abaqus/CAE;

(2)点击File > New;

(3)在模型数据面板右击Model-1并选择Rename

(4)输入Cantilever Beam,从而在模型树中将Model-1重命名为Cantilever Beam

(5)双击Parts项,弹出Create Part对话框。名称后面输入Beam;将Modeling Space设为3DType改为DeformableBase Feature选择Solid类型;shape选择ExtrusionApproximate Size中输入5,然后点击Continue

(6)在Sketcher窗口中的工具栏中选择矩形工具,第一个点的坐标输入(0.1,0.1),第二个点的坐标输入(0.3,-0.1),通过这两个顶点绘制矩形。

(7)点击窗口下侧的红色X图标结束进程End procedure并点击Done

(8)Edit Base Extrusion窗口中将Depth设置为5。

(9)单击OK,窗口中显示3D渲染的部件Beam,模型树中Parts项下面显示子项Beam

(10)此时对文件进行保存,选择File > Save,选择保存文件的目录并将文件命名为'cantilever_beam.cae’(或者读者自定义)。

(11)双击模型树中的Materials,材料名命名为AISI 1005 SteelGeneral > Density 输入7872 kg/m3Mechanical > Elasticity > Elastic中杨氏模量设置为200E9 N/m2、泊松比设置为0.29。

(12)点击OK,该材料在模型树中添加了该材料。

(13)双击模型树中Section,弹出Create Section对话框,命名为Beam Section Category设置为SolidType选择Homogeneous

(14)点击Continue,弹出Edit Section对话框。默认NameBeam SectionTypeSolid, HomogeneousMaterial的下拉菜单中选择之前创建的AISI 1005 Steel材料。

(15)点击OK,模型树中的Sections项中新增了名为Beam Section的子项。

(16)接下来将这个截面属性赋予Beam零件。点击Parts左侧的'+’符号展开Parts(1),然后再展开Beam,包括Features、Sets、Surfaces及其他。

(17)双击子项中的Section Assignments,视窗下侧提示Select the regions to be assigned a section。移动鼠标至视窗中的梁上,当所有边线高亮时点选。

(18)点击Done,弹出Edit Section Assignment窗口,Section选择13-15步创建的Beam Section

(19)点击Ok,模型树中显示Section Assignments项的子项为Beam Section(Solid, Homogeneous)。视窗中零件的颜色变化(默认设置为草绿色)表明成功为其赋予截面属性。

(20)接下来将零件导入装配模块(assembly)。点击模型树中Assembly左侧的'+’符号,然后双击子项Instances弹出Create Instance对话框。只有Parts和Beam是可选项,并按照默认选择。并且在Instance Type中选择Dependent(mesh on part)

(21)点击OK,Instances项的子项为Beam-1,右击Beam-1并选择Rename…,并将其重命名为Beam Instance

(22)接下里创建载荷步用于施加载荷。模型树中Steps项中以自动创建了Initial载荷步。双击模型树中Step,在弹出的Create Step对话框中把载荷步命名为Apply Load,Insert new step after只能按照默认设置选择Initial;然后Procedure type在下拉菜单中选择General,并在列表中向下滚动选择Static, General。(译者注:其实默认选项就是GeneralStatic, General)

(23)点击Continue…弹出Edit Step对话框。并在Description中输入Load is applied during this type,其他均保持默认设置。

(24)点击OK,此时注意到模型树中Steps包括两个载荷步:InitialApply Load

(25)接下来创建场输出变量。模型树中右击Field Output Requests并选择Manager。弹出的Field Output Requests对话框中显示已经在Apply Load载荷步创建了名为F-Output-1的场输出。

点击Edit,在弹出的Edit Field Output Request对话框中显示默认选择了许多输出变量。在输出列表的顶部显示默认选择的输出变量(CDISP,CF,CSTRESS,LE,PE,PEEQ,PEMAG,RF,S,U,)并以逗号分隔。

(26)在Strains中取消选择PEPEEQLE,取消选择所有Contact中的场变量,并在Strains中勾选E。最终选择的场输出变量如下图所示的S、E、PEMAG、U、RFCF

(27)点击OK,然后再点击Dismiss…来关闭Field Output Request Manager对话框。在模型树中右击Field Output Requests的子项F-Output-1,并重命名为Selected Field Outputs

(28)接下来进入历史输出变量的设置。在模型树中右击History Output Requests并选择Manager,弹出与Field Output Requests Manager对话框非常相似的History output Requests Manager对话框。

(29)点击Edit可以查看默认的历史输出变量。采用默认设置并点击Cancel来退出Edit History output Request对话框。同样在模型树中右击History Output Requests的子项H-Output-1,并重命名为Default Field Outputs

(30)接下来对该梁施加载荷。在模型树中双击Loads弹出Create Load对话框。命名为Uniform Applied Pressurestep中选择Apply LoadCategory中选择Mechanical;然后在Type for Selected Step中选择Pressure

(31)点击Continue…视窗底部弹出提示:Select surfaces for the load。将鼠标移至梁的上表面直至该面的边线高亮,点击鼠标进行选择。

(32)点击Done,弹出Edit Load对话框。Distribution选择Uniform;Magnitude中输入10 Pa(只需输入10,无需输入单位)。

(33)点击OK,视窗中显示了在梁的上表面存在压力,且箭头代表压力的方向。同时可以在模型树中发现Loads中出现Uniform Applied Pressure子项。

(34)接下来进行边界或约束的施加。双击模型树中BCs项弹出Create Boudary Condition 对话框,并重命名为Encastre one endStep下拉菜单中选择InitialCategory中选择MechanicalType for Selected Step中选择Symmetry/Antisymmetry/Encastre

(35)点击Continue…,视窗底部弹出提示:Select regions for the boundary condition,移动鼠标至梁的端部直至该面的边线高亮后点选该面。

(36)点击Done,在弹出的Edit Boundary Condition对话框中选择ENCASTRE(U1=U2=U3=UR1=UR2=UR3=0),将梁的端部固支。

(37)视窗中显示梁的端部被固支,同时模型树的BCs项中显示Encastre one end子项。

(38)建议对模型进行保存,接下来对模型划分网格及分析。

(39)再次展开模型树中的Parts及其子项Beam,双击底部的子项Mesh(Empty),进入网格模块,可以发现视窗左侧的工具栏发生了改变,显示相应的网格工具。

(40)菜单栏点击Mesh > Element Type,弹出Element Type对话框。Element Library中选择StandardGeometric Order中选择LinearFamily的列表中选择3D Stress。其他均采用默认设置。对话框底部显示C3D8RAn 8-node linear brick,reduced integration,hourglass control

(41)点击OK

(42)然后在菜单栏点击Seed > Part弹出Global Seeds对话框。将Approximate global size修改为0.2,并将Maximum deviation factor修改为0.1。

(43)视窗中梁显示了节点施加的位置。

(44)接下来在菜单栏点击Mesh > Part,视窗底部弹出OK to mesh the part?。点击Yes后完成网格划分。此外,模型树中Mesh项右侧的(Empty)消失。

(45)接下来创建分析作业。

(46)在模型树的底部,双击Analysis的子项Jobs,弹出Create Job对话框。命名为CantileverBeamJob,需要注意的是作业名称中不能有空格,这是由于Abaqus将作业名称作为输出文件(.odb)名称的一部分,名称中出现空格将导致运行出错。Source选择Model,并且在列表中选择唯一的模型Cantilever Beam

(47)点击Continue…,弹出Edit Job对话框。在Description文本栏中输入Job simulates a loaded cantilever beam。将Job Type设置为Full Analysis,其他均选择默认设置。

(48)模型树Jobs项下面出现CantileverBeamJob(读者需要点击'+’展开内容),右击并选择Submit

(49)作业开始计算,仔细观察可以发现在作业名右侧的括号中依次出现(Submitted)、(Running)和(Completed)

(50)右击CantileverBeamJob(Completed)选择Result,在后处理模块显示为变形的几何。

(51)点击视窗左侧工具栏中的Plot Deformed Shape按钮将显示变形后的梁。通常Abaqus将变形自动放大,读者可以根据需求在Options > Common…中设置期望的放大系数。

以上在Abaqus/CAE中进行了一个完整的分析。本示例非常基础但基本包括了创建零件、指定截面、材料属性、施加载荷和约束、划分网格等所有的关键要点。下面采用脚本的方式实现以上所有操作。

打开文本编辑器(如Notepad++)并输入以下脚本。

敲出以上脚本代码是件非常痛苦的事情,并且可能会输入一些错误的变量名或语法,从而产生许多bug。建议读者使用本书附带的脚本——cantilever_beam.py。

Abaqus中打开一个新模型,然后点击File > Run Script。运行脚本将实现Abaqus/CAE中手动操作的所有过程。同时也自动提交作业,因此,读者可以注意到运行脚本后会直接进行分析。右击模型树中CantileverBeamJob项选择Results来查看输出,其结果与GUI模拟分析结果一致。


1.5 小结

事实上,脚本编写之前我们已经在Abaqus/CAE中已经执行了这个过程。脚本可以实现GUI中所有的操作,并且一旦编写一个基本的分析脚本,后续调整脚本就可以实现GUI无法操作的过程,例如在创建模拟时自动做出决策或在参数分析时执行重复的操作。

第3章将介绍Python语法知识,第4章对以上脚本进行了更为详细的讨论。接下来的第2章主要介绍运行脚本的不同方式。

感谢投稿作者:职场混子 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ABAQUS预应力模态分析
ABAQUS中建立自己的材料库
Abaqus常用材料参数设置
(转)非线性有限元软件——ABAQUS 部分介绍
ABAQUS/CAE中常见材料本构参数浅析
汽车仪表板加强梁有限元分析
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服