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

h5文件新增应力数据未在关联xdmf及Paraview中显示问题

问题原因

你遇到的加载失败问题核心有3个:

  • 最核心原因:未同步更新XDMF索引文件。XDMF作为轻量描述文件,会写死所有需要加载的数据集路径、维度、数据类型、关联网格位置,Paraview加载XDMF配套的H5文件时,只会读取XDMF中明确声明的字段,不会主动扫描H5内新增的内容,因此你写入的新数据完全不会被Paraview感知。
  • 代码存在数组引用bug:你写的t_princ = e_princ是numpy数组的引用赋值,没有为真应力数组独立开辟内存,后续给t_princ赋值时会直接覆盖之前写入的工程应力数据,最终两个数据集存储的内容完全一致,全为真应力值。
  • 新增数据集缺少必要元数据属性:你观察到的属性数量差异是因为原始数据集带的5个属性是HEDM数据格式约定的元数据(包含数据类型标识、分量说明、关联网格层级等信息),Paraview或其他HEDM处理工具读取时会依赖这些属性识别数据结构,缺失会导致数据识别异常。
修复步骤
  1. 修正数据写入代码,解决数组覆盖问题,同时补全必要属性
import h5py
import numpy as np
from tqdm import tqdm

nf_product = h5py.File(filename,"a")
e_princ = np.empty((280,150,280,3), dtype=np.float32)
# 独立创建真应力数组,避免和工程应力共用内存
t_princ = np.empty_like(e_princ)

for i in tqdm(range(grain_count)):
    a = np.where(feature_ID == i+1)
    e_princ[a,0] = eng_stress[i,0]
    e_princ[a,1] = eng_stress[i,1]
    e_princ[a,2] = eng_stress[i,2]

    t_princ[a,0] = true_stress[i,0]
    t_princ[a,1] = true_stress[i,1]
    t_princ[a,2] = true_stress[i,2]

EngineeringStress = nf_product.create_dataset(
    'DataContainers/nfHEDM/CellData/EngineeringStressPrinciple',
    data=e_princ
)
TrueStress = nf_product.create_dataset(
    'DataContainers/nfHEDM/CellData/TrueStressPrinciple',
    data=t_princ
)

# 复制原有同位置数据集的属性作为模板,保证元数据格式一致
ref_dataset = nf_product['DataContainers/nfHEDM/CellData/FeatureIds']
for attr_name in ref_dataset.attrs.keys():
    EngineeringStress.attrs[attr_name] = ref_dataset.attrs[attr_name]
    TrueStress.attrs[attr_name] = ref_dataset.attrs[attr_name]
# 补充矢量分量说明
EngineeringStress.attrs['ComponentNames'] = np.array(['Sigma1', 'Sigma2', 'Sigma3'], dtype='S')
TrueStress.attrs['ComponentNames'] = np.array(['Sigma1', 'Sigma2', 'Sigma3'], dtype='S')

nf_product.close()
  1. 修改配套XDMF文件,新增两个应力字段的声明
    找到XDMF文件中定义nfHEDM网格下CellData的段落,和原有FeatureIds等字段平级,新增两个矢量字段的定义,示例如下:
<!-- 原有FeatureIds等字段保持不动 -->
<Attribute Name="EngineeringStressPrinciple" AttributeType="Vector" Center="Cell">
  <DataItem Dimensions="280 150 280 3" NumberType="Float32" Format="HDF">
    替换为你的h5文件名.h5:/DataContainers/nfHEDM/CellData/EngineeringStressPrinciple
  </DataItem>
</Attribute>
<Attribute Name="TrueStressPrinciple" AttributeType="Vector" Center="Cell">
  <DataItem Dimensions="280 150 280 3" NumberType="Float32" Format="HDF">
    替换为你的h5文件名.h5:/DataContainers/nfHEDM/CellData/TrueStressPrinciple
  </DataItem>
</Attribute>

注意配置项必须和H5内数据完全匹配:维度顺序、数据类型(Float32对应你写入的np.float32)、H5内路径不能写错,因为是3个主应力分量,AttributeType固定填Vector。

  1. 重新加载验证
    清除Paraview的原有文件缓存,加载修改后的XDMF文件,即可在CellData变量列表中找到新增的两个应力字段,直接选择即可完成颜色映射。

补充:如果不想修改XDMF,也可以直接在Paraview中选择加载H5文件内的对应数据集,但这种方式不会自动关联原有晶粒网格结构,无法和已有的特征ID可视化结果对齐,不推荐使用。

内容的提问来源于stack exchange,提问作者Eve Knife

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:18:13