Vector 带有u和v分量的gnuplot上的向量场

Vector 带有u和v分量的gnuplot上的向量场,vector,gnuplot,field,numerical-methods,Vector,Gnuplot,Field,Numerical Methods,我在解不可压缩流体通过带障碍物的正方形区域的Navier-Stokes方程。作为输出,我得到速度的X和Y分量,分别为NxN矩阵。如何在gnuplot中为其绘制向量场 dt = 0.01 plot 'vec' u 1:2:(dt*$3):(dt*$4) w vec 我找到了,但我不明白该为x,y,dx,dy添加什么值 dt = 0.01 plot 'vec' u 1:2:(dt*$3):(dt*$4) w vec 有人能解释一下如何使用我的输出来绘制向量场吗 dt = 0.01 plot 'v

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

dt = 0.01
plot 'vec' u 1:2:(dt*$3):(dt*$4) w vec
我找到了,但我不明白该为
x,y,dx,dy添加什么值

dt = 0.01
plot 'vec' u 1:2:(dt*$3):(dt*$4) w vec
有人能解释一下如何使用我的输出来绘制向量场吗

dt = 0.01
plot 'vec' u 1:2:(dt*$3):(dt*$4) w vec
更新

dt = 0.01
plot 'vec' u 1:2:(dt*$3):(dt*$4) w vec
我试着按照@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;
}
dt = 0.01
plot 'vec' u 1:2:(dt*$3):(dt*$4) w vec
intmain(){
如果流finu(“U”)、finv(“V”);
int N=41,M=41;
汽车
**u=新的双精度*[N],
**v=新的双*[N];
对于(int i=0;i>u[i][j];
finv>>v[i][j];
}
}
foutvec(“vec”);
对于(int i=0;ifoutvec您需要将结果保存在带有行的文本文件中

x[i]  y[j]  X[i,j]  Y[i,j]
dt = 0.01
plot 'vec' u 1:2:(dt*$3):(dt*$4) w vec
对于所有对
i,j
。然后使用gnuplot和“传统”向量场命令

dt = 0.01
plot 'vec' u 1:2:(dt*$3):(dt*$4) w vec
如果您在该文件中添加了其他列,则只需使用
using
,并且要显示的向量不是(简单地)第3列和第4列。一种用法可能是您计算比例因子
R[i,j]
来显示
X/R,Y/R
。将其放在第5位

x[i]  y[j]  X[i,j]  Y[i,j]  R[i,j]
dt = 0.01
plot 'vec' u 1:2:(dt*$3):(dt*$4) w vec
并使用
调用,使用1:2:($3/$5):($4/$5)
在gnuplot中执行缩放

dt = 0.01
plot 'vec' u 1:2:(dt*$3):(dt*$4) w vec

更新中的代码和生成的图像中,可以看到向量场太大,无法绘制。使用
dt
缩放一段合理的时间步长,在gnuplot命令中,这可以通过

dt = 0.01
plot 'vec' u 1:2:(dt*$3):(dt*$4) w vec

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

看起来不错。如果向量的缩放有问题,请在绘图命令中添加
u 1:2:($3/10):($4/10)
(或更高的系数)。然后关闭(刷新)数据流
foutvec
,在绘图时,似乎并非所有数据都写入磁盘。
dt = 0.01
plot 'vec' u 1:2:(dt*$3):(dt*$4) w vec