python结合aba
python结合aba
原帖:仿真科技论坛
作者:wufan3924
1、直观,易于保存,重复利用。
在各种设备上查看(因为只是一些文本)
,注释方便,可以很容易的知道里面有什么(当然,这个需
2、方便修改参数。
还可以写一个循环,循环该参数的所有可能的值,提交多个多个任务(job)
。
3、重复结构或分析的快速建模。
现了,只要你找到了这些结构之间的关系。
其他的,还有诸如后处理,插件和界面构建等。下面通过一个简单的例子来说明一下第三条,重
复结构或分析的快速建模,用好了会大大节约自己的时间,做更多有意义的事情。
#-*- coding: utf8 -*-
# 导入必要的模块
Mdb()
# job 名称
Job_name = "Job-motor-flat-spring-1"
# 不同层的张角
theta =
[-67.1564,-67.1564,-69.44076,-71.72512,-74.00948,-76.29384,-78.5782,-80.86256,-83.14692,-85.43128]
theta1= [22.8436, 22.8436, 20.55924, 18.27488, 15.99052, 13.70616, 11.4218,9.13744,
6.85308, 4.56872]
# 不同层的拱高
# 材料参数
Youngs = 207000.0
poisson = 0.3
# 创建材料和截面
mat1 = mdb.models['Model-1'].Material(name='Material-1')
mat1.Elastic(table=((Youngs, poisson), ))
mdb.models['Model-1'].HomogeneousShellSection(name='Section-1',
preIntegrate=OFF, material='Material-1', thicknessType=UNIFORM,
thickness=8.0, thicknessField='', idealization=NO_IDEALIZATION,
poissonDefinition=DEFAULT, thicknessModulus=None, temperature=GRADIENT,
useDensity=OFF, integrationRule=SIMPSON, numIntPts=5)
a = mdb.models['Model-1'].rootAssembly
a.DatumCsysByDefault(CARTESIAN)
# 创建一般静态分析步
# 第一个分析步是为了收敛而设置的接触分析步
mdb.models['Model-1'].StaticStep(name='Step-1', previous='Initial',
initialInc=0.1, maxInc=0.1, nlgeom=ON)
# 第二个分析步是载荷作用的分析步
mdb.models['Model-1'].StaticStep(name='Step-2', previous='Step-1',
initialInc=0.1, maxInc=0.1, nlgeom=ON)
# 创建接触属性
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(
pressureOverclosure=HARD, allowSeparation=ON,
constraintEnforcementMethod=DEFAULT)
for i in range(0,len(R)):
ss = theta1[i]/180*np.pi
s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=4000.0)
g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints
p = mdb.models['Model-1'].Part(name='Part-%d'%(i+1), dimensionality=THREE_D,
type=DEFORMABLE_BODY)
p = mdb.models['Model-1'].parts['Part-%d'%(i+1)]
p.BaseShellExtrude(sketch=s, depth=75.0)
del mdb.models['Model-1'].sketches['__profile__']
p = mdb.models['Model-1'].parts['Part-%d'%(i+1)]
f = p.faces
faces = f.getSequenceFromMask(mask=('[#1 ]', ), )
region = p.Set(faces=faces, name='Set-1')
p.SectionAssignment(region=region, sectionName='Section-1', offset=0.0,
offsetType=BOTTOM_SURFACE, offsetField='', thicknessAssignment=FROM_SECTION)
p = mdb.models['Model-1'].parts['Part-%d'%(i+1)]
f = p.faces
faces = f.getSequenceFromMask(mask=('[#1 ]', ), )
region = regionToolset.Region(faces=faces)
mdb.models['Model-1'].parts['Part-%d'%(i+1)].MaterialOrientation(region=region,
orientationType=GLOBAL, axis=AXIS_1, additionalRotationType=ROTATION_NONE,
localCsys=None, fieldName='')
a = mdb.models['Model-1'].rootAssembly
p = mdb.models['Model-1'].parts['Part-%d'%(i+1)]
a.Instance(name='Part-%d-1'%(i+1), part=p, dependent=ON)
p = mdb.models['Model-1'].parts['Part-%d'%(i+1)]
p.seedPart(size=5.0, deviationFactor=0.1, minSizeFactor=0.1)
p.generateMesh()
# 利用循环创建各个拱之间的接触
for i in range(0,len(R)):
if i<9:
a = mdb.models['Model-1'].rootAssembly
s1 = a.instances['Part-%d-1'%(i+1)].faces
side1Faces1 = s1.getSequenceFromMask(mask=('[#1 ]', ), )
region1=a.Surface(side1Faces=side1Faces1, name='m_Surf-%d'%(i+1))
a = mdb.models['Model-1'].rootAssembly
s1 = a.instances['Part-%d-1'%(i+2)].faces
side2Faces1 = s1.getSequenceFromMask(mask=('[#1 ]', ), )
region2=a.Surface(side2Faces=side2Faces1, name='s_Surf-%d'%(i+1))
mdb.models['Model-1'].SurfaceToSurfaceContactStd(name='Int-%d'%(i+1),
createStepName='Step-1', master=region1, slave=region2, sliding=FINITE,
thickness=ON, interactionProperty='IntProp-1', adjustMethod=NONE,
initialClearance=OMIT, datumAxis=None, clearanceRegion=None)
# 施加对称边界条件
a = mdb.models['Model-1'].rootAssembly
e1 = a.instances['Part-1-1'].edges
edges1 = e1.getSequenceFromMask(mask=('[#2 ]', ), )
e2 = a.instances['Part-2-1'].edges
edges2 = e2.getSequenceFromMask(mask=('[#2 ]', ), )
e3 = a.instances['Part-3-1'].edges
edges3 = e3.getSequenceFromMask(mask=('[#2 ]', ), )
e4 = a.instances['Part-4-1'].edges
edges4 = e4.getSequenceFromMask(mask=('[#2 ]', ), )
e5 = a.instances['Part-5-1'].edges
edges5 = e5.getSequenceFromMask(mask=('[#2 ]', ), )
e6 = a.instances['Part-6-1'].edges
edges6 = e6.getSequenceFromMask(mask=('[#2 ]', ), )
e7 = a.instances['Part-7-1'].edges
edges7 = e7.getSequenceFromMask(mask=('[#2 ]', ), )
e8 = a.instances['Part-8-1'].edges
edges8 = e8.getSequenceFromMask(mask=('[#2 ]', ), )
e9 = a.instances['Part-9-1'].edges
edges9 = e9.getSequenceFromMask(mask=('[#2 ]', ), )
e10 = a.instances['Part-10-1'].edges
edges10 = e10.getSequenceFromMask(mask=('[#2 ]', ), )
region = a.Set(edges=edges1+edges2+edges3+edges4+edges5+edges6+edges7+edges8+\
edges9+edges10, name='Set-1')
mdb.models['Model-1'].XsymmBC(name='BC-1', createStepName='Step-1',
region=region, localCsys=None)
# 创建载荷
a = mdb.models['Model-1'].rootAssembly
e1 = a.instances['Part-1-1'].edges
edges1 = e1.getSequenceFromMask(mask=('[#8 ]', ), )
region = a.Set(edges=edges1, name='Set-2')
mdb.models['Model-1'].EncastreBC(name='BC-2', createStepName='Step-1',
region=region, localCsys=None)
a = mdb.models['Model-1'].rootAssembly
s1 = a.instances['Part-10-1'].edges
side1Edges1 = s1.getSequenceFromMask(mask=('[#2 ]', ), )
region = a.Surface(side1Edges=side1Edges1, name='Surf-19')
mdb.models['Model-1'].ShellEdgeLoad(name='Load-1', createStepName='Step-1',
region=region, magnitude=100.0, distributionType=UNIFORM, field='',
localCsys=None)
mdb.models['Model-1'].loads['Load-1'].setValues(traction=TRANSVERSE)
mdb.models['Model-1'].loads['Load-1'].setValues(magnitude=-1.0e-6)
mdb.models['Model-1'].loads['Load-1'].setValuesInStep(stepName='Step-2', magnitude=-100.0)
# 创建 job
mdb.Job(name=Job_name, model='Model-1')
有限元与 python 编程