基于python的abaqus⼆次开发(基础⼊门)致命诡计
关键点在于:三种输⼊到Python解释器,然后abaqus处理变为inp⽂件,继⽽交给求解器,求解器计算并产出。
1.三种输⼊本质都是python脚本:GUI是⾃动⽣成脚本,命令⾏(提⽰区下⽅)是输⼊脚本
2.abaqus内嵌了封装好的python解释器。封装了abaqus模块。
3.abaqus与求解器的关系类似于pycharm与python的关系。核⼼是求解器,abaqus只是⽤来输送求解器可以理解的⽂件(inp)和分析求解器产出的⽂件(odb)
4.很多的⼯作是为了⽣成inp⽂件。⽽不引⽤模块等标准化的操作,不会⽣成也不会影响之前⽣成的inp,所以可⽤命令⾏当计算器等(因为命令⾏会输⼊到python)
5.有些时候不是为了⽣成inp,只是为了操作abaqus界⾯。(前处理的最后⼀步)
3个根对象;container代表可以存放多个
不同的命名空间完全独⽴,命名空分为脚本命名空间和⽇志命名空间。其中仅GUI脚本在⽇志空间执⾏(换句话说,GUI操作⾃动⽣成rpy⽂件)
补充:⽇志空间⽣成的rpy⽂件⽆法直接被脚本空间识别,需要引⼊模块并修改变量名
创建脚本的⽅法:
1.宏程序
file->macro manager 宏程序,优点只截取想要的操作。
⽤run script调⽤时,宏程序代码中def是⽅法下的操作,应删除此⾏,并其他⾏顶格对齐
import __main__
def Macro1():
import ction
czechimport regionToolt
import displayGroupMdbToolt as dgm
import part
import material
import asmbly
outragedimport step
import interaction
2.借助abaqus.rpy⽂件
使⽤notepad+修改成脚本命名空间的语句
读取脚本
(很多没写)
file->run script读取脚本
写脚本的逻辑
怎么样快速美白补充:在命令⾏⾥写脚本不能回车换⾏,否则直接执⾏
from abaqus import*
#导⼊所有的abaqus模块,具体⽤到哪个在具体导⼊
from abaqusConstants import*
#导⼊常量模块,⽐如
1.关于调⽤、创建等
⼀般调⽤⽤⼩写且有s,创建⽤⼤写
#此处的THREE_D属于常量
#Part为利⽤构造函数创建了对象Part-1
#通过赋予给变量创造函数,可以⽤变量名直接调⽤。python⾥调⽤类的意思
#⽤命令⾏操作时,会在单个创建完后在命令⾏中上⾯这个,代表调⽤进了部件库中
#此处part为调⽤⾄部件库中
#当然也可以作为路径,做在这个part中的其他操作。如果不加[]则所有
问:如何理解['Model-1]这种结构呢?
答:可以当成是python中的字典,如‘Model-1’代表key,其value包含part等字典,接着调⽤其中的‘Part-1’的value,可以证明这⼀点的是改名操作。如
#更改key名
**关于抽象对象
firstaid问:何为抽象对象
答:pressure、concentrated force都属于load,load是抽象对象
昆山英语培训
step也是抽象对象。创建时应该⽤具体对象,⽽不是抽象对象
吊古战场文原文及翻译myModel.StaticStep(name='beamLoad', previous='Initial', timePeriod=1.0,
initialInc=0.1,description='Load the top of the beam.')
2.⼀些特别的点
1.tValues代表改变只读的属性
shellSection = dels['Model-1'].HomogeneousShellSection(name='Steel Shell', thickness=1, material='Steel') shellSection.tValues(thickness=2)
#改变了thickness
2.输⼊和修改数据
addNodes#添加节点
addElements#添加单元
3.增加场变量的输出数据
addData
4.复制功能
first = dels['Model-1'].Part(name='Part-1')
cond = dels['Model-1'].Part(name='Part-2', objectToCopy=first)
可结合抽象对象,⽐如被复制的对象使⽤HomogeneousSolidSection,复制对象可直接⽤Section构造
#objectToCopy为复制
5.删除
del mypart
6.tab键(在命令⾏中)
调⽤时tab键可以⾃动补全没写内容
7.视窗⾥指定显⽰对象
ssion.viewport['Viewport-1'].tValue(displayedObject=object1)
#在视窗Viewport-1中显⽰object1
#显⽰对象可以为part、asmbly、sketch、odb、xyplot或者None
☆☆创建需要按顺序,Model→Sketch→Part→拉伸→部件实例→⽹格
3.查询功能
vp = ssion.viewport['Viewport-1']
vp.__members__#查询对象
vp.__methods__#查询⽅法
4.关于region区域
1.区域region可以定义集合t、表⾯对象surface object等
2.可以⽤在Load、Mesh、Set等命令中
3.⽤findAt查找顶点vertex、边edge、⾯face、体cell是不错的⽅法
#前⾯sketch部分没写
door = myModel.Part(name='Door',
dimensionality=THREE_D,type=DEFORMABLE_BODY)
hujiang
door.BaSolidExtrude(sketch=mySketch, depth=20)#创造三维部件
myAsmbly = Asmbly#装配
doorInstance = myAsmbly.Instance(name='Door-1',part=door,
dependent=OFF)#⽣成部件实例
Vertices =doorINstance.vertices.findAt(((-40,30,0),),((40,0,0),))#选择两个顶点。((-40,30,0),)固定格式
myLoad = myModel.ConcentrateForce(
name='Force',createStepName='impact',
region=(Vertices,),cf1=12.50E4)
#对顶点施加集中⼒,region=((Vertices,⾯1+⾯2,边1+边2),)同⼀实例的相同属性部分可以以+相加
hei5.草图根据点绘制直线
mysketch = mymodel.ConstrainedSketch(name='Sketch A', sheetSize=200.)#创建图纸
#分为内外点
xyCoordsInner =((-5,20),(5,20),(15,0),(-15,0),(-5,20))#点,按可连接顺序写出,且⾸尾回环xyCoordsOuter =((-10,30),(10,30),(40,-30),(30,-30),(20,-10),(-20,-10),(-30,-30),(-40,-30),(-10,30)) #利⽤循环连接起点
for i range(len(xyCoordsInner)-1):
mysketch.Line(point1 = xyCoordsInner[i], point2=xyCoordsInner[i+1])
turbulence
for i range(len(xyCoordsOuter)-1):
mysketch.Line(point1 = xyCoordsOuter[i], point2=xyCoordsOuter[i+1])
6.草图⾥的裁剪
按绘图顺序标号,每条线为⼀个,也就是说矩形是四个,从左边线顺时针。
标号从2开始。线经过剪切后就是新的线。标号也就是新的。
如图:先画了矩形框,再画圆,再画直径线
线4被剪切后则为新线8
实例
#创建⾓点矩形框
mySketch.CircleByCenterPerimeter(center=(0.0,0.0), point1=(15.0,0.0)) #创建圆⼼-半径的圆
mySketch.Line(point1=(0.0,15.0), point2=(0.0,-15.0))
#直线
g = ry
#声明g
#起始标号到7,裁剪⽽未消失的线依次产⽣新标号
mySketch.autoTrimCurve(curve1=g[2], point1=(0,0))
mySketch.autoTrimCurve(curve1=g[4], point1=(10,0))
mySketch.autoTrimCurve(curve1=g[6], point1=(-15,0))
mySketch.autoTrimCurve(curve1=g[10], point1=(0,15))
mySketch.autoTrimCurve(curve1=g[5], point1=(0,0))
mySketch.ConstructionLine(point1=(0.0,-100.0), point2=(0.0,100.0))
#旋转需要对称轴,对称轴也算标号,所以在修剪好后再创建