找回密码
 注册
Simdroid-非首页
查看: 179|回复: 1

[二次开发] Abaqus求解轧制过程的Abaqus.rpy文件(Python语句)优化及注释

[复制链接]
发表于 2017-11-10 00:16:08 | 显示全部楼层 |阅读模式 来自 江苏无锡
首先说明该实例仅是为了说明Abaqus中Python语句的含义,不用纠结其是否为一个有意义的工程问题



# -*- coding: UTF-8 -*-
#文件采用UTF-8格式存储,支持中文
from abaqus import *
from abaqusConstants import *
#导入符号常数模块,例如:符号常数QUAD表示四边形
from caeModules import *
#导入Abaqus/CAE所有模块,包括X-Y工件模块
from odbAccess import *
#导入后处理模块,此时Odb对象、方法和成员都可用
Mdb()
#新建空白模型数据库,打开Abaqus/CAE相当于新建Model-1
myModel=mdb.Model(name='zhazhi', modelType=STANDARD_EXPLICIT) #大写字母开头的为构造函数,用于创造对象
#创建zhazhi模型


###创建plate部件(可变形体)
mySketch1 = myModel.ConstrainedSketch(name='__profile__',sheetSize=200.0)
#新建zhazhi部件进入草图绘制截面,草图Approximate size=200
mySketch1.rectangle(point1=(-35.0, 18.75), point2=(21.25, -17.5))
#绘制矩形,两点分别为point1=(-35.0, 18.75), point2=(21.25, -17.5)
myPart1 = myModel.Part(name='plate', dimensionality=THREE_D, type=DEFORMABLE_BODY)
myPart1.BaseSolidExtrude(sketch=mySketch1, depth=20.0)  #注:此处sketch=mySketch1
#以拉伸方式创建三维可变性体部件,拉伸深度为20,草图为mySketch
del mySketch1
#删除草图


###创建roller部件(解析刚体)
mySketch2 = myModel.ConstrainedSketch(name='__profile__', sheetSize=200.0)
mySketch2.ArcByCenterEnds(center=(0.0, 0.0), point1=(12.5, -3.75), point2=(-7.5, 15.0), direction=COUNTERCLOCKWISE)
#绘制圆弧
myPart2 = myModel.Part(name='roller', dimensionality=THREE_D, type=ANALYTIC_RIGID_SURFACE)
myPart2.AnalyticRigidSurfExtrude(sketch=mySketch2, depth=200.0)
del mySketch2
point1=(-5.836309,11.672618,100)
myPart2.ReferencePoint(point=point1)  #注某一个点直接给坐标就行
#选中(-5.836309,11.672618,100)作为刚体部件的参考点


###Property模块
myProperty=myModel.Material(name='Steel')
#创建Steel材料
myProperty.Density(table=((7.9e-09, ), ))
myProperty.Elastic(table=((210000.0, 0.3), ))
myProperty.Plastic(table=((210.0, 0.0), (500.0,0.5)))
#创建材料的密度、弹性和塑性属性
mySection=myModel.HomogeneousSolidSection(name='steel-section',material='Steel', thickness=None)
#创建截面属性
region = regionToolset.Region(cells=myPart1.cells) #注:myPart1.cells部件的三维实体
#将部件plate的实体cells赋值给region
myPart1.SectionAssignment(region=region, sectionName='steel-section', offset=0.0, offsetType=MIDDLE_SURFACE, offsetField='', thicknessAssignment=FROM_SECTION)
#将截面属性赋值给部件plate


###Assembly模块
myRootAssembly = myModel.rootAssembly
myRootAssembly.DatumCsysByDefault(CARTESIAN)
#设置装配坐标系为笛卡尔坐标系CARTESIAN
myInstance1=myRootAssembly.Instance(name='plate-1', part=myPart1, dependent=ON)
#将部件1实例化,模式为Dependent
myInstance2=myRootAssembly.Instance(name='roller-1', part=myPart2, dependent=ON)
myInstance2.translate(vector=(28.9749782136138, 0.0, 0.0))
#移动实例2,移动向量为vector=(28.9749782136138, 0.0, 0.0)
myFace1=myInstance1.faces.findAt(((-35.,-17.5,20), (21.25,18.75,20)))
#查找palte-1实例中某个面
mySurface1=myRootAssembly.Surface(side1Faces=myFace1, name='plate-surf')
#在部件中定义plate-surf面
myFace2=myInstance2.faces
#将myInstance2在所有面(只有一个面)赋值给myFace2
mySurface2=myRootAssembly.Surface(side2Faces=myFace2, name='roller-surf')
#在部件中定义roller-surf面,此面方向为side2Faces(刚体面才有该选项1、2分别对应刚体面对的Brown和Yellow,实体面全为side1Faces)


