关键点在于:三种输入到Python解释器,然后abaqus处理变为inp文件,继而交给求解器,求解器计算并产出。
1.三种输入本质都是python脚本:GUI是自动生成脚本,命令行(提示区下方)是输入脚本
2.abaqus内嵌了封装好的python解释器。封装了abaqus模块。
3.abaqus与求解器的关系类似于pycharm与python的关系。核心是求解器,abaqus只是用来输送求解器可以理解的文件(inp)和分析求解器产出的文件(odb)
4.很多的工作是为了生成inp文件。而不引用模块等标准化的操作,不会生成也不会影响之前生成的inp,所以可用命令行当计算器等(因为命令行会输入到python)
5.有些时候不是为了生成inp,只是为了操作abaqus界面。(前处理的最后一步)
不同的命名空间完全独立,命名空分为脚本命名空间和日志命名空间。其中仅GUI脚本在日志空间执行(换句话说,GUI操作自动生成rpy文件)
补充:日志空间生成的rpy文件无法直接被脚本空间识别,需要引入模块并修改变量名
1.宏程序
file->macro manager 宏程序,优点只截取想要的操作。
用run script调用时,宏程序代码中def是方法下的操作,应删除此行,并其他行顶格对齐
import __main__
def Macro1():
import section
import regionToolset
import displayGroupMdbToolset as dgm
import part
import material
import assembly
import step
import interaction
2.借助abaqus.rpy文件
使用notepad+修改成脚本命名空间的语句
(很多没写)
file->run script读取脚本
补充:在命令行里写脚本不能回车换行,否则直接执行
from abaqus import *
#导入所有的abaqus模块,具体用到哪个在具体导入
from abaqusConstants import *
#导入常量模块,比如
1.关于调用、创建等
一般调用用小写且有s,创建用大写
mdb.models['Model-1'].Part(name='Part-1', dimensionality=THREE_D, type=DEFORMABLE_BODY)
#此处的THREE_D属于常量
#Part为利用构造函数创建了对象Part-1
#通过赋予给变量创造函数,可以用变量名直接调用。python里调用类的意思
mdb.models['Model-1'].parts['Part-1']
#用命令行操作时,会在单个创建完后在命令行中上面这个,代表调用进了部件库中
#此处part为调用至部件库中
#当然也可以作为路径,做在这个part中的其他操作。如果不加[]则所有
问:如何理解['Model-1]这种结构呢?
答:可以当成是python中的字典,如‘Model-1’代表key,其value包含part等字典,接着调用其中的‘Part-1’的value,可以证明这一点的是改名操作。
如
mdb.models['Model-1'].Part(name='Part-1')
mdb.models['Model-1'].parts['Part-1].changeKey(fromName='Part-1', toName='22')
#更改key名
**关于抽象对象
问:何为抽象对象
答: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.setValues代表改变只读的属性
shellSection = mdb.models['Model-1'].HomogeneousShellSection(name='Steel Shell', thickness=1, material='Steel')
shellSection.setValues(thickness=2)
#改变了thickness
2.输入和修改数据
addNodes#添加节点
addElements#添加单元
3.增加场变量的输出数据
addData
4.复制功能
first = mdb.models['Model-1'].Part(name='Part-1')
second = mdb.models['Model-1'].Part(name='Part-2', objectToCopy=first)
可结合抽象对象,比如被复制的对象使用HomogeneousSolidSection,复制对象可直接用Section构造
#objectToCopy为复制
5.删除
del mypart
6.tab键(在命令行中)
调用时tab键可以自动补全没写内容
7.视窗里指定显示对象
session.viewport['Viewport-1'].setValue(displayedObject=object1)
#在视窗Viewport-1中显示object1
#显示对象可以为part、assembly、sketch、odb、xyplot或者None
☆☆创建需要按顺序,Model→Sketch→Part→拉伸→部件实例→网格
3.查询功能
vp = session.viewport['Viewport-1']
vp.__members__#查询对象
vp.__methods__#查询方法
4.关于region区域
1.区域region可以定义集合set、表面对象surface object等
2.可以用在Load、Mesh、Set等命令中
3.用findAt查找顶点vertex、边edge、面face、体cell是不错的方法
#前面sketch部分没写
door = myModel.Part(name='Door',
dimensionality=THREE_D, type=DEFORMABLE_BODY)
door.BaseSolidExtrude(sketch=mySketch, depth=20)#创造三维部件
myAssembly = myModel.rootAssembly#装配
doorInstance = myAssembly.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),)同一实例的相同属性部分可以以+相加
5.草图根据点绘制直线
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])
for i range(len(xyCoordsOuter)-1):
mysketch.Line(point1 = xyCoordsOuter[i], point2=xyCoordsOuter[i+1])
6.草图里的裁剪
按绘图顺序标号,每条线为一个,也就是说矩形是四个,从左边线顺时针。
标号从2开始。线经过剪切后就是新的线。标号也就是新的。
如图:先画了矩形框,再画圆,再画直径线
线4被剪切后则为新线8
实例
mySketch.rectangle(point1=(0.0, 0.0), point2=(10.0, 100.0))
#创建角点矩形框
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 = mySketch.geometry
#声明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))
#旋转需要对称轴,对称轴也算标号,所以在修剪好后再创建