如何提取Abaqus中可用格式的NFORC数据并匹配对应单元
解决Abaqus ODB文件中NFORC数据格式化及单元信息匹配问题
我已成功从Abaqus输出数据库(ODB)中获取NFORC数据,但bulkDataBlocks数据结构较为晦涩,不清楚如何将其格式化为可用形式。当前代码可输出指定单元集内单元的节点力数组,但尝试获取对应的单元信息均失败,相关代码及输出结果如下:
现有代码
from odbAccess import * from sys import argv, exit odb = openOdb('SPIE1_TIP_10MT_LC6A_REV9.odb', readOnly=True) lastFrame = odb.steps['Step-1'].frames[-1] mySet = odb.rootAssembly.elementSets['_FAST25-END_BRACKET_BOLTS_ZDIR_PF_'] nforc = lastFrame.fieldOutputs['NFORC1'].getSubset(region=mySet).bulkDataBlocks for v in nforc: print(v.data)
当前输出
[[ 437.9649 ] [ -437.9649 ] [ 285.99744 ] [ -285.99744 ] [ 26.090147 ] [ -26.090147 ] [ -20.221022 ] [ 20.221022 ] [ 19.118658 ] [ -19.118658 ] [ -1.9320803] [ 1.9320803] [ 1336.26 ] [-1336.26 ] [ 1444.7339 ] [-1444.7339 ] [ 285.6841 ] [ -285.6841 ] [ 233.1313 ] [ -233.1313 ] [ -3.2911508] [ 3.2911508] [ -18.943659 ] [ 18.943659 ] [ 10.187364 ] [ -10.187364 ] [ 5.255753 ] [ -5.255753 ] [ 1255.6117 ] [-1255.6117 ] [ 1291.9855 ] [-1291.9855 ]
解决方案:关联节点力与对应单元/节点信息
bulkDataBlocks中的每个对象不仅包含data(节点力数值),还内置了elementLabels(单元编号)、nodeLabels(节点编号)等关键属性,通过这些属性可以将节点力与对应的单元、节点关联,生成结构化的可用数据。
修改后的代码如下:
from odbAccess import * from sys import argv, exit odb = openOdb('SPIE1_TIP_10MT_LC6A_REV9.odb', readOnly=True) lastFrame = odb.steps['Step-1'].frames[-1] mySet = odb.rootAssembly.elementSets['_FAST25-END_BRACKET_BOLTS_ZDIR_PF_'] nforc_subset = lastFrame.fieldOutputs['NFORC1'].getSubset(region=mySet) # 遍历每个数据块,提取关联信息 for block in nforc_subset.bulkDataBlocks: element_ids = block.elementLabels node_ids = block.nodeLabels nforc_values = block.data.flatten() # 将二维数值数组转为一维,方便匹配 # 输出结构化表头与数据 print("单元ID | 节点ID | NFORC1数值") print("-----------------------------") for elem_id, node_id, value in zip(element_ids, node_ids, nforc_values): print(f"{elem_id:6d} | {node_id:6d} | {value:.6f}") odb.close()
关键说明
elementLabels:存储当前数据块内的单元编号数组nodeLabels:存储当前数据块内的节点编号数组,与data中的数值一一对应data.flatten():将原本的二维单值数组转为一维数组,便于和单元、节点编号做匹配关联- 通过
zip函数将单元ID、节点ID、节点力数值一一绑定,输出可读性强的结构化结果
内容的提问来源于stack exchange,提问作者Mike S
相关产品推荐
相关产品推荐

