ABAQUS二次开发教程.pdf

上传人:赵** 文档编号:60849506 上传时间:2022-11-18 格式:PDF 页数:18 大小:1.22MB
返回 下载 相关 举报
ABAQUS二次开发教程.pdf_第1页
第1页 / 共18页
ABAQUS二次开发教程.pdf_第2页
第2页 / 共18页
点击查看更多>>
资源描述

《ABAQUS二次开发教程.pdf》由会员分享,可在线阅读,更多相关《ABAQUS二次开发教程.pdf(18页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、ABAQUSABAQUSPythonPython 语言二次开发语言二次开发人生苦短,我用人生苦短,我用PythonPythonFan ShengbaoPython2.72017年12月目 录第一章 Python 程序基本语法.11.1 Python 语法结构.11.2 Python 元组.11.3 Python 列表.11.4 Python 字典.21.5 Python 集合.31.6 Python 字符串.31.7 Python 分支语句.41.8 Python 循环语句.51.8.1 for 循环.51.8.2 while 循环.51.9 Python 定义函数.51.10 Python

2、模块.61.11 Python 包.71.12 Python 文件和目录.71.12.1 目录操作.71.12.2 文件操作.71.13 Python 异常处理.8第二章 ABAQUS/Python 二次开发.92.1 ABAQUS 执行 Python 程序.92.2 编写 ABAQUS/Python 程序.102.3 ABAQUS 录制 Python 程序.102.4 ABAQUS/Python 对象介绍.112.4.1 session 对象.112.4.2 mdb 对象.112.4.3 odb 对象.132.5 ABAQUS 完整二次开发例如.142.6 ABAQUS 二次开发常用函数.1

3、62.6.1 Part 模块常用函数.16ABAQUSPython 语言二次开发教程第一章 Python 程序基本语法1.1 Python 语法结构Python 语言以缩进来约束每个程序块,编写程序时要特别注意每一行的缩进量,同一层次的语句应具有相同的缩进量。下面是一段Python 程序例如:#-*-coding:utf-8-*-forfor i inin range(1,10):):forfor j inin range(1,i+1):):printprint str(j)+)+x+str(i)+)+=+str(i*j),),printprint该段程序主要功能是实现乘法口诀表输出打印,其中

4、“#-*-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 4x8=32 5x8=

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

6、比 C 语言中的数组使用起来更加方便灵活。其长度和内容均可修改,列表是编程时使用较多的结构。1ABAQUSPython 语言二次开发教程list1=1,2,3,4,5 printprint list1 1 list1 1 =5printprint list1list1.append(6)printprint list1程序执行结果:21,5,3,4,51,5,3,4,5,6Python 列表常用操作方法:表 1-1 Python 列表常用操作方法操作方法list1.append()list1.extend()list1.insert()list1.pop()list1.index()list1

7、.count()list1.reverse()list1.sort()功能list1.append(1)在列表末尾追加元素list1.extend(7,8,9)合并两个列表list1.insert(2,1)在列表指定位置插入元素list1.pop(n)输出并删除指定位置的元素,不指定 n 值时则弹出末尾元素list1.index(5)在列表中搜索该元素第一次出现的位置list1.count(1)在列表中搜索该元素出现的次数list1.reverse()反转列表排序,也可使用 list1:-1list1.sort()对列表进行排序对列表进行切片操作元组也能进行相应的操作:list1=1,2,3,

8、a,b,5 printprint list1 2:4 printprint list1 2:printprint list1 1:2 printprint list1:-:-2 输出结果:3,a3,a,b,52,a,51,2,3,a1.4 Python 字典Python 中的字典dict对于存储数据非常有用,其存储的数据是无序的,每一个键对应着一个键值,是一种映射型数据类型。dict1=author:Fan Shengbao,software:Abaqus dict1 data =2017#添加一个字典元素printprint dict1 software#打印software键的键值prin

9、tprint dict1.keys()()#打印所有键2ABAQUSPython 语言二次开发教程printprint dict1.values()()#打印所有的键值printprint dict1.items()()#打印所有键及其键值程序输出结果:Abaqussoftware,Data,authorAbaqus,2017,Fan Shengbao(software,Abaqus),(Data,2017),(author,FanShengbao)从打印的结果可以看出,字典的存储是无顺序的。获取字典键值需通过键来访问,键是唯一的,多个键可以对应相同的内容。1.5 Python 集合Pytho

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

11、st2list1|list2list1.add()list1.updata()list1.remove()list1 与 list2 的差集list1 与 list2 的交集list1 与 list2 的并集list1.add(a)向 list1 中添加一个元素list1.updata(1,2,3)向 list1 中添加多个元素list1.remove(a)移除 list1 中的a元素功能1.6 Python 字符串Python 中的字符串是一种只能访问的数据类型,定义之后不能对其内容进行修改,否则程序将抛出异常。str1=Abaqus 6.14 Pythonprintprint str1 0

12、:6 3ABAQUSPython 语言二次开发教程printprint str1.center(30,-)程序运行结果:Abaqus-Abaqus 6.14 Python-Python 字符串常见操作方法:表 1-3 Python 字符串常见操作方法操作方法str1.find()str1.count()str1.startswith()str1.endswith()str1.center()功能str1.find(substr,start,end)从 str1 中搜索 substr,不指定 start 和 end 时指搜索整个字符串,可以只单独指定startstr1.count(substr,

13、start,end)获取字符出现次数str1.startswith(str)是否以 str 开始str1.endswith(str)是否以 str 结尾str1.center(n,char)以 str1 为中心获取 n 个字符,不够部分使用 char填充str1.ljust(n,char)以 str1 为左对齐获取 n 个字符,不够部分使用 char填充str1.rjust(n,char)以 str1 为右对齐获取 n 个字符,不够部分使用 char填充将 str1 全部转换为大写将 str1 全部转换为小写str1.replace(old,new,count)count为替换次数,假设省略只

14、替换一次str1.strip(char)去除 str1 前后的 char,假设省略则去除前后空格str1.split(sep,maxcount)以 sep 分割字符串,maxcount 为最大分割次数可省略,省略 sep 则使用空格进行分割str1.ljust()str1.rjust()str1.upper()str1.lower()str1.replace()str1.strip()str1.split()1.7 Python 分支语句if 分支语句有以下三种基本形式,可根据不同情况选用不同的形式,使用时需替换pass 占位语句:形式一ifif condition:passpass形式二if

15、if condition:passpasselseelse:passpass形式三ifif condition1:passpasselifelif condition2:passpasselseelse:passpass4ABAQUSPython 语言二次开发教程1.8 Python 循环语句Python 编程语言只包含两种循环结构,分别是 for 循环和 while 循环。for 循环要比 while 循环使用更加频繁。1.8.1for 循环1)for 循环主体结构:forfor i inin range(1,10):):passpasselseelse:passpass其中 pass 为占

