Abaqus Python脚本:从含单元编号的元组批量创建单元集
从元组批量创建Abaqus单元集
问题描述
我有一个名为E3的元组,结构如下:
(array([ 136, 2593, 3061, 4348], dtype=int64),)
需要基于其中的单元编号创建单元集,目前只能手动逐个索引拼接:
mdb.models['Model-1'].rootAssembly.Set(elements= mdb.models['Model-1'].rootAssembly.instances['Part-1-1'].elements[E3[0][0]:E3[0][0]+1]+ mdb.models['Model-1'].rootAssembly.instances['Part-1-1'].elements[E3[0][1]:E3[0][1]+1]+ mdb.models['Model-1'].rootAssembly.instances['Part-1-1'].elements[E3[0][2]:E3[0][2]+1]+ mdb.models['Model-1'].rootAssembly.instances['Part-1-1'].elements[E3[0][3]:E3[0][3]+1] , name='Set-0')
但E3的元素数量不固定且通常较多,这种方法完全不实用。尝试以下写法均报错:
- 直接使用元组索引:
mdb.models['Model-1'].rootAssembly.Set(elements= mdb.models['Model-1'].rootAssembly.instances['Part-1-1'].elements[E3], name='Set-0')
报错:TypeError: Invalid index type tuple
- 使用元组内的numpy数组索引:
mdb.models['Model-1'].rootAssembly.Set(elements= mdb.models['Model-1'].rootAssembly.instances['Part-1-1'].elements[E3[0]], name='Set-0')
报错:TypeError: only integer scalar arrays can be converted to a scalar index
解决方案
Abaqus的ElementArray对象不支持直接用numpy数组或元组批量索引,推荐以下两种系统化方法:
方法1:使用getFromLabels()批量获取单元(推荐,效率更高)
getFromLabels()是Abaqus API提供的批量获取单元的方法,直接传入单元编号列表即可:
# 提取元组中的numpy数组并转为Python列表 element_labels = E3[0].tolist() # 获取零件实例对象 instance = mdb.models['Model-1'].rootAssembly.instances['Part-1-1'] # 批量获取单元 selected_elements = instance.elements.getFromLabels(element_labels) # 创建单元集 mdb.models['Model-1'].rootAssembly.Set(elements=selected_elements, name='Set-0')
方法2:列表推导式逐个获取单元
如果无法使用getFromLabels()(比如低版本Abaqus),可以用列表推导式遍历单元编号,逐个获取单元对象:
instance = mdb.models['Model-1'].rootAssembly.instances['Part-1-1'] # 遍历numpy数组中的单元编号,生成单元对象列表 element_list = [instance.elements[eid] for eid in E3[0]] # 创建单元集 mdb.models['Model-1'].rootAssembly.Set(elements=element_list, name='Set-0')
说明
- 两种方法都能适配任意数量的单元编号,无需手动拼接索引
getFromLabels()是Abaqus官方推荐的批量操作方式,处理大量单元时性能更优
内容的提问来源于stack exchange,提问作者Victor Fachinotti
相关产品推荐
相关产品推荐

