1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
typedef struct _mgs
{
double *bx, *by, *bz;
double *bxc, *byc, *bzc;
double *sx, *sy, *sz;
double *rx, *ry, *rz;
int nx, ny;
double dx, dy;
double mu;
int k;
}MGS;
/**
EQUATION :
S = B - MU*LAPLACIAN(B)
**/
void mgs_smooth(MGS *mgs, int m)
{
int i, j, ij, ij1, ij2, ij3, ij4;
double dx2,dy2;
int istep, nsteps;
nsteps = m;
istep = 0;
dx2 = mgs->dx*mgs->dx;
dy2 = mgs->dy*mgs->dy;
while (istep ++ < nsteps)
{
for (i = 0; i < mgs->nx+1; i++) /*PERIODIC (X) - NEUMANN (Y)*/
{
for (j = 0; j < mgs->ny+1; j++)
{
ij = i + j*(mgs->nx+1);
ij1 = i-1 + (j )*(mgs->nx+1);
ij2 = i + (j+1)*(mgs->nx+1);
ij3 = i+1 + (j )*(mgs->nx+1);
ij4 = i + (j-1)*(mgs->nx+1);
if (i == 0)
ij1 = mgs->nx-1 + j*(mgs->nx+1);
else if (i == mgs->nx)
ij3 = 1 + j*(mgs->nx+1);
if (j == 0)
ij4 = ij2;
else if (j == mgs->ny)
ij2 = ij4;
mgs->by[ij] = ((dx2*dy2)*mgs->sy[ij] + mgs->mu*dy2*(mgs->by[ij1] + mgs->by[ij3])
+ mgs->mu*dx2*(mgs->by[ij2] + mgs->by[ij4]))/(dx2*dy2 + 2*mgs->mu*(dx2+dy2));
}
}
/* __ Periodic(X) - Dirichlet(Y) __ */
for (i = 0; i < mgs->nx+1; i++)
{
for (j = 1; j < mgs->ny; j++)
{
ij = i + j*(mgs->nx+1);
ij1 = i-1 + (j )*(mgs->nx+1);
ij2 = i + (j+1)*(mgs->nx+1);
ij3 = i+1 + (j )*(mgs->nx+1);
ij4 = i + (j-1)*(mgs->nx+1);
if (i == 0)
ij1 = mgs->nx-1 + j*(mgs->nx+1);
else if (i == mgs->nx)
ij3 = 1 + j*(mgs->nx+1);
mgs->bx[ij] = ((dx2*dy2)*mgs->sx[ij] + mgs->mu*dy2*(mgs->bx[ij1] + mgs->bx[ij3])
+ mgs->mu*dx2*(mgs->bx[ij2] + mgs->bx[ij4]))/(dx2*dy2 + 2*mgs->mu*(dx2+dy2));
mgs->bz[ij] = ((dx2*dy2)*mgs->sz[ij] + mgs->mu*dy2*(mgs->bz[ij1] + mgs->bz[ij3])
+ mgs->mu*dx2*(mgs->bz[ij2] + mgs->bz[ij4]))/(dx2*dy2 + 2*mgs->mu*(dx2+dy2));
}
}
};
} |
Partager