0. 背景
混塔ABAQUS模型中,机头、法兰等集中质量的设置是模型建立过程中的一部分,需要研究集中质量的添加。
1. 集中质量的编辑
集中质量本身的编辑没什么难度,我已经用Python代码将其实现。具体代码片段如下:
def add_point_mass(PointMassInfo):
'''
通过参数化
:param PointMassInfo: txt2caeinputdata返回的PointMass信息,[(height1, mass1),(height2, mass2),...]
:return:
'''
a = m.rootAssembly
for i, item in enumerate(PointMassInfo):
RP_i = a.ReferencePoint(point=(0.0, 1000*item[0], 0.0))
refPoints_i = (a.referencePoints[RP_i.id],)
region = a.Set(referencePoints=refPoints_i, name='Set-PM' + str(i+1))
a.engineeringFeatures.PointMassInertia(
name='Inertia-'+ str(i+1), region=region, mass=item[1], alpha=0.0, composite=0.0)
2. 约束的设置
集中质量的添加必须配合约束的设置,可以通过一些手段来检验集中质量添加是否成功,具体方法可以点击这里。感谢原作者分享!
这里将作者的总结放在下面:
此外,还需要注意,在编辑约束的时候,需要设置Coupling类型。我的塔架结构将其设为运动就会出问题,设为连续分布就没有问题。具体原因我现在并没有完全弄明白,如果有懂的网友可以留言指导一下,先行谢过!
3. 总结
事实上,编辑约束部分也可以用代码实现。不过因为我现在遇到了其他更重要的问题,所以在确定集中质量的设置方式以后,并没有在这里深究。等后面模型跑通了,在考虑这部分内容的改进。
--------------------------20240220----------------------------------
完整代码如下,已包含添加约束的命令,适用于多个集中质量的添加
def add_point_mass(a, PointMassInfo, PM_instance_list, refpoint_list, refheight_list):
'''
:param a: 装配体名称
:param PointMassInfo: txt2caeinputdata返回的PointMass信息,[(height1, mass1),(height2, mass2),...]
:param PM_instance_list: 用于给集中质量添加约束的实例的名称列表
:param refpoint_list: 集中质量添加约束区域的参考点列表,用于选择约束区域
:param refheight_list: 集中质量添加约束区域的高度列表,用于选择约束区域
:return:
'''
for i, item in enumerate(PointMassInfo):
RP_i = a.ReferencePoint(point=(0.0, 1000*item[0], 0.0))
refPoints_i = (a.referencePoints[RP_i.id],)
PM_setname = 'Set-PM' + str(i+1) # 设定集中质量参考点的
region = a.Set(referencePoints=refPoints_i, name=PM_setname)
# 质量信息按照kg为单位给出,ABAQUS中需要按照吨给出,此处应进行单位换算
a.engineeringFeatures.PointMassInertia(
name='Inertia-'+ str(i+1), region=region, mass=item[1]/1000, alpha=0.0, composite=0.0)
controlPoint_region = a.sets[PM_setname]
s1 = a.instances[PM_inatances_list[i]].faces # 集中质量需要绑定的实例的名称,获取其所在面的集合
side1Faces1 = s1.findAt(((refpoint_list[i], 1000*refheight_list[i], 0),))
surface_region = a.Surface(side1Faces=side1Faces1, name='m-sur-PM-'+str(i+1))
m.Coupling(name='Constraint-PM'+str(i+1), controlPoint=controlPoint_region,
surface=surface_region, influenceRadius=WHOLE_SURFACE, couplingType=DISTRIBUTING,
weightingMethod=UNIFORM, localCsys=None, u1=ON, u2=ON, u3=ON, ur1=ON,
ur2=ON, ur3=ON)