创建为Polydata VTK文件的向量无法在VisIt中正确显示

时间:2012-08-02 11:40:40

标签: fortran visualization vtk

我正在通过将其网格数据写入可在可视化工具中打开的VTK文件来改进Fortran编写的热工水力学代码。以前,数据只是写入用户必须手动操作的文本文件。我写了两个文件:一个用于标量数据,包括结构化网格单元的顶点和它们内部的标量数据,第二个文件用于矢量数据。由于求解算法,矢量位于网格单元的面上,因此我使用Polydata点定义它们的位置。

我测试了一个小的500格网格的修改,它运行良好,但我已经尝试移动到更大的9,000个网格网格。向量无法正确显示。网格在x方向上具有18个单元,在y方向上具有18个单元,在z方向上具有29个单元。在下面附图中,您可以看到y方向上有18个向量,这是正确的,但在y方向上只有7个向量。我将z方向网格缩小到3级,以降低此处的复杂性。我需要确定这是可视化器,VTK文件还是我的代码的问题。

enter image description here

我检查了VTK文件,它在我看来一切都在那里。实际上,我之前的尝试涉及打印数据,因此z方向坐标变化最快,然后是x,然后是y,并且在z方向上产生交错的矢量集。使它变得如此快速变化,然后y,然后z产生你在上面看到的。我很惊讶地发现这有所不同,因为VTK文件的实际内容没有变化。当然,我写VTK格式有困难,因为我在网上找不到很多关于它的信息,所以我可能会遗漏一些明显的东西。我正在附上我在下面写的VTK文件,看看是否有我忽视的东西。这是一个非常长的文件,所以我删除了这篇文章的大部分数据,只留下了两个标题部分和一些数据点。

# vtk DataFile Version 1.0
Vector Data
ASCII
DATASET POLYDATA
POINTS     972 double
0.33500000E-02  0.33500000E-02  0.00000000E+00
0.13000000E-01  0.33500000E-02  0.00000000E+00
0.25600000E-01  0.33500000E-02  0.00000000E+00
0.38200000E-01  0.33500000E-02  0.00000000E+00
0.50800000E-01  0.33500000E-02  0.00000000E+00
0.63400000E-01  0.33500000E-02  0.00000000E+00
... up to 972 values
POINT_DATA     972
VECTORS Axial_Liquid_Mass_Flow_Rate float         
0.0000E+00  0.0000E+00  0.9075E-01
0.0000E+00  0.0000E+00  0.1636E+00
0.0000E+00  0.0000E+00  0.1636E+00
0.0000E+00  0.0000E+00  0.1636E+00
0.0000E+00  0.0000E+00  0.1636E+00
0.0000E+00  0.0000E+00  0.1636E+00
... up to 972 values

参考Chris的评论:

首先,代码实际上使用两个网格与交错网格方法保持一致:1)标量网格,其中连续性和能量方程被解决(压力,密度,焓和空隙分数在中心定义)标量网格单元),2)动量单元网格,其中动量方程被求解(速度在动量网格单元的中心定义)。标量网格由用户定义,并且动量网格构建在其上方,使得动量单元的中心位于标量单元的面上。

我认为使用VTK的直线格式最好捕获这样的网格,但我无法弄清楚如何捕获非正方形或矩形几何体,如下图所示:

enter image description here

因此,我使用了非结构化网格,因为所有单元顶点信息都很容易获得(这也更容易从代码中打印出来,因为我不必考虑单元的连接性)。动量单元实际上将相互重叠,因为它们的设置使得中心位于标量单元面上。因此,只有细胞的中心很重要,这就是我使用点而不是网格来定义速度矢量的原因。如果我添加一些动量网格单元格,请参见上图,如红色虚线所示:

enter image description here

我修改了代码,以便每个标量单元格现在有六个与之关联的数组: 1)x_location(i,j) - 标量网格单元中心的x位置(以米为单位) 2)y_location(i,j) - 标量网格单元中心的y位置 3)z_location(i,j) - 标量网格单元中心的z位置 4)x_size(i,j) - x方向上标量单元的大小 5)y_size(i,j) - y方向上标量单元的大小 6)z_size(i,j) - z方向上标量单元的大小

i索引表示沿z方向堆叠的一列单元(通道)。 j索引表示跨越x,y方向的一层单元格。

可以通过i和j索引唯一地标识单元格。关于这些指数(即密度(i,j),焓(i,j),压力(i,j)等)也给出了所有标量单元数据。

0 个答案:

没有答案