python解放二次开发_[转载]Python二次开发程序详解
######################################
##?Fundamentschwingungsstudie?##
##?nur geeignet fuer ABAQUS
6.4-1?##
##?erstellt
von D.Chen in 2009?##
######################################
#開頭的為注釋行.
第一步, 建立建模環境, 這一步中py將從abaqus中導入建模所需的所有程序模塊.
from part import *
接下來定義草圖環境
mdb.models['Model-1'].Sketch(name='__profile__',
sheetSize=200.0)
mdb.models['Model-1'].sketches['__profile__'].sketchOptions.setValues(constructionGeometry=ON,
decimalPlaces=2, dimensionTextHeight=5.0, grid=ON,
gridFrequency=2, gridSpacing=5.0, sheetSize=200.0,
viewStyle=AXISYM)
上面的設定為大小200*200, 格柵間距為5, 文字標注高度為5.
mdb.models['Model-1'].sketches['__profile__'].ObliqueConstructionLine(point1=(0.0,
-100.0), point2=(0.0, 100.0))
本句語句設定軸對稱模型的對稱軸線位置
mdb.models['Model-1'].sketches['__profile__'].rectangle(point1=(0.0,
0.0),point2=(40.0, -40.0))
該語句繪制矩形, 從點0,0 至點40,-40
mdb.models['Model-1'].Part(dimensionality=AXISYMMETRIC,
name='Boden', type=DEFORMABLE_BODY)
定義模型為軸對稱, 名字為boden,為可變形體
mdb.models['Model-1'].parts['Boden'].BaseShell(sketch=mdb.models['Model-1'].sketches['__profile__'])
del mdb.models['Model-1'].sketches['__profile__']
繪圖完成不要忘記收回建模環境所占的內存
第二節, 材料定義
from material import *
from section import *
從ABAQUS提供的接口中導入材料庫和組件庫
mdb.models['Model-1'].Material(name='Boden')
定義材料名
mdb.models['Model-1'].materials['Boden'].Density(table=((2000.0, ),
))
定義材料密度
mdb.models['Model-1'].materials['Boden'].Elastic(table=((210546.3,
0.3333), ))
定義材料線彈性模量和泊松比, 其它的材料, 如彈塑性, 粘彈性材料均對應不同的對象函數.
mdb.models['Model-1'].HomogeneousSolidSection(material='Boden',
name='boden',thickness=1.0)
mdb.models['Model-1'].parts['Boden'].assignSection(region=Region(faces=mdb.models['Model-1'].parts['Boden'].faces[0:1]),
sectionName='boden')
設定組件為坐標無關性材料,厚度為單位厚度, 并將屬性附給所用的組件
第三節, 裝配
from assembly import *
首先, 導入裝配所用到的對象
mdb.models['Model-1'].rootAssembly.DatumCsysByThreePoints(coordSysType=CYLINDRICAL,
origin=(0.0, 0.0, 0.0), point1=(1.0, 0.0, 0.0), point2=(0.0,0.0,
-1.0))
定義坐標類型為柱坐標, 原點0,0,0,另外兩個為單位向量, 確定該坐標軸的方向.
mdb.models['Model-1'].rootAssembly.Instance(name='Boden-1',
part=mdb.models['Model-1'].parts['Boden'])
生成草圖對像boden的實體, 名字叫Boden-1. 無偏移插入
from part import *
from material import *
from section import *
from assembly import *
第四節, 定義分析步
from step import *
象其它步一樣, 先導入分析步要用到的模塊
mdb.models['Model-1'].ImplicitDynamicsStep(initialInc=0.005,
maxNumInc=1024,name='Step-1', noStop=OFF, nohaf=OFF,
previous='Initial',timeIncrementationMethod=FIXED,
timePeriod=5.12)
定義對動力隱式分析, 時長為0.005*1024=5.12個時間單位, 前一步為Initial
mdb.models['Model-1'].fieldOutputRequests['F-Output-1'].setValues(variables=('U',))
定義輸出到ODB文件的數據, 這里只定義了位移輸出
mdb.models['Model-1'].fieldOutputRequests['F-Output-1'].setValues(frequency=1)
定義位移輸出的頻率為每步都輸出
mdb.models['Model-1'].steps['Step-1'].Restart(frequency=1,
overlay=ON)
定義重啟動析, 每一步記錄, 只記錄最后一次的正確狀態
第五節, 定義接觸
from interaction import *
依然是先導入所用的模塊
mdb.models['Model-1'].rootAssembly.PartitionEdgeByParam(edges=(mdb.models['Model-1'].rootAssembly.instances['Boden-1'].edges[3],
), parameter=0.975)
在上部即第3面的97.5%的地方設定一個點, 用于定義接觸
mdb.models['Model-1'].ContactProperty('IntProp-1')
定義接觸屬性名
mdb.models['Model-1'].interactionProperties['IntProp-1'].TangentialBehavior(formulation=FRICTIONLESS)
mdb.models['Model-1'].interactionProperties['IntProp-1'].NormalBehavior(allowSeparation=OFF,
augmentedLagrange=OFF, pressureOverclosure=HARD)
定義接觸特性,為無摩擦硬接觸不允許分開
mdb.models['Model-1'].SurfaceToSurfaceContactStd(adjustMethod=NONE,
createStepName='Initial', interactionProperty='IntProp-1',
master=Region(
side1Edges=mdb.models['Model-1'].rootAssembly.instances['fun-1'].edges[0:1])
,
name='Int-1', slave=Region(
side1Edges=mdb.models['Model-1'].rootAssembly.instances['Boden-1'].edges[4:5])
,
sliding=FINITE)
這一句是建立接觸對, 分別為兩個面上的一條邊, 這里邊的定義由ABAQUS內定, 具體可以查閱參考手冊.
第六節, 荷載邊界定義
from load import *
mdb.models['Model-1'].PeriodicAmplitude(a_0=1.0, data=((3.0, 1.1),
(3.2, 1.7)), frequency=2.5, name='Fourier',start=0.0,
timeSpan=STEP)
定義fourier級數表示的荷載
mdb.models['Model-1'].Pressure(amplitude='Fourier',
createStepName='Step-1', distribution=UNIFORM, magnitude=50.0,
name='Load-1', region=Region(
side1Edges=mdb.models['Model-1'].rootAssembly.instances['fun-1'].edges[2:3]))
定義壓強, 設定加載的分析步,區域及放大系數
mdb.models['Model-1'].DisplacementBC(amplitude=UNSET,
createStepName='Initial',distribution=UNIFORM, localCsys=None,
name='BC-1', region=Region(
edges=mdb.models['Model-1'].rootAssembly.instances['Boden-1'].edges[0:1]+mdb.models['Model-1'].rootAssembly.instances['Boden-1'].edges[2:3]+mdb.models['Model-1'].rootAssembly.instances['fun-1'].edges[3:4]),
u1=SET,u2=UNSET, ur3=UNSET)
mdb.models['Model-1'].DisplacementBC(amplitude=UNSET,
createStepName='Initial', distribution=UNIFORM, localCsys=None,
name='BC-2', region=Region(
edges=mdb.models['Model-1'].rootAssembly.instances['Boden-1'].edges[1:2]),
u1=UNSET, u2=SET, ur3=UNSET)
設定邊界位移為0的邊界條件, 注意語法中對象相加的方法.
第七節, 網格劃分控制
from mesh import *
import mesh
導入網格劃分模塊
elemType1 = mesh.ElemType(elemCode=CAX8,
elemLibrary=STANDARD,secondOrderAccuracy=OFF,
hourglassControl=STIFFNESS, distortionControl=OFF)
elemType2 = mesh.ElemType(elemCode=CAX6M,
elemLibrary=STANDARD)
a1 = mdb.models['Model-1'].rootAssembly
f1 = a1.instances['Boden-1'].faces
faces1 = f1[0:1]
regions =(faces1, )
a1.setElementType(regions=regions, elemTypes=(elemType1,
elemType2))
定義其中一個物體的網格為二次8結點單元, 如果其中有無法劃分成四邊形單元的情況, 則用三角形二次6結點單元.
elemType1 = mesh.ElemType(elemCode=CAX4,
elemLibrary=STANDARD)
elemType2 = mesh.ElemType(elemCode=CAX3,
elemLibrary=STANDARD)
a1 = mdb.models['Model-1'].rootAssembly
f1 = a1.instances['fun-1'].faces
faces1 = f1[0:1]
regions =(faces1, )
a1.setElementType(regions=regions, elemTypes=(elemType1,
elemType2))
定義其中一個物體的網格為一次4結點單元,如果其中有無法劃分成四邊形單元的情況, 則用三角形一次3結點單元.
mdb.models['Model-1'].rootAssembly.seedPartInstance(regions=(mdb.models['Model-1'].rootAssembly.instances['fun-1'],
), size=0.5)
mdb.models['Model-1'].rootAssembly.seedPartInstance(regions=(mdb.models['Model-1'].rootAssembly.instances['Boden-1'],
), size=1)
定義網格劃分全局單元大小.
mdb.models['Model-1'].rootAssembly.generateMesh(regions=(mdb.models['Model-1'].rootAssembly.instances['Boden-1'],mdb.models['Model-1'].rootAssembly.instances['fun-1']))
按照定義劃分單元
# Save by CHEN on Thu Feb 19 15:16:26 2009
from part import *
from material import *
from section import *
from assembly import *
from step import *
from interaction import *
from load import *
from mesh import *
from job import *
第八節, 任務提交及雜項功能
mdb.models.changeKey(fromName='Model-1',
toName='Fall-Muster')
修改模型名稱
mdb.Model(name='Fall-015',
objectToCopy=mdb.models['Fall-Muster'])
拷貝模型
mdb.models['Fall-015'].materials['Boden'].elastic.setValues(table=((210546.3,
0.15),))
修改模型中的材料屬性
mdb.Job(contactPrint=OFF, description='', echoPrint=OFF,
explicitPrecision=
SINGLE,
historyPrint=OFF, model='Fall-015', modelPrint=OFF,
multiprocessingMode=THREADS, name='Job-015',
nodalOutputPrecision=SINGLE,
numCpus=1,
numDomains=1, parallelizationMethodExplicit=LOOP,
parallelizationMethodStandard=TREE, preMemory=1024.0,
scratch='',
standardMemory=2048.0, standardMemoryPolicy=MODERATE,
type=ANALYSIS,
userSubroutine='')
生成任務
mdb.saveAs(pathName='D:/temp/FundamentSchwingungStudie')
保存模型
mdb.jobs['Job-015'].submit()
提交任務
mdb.jobs['Job-015'].waitForCompletion()
關于如何在python中提交多個任務的問題:
如果您使用下面這樣的命令做的提交
mdb.jobs['Job-01'].submit()
mdb.jobs['Job-02'].submit()
mdb.jobs['Job-03'].submit()
你就會看到, 所有的任務是一次性提交的, 多個任務在一起運行, 這肯定不是你想看到的結果, 如何完成一個接著一個的提交呢,
其實很簡單, 在每個任務后面加上一句
mdb.jobs['Job-01'].waitForCompletion()
就可以了.
那么上面的語句就改為
mdb.jobs['Job-01'].submit()
mdb.jobs['Job-01'].waitForCompletion()
mdb.jobs['Job-02'].submit()
mdb.jobs['Job-02'].waitForCompletion()
mdb.jobs['Job-03'].submit()
mdb.jobs['Job-03'].waitForCompletion()
......
就一切OK了
總結
以上是生活随笔為你收集整理的python解放二次开发_[转载]Python二次开发程序详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国银行大额存单利率2018
- 下一篇: 谷歌将Tez改名为GooglePay 将