欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    ABAQUS二次开发教程.pdf

    • 资源ID:60849506       资源大小:1.22MB        全文页数:18页
    • 资源格式: PDF        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    ABAQUS二次开发教程.pdf

    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 模块.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 二次开发常用函数.162.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该段程序主要功能是实现乘法口诀表输出打印,其中“#-*-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=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 语言中的数组,但比 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.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,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键的键值printprint dict1.keys()()#打印所有键2ABAQUSPython 语言二次开发教程printprint dict1.values()()#打印所有的键值printprint dict1.items()()#打印所有键及其键值程序输出结果:Abaqussoftware,Data,authorAbaqus,2017,Fan Shengbao(software,Abaqus),(Data,2017),(author,FanShengbao)从打印的结果可以看出,字典的存储是无顺序的。获取字典键值需通过键来访问,键是唯一的,多个键可以对应相同的内容。1.5 Python 集合Python 中集合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&list2list1|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: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,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为替换次数,假设省略只替换一次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形式二ifif 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 为占位符,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,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 程序的简单例子:该段程序生成如下图的三维模型,并导入到装配模块中。#-*-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=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.BaseSolidExtrude(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 软件宏管理器10ABAQUSPython 语言二次开发教程点击 Create能够对 ABAQUS 软件的操作进行录制,生成 Python 代码并添加到宏管理器中,某些情况下需对程序进行一定的编辑才能重复出录制的操作,直接运行可能得不到与之前操作一样的结果或者程序直接报错。2.4 ABAQUS/Python 对象介绍2.4.1 session 对象session 模块主要用来控制窗口显示属性,例如新建多个窗口、设置窗口大小、调整当前显示窗口和打开 odb 文件等。录制程序时会出现多行以session 开头的语句,但其中大部分记录的是我们调整视图的操作,例如转动或平移一下模型,编辑时可删除这些语句。获取当前显示的窗口名称: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 对象信息成员类型构造函数名称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,大部分前处理信息均包含在每个 Model 下面,通过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 caeModules 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.025*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)part2=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),),startCondition=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 对象有很多的相似性,包含的对象和访问方式也几近相同。下面代码可用于读取指定 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=(=(INVARIANT,Mises),),)myViewport.odbDisplay.display.setValues(plotState=(=(UNDEFORMED,)myViewport.odbDisplay.display.setValues(plotState=(=(CONTOURS_ON_DEF,)printprint myViewport.odbDisplay.contourOptions.autoMaxValue13ABAQUSPython 语言二次开发教程2.5 ABAQUS 完整二次开发例如该段程序实现了平板拉伸应力分析,完成了从建模、添加边界条件载荷、监控计算状态和应力自动读取完整分析过程。#-*-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 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.rectangle(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.HomogeneousShellSection(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=regionToolset.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 edges1=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,controlPoint=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,createStepName=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,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=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,outputPosition=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 defdef 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,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 二次开发常用函数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或 AXISYMMETRIC.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

    注意事项

    本文(ABAQUS二次开发教程.pdf)为本站会员(赵**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开