📄 boundary.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 + -