векторное поле на gnuplot с компонентами u и v - PullRequest
0 голосов
/ 01 марта 2019

Я решаю уравнение Навье-Стокса для потока несжимаемой жидкости через квадратную область с препятствием.В качестве вывода я получаю X и Y компоненты скорости в виде матрицы NxN каждая.Как построить векторное поле для него в gnuplot.

Я нашел этот ответ , но я не могу понять, какие значения поставить для 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 голосов
/ 01 марта 2019

Вам нужно сохранить свой результат в текстовом файле со строками

x[i]  y[j]  X[i,j]  Y[i,j]

для всех пар i,j.Затем используйте gnuplot с «традиционной» командой векторного поля.

Вам нужно использовать using, только если вы добавили в этот файл дополнительные столбцы, а отображаемые векторы не являются (просто) 3-м и 4-м столбцами.Одним из вариантов использования может быть вычисление коэффициента масштабирования R[i,j] для отображения X/R, Y/R.Поместите это на 5-е место

x[i]  y[j]  X[i,j]  Y[i,j]  R[i,j]

и позвоните с помощью using 1:2:($3/$5):($4/$5), чтобы выполнить масштабирование в gnuplot.


В коде в обновлении иВ результате изображения видно, что векторное поле слишком велико для построения графика.Масштабируйте с помощью dt для некоторого разумного временного шага, в командах gnuplot это можно сделать с помощью

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

Неполный график указывает на неполный файл данных на диске.Очистить или закрыть поток вывода для векторных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...