You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 10:10:25