下面是小编为大家整理的Abaqus-python入门体会(长安大学,姜峰林flin55,2009.2.1),供大家参考。
Abaqus/python 入门体会 (初稿)
长安大学
姜峰林 flin55@126.com
2009.2.1 #=========================================================== 自 己的论文要用到有限元进行数值模拟分析, 以前都用 ansys 计算, 可 ansys中岩土的本构模型只有 D-P 模型, 无法准确的反映土的硬化/软化性质, 模拟计算出的结果因此也和实际差别很大。
Abaqus 有着丰富的材料模型, 超强的非线性分析能力, 岩土的模型也很多, 因此才转学 Abaqus。
Abaqus 的 cae 建模功能还是很好的, 但科研课题一般都要进行参数分析, 采用 cae 的建模方法有些不切实际, 学了 没几天就放弃 cae 开始学习 inp, 也是学了 一阵子才知道 inp 不能建立实体模型, 只能直接建节点和单元。
复杂的模型 inp 也无法建立, 但采用 Python 建模就可以解决这个问题。
由于 Abaqus 的学习资料不多, 过了 好些日 子才知道 Abaqus 也可以采用Python 语言进行建模计算, 只是比 Ansys 的 Apdl 语言复杂得多, 并且除了 手册上的 Script 资料之外, 没有较为系统的教程, 刚一接触真是让人头痛。
通过查看 Simwe 论坛上关于 Python 的帖子, 和论坛朋友的帮助, 自 己在慢慢积累,现在对 Python 有了 一点点了 解, 算是入了 个门。
接触 Abaqus 也没多久, 对 python 更是一知半解, 绝大多数地方根本都不清楚, 抽空写一点认识体会主要是给像自 己一样刚学习 Abqus Python 的朋友,能少走一些弯路, 节约一些时间。
同时希望大家批评指正、 共同讨论、 补充。
#-------------------------------------------------------------------------------------------------- 学习 Abaqus/Python 基础:
Abaqus 的 cae 建模有比较全面的认识; 了 解一些 Python 语法知识(大家都不会有太多时间单独学习 Python 语言本身 , 只需要有概念了 解即可, 不懂的地方可以随时查询 Python script 手册)
Abaqus/Python 学会使用不太难, 可要精通应用还是要付出一定的劳动。
大家所分析的课题专业不同, 方向也千差万别, 所用到的 Abaqus 的功能也就有很大的差别, 能对自 己的工作领域熟练应用就算成功。
Abaqus 毕竟只是软件,如何考虑专业知识成功建模才是最困难的。
#-------------------------------------------------------------------------------------------------- 1. Python 与 Abaqus 2. Abaqus/Python 结构 3.模型参数分析技巧 4.几个命令的体会 5.一个 Abaqus/Python 例子 #--------------------------------------------------------------------------------------------------
#=========================================================== 1. Python 与 Abaqus 1.1 Python 简介 Python 是面向对象的语言。
面向对象的语言自 己的理解为:
语言本身 已经定义了 许多固定模块, 如数学函数、 对显示模式的控制、 一些对话框的编写等等程序模块, 只需要按照程序的指定格式填空即可完成既定任务, 格式相对比较固定, 因此语言格式看起来非常繁琐, 但方便实用能够大量节约程序员的时间。
面向对象语言的使用方式可以比喻为:
一棵树分为树干、 树枝、 细枝和树叶等部分, 你要是想得到一个确定位置的树叶(且具大小等属性)
只有一个路径可以走即 树干-树枝-细枝-树叶, 换成面向对象的格式为 树干.树枝.细枝.树叶(树叶片数或大小等属性)。
以下是 abaqus 中 Python 的一般格式, 这些格式都是固定的, 我们只需要改变其中的参数即可:
mdb.models["Model-1"].ConstrainedSketch(name="__profile__", sheetSize=0.3) s = mdb.models["Model-1"].ConstrainedSketch(name="__profile__", sheetSize=0.3) s.sketchOptions.setValues(decimalPlaces=3, viewStyle=AXISYM) s.setPrimaryObject(option=STANDALONE) s.ConstructionLine(point1=(0.0, -100.0), point2=(0.0, 100.0))
Python有着较强的逻辑控制语句如if、 for、 while等, 可以通过循环或条件等语句把复杂且重复的操作变得简单易于操作, 也是用参数化编程较cae的最大优势。
1.2 如何学 abaqus Python 命令
Abaqus 是采用 Python 语言编制而成, 在 cae 中所有的操作都可以通过Python 脚本命令完成(注:
好像 Python 并不能完全取代 inp 文件, 一些材料属性的参数好像要用 inp 才能赋值)。
☆学会用 python reader 程序 Abaqus cae 可以自 动生成 python 文件, 存放在工作目 录的 abaqus.rpy 文件中 , 每一步 cae 操作都会产生相应的 python 命令。
可以通过 simwe 网友ck436ck436 编写的 python reader 程序实时读取产生的命令, 反复揣摩、 领会每个命令, 很快就会有所提高, 对 python 的命令有所领悟。
与 cae 建模相同, Python 建模也分为:
part、 property、 assembly、 step、ineraction、 load、 mesh、 job 等模块, 具体每个模块中的建模命令可参考 Python reader 读取的命令学习, 我们只需去记忆常用的 Python 命令。
以下是 python reader 程序下载地址。
http://forum.simwe.com/viewthread.php?tid=808007&highlight=Pythonhttp://groups.google.com/group/ck436goooglemail/files ☆通过修改 abaqus. rpy 建立自 己的脚本文件是一条捷径
1.3 Abaqus/Python学习资料关于 Python 的学习 资料非常多, 如 Swaroop, C.H.著沈洁元译的《简明 Python 教程》就是很好的参考资料。
王纯业的 《Python 学习笔记》也不错, simwe论坛可以下载到。
另外就是 Abaqus 手册:
Abaqus Scripting User"s ManualAbaqus Scripting Reference ManualGetting Started with Abaqus: Interactive EditionAbaqus 手册真是冗长, 只能是根据自 己的课题有选择的查阅。
#=========================================================== 2. Abaqus/Python 结构 Abaqus的object model分为session、 mdb和odb三个objects, session为视图模块、 mdb为模型数据模块、 odb为数据输入输出模块。
每个object下面又有很多命令分支, 直到执行到所需要的具体命令。
以下各图选自 Abaqus Scripting User"s Manual, 更多书面的的解释可以参考abaqus手册。
每个 object 都像一棵树, 要执行某个命令就需要按照 python 的面向对象的格式进行。
例如:
cell4 = mdb.models["block"].parts["crankcase"].cells[4], 要把 part 模块中编号为 4 的体赋值给 cell4, 就需通过路径 mdb→models→part→cells(4 号体属性), 其中"block"、 "crankcase"、 分别是 model 和 part 的名字。
在草图 Sketch 中画线:
s = mdb.models[" block "].ConstrainedSketch(name="grid",
sheetSize=3.0)
s.Line(point1=(-1.275, 0.0), point2=(-1.125, 0.0)) s.Line(point1=(1.125, 0.0), point2=(1.275, 0.0)) 执行任何一条命令都必须按照结构树的格式进行操作。
我们所看到的python 脚本繁杂的语句就是这样形成的。
这样大量的命令不能在短时间内掌握, 我们只需要根据自 己的需要边建立模型边学习就可以了 。
a = mdb.models["Model-1"].rootAssembly s = a.instances["Mount-1"].edges side1Edges = s.findAt(((0.0475, 0.0, 0.0), )) 以 上三行与 下 面的 句 子是等同 的 , 即 把 findat 找到 的 edges 赋值给side1Edges。
分开来写简单明了 , 大大缩短了 语句的长度。
side1Edges = mdb.models["Model-1"].rootAssembly. instances["Mount-1"].edges. findAt(((0.0475, 0.0, 0.0), )) a.Surface(side1Edges=side1Edges, name="Bottom"), 这行语句设置 side1Edges 所对应的 edge 为名称"Bottom"的 surface 的 set。
#=========================================================== 3.模型参数分析技巧
Python 脚本建模的好处就是可以进行参数分析, 即改变我们要分析模型的几何尺寸、 材料属性等可变参数, 对数值模型进行求解计算, 从而对所分析的对象有更全面的了 解。
1. 对自 己要进行参数分析的参数赋值:
如几何尺寸或材料属性等 a1=20,b1=30, c1=40, 命名要符合 python 规则。
2.cae 与 Python 混合建模, 不会的命令就利用 cae 自 动生成, 用 Python reader记录命令然后进行修改, 可以弥补不熟悉 Python 的缺点;
3.逐句修改 Python 脚本, 可以去掉一些不必要的语句并在 cae 中逐句进行验证。
#=========================================================== 4. 几个命令的体会 4.1 Set ( )
Set 命令在 python 建模时要经常用到, 对实体、 surface、 element 等分组,方便加载、 施加约束和单元生死等控制
4.2 Findat ( ) 对 cell、 edge、 face、 vertice 进行查找, 括号中参数为实体坐标
p = mdb.models["Model-1"].parts["Mount"] f = p.faces faces = f.findAt(((0.042303, 0.006937, 0.0), )) pickedRegions =(faces, ) p.setElementType(regions=pickedRegions, elemTypes=(elemType1, elemType2))
4.3 Len ( )
利用 len 命令可以实现对单元选取 p = mdb.models["precast culvert"].parts["soil"] e = p.elements len(e) n1=len(e) elements = e[1:n1]
#单元数存放在 e [ ]的一维数组里 p.Set(elements=elements, name="Set-3") 对单元进行编组 set, 可以进行生死单元的控制, 我摸索了 好久才想到这个办法, 目 前只在二维模型应用过, 三维也应该没问题。
Abaqus 没有办法对单元编号进行编号控制, 也没有像 ansys 那样有效的选择命令, 怎样选择 abaqus 的单元就是很头疼的问题, 我要做路堤的分层回填模拟, 手动选取单元根本就没有可能。
Abaqus 的编号其实是有规则的, 后划分的单元编号最小, 先划分的单元编号最大; 这样我们就可以每次划分单元后都采用 len 命令计算一次单元数量, 并用参数记录下来, 这样我们就能计算出每部分单元的数量以及他的起始和终止编号。
根据 elements = e[1:n1]、 p.Set(elements=elements, name="Set-3")语句就可以把每部分单元设置成 set, 以后操作就很方便了 。
#=========================================================== 5. 一个 Abaqus/Python 例子 下面是一个Getting Started with Abaqus: Interactive Edition中的一个橡胶避震垫例子:
☺号后语句表示我的注释, 注释上面的句子。
我也不懂的就没有注释, 先熟悉一下Python的样子。
在学习的时候可以copy(Crtol + V)
到cae下面的命令行中一句句的执行, 并在cae视窗中查看命令执行情况, 领会命令使用方法。
# Script for rubber mount example
☺“#” 开头表示这一行为注释行, 同 ansys的“!
” 号 from abaqus import * from abaqusConstants import * ☺引 入abaqus中 的一些模块, 这些模块是abaqus已事先存储在文件中 , 要引 入才这些模块能运行相应的命令 session.viewports["Viewport: 1"].makeCurrent() session.viewports["Viewport: 1"].maximize() session.journalOptions.setValues(replayGeometry=COORDINATE,
recoverGeometry=COORDINATE) ☺对cae视窗的操作命令; maximize() 的括号好像是默认为当 前值 from caeModules import * from driverUtils import executeOnCaeStartup executeOnCaeStartup() Mdb() #-------------------------------------------------------------------------------------------------- ##
Sketch profile of the mount ☺进入草图 模块 s = mdb.models["Model-1"].ConstrainedSketch(name="__profile__", sheetSize=0.3) ☺建立一个sketch草图 , 草图 的尺寸为 0. 3 个单位; 这个句 子算是一个标准的Python语句 , 具体后面解释 g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints s.sketchOptions.setValues(decimalPlaces=3, viewStyle=AXISYM) s.setPrimaryObject(option=STANDALONE) ☺设置草图 为轴对称模式 s.ConstructionLine(point1=(0.0, -100.0), point2=(0.0, 100.0)) s.FixedConstraint(entity=g[2]) ☺建立辅助线及约束 mdb.models["Model-1"].sketches["__profile__"].sketchOptions.setValues(gridFrequency=4) ☺sketch参数修改 s.rectangle(point1=(0.01, 0.0), point2=(0.025, 0.01)) ☺画矩形 s.DistanceDimension(entity1=g[2], entity2=v[0],textPoint=(0.00998260825872421, -0.00830297358334064), value=0.01) s.VerticalDimension(vertex1=v[0],vertex2=v[1],textPoint=(0.0,0.00851448811590672), value=0.03)
s.ObliqueDimension(vertex1=v[0],vertex2=v[3],textPoint=(0.025699570775032, -0.00830297358334064), value=0.05) ☺标注图 形尺寸, 还可以修改图 形尺寸, 如拉伸、 压缩等 s.CircleByCenterPerimeter(center=(0.085,0.025),point1=(0.06, 0.00740899052470922)) ☺画圆
s.CoincidentConstraint(entity1=v[5], entity2=g[5]) s.DistanceDimension(entity1=g[2], entity2=v[4],textPoint=(0.0811913833022118, -0.023865295574069), value=0.1) s.VerticalDimension(vertex1=v[2], vertex2=v[4],textPoint=(0.115524396300316, 0.0262394621968269), val...
推荐访问:python总结心得体会 Abaqus-python入门体会(长安大学 姜峰林flin55 入门 体会 长安大学