⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boundary.c

📁 学校的CFD的模型 运用poisson equation 非常好的sequential programme
💻 C
字号:
#include <stdio.h>#include <string.h>#include "datadef.h"/* Given the boundary conditions defined by the flag matrix, update * the u and v velocities. Also enforce the boundary conditions at the * edges of the matrix. */void apply_boundary_conditions(float **u, float **v, char **flag,    int imax, int jmax, float ui, float vi){    int i, j;    for (j=0; j<=jmax+1; j++) {        /* Fluid freely flows in from the west */        u[0][j] = u[1][j];        v[0][j] = v[1][j];        /* Fluid freely flows out to the east */        u[imax][j] = u[imax-1][j];        v[imax+1][j] = v[imax][j];    }    for (i=0; i<=imax+1; i++) {        /* The vertical velocity approaches 0 at the north and south         * boundaries, but fluid flows freely in the horizontal direction */        v[i][jmax] = 0.0;        u[i][jmax+1] = u[i][jmax];        v[i][0] = 0.0;        u[i][0] = u[i][1];    }    /* Apply no-slip boundary conditions to cells that are adjacent to     * internal obstacle cells. This forces the u and v velocity to     * tend towards zero in these cells.     */    for (i=1; i<=imax; i++) {        for (j=1; j<=jmax; j++) {            if (flag[i][j] & B_NSEW) {                switch (flag[i][j]) {                    case B_N:                         v[i][j]   = 0.0;                        u[i][j]   = -u[i][j+1];                        u[i-1][j] = -u[i-1][j+1];                        break;                    case B_E:                         u[i][j]   = 0.0;                        v[i][j]   = -v[i+1][j];                        v[i][j-1] = -v[i+1][j-1];                        break;                    case B_S:                        v[i][j-1] = 0.0;                        u[i][j]   = -u[i][j-1];                        u[i-1][j] = -u[i-1][j-1];                        break;                    case B_W:                         u[i-1][j] = 0.0;                        v[i][j]   = -v[i-1][j];                        v[i][j-1] = -v[i-1][j-1];                        break;                    case B_NE:                        v[i][j]   = 0.0;                        u[i][j]   = 0.0;                        v[i][j-1] = -v[i+1][j-1];                        u[i-1][j] = -u[i-1][j+1];                        break;                    case B_SE:                        v[i][j-1] = 0.0;                        u[i][j]   = 0.0;                        v[i][j]   = -v[i+1][j];                        u[i-1][j] = -u[i-1][j-1];                        break;                    case B_SW:                        v[i][j-1] = 0.0;                        u[i-1][j] = 0.0;                        v[i][j]   = -v[i-1][j];                        u[i][j]   = -u[i][j-1];                        break;                    case B_NW:                        v[i][j]   = 0.0;                        u[i-1][j] = 0.0;                        v[i][j-1] = -v[i-1][j-1];                        u[i][j]   = -u[i][j+1];                        break;                }            }        }    }    /* Finally, fix the horizontal velocity at the  western edge to have     * a continual flow of fluid into the simulation.     */    v[0][0] = 2*vi-v[1][0];    for (j=1;j<=jmax;j++) {        u[0][j] = ui;        v[0][j] = 2*vi-v[1][j];    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -