ABAQUS二次开发教程_第1页
ABAQUS二次开发教程_第2页
ABAQUS二次开发教程_第3页
ABAQUS二次开发教程_第4页
ABAQUS二次开发教程_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ABAQU(SPython 语言)二次开发 人生苦短,我用 Python 作者: Fan Shengbao2017 年 12 月目录Python 程序基本语法Python 语法结构Python 语言以缩进来约束每个程序块,编写程序时要特别注意每一行的缩进量,同一层 次的语句应具有相同的缩进量。下面是一段 Python 程序示例:#-*- coding:utf-8 -*-for i in range ( 1,10):for j in range (1,i +1):print str ( j )+x +str ( i )+ = +str (i *j ),print该段程序主要功能是实现乘法口诀表输

2、出打印,其中“#-*- coding:utf-8 -*-”是约定文档的编码方式 。程序主体部分由两个嵌套的 for 循环语句组成,可以看到每一个 for 循环块 的内部都具有相同的缩进量。程序输出结果如下:1x1=11x2=2 2x2=41x3=3 2x3=6 3x3=91x4=4 2x4=8 3x4=12 4x4=161x5=5 2x5=10 3x5=15 4x5=20 5x5=251x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=361x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=491x8=8 2x8=16 3x8=24

3、 4x8=32 5x8=40 6x8=48 7x8=56 8x8=641x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81Python 程序中一行中“ #”号后面的内容为注释, “ #”号只支持单行注释,多行注释可使 用“ ”注释符。PythonPython 元组Python 中的元组( tuple )相当于 C 语言中的数组简化版,其内容和长度均不可变,只能 对其内容进行访问。tt1 = (1, 2, 3, 4, 5)print tt1 1程序执行结果:2Python 列表Python 中的列表( list )相当于 C语

4、言中的数组,但比 C 语言中的数组使用起来更加方 便灵活。其长度和内容均可修改,列表是编程时使用较多的结构。list1 = 1, 2, 3, 4,5print list1 1list1 1 = 5print list1( 6)print list1程序执行结果:21, 5, 3, 4, 51, 5, 3, 4, 5, 6Python 列表常用操作方法:表 1-1 Python 列表常用操作方法操作方法功能()(1) 在列表末尾追加元素()(7,8,9) 合并两个列表()(2, 1 ) 在列表指定位置插入元素()(n) 输出并删除指定位置的元素,不指定 n 值时则弹出末尾元 素()素(5) 在列

5、表中搜索该元素第一次出现的位置()(1) 在列表中搜索该元素出现的次数()() 反转列表排序,也可使用 list1:-1()() 对列表进行排序对列表进行切片操作(元组也能进行相应的操作) :list1 = 1, 2, 3 ,a ,b , 5 print list1 2:4print list1 2:print list1 1: 2print list1 :- 2输出结果:3, a3, a, b, 52, a, 51, 2, 3, aPython 字典Python 中的字典( dict )对于存储数据非常有用,其存储的数据是无序的,每一个键对 应着一个键值,是一种映射型数据类型。dict1 =

6、 author : Fan Shengbao , software : Abaqus dict1 print print print print datadict1()()() = 2017#添加一个字典元素 software # 打印 software 键的键值#打印所有键#打印所有的键值#打印所有键及其键值程序输出结果:Abaqussoftware, Data, authorAbaqus, 2017, Fan Shengbao (software,Abaqus),(Data,2017),(author,Fan Shengbao) 从打印的结果可以看出,字典的存储是无顺序的。获取字典键值需通

7、过键来访问,键是唯 一的,多个键可以对应相同的内容。Python 集合Python 中集合( set )的概念来源于数学在的集合,集合中的每个元素都是唯一存在,多 次添加同一元素只存在一个。集合区别于列表和元组,其不能通过下表进行访问,但可以将其 转换位列表后再进行其他操作。set1 = set ( abcde )print set1( f )#添加 f 元素( b )#添加 b元素print set1print list(set1)输出结果:set(a, c, b, e, d)set(a, c, b, e, d, f)a, c, b, e, d, fPython 中集合常见操作方法:表 1-

8、2 Python 中集合常见操作方法操作方法 list1 list2 list1 & list2功能list1 | list2()()()list1 与 list2 list1 与 list2 list1 与 list2 (a)向 list1list1list1list1的差集的交集的并集中添加一个元素(1,2,3) 向 list1 ( a) 移除 list1中添加多个元素中的 a元素Python 字符串Python 中的字符串是一种只能访问的数据类型,定义之后不能对其内容进行修改,否则 程序将抛出异常。str1 = Abaqus Pythonprint str1 0: 6print ( 30

9、, - )程序运行结果:AbaqusAbaqus PythonPython 字符串常见操作方法:表 1-3 Python 字符串常见操作方法操作方法功能()()()()()()()()()()()()(substr,start,end) 从 str1 中搜索 substr ,不指定 start 和 end 时指搜索整个字符串,可以只单独指定(substr,start,end)(str)(str)(n,char)(n,char)充(n,char)充将 str1将 str1(old,new,count) count 为替换次数,若省略只替换一次 (char) 去除 str1 前后的 char ,若

10、省略则去除前后空格 (sep,maxcount) 以 sep 分割字符串, maxcount 为最大分割次数 (可省略),省略 sep 则使用空格进行分割start获取字符出现次数是否以str开始是否以str结尾以str1为中心获取 n个字符,不够部分使用char 填充以str1为左对齐获取n 个字符,不够部分使用char 填以str1为右对齐获取n 个字符,不够部分使用char 填全部转换为大写 全部转换为小写Python 分支语句if 分支语句有以下三种基本形式,可根据不同情况选用不同的形式,使用时需替换 pass占位语句:形式一形式二形式三if condition1if conditio

11、n :passif condition :passelif condition2passelse :passpasselse :passPython 循环语句Python 编程语言只包含两种循环结构,分别是 for 循环和 while 循环。 for 循环要比while 循环使用更加频繁。1.8.1 for 循环for 循环主体结构: for i in range (1, 10):passelse :pass其中 pass 为占位符, else 可省略, else 只有在 for 循环不是由 break 中断的情况下才会 执行 else 下的语句。for 循环可遍历元组、列表和字符串:for

12、i in 1, 2, 3, 4, 5:print ifor 具有一些比较高级的迭代功能(比普通循环更加高效,执行速度更快) : print i *i for i in range (10)print ( i , j ) for i in range ( 3) for j in range (3) if i != j 程序执行结果:0, 1, 4, 9, 16, 25, 36, 49, 64, 81(0, 1), (0, 2), (1, 0), (1, 2), (2, 0), (2, 1)1.8.2 while 循环while 循环主体结构:i = 0while i Run Script 再选择

13、需要运行的 Python 程序文件 直接在宏程序里面编写程序,再调用宏管理器( File Macro Manager)执行程序只写几行代码的话,可以到 ABAQUS软件底部的 kernel command line interface 中编 写图 1.3 kernel command line interface窗口编 写 ABAQUS/Python程序下面是一个 ABAQUS/Python 程序的简单例子:该段程序生成如图所示的三维模型,并导入 到装配模块中。#-*- coding:utf-8 -*- from abaqus import * # 导入 Abaqus 常量模块 from ab

14、aqusConstants import * #导入 Abaqus 中常用的模块,例如 step , material from caeModules import *# 新建一个 Model 并命名为 Model-1model1 = ( name=Model-1 )# 创建一个三维可变形实体,并命名为 Part-1part1 = ( name=Part-1, dimensionality =THREE_D,type# 创建一个名为 Sketch-1=DEFORMABLE_BO)DY的草图skt = ( name=Sketch-1, sheetSize =100)#在创建的草图中绘制一个矩形(

15、 point1 =(- 50,- 50), point2 =( 50, 50) #在草图中心绘制一个 R=25 的圆 skt . CircleByCenterPerimeter( center =(0, 0), point1 =( 25, 0)# 对草图 skt 进行拉伸,指定深度为 50( sketch =skt , depth =50) asm =# 访问装配模块# 将新建的 part1 添加到装配中( name=Part-1-1 , part =part1 , dependent =ON)ABAQUS录制 Python 程序使用宏管理器可以将对 ABAQUS的操作录制成 Python 程

16、序,通过宏录制可缩短程序开发时 间,方便对 ABAQUS软件进行二次开发。稍加修改录制后的程序,就能得到想要的效果。下图为 ABAQUS软件的宏管理器( File Macro Manager): 图 1.4 ABAQUS 软件宏管理器点击 Create 能够对 ABAQUS软件的操作进行录制,生成 Python 代码并添加到宏管理器 中,某些情况下需对程序进行一定的编辑才能重复出录制的操作,直接运行可能得不到与之前 操作一样的结果或者程序直接报错。ABAQUS/Python 对象介绍2.4.1 session 对象session 模块主要用来控制窗口显示属性,例如新建多个窗口、设置窗口大小、调

17、整当前 显示窗口和打开 odb 文件等。录制程序时会出现多行以 session 开头的语句,但其中大部分记 录的是我们调整视图的操作,例如转动或平移一下模型,编辑时可删除这些语句。获取当前显示的窗口名称:viewportName =获取当前显示的窗口的 model 名称:viewportName =modelName= viewportName .新建一个窗口:( name = Viewport: 2 )2.4.2 mdb 对象mdb对象是 ABAQUS前处理中最为重要的一个对象,是一个顶层对象,下面包含着丰富的 子对象和方法。表 1-6 mdb 对象信息成员类型名称功能构造函数Mdb()生成

18、一个新的模型数据库openMdb()新建一个 cae 文件,参数为 cae 文件完整路径()关闭当前 cae 文件,并不保存成员函数()保存当前 cae 文件()另存为 cae 文件,参数为另存 cae 文件的完整路径()生成一个 model ,参数为 model 名成员变量()当前模型创建的所有 job()当前模型所有的 model每个 cae 文件包含一个或多个 Model ,大部分前处理信息均包含在每个 Model 下面,通过 modelName 可单独访问每个 Model 下的数据。通过每个 Model 可继续访问之下的 part 、 material 和 rootAssembly 等

19、。图 1.5 Model 下的部分对象Python 在前处理中,可以用来建立复杂的三维模型,下面程序建立了一个三维函数曲面 图,数学公式如式所示,代码如下:x2 y2z 3x e x y ; x, y 2.5 2.5 ()#程序开始#-*- coding:utf-8 -*-from abaqus import *from abaqusConstants import *from caeModules import *import mathpart1 = Model-1 . Part ( name=Part-1 , dimensionality=THREE_D, type =DEFORMABLE

20、_BO)DYpoint_U = point_Utemp = None point_V = point_Vtemp = for i in range (- 100, 100):()for i in xrange (- 100, 100): point_U = for j in xrange (- 100, 100):x= *iy= *jcoord = ( x, y, 3* x*(- x* 2- y* 2)( coord ) point_V j +100 . append( coord )( points =point_U , mergeType =MERG,E meshable =ON, smo

21、othClosedSpline =ON) for i in point_V :( points =i , mergeType =MERG,E meshable =ON, smoothClosedSpline =ON) part2 = Model-1 . Part ( name=Part -2 ,dimensionality=THREE_D, type =DEFORMABLE_BO)DYedges = for i in point_V :( points =i , mergeType =MERG,Emeshable=ON, smoothClosedSpline =ON)for i in poin

22、t_V : ( startCondition =NONE, endCondition =NONE) asm = Model-1 . rootAssembly ( name=Part-1-1 , part =part1 , dependent=ON) ( name=Part-2-1 , part =part2 , dependent =ON) Viewport: 1. setValues ( displayedObject =asm)该程序生成两个三维模型,如图所示: 图 1.6 线框模型 图 1.7 曲面模型2.4.3 odb 对象odb 对象和 mdb对象有很多的相似性,包含的对象和访问方式

23、也几近相同。下面代码可用 于读取指定 odb 文件的最后分析步的最大应力并打印显示出来: def readMaxStress ( myViewport, jobName ):path = ()= ( name=path +jobName+.odb )( displayedObject =o1)S ,outputPosition=INTEGRATION_POIN,T refinement =(INVARIANT ,Mises ), )UNDEFORMED, )CONTOURS_ON_DEF , )2.5 print 完整二次开发示例 该段程序实现了平板拉伸应力分析,完成了从建模、添加边界条件载荷

24、、监控计算状态和 应力自动读取完整分析过程。#-*- coding:utf-8 -*-from abaqus import *from abaqusConstants import *from caeModules import *import osimport _main_def PlateTensile ( h, w, r, t, f ): #检测输入是否正确 if r =h/:print Error: Radius Heightreturn Falseif r =w/:print Error: Radius widthreturn Falseif r =0 or t = 0 or f0:

25、print ERROR!return False# 创建名为 Model - 1的模型对象 model = (name = Model-1 )part = ( name=Part-1 , dimensionality =THREE_,D type =DEFORMABLE_BO)DYasmskt1 = ( name=Skt1 , sheetSize =200)( point1 =(- w/,-h/, point2 =(w/, h/)( center =(0, 0), point1=(r, 0)( sketch = skt1 ) Viewport: 1 . setValues ( displaye

26、dObject =part )( name=Material-1 ) Material-1 . Elastic ( table =(, ,)( name=Section-1 , preIntegrate =OFF,material =Material-1 , thicknessType =UNIFORM, thickness =t,thicknessField= , idealization =NO_IDEALIZATION,poissonDefinition temperature integrationRule=DEFAULT, thicknessModulus =None,=GRADIE

27、NT, useDensity =OFF,=SIMPSON, numIntPts =5)f1 =region = ( faces =f1 )( region =region , sectionName =Section-1 ,offset =, offsetType =MIDDLE_SURFAC, E offsetFieldthicknessAssignment=FROM_SECTIO)N( name=Part-1-1 , part =part , dependent =ON)( name=Step-1 , previous =Initial ) s1 = Part-1-1 . edges ed

28、ges1 = ( w/, 0, 0),) edges2 = (- w/, 0, 0),) rp1 = ( point =(w/, 0, 0) region1 = ( edges =edges1 ) region2 =( referencePoints =(,) #参考点和边进行耦合操作( name=Constraint-1 , controlPoint =region2 ,surface =region1 , influenceRadius =WHOLE_SURFA,CEcouplingType =KINEMATIC, localCsys =None, u1 =ON, u2 =ON, u3 =

29、ON, ur1 =ON, ur2 =ON, ur3 =ON)( name=Load-1 , createStepName =Step-1 ,region =region2 , cf1 =f , distributionType =UNIFORM, field =localCsys =None)( name=BC-1 , createStepName =Initial , region=( edges =edges2 ), localCsys =None)( regions =f1 , elemShape =QUAD)( size =( w+h)/, deviationFactor =, min

30、SizeFactor =()jobName = Test-1( name=jobName, model =Model-1 , description = ,type =ANALYSIS, atTime =None, waitMinutes =0, waitHours =0, queue =None, memory=90, memoryUnits =PERCENTAG, E =SINGLE,getMemoryFromAnalysis=True , explicitPrecisionnodalOutputPrecision=SINGLE, echoPrint =OFF,modelPrint =OF

31、F, contactPrint =OFF, historyPrint=OFF,= , scratch = , resultsFormatmultiprocessingMode =DEFAULT, numCpus=1, numGPUs=0) from jobMessage import JOB_ABORTED, JOB_COMPLETE, JDOB_SUBMITTED #读取最大应力值并打印userSubroutine=ODB,def readMaxStress ( userData ): path = () o1 = ( name=path + +jobName+.odb ) ( displa

32、yedObject S , outputPosition=o1)=INTEGRATION_POIN,T refinement =(INVARIANT, Mises ), ) , ), ) print myViewport = Viewport: 1 UNDEFORMEDCONTOURS_ON_DEFdef dealResult ( jobName, messageType, data , userData ):if messageType =JOB_ABORTE:Dprint ERROR! . center ( 100, - )if messageType =JOB_COMPLETE: Dprint COMPLETED. center (100, - )readMaxStress( us

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论