You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Abaqus脚本报错:多实例顶点集合创建代码问题排查

问题:Abaqus Python脚本定义顶点集合时使用"+"拼接报错

我在通过Python脚本给Abaqus定义顶点集合时遇到报错,已确认所有坐标与对应实例的顶点位置完全匹配。代码改编自Abaqus日志文件,我将原代码中的.getSequenceFromMask()替换为.findAt()后,报错显示不支持用"+"定义顶点集合,但原日志代码正是用"+"拼接的,特此求助。

报错代码

mdb.models['Model-8'].rootAssembly.Set(name='Set-3', vertices=
    mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+''+'1'].vertices.findAt((75.0, 125.0, 0))+\
    mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'2'].vertices.findAt((75, 125, 35), )+\
    mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'3'].vertices.findAt((75, 125, 30), )+\
    mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'4'].vertices.findAt((75, 125, 25), )+\
    mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'5'].vertices.findAt((75, 125, 20), )+\
    mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'6'].vertices.findAt((75, 125, 15), )+\
    mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'7'].vertices.findAt((75, 125, 10), )+\
    mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'8'].vertices.findAt((75, 125, 5), ))

原日志文件代码

mdb.models['Model-8'].rootAssembly.Set(name='Set-2', vertices=
    mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'1'].vertices.getSequenceFromMask(mask=('[#1 ]', ), )+\
    mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'2'].vertices.getSequenceFromMask(mask=('[#1 ]', ), )+\
    mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'3'].vertices.getSequenceFromMask(mask=('[#1 ]', ), )+\
    mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'4'].vertices.getSequenceFromMask(mask=('[#1 ]', ), )+\
    mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'5'].vertices.getSequenceFromMask(mask=('[#1 ]', ), )+\
    mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'6'].vertices.getSequenceFromMask(mask=('[#1 ]', ), )+\
    mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'7'].vertices.getSequenceFromMask(mask=('[#1 ]', ), )+\
    mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'8'].vertices.getSequenceFromMask(mask=('[#1 ]', ), ))

解决方案

问题根源

getSequenceFromMask()方法返回的是Sequence类型对象(可迭代集合),Abaqus为该类型实现了+运算符以支持拼接;而findAt()方法返回的是单个Vertex对象,单个对象无法直接用+拼接,这就是报错的核心原因。

修复方法(两种任选其一)

方法1:将单个顶点放入列表后拼接

把每个findAt()的结果用列表包裹,再通过+拼接所有列表,最终传入Set()的vertices参数:

mdb.models['Model-8'].rootAssembly.Set(name='Set-3', vertices=
    [mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+''+'1'].vertices.findAt((75.0, 125.0, 0))]+\
    [mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'2'].vertices.findAt((75, 125, 35), )]+\
    [mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'3'].vertices.findAt((75, 125, 30), )]+\
    [mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'4'].vertices.findAt((75, 125, 25), )]+\
    [mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'5'].vertices.findAt((75, 125, 20), )]+\
    [mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'6'].vertices.findAt((75, 125, 15), )]+\
    [mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'7'].vertices.findAt((75, 125, 10), )]+\
    [mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'8'].vertices.findAt((75, 125, 5), )])

方法2:提前收集所有顶点到一个列表

更简洁易维护的写法是先创建空列表,逐个添加顶点后再传入Set():

vertices_list = []
# 逐个添加顶点
vertices_list.append(mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+''+'1'].vertices.findAt((75.0, 125.0, 0)))
vertices_list.append(mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'2'].vertices.findAt((75, 125, 35), ))
vertices_list.append(mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'3'].vertices.findAt((75, 125, 30), ))
vertices_list.append(mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'4'].vertices.findAt((75, 125, 25), ))
vertices_list.append(mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'5'].vertices.findAt((75, 125, 20), ))
vertices_list.append(mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'6'].vertices.findAt((75, 125, 15), ))
vertices_list.append(mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'7'].vertices.findAt((75, 125, 10), ))
vertices_list.append(mdb.models['Model-8'].rootAssembly.instances[myModule+'_'+myRigidBeamName+'-'+'8'].vertices.findAt((75, 125, 5), ))

# 创建顶点集合
mdb.models['Model-8'].rootAssembly.Set(name='Set-3', vertices=vertices_list)

内容的提问来源于stack exchange,提问作者Heng Si Hwa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:59:17