如何使用 Python 脚本知道 ABAQUS odb 文件不是 MDB 文件中 PID 的材料名称?

问题描述

这里我需要知道如何找到每个PID的材料名称。我是初学者,所以每个答案都对我有很大帮助。


    odb= odbaccess.openOdb(path=(path+file),readOnly=True)
    tag="ERT"
    step = []
    step.append(odb.steps[odb.steps.keys()[0]])
    
    frame = []
    frame.append(step[0].frames[-1])
    
    
    assembly = []
    assembly.append(odb.rootAssembly)
    
    instance = []
    instance.append(assembly[0].instances[instance_n])
        
    PIDs = []
    for key in instance[0].elementSets.keys():
      if tag in key:
        PIDs.append(key)
        
        
    for PID in PIDs:   
        print(material_name[PID])  # here i need to kNow name of material for this PID  

解决方法

有关材料或部分的信息存储在部分对象中。如果你知道你的部分(你没有提到你是否可以实际访问模型)。如果没有,则还必须从odb 中获取材料信息和部分信息。

你可以在你的集合中做的是这个

odb = odbAccess.openOdb(path=(path+file),readOnly=True)
my_elset = odb.rootAssembly.instances[0].elementSets[setname]
element_from_set = my_elset.elements[0] # list with mesh element object,e.g. first
sec_category = element_from_set[0].sectionCatergory

节类别包含有关基础节的若干信息。如果您确实知道您的部分和相应的材料(可能在创建模型后存储在文件中):很好。

不是,您必须进一步获取部分信息,例如作者:

odb.sections[sectionname]

其中包含 odb 中每个部分的材料。

无论如何,如果可能的话,如果您直接在 mdb 中获取该信息,我认为您会让您的生活更轻松。

上面的例子只是基本的,如果你没有明确的集合名,你可能需要遍历它们,但它们也可以获得。

编辑: 作为一般建议:您可以在命令行中尝试所有这些,方法是打开 abaqus 命令提示符并键入

abaqus python

你会得到 abaqus python shell,或者,在打开 abaqus 的情况下,你可以使用底部的 shell(>> 在黄色地面上)或 PDE。