mysql索引抽密度_使用python脚本从abaqus输出数据库获取元素密度

属性关联如下:sectionAssignment将section连接到set

set是{}的容器

section将sectionAssignment连接到material

instance连接到{}(可以来自另一个模型的部件)

part连接到model

model连接到section

如果可以,请使用.inp或.cae文件。下面的代码从一个打开的cae文件中获取它。为了从materials中彻底获取elements,假设您在rootAssembly.instances开始搜索,您可以执行如下操作:找到创建instances的parts。在

找到包含这些parts的models。在

在这些parts中查找所有带有material_name的{},并存储与此部分相关联的所有{}

查找引用这些sectionAssignments的所有sectionNames

在每个sectionAssignments下,都有一个关联的region对象,它的名称是elementSet,名称是part。从这个part中的elements获取所有elements。在

清理:使用Pythonset对象删除对同一元素的任何多个引用。在

将此集合中的元素数乘以rootAssembly中引用此材料的相同零件实例的数量。在

例如,对于一些名为cae的模型变量model:model_part_repeats = {}

model_part_elemLabels = {}

for instance in model.rootAssembly.instances.values():

p = instance.part.name

m = instance.part.modelName

try:

model_part_repeats[(m, p)] += 1

continue

except KeyError:

model_part_repeats[(m, p)] = 1

# Get all sections in model

sectionNames = []

for s in mdb.models[m].sections.values():

if s.material == material_name: # material_name is already known

# This is a valid section - search for section assignments

# in part for this section, and then the associated set

sectionNames.append(s.name)

if sectionNames:

labels = []

for sa in mdb.models[m].parts[p].sectionAssignments:

if sa.sectionName in sectionNames:

eset = sa.region[0]

labels = labels + [e.label for e in mdb.models[m].parts[p].sets[eset].elements]

labels = list(set(labels))

model_part_elemLabels[(m,p)] = labels

else:

model_part_elemLabels[(m,p)] = []

num_elements_with_material = sum([model_part_repeats[k]*len(model_part_elemLabels[k]) for k in model_part_repeats])

最后,获取与material_name相关的材料密度,然后乘以num_elements_with_material。在

当然,对于更大的模型,这种方法会非常慢,为了获得更快的性能,在.inp文件上使用字符串技术更为可取。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值