我正在尝试从abaqus输出数据库中获取元素密度。我知道您可以使用'EVOL'为卷请求字段输出,密度可能类似吗?
我担心这不是因为:Getting element mass in Abaqus postprocessor
获得密度的最有效方法是什么?查找设置部分的每个元素?
答案 0 :(得分:1)
找到了一个解决方案,我不知道它是否最快但是有效:
odb_file_path=r'your_path\file.odb'
odb = session.openOdb(name=odb_file_path)
instance = odb.rootAssembly.instances['MY_PART']
material_name = instance.elements[0].sectionCategory.name[8:-2]
density=odb.materials[material_name].density.table[0][0])
注意:'name'属性会为您提供一个类似'solid MATERIALNAME'的字符串。所以我只剪出了给我真正材料名称的字符串部分。所以它是作为答案的OdbElementObject的sectionCategory属性。
编辑:这似乎不起作用,事实证明它给所有元素提供了相同的材料名称,作为第一种材料的名称。
答案 1 :(得分:0)
属性与此类似:
sectionAssignment
将section
与set
set
是element
section
将sectionAssignment
与material
instance
已与part
相关联(可能来自其他模特的部分)part
已与model
model
已与section
如果可以,请使用.inp
或.cae
文件。以下内容从打开的cae
文件中获取。要从elements
彻底获取materials
,假设您在rootAssembly.instances
开始搜索,则会执行以下操作:
parts
创建的instances
。models
。{/ li>的parts
sections
中查找material_name
的所有parts
,并存储与此部分相关的所有sectionNames
sectionAssignments
sectionNames
sectionAssignments
下,都有一个关联的region
对象,其中elementSet
的名称(字符串)和part
的名称。从此elements
elementSet
中的所有part
醇>
清理:
set
对象删除对同一元素的任何多个引用。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
文件上使用字符串技术以提高性能。