###Step模块
myStep1=myModel.StaticStep(name='pressing', previous='Initial', timePeriod=1.1,maxNumInc=1000, initialInc=0.001, minInc=1e-10, maxInc=0.1, nlgeom=ON)
#创建pressing分析步,静隐,该分析步之前分析步为Initial,时间总量1.1,最大增量步1000步,初始增量大小0.001,最小增量大小1e-10,最大增量大小0.1,非线性开关ON
myStep2=myModel.StaticStep(name='relase', previous='pressing',maxNumInc=1000, initialInc=0.001, minInc=1e-10, maxInc=0.1)
myStep1.control.setValues(allowPropagation=OFF, resetDefaultValues=OFF, timeIncrementation=(4.0, 8.0, 9.0, 16.0, 10.0, 4.0, 12.0, 10.0, 6.0, 3.0, 50.0))
#将第一个分析步的不连续迭代的次数由5次改成10次
myModel.AdaptiveMeshControl(name='Ada-1', smoothingAlgorithm=GEOMETRY_ENHANCED)
#创建网格重划分的规则Ada-1,smoothingAlgorithm=GEOMETRY_ENHANCED
cells1=myInstance1.cells
region=regionToolset.Region(cells=cells1)
#plate-1实例的三维实体定义域region集合
myStep1.AdaptiveMeshDomain(region=region, controls='Ada-1')
#定义网格重划分范围为region,规则为Ada-1
myStep2.AdaptiveMeshDomain(region=region, controls='Ada-1')
myModel.fieldOutputRequests['F-Output-1'].setValues(numIntervals=20)
#修改场变量输出为输出20等份
myModel.historyOutputRequests['H-Output-1'].setValues(numIntervals=20)
#修改历史变量输出为输出20等份


###Interaction模块
myContactProperty=myModel.ContactProperty('f0')
#创建接触属性f0
myModel.interactionProperties['f0'].TangentialBehavior(formulation=PENALTY, directionality=ISOTROPIC, slipRateDependency=OFF, pressureDependency=OFF, temperatureDependency=OFF, dependencies=0, table=((0.1, ), ), shearStressLimit=None, maximumElasticSlip=FRACTION, fraction=0.005, elasticSlipStiffness=None)
myModel.interactionProperties['f0'].NormalBehavior(pressureOverclosure=HARD, allowSeparation=ON,constraintEnforcementMethod=DEFAULT)
#f0接触属性为法向硬接触,切向罚函数,惩罚因子为0.1

myModel.SurfaceToSurfaceContactStd(name='Int-1',createStepName='Initial', master=mySurface2, slave=mySurface1, sliding=FINITE,thickness=ON, interactionProperty='f0', adjustMethod=OVERCLOSED,initialClearance=OMIT, datumAxis=None, clearanceRegion=None, tied=OFF)
#创建面-面接触,主面mySurface2, 从面mySurface1,adjustMethod=OVERCLOSED(移动从属节点直至消除过盈),接触出属性f0


###Load模块
myFace3=myInstance1.faces.findAt(((-35.,18.75,0), (-35.,-17.5,20)))
region1 = regionToolset.Region(faces=myFace3)
myModel.XsymmBC(name='BC-1', createStepName='Initial',region=region1, localCsys=None)
#找到面关于x轴对称约束
myTabularAmplitude=myModel.TabularAmplitude(name='Amp-1', timeSpan=STEP, smooth=SOLVER_DEFAULT, data=((0.0, 0.0), (0.5, 0.1), (1.0, 1.0)))
#创建幅值曲线Amp-1,时间范围为增量步
myFace4=myInstance1.faces.findAt(((21.25,18.75,20), (-35.,-17.5,20)))
region1 = regionToolset.Region(faces=myFace4)
myModel.DisplacementBC(name='BC-2', createStepName='pressing', region=region1, u1=1.0, u2=UNSET, u3=UNSET, ur1=UNSET, ur2=UNSET, ur3=UNSET, amplitude='Amp-1', fixed=OFF, distributionType=UNIFORM, fieldName='', localCsys=None)
#u1方向位移1.0,幅值曲线Amp-1,分析步pressing


###Mesh模块
myPart1.seedPart(size=2.0, deviationFactor=0.1, minSizeFactor=0.1)
#给部件myPart1布置全局种子,大小为2
myPart1.setMeshControls(regions=myPart1.cells, technique=SWEEP, algorithm=ADVANCING_FRONT)
#myPart1.cells区域的网格生产方式为扫掠,algorithm=ADVANCING_FRONT
elemType1 = mesh.ElemType(elemCode=C3D8, elemLibrary=STANDARD,secondOrderAccuracy=OFF, distortionControl=DEFAULT)
elemType2 = mesh.ElemType(elemCode=C3D6, elemLibrary=STANDARD)
elemType3 = mesh.ElemType(elemCode=C3D4, elemLibrary=STANDARD)
myPart1.setElementType(regions=(myPart1.cells,), elemTypes=(elemType1, elemType2,elemType3))
#赋予单元种类 #注赋予单元类型的regions为Array,因此regions=(myPart1.cells,)。而赋予网格生产类型的regions=myPart1.cells
myPart1.generateMesh()
#生成全局网格


###Job模块
mdb.Job(name='j1-d', model='zhazhi', description='', type=ANALYSIS, atTime=None, waitMinutes=0, waitHours=0, queue=None, memory=80, memoryUnits=PERCENTAGE, getMemoryFromAnalysis=True, explicitPrecision=SINGLE, nodalOutputPrecision=SINGLE, echoPrint=OFF, modelPrint=OFF, contactPrint=OFF, historyPrint=OFF, userSubroutine='', scratch='', resultsFormat=ODB, multiprocessingMode=DEFAULT, numCpus=3, numDomains=3, numGPUs=0)
#创建Job,名称为j1-d,模型为zhazhi,内存为90%,核心数为3

myRootAssembly.regenerate()
myViewport=session.viewports['Viewport: 1'].setValues(displayedObject=myRootAssembly)
#显示Job模块


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-3-29 22:56 , Processed in 0.028665 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表