2

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

我测试了我对 500 个单元格的小型网格的修改,它运行良好,但我尝试升级到更大的 9,000 个单元格网格。矢量显示不正确。网格在 x 方向有 18 个单元,在 y 方向有 18 个单元,在 z 方向有 29 个单元。在我下面附上的图片中,您可以看到 y 方向有 18 个向量,这是正确的,但 y 方向只有 7 个向量。我将 z 方向网格减少到 3 个级别,以降低此处的复杂性。我需要确定这是否是可视化工具、VTK 文件或我的代码的问题。

在此处输入图像描述

我检查了 VTK 文件,在我看来一切都在那里。实际上,我之前的尝试涉及打印数据,因此 z 方向坐标变化最快,然后是 x,然后是 y,这会在 z 方向产生一组交错的向量。让 x 变化最快,然后是 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

关于克里斯的评论:

首先,代码实际上使用两个网格来与交错网格方法保持一致:1) 一个标量网格,其中求解连续性和能量方程(在标量网格的中心定义压力、密度、焓和空隙率)单元),2)动量单元网格,其中求解动量方程(速度定义在动量网格单元的中心)。标量网格由用户定义,动量网格建立在其之上,因此动量单元的中心位于标量单元的表面上。

我认为最好使用 VTK 的直线格式来捕获这样的网格,但我不知道如何捕获非正方形或矩形的几何图形,例如此处显示的几何图形:

在此处输入图像描述

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

在此处输入图像描述

我修改了代码,使每个标量单元现在都有六个与之关联的数组: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)等)。

4

0 回答 0