Paraview“possible mismatch of datasize with declaration”错误

3

Paraview (v4.1.0 64-bit, OSX 10.9.2) 给出以下错误:

通用警告:在 /Users/kitware/Dashboards/MyTests/NightlyMaster/ParaViewSuperbuild-Release/paraview/src/paraview/VTK/IO/Legacy/vtkDataReader.cxx 的第 1388 行, 读取 ASCII 数据时出错。可能与声明的数据大小不匹配。

我不确定为什么会出现这个问题。我已经仔细检查了所有字段的长度是否符合预期,并且没有值为 NaN、inf 或其他极端大的情况。问题始于时间步长 16 的输出 (0-15 没有错误)。从图形上看,步骤 0-15 产生了我的数据预期的绘图;步骤 16 显示“Y/Yc”系列具有一个意外的大点 (0.5625, 2.86616e+36)。

正常: http://www.filedropper.com/ring0000015

产生错误: http://www.filedropper.com/ring0000016

3个回答

4
我过去6个月一直面临同样的问题,并一直在努力寻找解决方案。我被给出以下原因来解释这个错误(http://www.cfd-online.com/Forums/paraview/139451-error-while-reading-vtk-files-paraview.html#post503315):
  1. 可能是由于使用了不同行结束符引起的问题 (http://en.wikipedia.org/wiki/Newline) 简而言之: a) Windows上,行转换为CR+LF。 b) Linux上,行转换仅为LF。 c) Mac上,一些旧版本仅使用CR。现在我想它也应该使用LF。 CR= "回车" 字节 LF= "换行" 字节
  2. 可能有一个或多个值是NaN或Inf或其他特殊的计算数值定义非实数。它们可能在Linux上可读,但在Mac上不可读,也许是下一个可能性。如果是这种情况,
  3. 基于位置的数字定义,也称为Locale,可能会触发某些情况,其中数值以逗号或奇怪的科学记数法存储。例如,如果一个值"1.0002"存储为"1,0002"甚至可能是"1.0002ES+000"
我查看了其他论坛,他们通常提到了#2和#3以及可能的解决方案-通常有效。但是,以上这些都没有解决我的问题。
我注意到ASCII文件中一些存储的解值非常小,只有10.e-34。我有一种感觉,下溢条件可能会引发问题。我在我的代码中加入了检查下溢条件的代码,并将它们舍入为0。这解决了问题,解在任何时候都能显示而没有错误信息。

我发现通常情况下,这似乎发生在数字太小而不是太大的情况下——我想你可以称之为“下溢”。我添加了一个方法,检查我写入vtk文件的每个值,如果它小于1e-15左右,我将其视为0。这似乎足够好用。 - Stershic
遇到了问题3——使用小数逗号。所涉及的VTK文件是使用VTK 5.10.0库在Ubuntu 14.04机器上编写的,LC_NUMERIC=nl_NL.UTF-8。这个荷兰设置似乎导致VTK写入小数逗号。尝试在同一台机器上使用ParaView(或vtk Python - 版本5.10.1)读取失败。因此,关于小数分隔符,vtk的行为令人困惑。 - bvanlew

1
这可能无法解决Inf/NaN问题,但如果vtk文件中的数字过大或过小(例如1e-501e45),可能会导致相同的错误。
在这种情况下,一种解决方法是更改数据类型规范。当我遇到这个问题时,我将数据类型指定为“float”,它使用32位浮点表示(与“float32”相同)。将其更改为“float64”使用64位双精度表示,这与生成使用双精度的vtk文件的C++代码一致。这可能消除了问题。

0
如果您正在使用Fortran,当您在代码中写入文件但未关闭它时,也会出现此问题。
例如:
do i=1,10
write(numb,'(i3)')i
open(unit=1, file='test'//numb//'.vtk')
write(1,*).......
enddo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接