学习了一段时间的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)javascript
改为
a.seedEdgeByNumber(edges=pickedEdges, number=meshNumber, constraint=FINER)javascript
反复调用时,可以不断修改孔边网格密度。
再出打开Abaqus/cae,运行录制好的宏,并提交作业,等计算完成后,不必保存直接关闭Abaqus/cae,工作目录下找到abaqus.rpy,修改后缀为.py直接打开,删除运行宏的代码后,把剩余代码,复制到’PlateHole-Op.py’中,在def PlateHole(meshNamber):之后。
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'%maxNodeljavascript
# -*- 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.modejavascript