16、位符,else 可省略,else 只有在 for 循环不是由 break 中断的情况下才会执行else 下的语句。2)for 循环可遍历元组、列表和字符串:forfor i inin 1,2,3,4,5:printprint i3)for 具有一些比较高级的迭代功能比普通循环更加高效,执行速度更快:printprint i*i forfor i inin range(10)printprint(i,j)forfor i inin range(3)forfor j inin range(3)ifif i!=!=j 程序执行结果:0,1,4,9,16,25,36,49,64,81(0,1),(0,

17、2),(1,0),(1,2),(2,0),(2,1)1.8.2while 循环while 循环主体结构:i=0whilewhile i Run Script再选择需要运行的Python 程序文件 直接在宏程序里面编写程序,再调用宏管理器FileMacro Manager执行程序 只写几行代码的话,可以到ABAQUS 软件底部的 kernel command line interface中编写图 2.2 kernel command line interface窗口9ABAQUSPython 语言二次开发教程2.2 编写 ABAQUS/Python 程序下面是一个 ABAQUS/Python 程

18、序的简单例子:该段程序生成如下图的三维模型,并导入到装配模块中。#-*-coding:utf-8-*-fromfrom abaqus importimport*#导入 Abaqus 常量模块fromfrom abaqusConstants importimport*#导入 Abaqus 中常用的模块,例如 step,materialfromfrom caeModules importimport*#新建一个 Model 并命名为 Model-1model1=mdb.Model(name=Model-1)#创建一个三维可变形实体,并命名为 Part-1part1=model1.Part(name

