我有一个名为 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".
或者类似这样的:
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".
您知道从具有元素编号的元组创建集合的系统方法吗?
是的,有!
您可以使用
SetFromElementLabels
方法。该方法需要 2 个参数,即。 name
和 elementLabels
。
零件级元素集
如果您想在零件级别创建元素集,则可以使用:
mdb.models[name].parts[name].SetFromElementLabels
# For example:
mdb.models['Model-1'].parts['Part-1'].SetFromElementLabels(
name='part_nset', elementLabels=(136, 2593, 3061, 4348)
)
# 136, 2593, 3061, 4348 --> node number at the part level
装配级元素集
如果您想在程序集级别创建元素集(这是您的情况),那么您可以使用:
mdb.models[name].rootAssembly.SetFromElementLabels
# For example:
mdb.models['Model-1'].rootAssembly.SetFromElementLabels(
name='instance_nset',
elementLabels=( ('Part-1-1', (136, 2593, 3061, 4348)), )
)
# ('Part-1-1', (136, 2593, 3061, 4348))
# (<instance name>, <tuple of element number in ascending order>)
# You can add element numbers from any number of instances
# --> elementLabels=(('Instance-1', (2,3,5,7)), ('Instance-2', (1,2,3)))