Vtk Paraview“;数据大小可能与声明不匹配;错误

Vtk Paraview“;数据大小可能与声明不匹配;错误,vtk,paraview,Vtk,Paraview,Paraview(v4.1.0 64位,OSX 10.9.2)给了我以下错误: 一般警告:在/Users/kitware/Dashboards/MyTests/NightlyMaster/paraviewsuperbuildrelease/paraview/src/paraview/VTK/IO/Legacy/vtkDataReader.cxx中,第1388行 读取ascii数据时出错。数据大小可能与声明不匹配 我不知道为什么。我仔细检查了字段是否都是预期的长度,并且没有一个值是NaN、inf或

Paraview(v4.1.0 64位,OSX 10.9.2)给了我以下错误:

一般警告:在/Users/kitware/Dashboards/MyTests/NightlyMaster/paraviewsuperbuildrelease/paraview/src/paraview/VTK/IO/Legacy/vtkDataReader.cxx中,第1388行 读取ascii数据时出错。数据大小可能与声明不匹配

我不知道为什么。我仔细检查了字段是否都是预期的长度,并且没有一个值是NaN、inf或其他非常大的值。问题从timestep 16的输出开始(0-15不产生错误)。从图形上看,步骤0-15按预期生成我的数据图;步骤16显示了“Y/Yc”系列具有意外大的点(0.5625,2.86616e+36)

很好:

产生错误:
过去6个月来,我一直面临着同样的问题,一直在努力寻找解决方案。我得到了以下解释错误的理由()

  • 这可能是一个问题,因为行尾使用的字符() 简言之: a) 在Windows上,线条过渡为CR+LF。 b) 在Linux上,行转换仅使用LF。 c) 在Mac上,一些旧版本仅使用CR。现在我想它也应该使用LF。 CR=“回车”字节 LF=“换行”字节
  • 可能有一个或多个NaN或Inf类型的值,或者其他非实数的特殊计算数字定义。它们可能在Linux上可读,但在Mac上不可读,也许是下一种可能性。如果是这样的话,
  • 基于位置的数字定义,也称为区域设置,可能会触发使用逗号或奇怪的科学符号存储值的情况。例如,如果值“1.0002”存储为“10002”,甚至可能存储为“1.0002ES+000”
  • 我看过其他论坛,他们一般都说了#2和#3以及可能的解决方案——总体来说,这是有效的。然而,以上这些似乎都不能解决我的问题

    我注意到ASCII文件中的一些存储解决方案值小到10.e-34。我有一种感觉,下溢的情况可能会引发问题。我在代码中检查了下溢情况,并将其四舍五入为0。这解决了问题,解决方案始终显示,没有错误消息


    我希望这也能解决您的问题。

    这可能无法解决Inf/NaN问题,但如果vtk文件中的数字太大或太小(即1e-50、1e45),则可能会导致相同的错误


    这种情况下的一个解决方案是更改数据类型规范。当我遇到这个问题时,我将数据类型指定为“float”,它使用32位浮点表示(与“float32”相同)。将它改为“FLUAT64”,使用64位双精度表示,这与生成使用双倍的VTK文件的C++代码一致。这可能会消除问题。

    如果您使用Fortran,则在写入文件但未在代码中关闭文件时也会发生此问题

    例如:

    do i=1,10
    write(numb,'(i3)')i
    open(unit=1, file='test'//numb//'.vtk')
    write(1,*).......
    enddo
    

    我发现,一般来说,当数字太小而不是太大时,这种情况就会发生——我想你会说“下溢”。我添加了一个方法,用于检查写入vtk文件的每个值,如果该值低于1e-15左右,则称为0。这似乎已经足够好了。我遇到了第三个问题:十进制逗号的使用。所讨论的VTK文件是在Ubuntu14.04机器上使用VTK5.10.0库编写的,该机器的LC_NUMERIC=nl_nl.UTF-8。此荷兰设置似乎会导致VTK写入十进制逗号。在同一台计算机上尝试使用ParaView(或使用vtk Python-5.10.1版)读取失败。因此,关于十进制分隔符,vtk的行为令人费解。