Abaqus交互式參數(shù)化Python建模與計(jì)算
2017-03-29 by:CAE仿真在線 來(lái)源:互聯(lián)網(wǎng)
1 概述
Abaqus的腳本接口有幾種方式,前一次討論過(guò)利用Plug-in插件的方式,這次采用交互式,將操作者設(shè)置的參數(shù)反饋到Python腳本文件中,再通過(guò)Abaqus的內(nèi)核運(yùn)行,完成有限元分析過(guò)程。、
完成交互式參數(shù)化用到的主要函數(shù)是getInput()和getInputs(),也有提示信息的getWarningReply()。本次用到的模型例子如圖1。
圖1 模型
需要交互式參數(shù)化的參數(shù)是矩形的長(zhǎng)、寬、圓的半徑以及材料參數(shù)(彈性模量和泊松比)以及載荷大小。
2 模型交互輸入
w_=getInput('輸入矩形的長(zhǎng)度','40')
h_=getInput('輸入矩形的寬度','20')
r_=getInput('輸入圓的半徑','5')
ww=float(w_)
hh=float(h_)
rr=float(r_)
采用getInput()函數(shù),以字符串的形式獲取從界面輸入的參數(shù),再通過(guò)float函數(shù)將字符串變成數(shù)值數(shù)據(jù),這三條命令在Abaqus的命令窗口執(zhí)行結(jié)果如圖2,設(shè)置了默認(rèn)值,也可以直接輸入,輸入完之后點(diǎn)擊OK即出現(xiàn)下一個(gè)對(duì)話框。
圖2 交互式輸入幾何參數(shù)
建模部分完整的代碼如下,其中紅色標(biāo)記的是引用的交互式輸入的參數(shù)。
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('輸入矩形的長(zhǎng)度','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__']
執(zhí)行完之后即出現(xiàn)如圖1所示的幾何模型。
3 材料參數(shù)交互輸入
材料參數(shù)包括彈性模量和泊松比,采用getInputs()函數(shù),getInputs()函數(shù)允許在一個(gè)對(duì)話框顯式多個(gè)文本輸入框,而前面的getInput()函數(shù)則每次只有一個(gè)文本對(duì)話框。getInputs()和getInput()均返回字符串的數(shù)值。
Eu=getInputs((('輸入彈性模量:','201000'),('輸入泊松比:','0.3')))
EE=float(Eu[0])
uu=float(Eu[1])
Eu中有彈性模量和泊松比兩個(gè)量,采用Eu[0]和Eu[1]分別獲得兩個(gè)值(注意:Abaqus中都是從0開(kāi)始)
圖3 材料參數(shù)交互式輸入
材料設(shè)置完整代碼:
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_)
執(zhí)行對(duì)話框如圖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 執(zhí)行計(jì)算
當(dāng)所有代碼執(zhí)行完之后,即可進(jìn)行求解運(yùn)算,在求解時(shí)可以設(shè)置一個(gè)信息提示框,提示是否開(kāi)始計(jì)算,當(dāng)?shù)玫娇隙ê蟛砰_(kāi)始進(jìn)行計(jì)算。信息提示框采用getWarningReply()函數(shù)。
reply=getWarningReply(message='開(kāi)始計(jì)算?',buttons=(YES,NO))
if reply==YES:
mdb.jobs['Job-1'].submit(consistencyChecking=OFF)
else:
print '請(qǐng)檢查'
設(shè)置一個(gè)信息提示框,提示是否開(kāi)始計(jì)算?
當(dāng)?shù)玫娇隙ù饛?fù)后執(zhí)行計(jì)算,否則輸出信息“請(qǐng)檢查”。
信息提示框如圖5所示。
圖5 信息提示框
轉(zhuǎn)自博客 長(zhǎng)安CAE
相關(guān)標(biāo)簽搜索:Abaqus交互式參數(shù)化Python建模與計(jì)算 abaqus分析培訓(xùn) abaqus技術(shù)教程 abaqus巖土分析 鋼筋混凝土仿真 abaqus分析理論 abaqus軟件下載 abaqus umat用戶子程序編程 Abaqus代做 Abaqus基礎(chǔ)知識(shí) Fluent、CFX流體分析 HFSS電磁分析 Ansys培訓(xùn)