Abaqus python 实例 您所在的位置:网站首页 abaqus Abaqus python 实例

Abaqus python 实例

2022-09-10 22:27| 来源: 网络整理| 查看: 265

Abaqus python 实例--个人练习 题目一:第一步,录制宏,建立模型第二步,提交作业第三步,提取最大Mises应力完整代码以及运算结果 题目二:第一步,利用numpy.random生成N个的小球的坐标第二步,打开Abaqus/Cae,创建2个Part,并在装配中完成切割第三步,代码

学习了一段时间的Abaqus的python脚本,给自己出两道题练习一下。先说一下,学习资料,主要是学习的是曹金凤老师的《Python语言在Abaqus中的应用》,如果有一定基础,需要更多实例练习可以参考江丙云老师的《ABAQUS Python二次开发攻略》。

题目一:

带孔方板拉伸,逐渐加密孔边网格,孔边最大Mises应力,会相应变化,当最大Mises应力变化不大时,输出相应网格密度(孔边的种子个数)。

第一步,录制宏,建立模型

启动ABAQUS/CAE,[File]–>[Macro Manage]–>creat–>continue

操作CAE截面,Create Part–> 2D Planar–>continue

为了分割网格时方便,切分部件

创建材料–>截面–>赋给部件–>装配–>静态分析步–>位移约束和位移加载

设置种子,为分割网格准备

关闭CAE,不要保持,在工作目录下,找到abaqusMacros.py,复制并重命名为’PlateHole-Op.py’

打开’PlateHole-Op.py’,将第7行(在附近找就行,版本不同,行号可能不同)的def Macro1():改为·def PlateHole(meshNumber):,meshNumber为孔边网格的种子数。将第120行附近的

pickedEdges = e1.getSequenceFromMask(mask=('[#3102 ]', ), ) a.seedEdgeByNumber(edges=pickedEdges, number=2, constraint=FINER) elemType1 = mesh.ElemType(elemCode=CPS4R, elemLibrary=STANDARD, secondOrderAccuracy=OFF, hourglassControl=DEFAULT, distortionControl=DEFAULT)

改为

a.seedEdgeByNumber(edges=pickedEdges, number=meshNumber, constraint=FINER)

反复调用时,可以不断修改孔边网格密度。

第二步,提交作业

再出打开Abaqus/cae,运行录制好的宏,并提交作业,等计算完成后,不必保存直接关闭Abaqus/cae,工作目录下找到abaqus.rpy,修改后缀为.py直接打开,删除运行宏的代码后,把剩余代码,复制到’PlateHole-Op.py’中,在def PlateHole(meshNamber):之后。

