具有u和v分量的gnuplot上的向量字段

时间:2019-03-01 09:26:29

标签: vector gnuplot field numerical-methods

我正在求解Navier-Stokes方程,用于不可压缩的流体流过带有障碍物的正方形区域。作为输出,我得到XY的速度分量,分别作为NxN矩阵。如何在gnuplot中绘制矢量场。

我找到了this answer,但我不知道为x, y, dx, dy设置什么值。

有人可以解释如何使用我的输出绘制矢量场吗?

更新

我尝试按照@LutzL的指示进行操作,但是我的代码似乎有问题。这段代码对吗?

int main() {
    ifstream finu("U"), finv("V");
    int N = 41, M = 41;
    auto
            **u = new double *[N],
            **v = new double *[N];
    for (int i = 0; i < N; i++) {
        u[i] = new double[M];
        v[i] = new double[M];
    }
    double
            dx = 1.0 / (N - 1),
            dy = 1.0 / (M - 1);

    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            finu >> u[i][j];
            finv >> v[i][j];
        }
    }

    ofstream foutvec("vec");

    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            foutvec << dx * i << "\t" << dy * j << "\t" << u[i][j] << "\t" << v[i][j] << endl;
        }
    }
    ofstream plt("graph.plt");
    plt << "set term pngcairo"
           "\nset title 'Navier-Stokes Equation'"
           "\nset output 'vec.png'"
           "\nplot 'vec' w vec";
    plt.close();
    system("gnuplot graph.plt");
    return 0;
}

作为输出,我得到了一个奇怪的字段。

1 个答案:

答案 0 :(得分:2)

您需要将结果保存到带有行的文本文件中

i,j
对于所有using对。然后将gnuplot与“传统”矢量字段命令一起使用。

如果在该文件中添加了其他列,则仅需要使用R[i,j],并且要显示的向量不是(仅)第三列和第四列。一种用途是计算比例因子X/R, Y/R以显示x[i] y[j] X[i,j] Y[i,j] R[i,j] 。把它放在第五位

using 1:2:($3/$5):($4/$5)

并用dt调用以在gnuplot中执行缩放。


更新中的代码和生成的图像中,人们看到矢量场太大而无法绘制。使用dt = 0.01 plot 'vec' u 1:2:(dt*$3):(dt*$4) w vec 缩放一定的时间步长,在gnuplot命令中,可以通过

完成
{{1}}

不完整的图提示磁盘上的数据文件不完整。刷新或关闭矢量数据的输出流。