下载

3下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 Abaqus python入门体会(simwe-flin55)

Abaqus python入门体会(simwe-flin55).pdf

Abaqus python入门体会(simwe-flin55)

abaqus
2010-03-31 0人阅读 举报 0 0 暂无简介

简介:本文档为《Abaqus python入门体会(simwe-flin55)pdf》,可适用于人文社科领域

Abaquspython入门体会(初稿)长安大学姜峰林flincom#===========================================================自己的论文要用到有限元进行数值模拟分析以前都用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更是一知半解绝大多数地方根本都不清楚抽空写一点认识体会主要是给像自己一样刚学习AbqusPython的朋友能少走一些弯路节约一些时间。同时希望大家批评指正、共同讨论、补充。#学习AbaqusPython基础:Abaqus的cae建模有比较全面的认识了解一些Python语法知识(大家都不会有太多时间单独学习Python语言本身只需要有概念了解即可不懂的地方可以随时查询Pythonscript手册)AbaqusPython学会使用不太难可要精通应用还是要付出一定的劳动。大家所分析的课题专业不同方向也千差万别所用到的Abaqus的功能也就有很大的差别能对自己的工作领域熟练应用就算成功。Abaqus毕竟只是软件如何考虑专业知识成功建模才是最困难的。#Python与AbaqusAbaqusPython结构模型参数分析技巧几个命令的体会一个AbaqusPython例子##===========================================================Python与AbaqusPython简介Python是面向对象的语言。面向对象的语言自己的理解为:语言本身已经定义了许多固定模块如数学函数、对显示模式的控制、一些对话框的编写等等程序模块只需要按照程序的指定格式填空即可完成既定任务格式相对比较固定因此语言格式看起来非常繁琐但方便实用能够大量节约程序员的时间。面向对象语言的使用方式可以比喻为:一棵树分为树干、树枝、细枝和树叶等部分你要是想得到一个确定位置的树叶(且具大小等属性)只有一个路径可以走即树干-树枝-细枝-树叶换成面向对象的格式为树干树枝细枝树叶(树叶片数或大小等属性)。以下是abaqus中Python的一般格式这些格式都是固定的我们只需要改变其中的参数即可:mdbmodels'Model'ConstrainedSketch(name='profile',sheetSize=)s=mdbmodels'Model'ConstrainedSketch(name='profile',sheetSize=)ssketchOptionssetValues(decimalPlaces=,viewStyle=AXISYM)ssetPrimaryObject(option=STANDALONE)sConstructionLine(point=(,),point=(,))Python有着较强的逻辑控制语句如if、for、while等可以通过循环或条件等语句把复杂且重复的操作变得简单易于操作也是用参数化编程较cae的最大优势。如何学abaqusPython命令Abaqus是采用Python语言编制而成在cae中所有的操作都可以通过Python脚本命令完成(注:好像Python并不能完全取代inp文件一些材料属性的参数好像要用inp才能赋值)。☆学会用pythonreader程序Abaquscae可以自动生成python文件存放在工作目录的abaqusrpy文件中每一步cae操作都会产生相应的python命令。可以通过simwe网友ckck编写的pythonreader程序实时读取产生的命令反复揣摩、领会每个命令很快就会有所提高对python的命令有所领悟。与cae建模相同Python建模也分为:part、property、assembly、step、ineraction、load、mesh、job等模块具体每个模块中的建模命令可参考Pythonreader读取的命令学习我们只需去记忆常用的Python命令。以下是pythonreader程序下载地址。http:forumsimwecomviewthreadphptid=highlight=Pythonhttp:groupsgooglecomgroupckgoooglemailfiles☆通过修改abaqusrpy建立自己的脚本文件是一条捷径AbaqusPython学习资料关于Python的学习资料非常多如Swaroop,CH著沈洁元译的《简明Python教程》就是很好的参考资料。王纯业的《Python学习笔记》也不错simwe论坛可以下载到。另外就是Abaqus手册:AbaqusScriptingUser'sManualAbaqusScriptingReferenceManualGettingStartedwithAbaqus:InteractiveEditionAbaqus手册真是冗长只能是根据自己的课题有选择的查阅。#===========================================================AbaqusPython结构Abaqus的objectmodel分为session、mdb和odb三个objectssession为视图模块、mdb为模型数据模块、odb为数据输入输出模块。每个object下面又有很多命令分支直到执行到所需要的具体命令。以下各图选自AbaqusScriptingUser'sManual更多书面的的解释可以参考abaqus手册。每个object都像一棵树要执行某个命令就需要按照python的面向对象的格式进行。例如:cell=mdbmodels'block'parts'crankcase'cells要把part模块中编号为的体赋值给cell就需通过路径mdb→models→part→cells(号体属性)其中'block'、'crankcase'、分别是model和part的名字。在草图Sketch中画线:s=mdbmodels'block'ConstrainedSketch(name='grid',sheetSize=)sLine(point=(,),point=(,))sLine(point=(,),point=(,))执行任何一条命令都必须按照结构树的格式进行操作。我们所看到的python脚本繁杂的语句就是这样形成的。这样大量的命令不能在短时间内掌握我们只需要根据自己的需要边建立模型边学习就可以了。a=mdbmodels'Model'rootAssemblys=ainstances'Mount'edgessideEdges=sfindAt(((,,),))以上三行与下面的句子是等同的即把findat找到的edges赋值给sideEdges。分开来写简单明了大大缩短了语句的长度。sideEdges=mdbmodels'Model'rootAssemblyinstances'Mount'edgesfindAt(((,,),))aSurface(sideEdges=sideEdges,name='Bottom')这行语句设置sideEdges所对应的edge为名称'Bottom'的surface的set。#===========================================================模型参数分析技巧Python脚本建模的好处就是可以进行参数分析即改变我们要分析模型的几何尺寸、材料属性等可变参数对数值模型进行求解计算从而对所分析的对象有更全面的了解。.对自己要进行参数分析的参数赋值:如几何尺寸或材料属性等a=b=c=命名要符合python规则。cae与Python混合建模不会的命令就利用cae自动生成用Pythonreader记录命令然后进行修改可以弥补不熟悉Python的缺点逐句修改Python脚本可以去掉一些不必要的语句并在cae中逐句进行验证。#===========================================================几个命令的体会Set()Set命令在python建模时要经常用到对实体、surface、element等分组方便加载、施加约束和单元生死等控制Findat()对cell、edge、face、vertice进行查找括号中参数为实体坐标p=mdbmodels'Model'parts'Mount'f=pfacesfaces=ffindAt(((,,),))pickedRegions=(faces,)psetElementType(regions=pickedRegions,elemTypes=(elemType,elemType))Len()利用len命令可以实现对单元选取p=mdbmodels'precastculvert'parts'soil'e=pelementslen(e)n=len(e)elements=e:n#单元数存放在e的一维数组里pSet(elements=elements,name='Set')对单元进行编组set可以进行生死单元的控制我摸索了好久才想到这个办法目前只在二维模型应用过三维也应该没问题。Abaqus没有办法对单元编号进行编号控制也没有像ansys那样有效的选择命令怎样选择abaqus的单元就是很头疼的问题我要做路堤的分层回填模拟手动选取单元根本就没有可能。Abaqus的编号其实是有规则的后划分的单元编号最小先划分的单元编号最大这样我们就可以每次划分单元后都采用len命令计算一次单元数量并用参数记录下来这样我们就能计算出每部分单元的数量以及他的起始和终止编号。根据elements=e:n、pSet(elements=elements,name='Set')语句就可以把每部分单元设置成set以后操作就很方便了。#===========================================================一个AbaqusPython例子下面是一个GettingStartedwithAbaqus:InteractiveEdition中的一个橡胶避震垫例子:☺号后语句表示我的注释注释上面的句子。我也不懂的就没有注释先熟悉一下Python的样子。在学习的时候可以copy(CrtolV)到cae下面的命令行中一句句的执行并在cae视窗中查看命令执行情况领会命令使用方法。#Scriptforrubbermountexample☺“#”开头表示这一行为注释行同ansys的“!”号fromabaqusimport*fromabaqusConstantsimport*☺引入abaqus中的一些模块这些模块是abaqus已事先存储在文件中要引入才这些模块能运行相应的命令sessionviewports'Viewport:'makeCurrent()sessionviewports'Viewport:'maximize()sessionjournalOptionssetValues(replayGeometry=COORDINATE,recoverGeometry=COORDINATE)☺对cae视窗的操作命令maximize()的括号好像是默认为当前值fromcaeModulesimport*fromdriverUtilsimportexecuteOnCaeStartupexecuteOnCaeStartup()Mdb()###Sketchprofileofthemount☺进入草图模块s=mdbmodels'Model'ConstrainedSketch(name='profile',sheetSize=)☺建立一个sketch草图草图的尺寸为个单位这个句子算是一个标准的Python语句具体后面解释g,v,d,c=sgeometry,svertices,sdimensions,sconstraintsssketchOptionssetValues(decimalPlaces=,viewStyle=AXISYM)ssetPrimaryObject(option=STANDALONE)☺设置草图为轴对称模式sConstructionLine(point=(,),point=(,))sFixedConstraint(entity=g)☺建立辅助线及约束mdbmodels'Model'sketches'profile'sketchOptionssetValues(gridFrequency=)☺sketch参数修改srectangle(point=(,),point=(,))☺画矩形sDistanceDimension(entity=g,entity=v,textPoint=(,),value=)sVerticalDimension(vertex=v,vertex=v,textPoint=(,),value=)sObliqueDimension(vertex=v,vertex=v,textPoint=(,),value=)☺标注图形尺寸还可以修改图形尺寸如拉伸、压缩等sCircleByCenterPerimeter(center=(,),point=(,))☺画圆sCoincidentConstraint(entity=v,entity=g)sDistanceDimension(entity=g,entity=v,textPoint=(,),value=)sVerticalDimension(vertex=v,vertex=v,textPoint=(,),value=)sObliqueDimension(vertex=v,vertex=v,textPoint=(,),value=)☺修改圆尺寸、移动位置―――没搞清楚修改尺寸命令有什么实际意义直接定义好尺寸不就结了?sautoTrimCurve(curve=g,point=(,))☺裁剪命令其中g是圆的线编号g=sgeometrysautoTrimCurve(curve=g,point=(,))sautoTrimCurve(curve=g,point=(,))☺裁剪命令sRadialDimension(curve=g,textPoint=(,),radius=)dsetValues(reference=ON)☺标注命令标注界面很漂亮sessionviewports'Viewport:'viewfitView()☺cae图形缩放的合适大小p=mdbmodels'Model'Part(name='Mount',dimensionality=AXISYMMETRIC,type=DEFORMABLEBODY)p=mdbmodels'Model'parts'Mount'☺命名modelpBaseShell(sketch=s)sunsetPrimaryObject()sessionviewports'Viewport:'setValues(displayedObject=p)delmdbmodels'Model'sketches'profile'☺显示model###Creatematerial'Rubber'☺创建材料模型mdbmodels'Model'Material('Rubber')mdbmodels'Model'materials'Rubber'Hyperelastic(type=POLYNOMIAL,table=())mdbmodels'Model'materials'Rubber'hyperelasticUniaxialTestData(table=((E,),(E,),(E,),(E,),(E,),(E,),(E,),(E,)))mdbmodels'Model'materials'Rubber'hyperelasticBiaxialTestData(table=((E,),(E,),(E,),(E,),(E,),(E,)))mdbmodels'Model'materials'Rubber'hyperelasticPlanarTestData(table=((E,),(E,),(E,),(E,),(E,)))####Creatematerial'Steel'##mdbmodels'Model'Material('Steel')mdbmodels'Model'materials'Steel'Elastic(table=((E,),))####Createsolidsectionsfortherubberandsteel##mdbmodels'Model'HomogeneousSolidSection(name='RubberSection',material='Rubber',thickness=)mdbmodels'Model'HomogeneousSolidSection(name='SteelSection',material='Steel',thickness=)###Partitionthepartintotworegions(rubberandsteelregions)☺切割体形成两个部分从而可以赋予不同材料属性f,e,d=pfaces,pedges,pdatumst=pMakeSketchTransform(sketchPlane=ffindAt(coordinates=(,,),normal=(,,)),sketchPlaneSide=SIDE,origin=(,,))s=mdbmodels'Model'ConstrainedSketch(name='profile',sheetSize=,gridSpacing=,transform=t)g,v,d,c=sgeometry,svertices,sdimensions,sconstraintsssketchOptionssetValues(decimalPlaces=)ssetPrimaryObject(option=SUPERIMPOSE)pprojectReferencesOntoSketch(sketch=s,filter=COPLANAREDGES)☺进入草图并设置草图属性(图纸大小、网格间距等)sLine(point=(,),point=(,))sHorizontalConstraint(entity=gfindAt((,)))sPerpendicularConstraint(entity=gfindAt((,)),entity=gfindAt((,)))☺作辅助线findat(查找)命令很有用可以用来选择实体pickedFaces=ffindAt(((,,),))pPartitionFaceBySketch(faces=pickedFaces,sketch=s)☺用辅助线分割体sunsetPrimaryObject()☺显示分割后体delmdbmodels'Model'sketches'profile'###Assignrubbersection☺实体指定不同的材料属性p=mdbmodels'Model'parts'Mount'f=pfacesfaces=ffindAt(((,,),))region=regionToolsetRegion(faces=faces)pSectionAssignment(region=region,sectionName='RubberSection',offset=)####Assignsteelsection##faces=ffindAt(((,,),))region=regionToolsetRegion(faces=faces)pSectionAssignment(region=region,sectionName='SteelSection',offset=)a=mdbmodels'Model'rootAssemblysessionviewports'Viewport:'setValues(displayedObject=a)####Setcoordinatesystem(donebydefault)##aDatumCsysByDefault(CARTESIAN)####Instancethemount##p=mdbmodels'Model'parts'Mount'aInstance(name='Mount',part=p,dependent=ON)####Creategeometryset'Middle'##e=ainstances'Mount'edgesedges=efindAt(((,,),))aSet(edges=edges,name='Middle')☺通过findat命令定义了一个edges组“Middle”##Creategeometryset'Out'##v=ainstances'Mount'verticesverts=vfindAt(((,,),))aSet(vertices=verts,name='Out')☺通过findat命令定义了一个vertices组“Out”##Createsurface'Bottom'##s=ainstances'Mount'edgessideEdges=sfindAt(((,,),))aSurface(sideEdges=sideEdges,name='Bottom')☺通过findat命令定义了一个edges组“Bottom”###Createastaticgeneralstep☺进入step模块mdbmodels'Model'StaticStep(name='Compressmount',previous='Initial',description='Applyaxialpressureloadtomount',timePeriod=,adiabatic=OFF,maxNumInc=,stabilization=None,timeIncrementationMethod=AUTOMATIC,initialInc=,minInc=e,maxInc=,matrixSolver=SOLVERDEFAULT,amplitude=RAMP,extrapolation=LINEAR,fullyPlastic="",nlgeom=ON)☺step中的一些设置与cae操作框相对应sessionviewports'Viewport:'assemblyDisplaysetValues(step='Compressmount')☺cae中显示step模块Compressmount####Modifyoutputrequests##mdbmodels'Model'fieldOutputRequests'FOutput'setValues(variables=('S','PE','PEEQ','PEMAG','NE','LE','U','RF','CF','CSTRESS','CDISP'))☺对结果数据输出的一些定义regionDef=asets'Out'mdbmodels'Model'HistoryOutputRequest(name='HOutput',createStepName='Compressmount',variables=('U','U','U'),region=regionDef)sessionviewports'Viewport:'assemblyDisplaysetValues(loads=ON,bcs=ON,predefinedFields=ON)###Applypressureload☺进入load模块region=asurfaces'Bottom'mdbmodels'Model'Pressure(name='Pressure',createStepName='Compressmount',region=region,magnitude=)☺通过bottom的set对底边进行加载##Applysymmetrybctoset"Middle'##region=asets'Middle'mdbmodels'Model'DisplacementBC(name='Symmetry',createStepName='Compressmount',region=region,u=)☺对顶面进行约束##Suppressvisibilityofdatumgeometry##sessionviewports'Viewport:'assemblyDisplaygeometryOptionssetValues(geometryEdgesInShaded=OFF,datumPoints=OFF,datumAxes=OFF,datumPlanes=OFF,datumCoordSystems=OFF)sessionviewports'Viewport:'assemblyDisplaysetValues(mesh=ON,loads=OFF,bcs=OFF,predefinedFields=OFF)sessionviewports'Viewport:'assemblyDisplaymeshOptionssetValues(meshTechnique=ON)p=mdbmodels'Model'parts'Mount'sessionviewports'Viewport:'setValues(displayedObject=p)☺mesh模块的一些显示设置###Assignedgeseeds☺进入mesh模块p=mdbmodels'Model'parts'Mount'e=pedgespickedEdges=efindAt(((,,),),((,,),),((,,),))pseedEdgeByNumber(edges=pickedEdges,number=)pickedEdges=efindAt(((,,),),((,,),))pseedEdgeByNumber(edges=pickedEdges,number=)pickedEdges=efindAt(((,,),),((,,),))pseedEdgeByNumber(edges=pickedEdges,number=)☺选择边设置种子数##Usestructuredmeshing##f=pfacespickedRegions=fpsetMeshControls(regions=pickedRegions,technique=STRUCTURED)☺STRUCTURED划分网格##Assignelementtypetotherubber##elemType=meshElemType(elemCode=CAXH,elemLibrary=STANDARD)elemType=meshElemType(elemCode=CAX,elemLibrary=STANDARD)faces=ffindAt(((,,),))pickedRegions=(faces,)psetElementType(regions=pickedRegions,elemTypes=(elemType,elemType))##Assignelementtypetothesteel##elemType=meshElemType(elemCode=CAXI,elemLibrary=STANDARD)elemType=meshElemType(elemCode=CAX,elemLibrary=STANDARD)faces=ffindAt(((,,),))pickedRegions=(faces,)psetElementType(regions=pickedRegions,elemTypes=(elemType,elemType))☺单元类型设置及不同材料面指定##Generatemesh##pgenerateMesh()☺划分当前网格sessionviewports'Viewport:'assemblyDisplaysetValues(mesh=OFF)sessionviewports'Viewport:'assemblyDisplaymeshOptionssetValues(meshTechnique=OFF)###Createjob☺创建job设置mdbJob(name='Mount',model='Model',description='Axisymmetricmountanalysisunderaxialloading',modelPrint=ON)a=mdbmodels'Model'rootAssemblyaregenerate()####Savemodeldatabase##mdbsaveAs('Mount')#小结:Abaqus的python看似繁琐但有着其固定、严谨的结构并不难理解pthon的顺序与cae的模块操作顺序基本一致这个例子的python脚本基本与cae自动生成的python脚本基本相同完全可以通过交互式修改cae生成的pythonrpy文件来建立自己的python脚本免去了许多学习abaquspython命令格式的痛苦。#===========================================================以上写的内容感觉没有成章法很乱!我也正在学习Python建模以后慢慢修订希望写个比较系统的东西出来。希望大家多提意见!谢谢!

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/15

Abaqus python入门体会(simwe-flin55)

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利