Abaqus交互式参数化Python建模与计算

2017-03-29  by:CAE仿真在线  来源:互联网



1 概述

Abaqus的脚本接口有几种方式,前一次讨论过利用Plug-in插件的方式,这次采用交互式,将操作者设置的参数反馈到Python脚本文件中,再通过Abaqus的内核运行,完成有限元分析过程。、

完成交互式参数化用到的主要函数是getInput()getInputs(),也有提示信息的getWarningReply()。本次用到的模型例子如图1


1 模型

需要交互式参数化的参数是矩形的长、宽、圆的半径以及材料参数(弹性模量和泊松比)以及载荷大小。

2 模型交互输入

w_=getInput('输入矩形的长度','40')

h_=getInput('输入矩形的宽度','20')

r_=getInput('输入圆的半径','5')

ww=float(w_)

hh=float(h_)

rr=float(r_)

采用getInput()函数,以字符串的形式获取从界面输入的参数,再通过float函数将字符串变成数值数据,这三条命令在Abaqus的命令窗口执行结果如图2,设置了默认值,也可以直接输入,输入完之后点击OK即出现下一个对话框。


2 交互式输入几何参数

建模部分完整的代码如下,其中红色标记的是引用的交互式输入的参数。

from abaqus import *

from abaqusConstants import *

session.Viewport(name='Viewport: 1', origin=(0.0, 0.0), width=359.549987792969,

height=234.613327026367)

session.viewports['Viewport: 1'].makeCurrent()

session.viewports['Viewport: 1'].maximize()

from caeModules import *

from driverUtils import executeOnCaeStartup

executeOnCaeStartup()

session.viewports['Viewport: 1'].partDisplay.geometryOptions.setValues(

referenceRepresentation=ON)

Mdb()

#: A new model database has been created.

#: The model "Model-1" has been created.

w_=getInput('输入矩形的长度','40')

h_=getInput('输入矩形的宽度','20')

r_=getInput('输入圆的半径','5')

ww=float(w_)

hh=float(h_)

rr=float(r_)

session.viewports['Viewport: 1'].setValues(displayedObject=None)

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=(-ww/2, -hh/2), point2=(ww/2, hh/2))

s.CircleByCenterPerimeter(center=(0.0, 0.0), point1=(rr, 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__']

执行完之后即出现如图1所示的几何模型。

3 材料参数交互输入

材料参数包括弹性模量和泊松比,采用getInputs()函数,getInputs()函数允许在一个对话框显式多个文本输入框,而前面的getInput()函数则每次只有一个文本对话框。getInputs()getInput()均返回字符串的数值。

Eu=getInputs((('输入弹性模量:','201000'),('输入泊松比:','0.3')))

EE=float(Eu[0])

uu=float(Eu[1])

Eu中有弹性模量和泊松比两个量,采用Eu[0]Eu[1]分别获得两个值(注意:Abaqus中都是从0开始)


3 材料参数交互式输入

材料设置完整代码:

Eu=getInputs((('输入弹性模量:','201000'),('输入泊松比:','0.3')))

EE=float(Eu[0])

uu=float(Eu[1])

mdb.models['Model-1'].Material(name='Material-1')

mdb.models['Model-1'].materials['Material-1'].Elastic(table=((EE, uu),

))

mdb.models['Model-1'].HomogeneousSolidSection(name='Section-1',

material='Material-1', thickness=1.0)

p = mdb.models['Model-1'].parts['Part-1']

f = p.faces

faces = f.getSequenceFromMask(mask=('[#f ]', ), )

region = p.Set(faces=faces, name='Set-1')

p = mdb.models['Model-1'].parts['Part-1']

p.SectionAssignment(region=region, sectionName='Section-1', offset=0.0,

offsetType=MIDDLE_SURFACE, offsetField='',

thicknessAssignment=FROM_SECTION)

4 载荷交互输入

p_=getInput('输入压力大小','10')

pp=float(p_)

执行对话框如图4


4 载荷交互式输入

完整代码如下:

p_=getInput('输入压力大小','10')

pp=float(p_)

a = mdb.models['Model-1'].rootAssembly

s1 = a.instances['Part-1-1'].edges

side1Edges1 = s1.getSequenceFromMask(mask=('[#1002 ]', ), )

region = a.Surface(side1Edges=side1Edges1, name='Surf-1')

mdb.models['Model-1'].Pressure(name='Load-1', createStepName='Step-1',

region=region, distributionType=UNIFORM, field='', magnitude=-pp,

amplitude=UNSET)

a = mdb.models['Model-1'].rootAssembly

e1 = a.instances['Part-1-1'].edges

edges1 = e1.getSequenceFromMask(mask=('[#2100 ]', ), )

region = a.Set(edges=edges1, name='Set-1')

mdb.models['Model-1'].DisplacementBC(name='BC-1', createStepName='Step-1',

region=region, u1=0.0, u2=0.0, ur3=UNSET, amplitude=UNSET, fixed=OFF,

distributionType=UNIFORM, fieldName='', localCsys=None)

mdb.models['Model-1'].boundaryConditions['BC-1'].move('Step-1', 'Initial')

5 执行计算

当所有代码执行完之后,即可进行求解运算,在求解时可以设置一个信息提示框,提示是否开始计算,当得到肯定后才开始进行计算。信息提示框采用getWarningReply()函数。

reply=getWarningReply(message='开始计算?',buttons=(YES,NO))

if reply==YES:

mdb.jobs['Job-1'].submit(consistencyChecking=OFF)

else:

print '请检查'

设置一个信息提示框,提示是否开始计算?

当得到肯定答复后执行计算,否则输出信息“请检查”。

信息提示框如图5所示。


5 信息提示框

转自博客 长安CAE


开放分享:优质有限元技术文章,助你自学成才

相关标签搜索:Abaqus交互式参数化Python建模与计算 abaqus分析培训 abaqus技术教程 abaqus岩土分析 钢筋混凝土仿真 abaqus分析理论 abaqus软件下载 abaqus umat用户子程序编程 Abaqus代做 Abaqus基础知识 Fluent、CFX流体分析 HFSS电磁分析 Ansys培训 

编辑
在线报名:
  • 客服在线请直接联系我们的客服,您也可以通过下面的方式进行在线报名,我们会及时给您回复电话,谢谢!
验证码

全国服务热线

1358-032-9919

广州公司:
广州市环市中路306号金鹰大厦3800
电话:13580329919
          135-8032-9919
培训QQ咨询:点击咨询 点击咨询
项目QQ咨询:点击咨询
email:kf@1cae.com