19、=Part-1,dimensionality=THREE_D,type=DEFORMABLE_BODY)#创建一个名为 Sketch-1 的草图skt=model1.ConstrainedSketch(name=Sketch-1,sheetSize=100)#在创建的草图中绘制一个矩形skt.rectangle(point1=(=(50,50),),point2=(=(50,50)#在草图中心绘制一个 R=25 的圆skt.CircleByCenterPerimeter(center=(=(0,0),),point1=(=(25,0)#对草图 skt 进行拉伸,指定深度为 50part1.Ba

20、seSolidExtrude(sketch=skt,depth=50)asm=model1.rootAssembly#访问装配模块#将新建的 part1 添加到装配中asm.Instance(name=Part-1-1,part=part1,dependent=ON)2.3 ABAQUS 录制 Python 程序使用宏管理器可以将对 ABAQUS 的操作录制成 Python 程序,通过宏录制可缩短程序开发时间,方便对 ABAQUS 软件进行二次开发。稍加修改录制后的程序,就能得到想要的效果。下列图为 ABAQUS 软件的宏管理器FileMacro Manager:图 2.3 ABAQUS 软件

21、宏管理器10ABAQUSPython 语言二次开发教程点击 Create能够对 ABAQUS 软件的操作进行录制,生成 Python 代码并添加到宏管理器中,某些情况下需对程序进行一定的编辑才能重复出录制的操作,直接运行可能得不到与之前操作一样的结果或者程序直接报错。2.4 ABAQUS/Python 对象介绍2.4.1 session 对象session 模块主要用来控制窗口显示属性,例如新建多个窗口、设置窗口大小、调整当前显示窗口和打开 odb 文件等。录制程序时会出现多行以session 开头的语句,但其中大部分记录的是我们调整视图的操作,例如转动或平移一下模型,编辑时可删除这些语句。获

22、取当前显示的窗口名称:viewportName=session.currentViewportName获取当前显示的窗口的 model 名称:viewportName=session.currentViewportNamemodelName=session.viewports viewportName.displayedObject.modelName新建一个窗口:session.Viewport(name=Viewport:2)2.4.2 mdb 对象mdb 对象是 ABAQUS 前处理中最为重要的一个对象,是一个顶层对象,下面包含着丰富的子对象和方法。表 2-1 mdb 对象信息成员类型构

23、造函数名称Mdb()openMdb()mdb.close()成员函数mdb.save()mdb.saveAs()mdb.Model()mdb.jobs()成员变量mdb.models()功能生成一个新的模型数据库新建一个 cae 文件,参数为 cae 文件完整路径关闭当前 cae 文件,并不保存保存当前 cae 文件另存为 cae 文件,参数为另存 cae 文件的完整路径生成一个 model,参数为 model 名当前模型创建的所有 job当前模型所有的 model11ABAQUSPython 语言二次开发教程每个 cae 文件包含一个或多个 Model,大部分前处理信息均包含在每个 Mode

24、l 下面,通过mdb.modelsmodelName可单独访问每个 Model 下的数据。通过每个 Model 可继续访问之下的part、material 和 rootAssembly 等。图 2.4 Model 下的部分对象Python在前处理中,可以用来建立复杂的三维模型,下面程序建立了一个三维函数曲面图,数学公式如式 2.1 所示,代码如下:z 3xex2y2;x,y 2.52.52.1#程序开始#-*-coding:utf-8-*-fromfrom abaqus importimport*fromfrom abaqusConstants importimport*fromfrom ca

25、eModules importimport*importimport mathpart1=mdb.models Model-1.Part(name=Part-1,dimensionality=THREE_D,type=DEFORMABLE_BODY)point_U=point_Utemp=NoneNonepoint_V=point_Vtemp=forfor i inin range(100,100):):point_V.append()()forfor i inin xrange(100,100):):point_U=forfor j inin xrange(100,100):):x=0.02

26、5*i y=0.025*j coord=(x,y,3*x*math.exp(x*2 y*2)point_U.append(coord)point_V j+100.append(coord)part1.WireSpline(points=point_U,mergeType=MERGE,meshable=ON,smoothClosedSpline=ON)12ABAQUSPython 语言二次开发教程forfor i inin point_V:part1.WireSpline(points=i,mergeType=MERGE,meshable=ON,smoothClosedSpline=ON)par

27、t2=mdb.models Model-1.Part(name=Part-2,dimensionality=THREE_D,type=DEFORMABLE_BODY)edges=forfor i inin point_V:part2.WireSpline(points=i,mergeType=MERGE,meshable=ON,smoothClosedSpline=ON)forfor i inin point_V:edges.append(part2.edges.findAt(i 0),),)part2.ShellLoft(loftsections=(=(edges),),startCondi

28、tion=NONE,endCondition=NONE)asm=mdb.models Model-1.rootAssemblyasm.Instance(name=Part-1-1,part=part1,dependent=ON)asm.Instance(name=Part-2-1,part=part2,dependent=ON)session.viewports Viewport:1.setValues(displayedObject=asm)该程序生成两个三维模型,如下图:图 2.5 线框模型图 2.6 曲面模型2.4.3 odb 对象odb 对象和 mdb 对象有很多的相似性,包含的对象和