第三步,提取最大Mises应力 odb=session.openOdb(jobName+'.odb') frame1=odb.steps['Step-1'].frames[-1] stress1=frame1.fieldOutputs['S'] maxValue=0 for stressValue in stress1.values: if (stressValue.mises > maxValue): maxValue=stressValue.mises maxNodel=stressValue.elementLabel print'meshNumber:%d'%meshNumber print 'maxValue:%f'%maxValue print 'maxNodel:%d'%maxNodel 完整代码以及运算结果 # -*- coding: mbcs -*- # # Abaqus/CAE Release 2020 replay file # Internal Version: 2019_09_14-01.49.31 163176 # Run by DELL on Fri Feb 26 17:34:05 2021 # # from driverUtils import executeOnCaeGraphicsStartup # executeOnCaeGraphicsStartup() #: Executing "onCaeGraphicsStartup()" in the site directory ... from abaqus import * from abaqusConstants import * from caeModules import * from driverUtils import executeOnCaeStartup import odbAccess import visualization # 创建模型 def PlateHole(meshNumber): import section import regionToolset import displayGroupMdbToolset as dgm import part import material import assembly import step import interaction import load import mesh import optimization import job import sketch import visualization import xyPlot import displayGroupOdbToolset as dgo import connectorBehavior s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=200.0) g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints s.setPrimaryObject(option=STANDALONE) s.rectangle(point1=(-80.0, 30.0), point2=(80.0, -30.0)) s.CircleByCenterPerimeter(center=(0.0, 0.0), point1=(5.0, 0.0)) p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=TWO_D_PLANAR, type=DEFORMABLE_BODY) p = mdb.models['Model-1'].parts['Part-1'] p.BaseShell(sketch=s) s.unsetPrimaryObject() p = mdb.models['Model-1'].parts['Part-1'] session.viewports['Viewport: 1'].setValues(displayedObject=p) del mdb.models['Model-1'].sketches['__profile__'] p = mdb.models['Model-1'].parts['Part-1'] f = p.faces pickedFaces = f.getSequenceFromMask(mask=('[#1 ]', ), ) v1, e, d1 = p.vertices, p.edges, p.datums p.PartitionFaceByShortestPath(faces=pickedFaces, point1=p.InterestingPoint( edge=e[2], rule=MIDDLE), point2=p.InterestingPoint(edge=e[4], rule=MIDDLE)) p = mdb.models['Model-1'].parts['Part-1'] f = p.faces pickedFaces = f.getSequenceFromMask(mask=('[#3 ]', ), ) v2, e1, d2 = p.vertices, p.edges, p.datums p.PartitionFaceByShortestPath(faces=pickedFaces, point1=p.InterestingPoint( edge=e1[2], rule=MIDDLE), point2=p.InterestingPoint(edge=e1[8], rule=MIDDLE)) session.viewports['Viewport: 1'].partDisplay.setValues(sectionAssignments=ON, engineeringFeatures=ON) session.viewports['Viewport: 1'].partDisplay.geometryOptions.setValues( referenceRepresentation=OFF) mdb.models['Model-1'].Material(name='steel') mdb.models['Model-1'].materials['steel'].Elastic(table=((210000.0, 0.3), )) mdb.models['Model-1'].materials['steel'].Plastic(table=((800.0, 0.0), (1000.0, 0.02), (1200.0, 0.08), (1400.0, 0.2))) mdb.models['Model-1'].HomogeneousSolidSection(name='Section-steel', material='steel', thickness=None) p = mdb.models['Model-1'].parts['Part-1'] f = p.faces faces = f.getSequenceFromMask(mask=('[#f ]', ), ) region = p.Set(faces=faces, name='Set-1') p = mdb.models['Model-1'].parts['Part-1'] p.SectionAssignment(region=region, sectionName='Section-steel', offset=0.0, offsetType=MIDDLE_SURFACE, offsetField='', thicknessAssignment=FROM_SECTION) a = mdb.models['Model-1'].rootAssembly session.viewports['Viewport: 1'].setValues(displayedObject=a) session.viewports['Viewport: 1'].assemblyDisplay.setValues( optimizationTasks=OFF, geometricRestrictions=OFF, stopConditions=OFF) a = mdb.models['Model-1'].rootAssembly a.DatumCsysByDefault(CARTESIAN) p = mdb.models['Model-1'].parts['Part-1'] a.Instance(name='Part-1-1', part=p, dependent=OFF) session.viewports['Viewport: 1'].assemblyDisplay.setValues( adaptiveMeshConstraints=ON) mdb.models['Model-1'].StaticStep(name='Step-1', previous='Initial', initialInc=0.1) session.viewports['Viewport: 1'].assemblyDisplay.setValues(step='Step-1') session.viewports['Viewport: 1'].assemblyDisplay.setValues(loads=ON, bcs=ON, predefinedFields=ON, connectors=ON, adaptiveMeshConstraints=OFF) a = mdb.models['Model-1'].rootAssembly e1 = a.instances['Part-1-1'].edges edges1 = e1.getSequenceFromMask(mask=('[#4400 ]', ), ) region = a.Set(edges=edges1, name='Set-1') mdb.models['Model-1'].DisplacementBC(name='BC-1', createStepName='Step-1', region=region, u1=0.0, u2=0.0, ur3=0.0, amplitude=UNSET, fixed=OFF, distributionType=UNIFORM, fieldName='', localCsys=None) a = mdb.models['Model-1'].rootAssembly e1 = a.instances['Part-1-1'].edges edges1 = e1.getSequenceFromMask(mask=('[#88 ]', ), ) region = a.Set(edges=edges1, name='Set-2') mdb.models['Model-1'].DisplacementBC(name='BC-2', createStepName='Step-1', region=region, u1=2.0, u2=0.0, ur3=0.0, amplitude=UNSET, fixed=OFF, distributionType=UNIFORM, fieldName='', localCsys=None) mdb.models['Model-1'].boundaryConditions['BC-1'].move('Step-1', 'Initial') session.viewports['Viewport: 1'].assemblyDisplay.setValues(mesh=ON, loads=OFF, bcs=OFF, predefinedFields=OFF, connectors=OFF) session.viewports['Viewport: 1'].assemblyDisplay.meshOptions.setValues( meshTechnique=ON) a = mdb.models['Model-1'].rootAssembly partInstances =(a.instances['Part-1-1'], ) a.seedPartInstance(regions=partInstances, size=5.0, deviationFactor=0.1, minSizeFactor=0.1) a = mdb.models['Model-1'].rootAssembly e1 = a.instances['Part-1-1'].edges pickedEdges = e1.getSequenceFromMask(mask=('[#3102 ]', ), ) a.seedEdgeByNumber(edges=pickedEdges, number=meshNumber, constraint=FINER) elemType1 = mesh.ElemType(elemCode=CPS4R, elemLibrary=STANDARD, secondOrderAccuracy=OFF, hourglassControl=DEFAULT, distortionControl=DEFAULT) elemType2 = mesh.ElemType(elemCode=CPS3, elemLibrary=STANDARD) a = mdb.models['Model-1'].rootAssembly f1 = a.instances['Part-1-1'].faces faces1 = f1.getSequenceFromMask(mask=('[#f ]', ), ) pickedRegions =(faces1, ) a.setElementType(regions=pickedRegions, elemTypes=(elemType1, elemType2)) a = mdb.models['Model-1'].rootAssembly partInstances =(a.instances['Part-1-1'], ) a.generateMesh(regions=partInstances) executeOnCaeStartup() minMises=0 i=3 while 1: meshNumber=i PlateHole(meshNumber) jobName='Job_PlateHole'+str(meshNumber) mdb.Job(name=jobName, model='Model-1', description='', type=ANALYSIS, atTime=None, waitMinutes=0, waitHours=0, queue=None, memory=90, memoryUnits=PERCENTAGE, getMemoryFromAnalysis=True, explicitPrecision=SINGLE, nodalOutputPrecision=SINGLE, echoPrint=OFF, modelPrint=OFF, contactPrint=OFF, historyPrint=OFF, userSubroutine='', scratch='', resultsFormat=ODB, multiprocessingMode=DEFAULT, numCpus=8, numDomains=8, numGPUs=0) mdb.jobs[jobName].submit(consistencyChecking=OFF) mdb.jobs[jobName].waitForCompletion() # 提取最大Mises odb=session.openOdb(jobName+'.odb') frame1=odb.steps['Step-1'].frames[-1] stress1=frame1.fieldOutputs['S'] maxValue=0 for stressValue in stress1.values: if (stressValue.mises > maxValue): maxValue=stressValue.mises maxNodel=stressValue.elementLabel print'meshNumber:%d'%meshNumber print 'maxValue:%f'%maxValue print 'maxNodel:%d'%maxNodel if abs(maxValue-minMises)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有