基于python的abaqus二次开发(基础入门)

基于python的abaqus二次开发(基础入门)_第1张图片关键点在于:三种输入到Python解释器,然后abaqus处理变为inp文件,继而交给求解器,求解器计算并产出。
1.三种输入本质都是python脚本:GUI是自动生成脚本,命令行(提示区下方)是输入脚本
2.abaqus内嵌了封装好的python解释器。封装了abaqus模块。
3.abaqus与求解器的关系类似于pycharm与python的关系。核心是求解器,abaqus只是用来输送求解器可以理解的文件(inp)和分析求解器产出的文件(odb)

4.很多的工作是为了生成inp文件。而不引用模块等标准化的操作,不会生成也不会影响之前生成的inp,所以可用命令行当计算器等(因为命令行会输入到python)
5.有些时候不是为了生成inp,只是为了操作abaqus界面。(前处理的最后一步)

基于python的abaqus二次开发(基础入门)_第2张图片
3个根对象;container代表可以存放多个

不同的命名空间完全独立,命名空分为脚本命名空间和日志命名空间。其中仅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开始。线经过剪切后就是新的线。标号也就是新的。
基于python的abaqus二次开发(基础入门)_第3张图片
如图:先画了矩形框,再画圆,再画直径线
基于python的abaqus二次开发(基础入门)_第4张图片
线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))
#旋转需要对称轴,对称轴也算标号,所以在修剪好后再创建

基于python的abaqus二次开发(基础入门)_第5张图片

你可能感兴趣的:(abaqus二次开发)