29、访问方式也几近相同。下面代码可用于读取指定 odb 文件的最后分析步的最大应力并打印显示出来:defdef readMaxStress(myViewport,jobName):):path=os.getcwd()()o1=session.openOdb(name=path+jobName+.odb)myViewport.setValues(displayedObject=o1)myViewport.odbDisplay.setPrimaryVariable(variableLabel=S,outputPosition=INTEGRATION_POINT,refinement=(=(INVARI

30、ANT,Mises),),)myViewport.odbDisplay.display.setValues(plotState=(=(UNDEFORMED,)myViewport.odbDisplay.display.setValues(plotState=(=(CONTOURS_ON_DEF,)printprint myViewport.odbDisplay.contourOptions.autoMaxValue13ABAQUSPython 语言二次开发教程2.5 ABAQUS 完整二次开发例如该段程序实现了平板拉伸应力分析,完成了从建模、添加边界条件载荷、监控计算状态和应力自动读取完整分析

31、过程。#-*-coding:utf-8-*-fromfrom abaqus importimport*fromfrom abaqusConstants importimport*fromfrom caeModules importimport*importimport osimportimport _main_defdef PlateTensile(h,w,r,t,f):):#检测输入是否正确ifif r=h/2.0:printprint Error:Radius Heightreturnreturn FalseFalseifif r=w/2.0:printprint Error:Radius

32、 widthreturnreturn FalseFalseifif r=0 oror t=0 oror f=0:printprint ERROR!returnreturn FalseFalse#创建名为Model-1的模型对象 model=mdb.Model(name=Model-1)part=model.Part(name=Part-1,dimensionality=THREE_D,type=DEFORMABLE_BODY)asm=model.rootAssembly skt1=model.ConstrainedSketch(name=Skt1,sheetSize=200)skt1.rect

33、angle(point1=(=(w/2.0,h/2.0),),point2=(=(w/2.0,h/2.0)skt1.CircleByCenterPerimeter(center=(=(0,0),),point1=(=(r,0)part.BaseShell(sketch=skt1)session.viewports Viewport:1.setValues(displayedObject=part)model.Material(name=Material-1)model.materials Material-1.Elastic(table=(=(210000.0,0.3),),)model.Ho

34、mogeneousShellSection(name=Section-1,preIntegrate=OFF,material=Material-1,thicknessType=UNIFORM,thickness=t,thicknessField=,idealization=NO_IDEALIZATION,poissonDefinition=DEFAULT,thicknessModulus=NoneNone,temperature=GRADIENT,useDensity=OFF,integrationRule=SIMPSON,numIntPts=5)f1=part.faces region=re

35、gionToolset.Region(faces=f1)part.SectionAssignment(region=region,sectionName=Section-1,offset=0.0,offsetType=MIDDLE_SURFACE,offsetField=,thicknessAssignment=FROM_SECTION)asm.Instance(name=Part-1-1,part=part,dependent=ON)model.StaticStep(name=Step-1,previous=Initial)s1=asm.instances Part-1-1.edges ed

36、ges1=s1.findAt(w/2.0,0,0),),)edges2=s1.findAt(w/2.0,0,0),),)rp1=asm.ReferencePoint(point=(=(w/2.0,0,0)region1=regionToolset.Region(edges=edges1)region2=regionToolset.Region(referencePoints=(=(14ABAQUSPython 语言二次开发教程 asm.referencePoints rp1.id,),)#参考点和边进行耦合操作 model.Coupling(name=Constraint-1,controlP

37、oint=region2,surface=region1,influenceRadius=WHOLE_SURFACE,couplingType=KINEMATIC,localCsys=NoneNone,u1=ON,u2=ON,u3=ON,ur1=ON,ur2=ON,ur3=ON)model.ConcentratedForce(name=Load-1,createStepName=Step-1,region=region2,cf1=f,distributionType=UNIFORM,field=,localCsys=NoneNone)model.EncastreBC(name=BC-1,cre

38、ateStepName=Initial,region=regionToolset.Region(edges=edges2),),localCsys=NoneNone)part.setMeshControls(regions=f1,elemShape=QUAD)part.seedPart(size=(=(w+h)/)/200.0,deviationFactor=0.1,minSizeFactor=0.1)part.generateMesh()()jobName=Test-1 mdb.Job(name=jobName,model=Model-1,description=,type=ANALYSIS

39、,atTime=NoneNone,waitMinutes=0,waitHours=0,queue=NoneNone,memory=90,memoryUnits=PERCENTAGE,getMemoryFromAnalysis=TrueTrue,explicitPrecision=SINGLE,nodalOutputPrecision=SINGLE,echoPrint=OFF,modelPrint=OFF,contactPrint=OFF,historyPrint=OFF,userSubroutine=,scratch=,resultsFormat=ODB,multiprocessingMode

40、=DEFAULT,numCpus=1,numGPUs=0)fromfrom jobMessage importimport JOB_ABORTED,JOB_COMPLETED,JOB_SUBMITTED#读取最大应力值并打印defdef readMaxStress(userData):):path=os.getcwd()()o1=session.openOdb(name=path+jobName+.odb)userData.setValues(displayedObject=o1)userData.odbDisplay.setPrimaryVariable(variableLabel=S,ou

41、tputPosition=INTEGRATION_POINT,refinement=(=(INVARIANT,Mises),),)userData.odbDisplay.display.setValues(plotState=(=(UNDEFORMED,)userData.odbDisplay.display.setValues(plotState=(=(CONTOURS_ON_DEF,)printprint userData.odbDisplay.contourOptions.autoMaxValue myViewport=session.viewports Viewport:1 defde

42、f dealResult(jobName,messageType,data,userData):):ifif messageType=JOB_ABORTED:printprint ERROR!.center(100,-)ifif messageType=JOB_COMPLETED:printprint COMPLETED.center(100,-)readMaxStress(userData)monitorManager.removeMessageCallback(jobName=jobName,messageType=ANY_MESSAGE_TYPE,callback=dealResult,

43、userData=myViewport)#设置监控 job 是否计算完成 monitorManager.addMessageCallback(jobName=jobName,messageType=ANY_MESSAGE_TYPE,callback=dealResult,userData=myViewport)#提交 job 进行计算15ABAQUSPython 语言二次开发教程 mdb.jobs jobName.submit(consistencyChecking=OFF)ifif _name_=_main_:PlateTensile(50,100,10,1,100)2.6 ABAQUS 二

44、次开发常用函数2.6.1 Part 模块常用函数1).1).访问已有的访问已有的 PartPart 路径:路径:mdb.modelsmdb.modelsModelNameModelName.parts.partsPartNamePartName 2).2).创建一个新的创建一个新的 PartPart:mdb.modelsModelName.Partsname=PartName,dimensionality=dimensionality,type=partType 必须指定参数:name:为 Part 的名字;dimensionality:为 THREE_D、TWO_D_PLANAR或 AXIS

45、YMMETRIC.type:为DEFORMABLE_BODY、EULERIAN、DISCRETE_RIGID_SURFACE或ANALYTIC_RIGID_SURFACE;可选参数:twist:一个布尔值,只有在轴对称可变形体下才需指定,其默认值为OFF。3)3)从已有的从已有的 PartPart 中复制一个中复制一个 PartPart:mdb.modelsModelName.Part(name=PartName,objectToCopy=part)必须指定参数:name:指定复制后 Part 的名字;objectToCopy:指定一个已有的 Part 对象;可选参数scale:缩放因子,默认值为1;mirrorPlane:可能值为XYPLANE、XZPLANE 或 YZPLANE。也可指定一个镜像平面,如果指定平面,则参数 compressFeatureList将自动设置为 ON。其默认值为 NONE;compressFeatureList:如果设置为 ON,则会丧失原来的 Part 中的 datum 点和 set 集,默认值为 OFF;separate:是否别离不相连的 cell 进入多个 Part,默认值为 OFF。4)4)未完待续未完待续16

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com