ñ¨øö変üµÌõ数ªòéΤªÆ¡¢òÁÊÇñ¨øöì¤èâªÎͪߩªòªäªÃªÆªßªèª¦¡£

ñ¨øö変üµÌõ数ªòéΤªëªÈù»ªÎªèª¦ªÊÌ«í­ªâíªìªë¡£

参ÍÅ£º×µ体ͪߩªÈó¬ÝÂÛö¡¢ßÍê«・ùÁõ½îÊßö

x, yñ¨øöͧª«ªé×âßÌîܪʥî, ¥çñ¨øöͧªË칪·ªÆÍªß©ªòú¼ª¦¡£¥î, ¥çªÎñ¨øöͧªÇªÏ¡¢¥Ä¥î, ¥Ä¥çªÏ1ªÇª¢ªê¡¢òÁÞÌÊÇû¡ªÇª¢ªë¡£図3.20ªÎªèª¦ªË実ð·ªÎx, yñ¨øöͧªÇ¡¢(a)ªÎªèª¦ªËíªêơ¢ñ¨øö変üµÌõ数ªòéΤªëª³ªÈªÇ¡¢Íªß©内ªÇªÏ(b)ªÎªèª¦ªÊÌ«í­ªÇªÎͪߩªËªÊªë¡£変üµªÎÞÂÛ°ªÏÊÛ単ªÇª¢ªë¡£

2ó­êªñ¨øöͧªÎ1ó­ø¶Ú°ÝÂÛ°ïïãÒªÎíÞùêªÏß¾ªÎãҪΪ誦ªË変üµª·ªÆª¢ª²ªëªÈª¤ª¤¡£ª³ª³ªÇ¡¢

ªÈªÏÜÅ÷תËó¬Ýª·ªÆÏ´ªáªìªÐª¤ª¤¡£ ¥Ä¥î, ¥Ä¥çªÏ1¡£ª·ª«ª·¡¢ªÏÏ´ªáªëù±é©ª¬ª¢ªë¡£Ï´ªáÛ°ªÏܬòµªÇÛժ롣£¨3ó­êªªÀªÈ9ªÄ£©

2ó­ø¶Ú°ÝÂÛ°ïïãÒªÎíÞùêì¤ù»ªÎªèª¦ªË変üµª¹ªëª¬¡¢

ªÎªèª¦ªËªÞªÈªáªÆïÚ×⪷ª¿ªÛª¦ª¬¡¢ý­ªÇ楽ªËªÊªë¡£ªÞªÈªáª¿ªÈª­ªÎ¡¢ãÒªÏܬòµªÇÛժ롣

ªÈª­ªÎÏ´ªáªÊª±ªìªÐªÊªéªÊª¤変数ªÈª·ªÆªÏ¡¢

ªÎ2ªÄªÇª¢ªë¡££¨3ó­êªªÎíÞùêªÏ3ªÄ£©ª³ªÎ変数ªòÏ´ªáÛ°ªâܬòµªÇÛժ롣

ñ¼ëò£¡£¡ù±ªºí»ªéòµªÇªÞªÈªáªÆªßªëª³ªÈ¡£

 

ý­ªÏ¡¢Navier-StokesãÒªòñ¨øö変üµª·ªÆ¡¢ª½ªìªòÐѪުǪΪ誦ªËó¬ÝªÇͪߩª¹ªìªÐª¤ª¤¡£

2ó­êªªÎíÞùꡢϴªáªÊª¤ªÈª¤ª±ªÊª¤変数6ªÄªò໪ËÏ´ªáªë¡££¨n«ëー«×ªÎîñ£©

ì¤îñͪߩª·ª¿Î·内×µªìªÎC«³ー«Éª«ªéáóï᪹ªìªÐª¤ª¤¡£ì¤ù»ªÏáóï᪷ª¿«³ー«ÉªÇª¢ªë¡£

#include <iostream>

#include <fstream>

#include <cmath>

#include <time.h>

#include <cstdlib>

#include <cstring>

#include <stdio.h>

#include <omp.h>

using namespace std;

#define IMAX 100

#define JMAX 20

#define NMAX 500

#define dt 0.01

#define dx 0.1

#define dy 0.1

#define Re 100.0

int n = 0;

void initialization_values(double u0[][IMAX + 1], double u[][IMAX + 1], double v0[][IMAX + 1], double v[][IMAX + 1], double p0[][IMAX + 1], double rhs[][IMAX + 1],

                  double x0[][IMAX + 1], double y0[][IMAX + 1], double us[][IMAX + 1], double vs[][IMAX + 1], double i0x[][IMAX + 1], double i0y[][IMAX + 1],

                  double j0x[][IMAX + 1], double j0y[][IMAX + 1], double d2i[][IMAX + 1], double d2j[][IMAX + 1]) {

                  int i, j;

#pragma omp parallel for private(i)

                  for (j = 0; j < JMAX + 1; j++) {

                                    for (i = 0; i < IMAX + 1; i++) {

                                                     u0[j][i] = 0.0;

                                                     u[j][i] = 0.0;

                                                     v0[j][i] = 0.0;

                                                     v[j][i] = 0.0;

                                                     p0[j][i] = 0.0;

                                                     rhs[j][i] = 0.0;

                                                     x0[j][i] = 0.0;

                                                     y0[j][i] = 0.0;

                                                     us[j][i] = 0.0;

                                                     vs[j][i] = 0.0;

                                                     i0x[j][i] = 0.0;

                                                     i0y[j][i] = 0.0;

                                                     j0x[j][i] = 0.0;

                                                     j0y[j][i] = 0.0;

                                                     d2i[j][i] = 0.0;

                                                     d2j[j][i] = 0.0;

                                    }

                  }

}

void domain(double x0[][IMAX + 1], double y0[][IMAX + 1]) {

                  int i, j;

#pragma omp parallel for private(i)

                  for (j = 0; j < JMAX + 1; j++) {

                                    for (i = 0; i < IMAX + 1; i++) {

                                                     x0[j][i] = dx * (double)i;

                                                     y0[j][i] = dy * (double)j;

                                    }

                  }

}

void change_domain_calculation(double x0[][IMAX + 1], double y0[][IMAX + 1], double i0x[][IMAX + 1], double i0y[][IMAX + 1],

                  double j0x[][IMAX + 1], double j0y[][IMAX + 1], double d2i[][IMAX + 1], double d2j[][IMAX + 1]) {

                  double J, kvx, kvy, x0i, y0i, x0j, y0j;

                  int i, j;

#pragma omp parallel for private(i, J, kvx, kvy, x0i, y0i, x0j, y0j)

                  for (j = 1; j < JMAX; j++) {

                                    for (i = 1; i < IMAX; i++) {

                                                     x0i = (-x0[j][i - 1] + x0[j][i + 1])*0.5;

                                                     y0i = (-y0[j][i - 1] + y0[j][i + 1])*0.5;

                                                     x0j = (-x0[j - 1][i] + x0[j + 1][i])*0.5;

                                                     y0j = (-y0[j - 1][i] + y0[j + 1][i])*0.5;

                                                     J = x0i * y0j - x0j * y0i;

                                                     i0x[j][i] = y0j / J;

                                                     i0y[j][i] = -x0j / J;

                                                     j0x[j][i] = -y0i / J;

                                                     j0y[j][i] = x0i / J;

                                                     kvx = (i0x[j][i] * i0x[j][i] + i0y[j][i] * i0y[j][i])*(x0[j][i - 1] + x0[j][i + 1] - 2.0 * x0[j][i])

                                                                       + (j0x[j][i] * j0x[j][i] + j0y[j][i] * j0y[j][i])*(x0[j - 1][i] + x0[j + 1][i] - 2.0 * x0[j][i])

                                                                       + 2.0*(i0x[j][i] * j0x[j][i] + i0y[j][i] * j0y[j][i])*(x0[j - 1][i - 1] - x0[j - 1][i + 1] - x0[j + 1][i - 1] + x0[j + 1][i + 1])*0.25;

                                                     kvy = (i0x[j][i] * i0x[j][i] + i0y[j][i] * i0y[j][i])*(y0[j][i - 1] + y0[j][i + 1] - 2.0 * y0[j][i])

                                                                       + (j0x[j][i] * j0x[j][i] + j0y[j][i] * j0y[j][i])*(y0[j - 1][i] + y0[j + 1][i] - 2.0 * y0[j][i])

                                                                       + 2.0*(i0x[j][i] * j0x[j][i] + i0y[j][i] * j0y[j][i])*(y0[j - 1][i - 1] - y0[j - 1][i + 1] - y0[j + 1][i - 1] + y0[j + 1][i + 1])*0.25;

                                                     d2i[j][i] = (-kvx * y0j + kvy * x0j) / J;

                                                     d2j[j][i] = (kvx * y0i - kvy * x0i) / J;

 

                                    }

                  }

}

void initial_condition(double u0[][IMAX + 1], double v0[][IMAX + 1]) {

                  int i, j;

#pragma omp parallel for private(i)

                  for (j = 0; j < JMAX + 1; j++) {

                                    for (i = 0; i < IMAX + 1; i++) {

                                                     u0[j][i] = 1.0;

                                                     v0[j][i] = 0.0;

                                    }

                  }

}

void vel_boundary_condition(double u0[][IMAX + 1], double v0[][IMAX + 1]) {

                  int i, j;

#pragma omp parallel for

                  for (i = 0; i < IMAX + 1; i++) {

                                    u0[0][i] = 0.0;

                                    v0[0][i] = 0.0;

                                    u0[JMAX][i] = 0.0;

                                    v0[JMAX][i] = 0.0;

                  }

#pragma omp parallel for

                  for (j = 0; j < JMAX + 1; j++) {

                                    u0[j][0] = 1.0;

                                    v0[j][0] = 0.0;

                                    u0[j][IMAX] = u0[j][IMAX - 1];

                                    v0[j][IMAX] = v0[j][IMAX - 1];

                  }

}

void pre_boundary_condition(double p0[][IMAX + 1]) {

                  int i, j;

#pragma omp parallel for

                  for (i = 0; i < IMAX + 1; i++) {

                                    p0[0][i] = p0[1][i];

                                    p0[JMAX][i] = p0[JMAX - 1][i];

                  }

#pragma omp parallel for

                  for (j = 0; j < JMAX + 1; j++) {

                                    p0[j][0] = 0.0;

                                    p0[j][IMAX] = p0[j][IMAX - 1];

                  }

}

void rhs_calculation(double u0[][IMAX + 1], double v0[][IMAX + 1], double rhs[][IMAX + 1], double i0x[][IMAX + 1], double i0y[][IMAX + 1],

                  double j0x[][IMAX + 1], double j0y[][IMAX + 1]) {

                  double umi1, vmi1, upi1, vpi1, umj1, vmj1, upj1, vpj1, ix, iy, jx, jy;

                  int i, j;

#pragma omp parallel for private(i, umi1, vmi1, upi1, vpi1, umj1, vmj1, upj1, vpj1, ix, iy, jx, jy)

                  for (j = 1; j < JMAX; j++) {

                                    for (i = 1; i < IMAX; i++) {

                                                     ix = i0x[j][i];

                                                     jx = j0x[j][i];

                                                     iy = i0y[j][i];

                                                     jy = j0y[j][i];

                                                     umi1 = u0[j][i - 1];

                                                     vmi1 = v0[j][i - 1];

                                                     upi1 = u0[j][i + 1];

                                                     vpi1 = v0[j][i + 1];

                                                     umj1 = u0[j - 1][i];

                                                     vmj1 = v0[j - 1][i];

                                                     upj1 = u0[j + 1][i];

                                                     vpj1 = v0[j + 1][i];

                                                     rhs[j][i] = ((-umi1 + upi1)*ix + (-umj1 + upj1)*jx + (-vmi1 + vpi1)*iy + (-vmj1 + vpj1)*jy)*0.5 / dt

                                                                       - (((-umi1 + upi1)*ix + (-umj1 + upj1)*jx) * ((-umi1 + upi1)*ix + (-umj1 + upj1)*jx))*0.25

                                                                       - (((-vmi1 + vpi1)*iy + (-vmj1 + vpj1)*jy) * ((-vmi1 + vpi1)*iy + (-vmj1 + vpj1)*jy))*0.25

                                                                       - 0.5 * (((-vmi1 + vpi1)*ix + (-vmj1 + vpj1)*jx) * ((-umi1 + upi1)*iy + (-umj1 + upj1)*jy));

                                    }

                  }

}

void pre_calculation(double p0[][IMAX + 1], double rhs[][IMAX + 1], double i0x[][IMAX + 1], double i0y[][IMAX + 1],

                  double j0x[][IMAX + 1], double j0y[][IMAX + 1], double d2i[][IMAX + 1], double d2j[][IMAX + 1]) {

                  double p000, pmi1, ppi1, pmj1, ppj1, pmm1, ppp1, pmp1, ppm1, ix, iy, jx, jy, di, dj, SGM = 1.05;

                  int i, j;

#pragma omp parallel for private(i,p000, pmi1, ppi1, pmj1, ppj1, pmm1, ppp1, pmp1, ppm1, ix, iy, jx, jy, di, dj) firstprivate(SGM)         

                  for (j = 1; j < JMAX; j += 2) {

                                    for (i = 1; i < IMAX; i++) {

                                                     ix = i0x[j][i];

                                                     jx = j0x[j][i];

                                                     iy = i0y[j][i];

                                                     jy = j0y[j][i];

                                                     di = d2i[j][i];

                                                     dj = d2j[j][i];

                                                     p000 = p0[j][i];

                                                     pmi1 = p0[j][i - 1];

                                                     ppi1 = p0[j][i + 1];

                                                     pmj1 = p0[j - 1][i];

                                                     ppj1 = p0[j + 1][i];

                                                     pmm1 = p0[j - 1][i - 1];

                                                     ppp1 = p0[j + 1][i + 1];

                                                     pmp1 = p0[j - 1][i + 1];

                                                     ppm1 = p0[j + 1][i - 1];

                                                     p0[j][i] = (

                                                                       (ix * ix + iy * iy)*(pmi1 + ppi1) + (jx * jx + jy * jy)*(pmj1 + ppj1)

                                                                       + 2.0*(ix * jx + iy * jy)*(pmm1 - pmp1 - ppm1 + ppp1)

                                                                       + di * (-pmi1 + ppi1)*0.5 + dj * (-pmj1 + ppj1)*0.5

                                                                       - rhs[j][i]) / (2.0*(ix * ix + iy * iy + jx * jx + jy * jy));

                                                     p0[j][i] = p000 + SGM * (p0[j][i] - p000);

                                    }

                  }

#pragma omp parallel for private(i,p000, pmi1, ppi1, pmj1, ppj1, pmm1, ppp1, pmp1, ppm1, ix, iy, jx, jy, di, dj) firstprivate(SGM)

                  for (j = 2; j < JMAX; j += 2) {

                                    for (i = 1; i < IMAX; i++) {

                                                     ix = i0x[j][i];

                                                     jx = j0x[j][i];

                                                     iy = i0y[j][i];

                                                     jy = j0y[j][i];

                                                     di = d2i[j][i];

                                                     dj = d2j[j][i];

                                                     p000 = p0[j][i];

                                                     pmi1 = p0[j][i - 1];

                                                     ppi1 = p0[j][i + 1];

                                                     pmj1 = p0[j - 1][i];

                                                     ppj1 = p0[j + 1][i];

                                                     pmm1 = p0[j - 1][i - 1];

                                                     ppp1 = p0[j + 1][i + 1];

                                                     pmp1 = p0[j - 1][i + 1];

                                                     ppm1 = p0[j + 1][i - 1];

                                                     p0[j][i] = (

                                                                       (ix * ix + iy * iy)*(pmi1 + ppi1) + (jx * jx + jy * jy)*(pmj1 + ppj1)

                                                                       + 2.0*(ix * jx + iy * jy)*(pmm1 - pmp1 - ppm1 + ppp1)

                                                                       + di * (-pmi1 + ppi1)*0.5 + dj * (-pmj1 + ppj1)*0.5

                                                                       - rhs[j][i]) / (2.0*(ix * ix + iy * iy + jx * jx + jy * jy));

                                                     p0[j][i] = p000 + SGM * (p0[j][i] - p000);

                                    }

                  }

}

void vel_explicit_calculation(double u0[][IMAX + 1], double u[][IMAX + 1], double v0[][IMAX + 1], double v[][IMAX + 1], double p0[][IMAX + 1], double us[][IMAX + 1], double vs[][IMAX + 1],

                  double i0x[][IMAX + 1], double i0y[][IMAX + 1], double j0x[][IMAX + 1], double j0y[][IMAX + 1], double d2i[][IMAX + 1], double d2j[][IMAX + 1]) {

                  double u000, umi1, upi1, umj1, upj1, umi2, upi2, umj2, upj2,

                                    v000, vmi1, vpi1, vmj1, vpj1, vmi2, vpi2, vmj2, vpj2,

                                    rhs_u, rhs_v, ix, iy, jx, jy, di, dj, umm1, upp1, ump1, upm1, vmm1, vpp1, vmp1, vpm1,

                                    pmi1, ppi1, pmj1, ppj1;

                  int i, j;

#pragma omp parallel for private(i, u000, umi1, upi1, umj1, upj1, umi2, upi2, umj2, upj2, v000, vmi1, vpi1, vmj1, vpj1, vmi2, vpi2, vmj2, vpj2, rhs_u, rhs_v, ix, iy, jx, jy, di, dj, umm1, upp1, ump1, upm1, vmm1, vpp1, vmp1, vpm1, pmi1, ppi1, pmj1, ppj1)

                  for (j = 2; j < JMAX - 1; j++) {

                                    for (i = 2; i < IMAX - 1; i++) {

                                                     u000 = u[j][i];

                                                     v000 = v[j][i];

                                                     umi1 = u[j][i - 1];

                                                     vmi1 = v[j][i - 1];

                                                     upi1 = u[j][i + 1];

                                                     vpi1 = v[j][i + 1];

                                                     umj1 = u[j - 1][i];

                                                     vmj1 = v[j - 1][i];

                                                     upj1 = u[j + 1][i];

                                                     vpj1 = v[j + 1][i];

                                                     umi2 = u[j][i - 2];

                                                     vmi2 = v[j][i - 2];

                                                     upi2 = u[j][i + 2];

                                                     vpi2 = v[j][i + 2];

                                                     umj2 = u[j - 2][i];

                                                     vmj2 = v[j - 2][i];

                                                     upj2 = u[j + 2][i];

                                                     vpj2 = v[j + 2][i];

                                                     umm1 = u[j - 1][i - 1];

                                                     upp1 = u[j + 1][i + 1];

                                                     ump1 = u[j - 1][i + 1];

                                                     upm1 = u[j + 1][i - 1];

                                                     vmm1 = v[j - 1][i - 1];

                                                     vpp1 = v[j + 1][i + 1];

                                                     vmp1 = v[j - 1][i + 1];

                                                     vpm1 = v[j + 1][i - 1];

                                                     ix = i0x[j][i];

                                                     jx = j0x[j][i];

                                                     iy = i0y[j][i];

                                                     jy = j0y[j][i];

                                                     di = d2i[j][i];

                                                      dj = d2j[j][i];

                                                     pmi1 = p0[j][i - 1];

                                                     ppi1 = p0[j][i + 1];

                                                     pmj1 = p0[j - 1][i];

                                                     ppj1 = p0[j + 1][i];

                                                     rhs_u = ((ix * ix + iy * iy)*(umi1 + upi1 - 2.0*u000) + (jx * jx + jy * jy)*(umj1 + upj1 - 2.0*u000)

                                                                       + 2.0*(ix * jx + iy * jy)*(umm1 - ump1 - upm1 + upp1)

                                                                       + di * (-umi1 + upi1)*0.5 + dj * (-umj1 + upj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *ix + (-pmj1 + ppj1)*jx)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(umi2 + 8.0*(-umi1 + upi1) - upi2) + fabs(u000*ix + v000 * iy)*(umi2 - 4.0*(umi1 + upi1) + upi2 + 6.0*u000)) / 12.0

                                                                                         + ((u000*jx + v000 * jy)*(umj2 + 8.0*(-umj1 + upj1) - upj2) + fabs(u000*jx + v000 * jy)*(umj2 - 4.0*(umj1 + upj1) + upj2 + 6.0*u000)) / 12.0

                                                                                         );

                                                     rhs_v = ((ix * ix + iy * iy)*(vmi1 + vpi1 - 2.0*v000) + (jx * jx + jy * jy)*(vmj1 + vpj1 - 2.0*v000)

                                                                       + 2.0*(ix * jx + iy * jy)*(vmm1 - vmp1 - vpm1 + vpp1)

                                                                       + di * (-vmi1 + vpi1)*0.5 + dj * (-vmj1 + vpj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *iy + (-pmj1 + ppj1)*jy)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(vmi2 + 8.0*(-vmi1 + vpi1) - vpi2) + fabs(u000*ix + v000 * iy)*(vmi2 - 4.0*(vmi1 + vpi1) + vpi2 + 6.0*v000)) / 12.0

                                                                                         + ((u000*jx + v000 * jy)*(vmj2 + 8.0*(-vmj1 + vpj1) - vpj2) + fabs(u000*jx + v000 * jy)*(vmj2 - 4.0*(vmj1 + vpj1) + vpj2 + 6.0*v000)) / 12.0

                                                                                         );

                                                     u0[j][i] = u000 + dt * 0.5*(3.0*rhs_u - us[j][i]);

                                                     v0[j][i] = v000 + dt * 0.5*(3.0*rhs_v - vs[j][i]);

                                                     us[j][i] = rhs_u;

                                                     vs[j][i] = rhs_v;

                                    }

                  }

                  for (j = 1; j < JMAX; j += JMAX - 2) {

#pragma omp parallel for private(u000, umi1, upi1, umj1, upj1, v000, vmi1, vpi1, vmj1, vpj1, rhs_u, rhs_v, ix, iy, jx, jy, di, dj, umm1, upp1, ump1, upm1, vmm1, vpp1, vmp1, vpm1, pmi1, ppi1, pmj1, ppj1)

                                    for (i = 1; i < IMAX; i++) {

                                                     u000 = u[j][i];

                                                     v000 = v[j][i];

                                                     umi1 = u[j][i - 1];

                                                     vmi1 = v[j][i - 1];

                                                      upi1 = u[j][i + 1];

                                                     vpi1 = v[j][i + 1];

                                                     umj1 = u[j - 1][i];

                                                     vmj1 = v[j - 1][i];

                                                     upj1 = u[j + 1][i];

                                                     vpj1 = v[j + 1][i];

                                                     umm1 = u[j - 1][i - 1];

                                                     upp1 = u[j + 1][i + 1];

                                                     ump1 = u[j - 1][i + 1];

                                                     upm1 = u[j + 1][i - 1];

                                                     vmm1 = v[j - 1][i - 1];

                                                     vpp1 = v[j + 1][i + 1];

                                                     vmp1 = v[j - 1][i + 1];

                                                     vpm1 = v[j + 1][i - 1];

                                                     ix = i0x[j][i];

                                                     jx = j0x[j][i];

                                                     iy = i0y[j][i];

                                                     jy = j0y[j][i];

                                                     di = d2i[j][i];

                                                     dj = d2j[j][i];

                                                     pmi1 = p0[j][i - 1];

                                                     ppi1 = p0[j][i + 1];

                                                     pmj1 = p0[j - 1][i];

                                                     ppj1 = p0[j + 1][i];

                                                     rhs_u = ((ix * ix + iy * iy)*(umi1 + upi1 - 2.0*u000) + (jx * jx + jy * jy)*(umj1 + upj1 - 2.0*u000)

                                                                       + 2.0*(ix * jx + iy * jy)*(umm1 - ump1 - upm1 + upp1)

                                                                       + di * (-umi1 + upi1)*0.5 + dj * (-umj1 + upj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *ix + (-pmj1 + ppj1)*jx)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(-umi1 + upi1) + fabs(u000*ix + v000 * iy)*(-umi1 - upi1 + 2.0*u000)) *0.5

                                                                                         + ((u000*jx + v000 * jy)*(-umj1 + upj1) + fabs(u000*jx + v000 * jy)*(-umj1 - upj1 + 2.0*u000)) *0.5

                                                                                         );

                                                     rhs_v = ((ix * ix + iy * iy)*(vmi1 + vpi1 - 2.0*v000) + (jx * jx + jy * jy)*(vmj1 + vpj1 - 2.0*v000)

                                                                       + 2.0*(ix * jx + iy * jy)*(vmm1 - vmp1 - vpm1 + vpp1)

                                                                       + di * (-vmi1 + vpi1)*0.5 + dj * (-vmj1 + vpj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *iy + (-pmj1 + ppj1)*jy)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(-vmi1 + vpi1) + fabs(u000*ix + v000 * iy)*(-vmi1 - vpi1 + 2.0*v000)) *0.5

                                                                                         + ((u000*jx + v000 * jy)*(-vmj1 + vpj1) + fabs(u000*jx + v000 * jy)*(-vmj1 - vpj1 + 2.0*v000)) *0.5

                                                                                         );

                                                     u0[j][i] = u000 + dt * 0.5*(3.0*rhs_u - us[j][i]);

                                                     v0[j][i] = v000 + dt * 0.5*(3.0*rhs_v - vs[j][i]);

                                                     us[j][i] = rhs_u;

                                                     vs[j][i] = rhs_v;

                                    }

                  }

#pragma omp parallel for private(i, u000, umi1, upi1, umj1, upj1, v000, vmi1, vpi1, vmj1, vpj1, rhs_u, rhs_v, ix, iy, jx, jy, di, dj, umm1, upp1, ump1, upm1, vmm1, vpp1, vmp1, vpm1, pmi1, ppi1, pmj1, ppj1)

                  for (j = 2; j < JMAX - 1; j++) {

                                    for (i = 1; i < IMAX; i += IMAX - 2) {

                                                     u000 = u[j][i];

                                                     v000 = v[j][i];

                                                      umi1 = u[j][i - 1];

                                                     vmi1 = v[j][i - 1];

                                                     upi1 = u[j][i + 1];

                                                     vpi1 = v[j][i + 1];

                                                     umj1 = u[j - 1][i];

                                                     vmj1 = v[j - 1][i];

                                                     upj1 = u[j + 1][i];

                                                     vpj1 = v[j + 1][i];

                                                     umm1 = u[j - 1][i - 1];

                                                     upp1 = u[j + 1][i + 1];

                                                     ump1 = u[j - 1][i + 1];

                                                     upm1 = u[j + 1][i - 1];

                                                     vmm1 = v[j - 1][i - 1];

                                                     vpp1 = v[j + 1][i + 1];

                                                     vmp1 = v[j - 1][i + 1];

                                                     vpm1 = v[j + 1][i - 1];

                                                     ix = i0x[j][i];

                                                     jx = j0x[j][i];

                                                     iy = i0y[j][i];

                                                     jy = j0y[j][i];

                                                     di = d2i[j][i];

                                                     dj = d2j[j][i];

                                                     pmi1 = p0[j][i - 1];

                                                     ppi1 = p0[j][i + 1];

                                                     pmj1 = p0[j - 1][i];

                                                     ppj1 = p0[j + 1][i];

                                                     rhs_u = ((ix * ix + iy * iy)*(umi1 + upi1 - 2.0*u000) + (jx * jx + jy * jy)*(umj1 + upj1 - 2.0*u000)

                                                                       + 2.0*(ix * jx + iy * jy)*(umm1 - ump1 - upm1 + upp1)

                                                                       + di * (-umi1 + upi1)*0.5 + dj * (-umj1 + upj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *ix + (-pmj1 + ppj1)*jx)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(-umi1 + upi1) + fabs(u000*ix + v000 * iy)*(-umi1 - upi1 + 2.0*u000)) *0.5

                                                                                         + ((u000*jx + v000 * jy)*(-umj1 + upj1) + fabs(u000*jx + v000 * jy)*(-umj1 - upj1 + 2.0*u000)) *0.5

                                                                                         );

                                                     rhs_v = ((ix * ix + iy * iy)*(vmi1 + vpi1 - 2.0*v000) + (jx * jx + jy * jy)*(vmj1 + vpj1 - 2.0*v000)

                                                                       + 2.0*(ix * jx + iy * jy)*(vmm1 - vmp1 - vpm1 + vpp1)

                                                                       + di * (-vmi1 + vpi1)*0.5 + dj * (-vmj1 + vpj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *iy + (-pmj1 + ppj1)*jy)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(-vmi1 + vpi1) + fabs(u000*ix + v000 * iy)*(-vmi1 - vpi1 + 2.0*v000)) *0.5

                                                                                         + ((u000*jx + v000 * jy)*(-vmj1 + vpj1) + fabs(u000*jx + v000 * jy)*(-vmj1 - vpj1 + 2.0*v000)) *0.5

                                                                                         );

                                                     u0[j][i] = u000 + dt * 0.5*(3.0*rhs_u - us[j][i]);

                                                     v0[j][i] = v000 + dt * 0.5*(3.0*rhs_v - vs[j][i]);

                                                     us[j][i] = rhs_u;

                                                     vs[j][i] = rhs_v;

                                    }

                  }

}

void vel_implicit_calculation(double u0[][IMAX + 1], double u[][IMAX + 1], double v0[][IMAX + 1], double v[][IMAX + 1], double p0[][IMAX + 1], double us[][IMAX + 1], double vs[][IMAX + 1],

                  double i0x[][IMAX + 1], double i0y[][IMAX + 1], double j0x[][IMAX + 1], double j0y[][IMAX + 1], double d2i[][IMAX + 1], double d2j[][IMAX + 1]) {

                  double u000, umi1, upi1, umj1, upj1, umi2, upi2, umj2, upj2,

                                    v000, vmi1, vpi1, vmj1, vpj1, vmi2, vpi2, vmj2, vpj2,

                                    rhs_u, rhs_v, leftvel, SGM2 = 1.05, ix, iy, jx, jy, di, dj, umm1, upp1, ump1, upm1, vmm1, vpp1, vmp1, vpm1,

                                    pmi1, ppi1, pmj1, ppj1;

                  int i, j;

#pragma omp parallel for private(i, u000, umi1, upi1, umj1, upj1, umi2, upi2, umj2, upj2, v000, vmi1, vpi1, vmj1, vpj1, vmi2, vpi2, vmj2, vpj2, rhs_u, rhs_v, leftvel, ix, iy, jx, jy, di, dj, umm1, upp1, ump1, upm1, vmm1, vpp1, vmp1, vpm1, pmi1, ppi1, pmj1, ppj1) firstprivate(SGM2)

                  for (j = 2; j < JMAX - 1; j += 3) {

                                    for (i = 2; i < IMAX - 1; i++) {

                                                     u000 = u0[j][i];

                                                     v000 = v0[j][i];

                                                     umi1 = u0[j][i - 1];

                                                     vmi1 = v0[j][i - 1];

                                                     upi1 = u0[j][i + 1];

                                                     vpi1 = v0[j][i + 1];

                                                     umj1 = u0[j - 1][i];

                                                     vmj1 = v0[j - 1][i];

                                                     upj1 = u0[j + 1][i];

                                                     vpj1 = v0[j + 1][i];

                                                     umi2 = u0[j][i - 2];

                                                     vmi2 = v0[j][i - 2];

                                                     upi2 = u0[j][i + 2];

                                                     vpi2 = v0[j][i + 2];

                                                     umj2 = u0[j - 2][i];

                                                     vmj2 = v0[j - 2][i];

                                                     upj2 = u0[j + 2][i];

                                                     vpj2 = v0[j + 2][i];

                                                     umm1 = u0[j - 1][i - 1];

                                                     upp1 = u0[j + 1][i + 1];

                                                     ump1 = u0[j - 1][i + 1];

                                                     upm1 = u0[j + 1][i - 1];

                                                     vmm1 = v0[j - 1][i - 1];

                                                     vpp1 = v0[j + 1][i + 1];

                                                     vmp1 = v0[j - 1][i + 1];

                                                     vpm1 = v0[j + 1][i - 1];

                                                     ix = i0x[j][i];

                                                     jx = j0x[j][i];

                                                     iy = i0y[j][i];

                                                     jy = j0y[j][i];

                                                     di = d2i[j][i];

                                                     dj = d2j[j][i];

                                                     pmi1 = p0[j][i - 1];

                                                     ppi1 = p0[j][i + 1];

                                                     pmj1 = p0[j - 1][i];

                                                     ppj1 = p0[j + 1][i];

                                                     leftvel = 2.0*(ix * ix + iy * iy + jx * jx + jy * jy) / Re + (fabs(u000*ix + v000 * iy) + fabs(u000*jx + v000 * jy))*0.5;

                                                     rhs_u = ((ix * ix + iy * iy)*(umi1 + upi1) + (jx * jx + jy * jy)*(umj1 + upj1)

                                                                       + 2.0*(ix * jx + iy * jy)*(umm1 - ump1 - upm1 + upp1)

                                                                       + di * (-umi1 + upi1)*0.5 + dj * (-umj1 + upj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *ix + (-pmj1 + ppj1)*jx)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(umi2 + 8.0*(-umi1 + upi1) - upi2) + fabs(u000*ix + v000 * iy)*(umi2 - 4.0*(umi1 + upi1) + upi2)) / 12.0

                                                                                         + ((u000*jx + v000 * jy)*(umj2 + 8.0*(-umj1 + upj1) - upj2) + fabs(u000*jx + v000 * jy)*(umj2 - 4.0*(umj1 + upj1) + upj2)) / 12.0

                                                                                         );

                                                     rhs_v = ((ix * ix + iy * iy)*(vmi1 + vpi1) + (jx * jx + jy * jy)*(vmj1 + vpj1)

                                                                       + 2.0*(ix * jx + iy * jy)*(vmm1 - vmp1 - vpm1 + vpp1)

                                                                       + di * (-vmi1 + vpi1)*0.5 + dj * (-vmj1 + vpj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *iy + (-pmj1 + ppj1)*jy)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(vmi2 + 8.0*(-vmi1 + vpi1) - vpi2) + fabs(u000*ix + v000 * iy)*(vmi2 - 4.0*(vmi1 + vpi1) + vpi2)) / 12.0

                                                                                         + ((u000*jx + v000 * jy)*(vmj2 + 8.0*(-vmj1 + vpj1) - vpj2) + fabs(u000*jx + v000 * jy)*(vmj2 - 4.0*(vmj1 + vpj1) + vpj2)) / 12.0

                                                                                         );

                                                     u0[j][i] = (u[j][i] + dt * 0.5 * (rhs_u + us[j][i])) / (1.0 + dt * 0.5 * leftvel);

                                                     v0[j][i] = (v[j][i] + dt * 0.5 * (rhs_v + vs[j][i])) / (1.0 + dt * 0.5 * leftvel);

                                                     u0[j][i] = u000 + SGM2 * (u0[j][i] - u000);

                                                     v0[j][i] = v000 + SGM2 * (v0[j][i] - v000);

                                    }

                  }

#pragma omp parallel for private(i, u000, umi1, upi1, umj1, upj1, umi2, upi2, umj2, upj2, v000, vmi1, vpi1, vmj1, vpj1, vmi2, vpi2, vmj2, vpj2, rhs_u, rhs_v, leftvel, ix, iy, jx, jy, di, dj, umm1, upp1, ump1, upm1, vmm1, vpp1, vmp1, vpm1, pmi1, ppi1, pmj1, ppj1) firstprivate(SGM2)

                  for (j = 3; j < JMAX - 1; j += 3) {

                                    for (i = 2; i < IMAX - 1; i++) {

                                                     u000 = u0[j][i];

                                                     v000 = v0[j][i];

                                                     umi1 = u0[j][i - 1];

                                                     vmi1 = v0[j][i - 1];

                                                     upi1 = u0[j][i + 1];

                                                     vpi1 = v0[j][i + 1];

                                                     umj1 = u0[j - 1][i];

                                                     vmj1 = v0[j - 1][i];

                                                     upj1 = u0[j + 1][i];

                                                     vpj1 = v0[j + 1][i];

                                                     umi2 = u0[j][i - 2];

                                                     vmi2 = v0[j][i - 2];

                                                     upi2 = u0[j][i + 2];

                                                     vpi2 = v0[j][i + 2];

                                                     umj2 = u0[j - 2][i];

                                                     vmj2 = v0[j - 2][i];

                                                     upj2 = u0[j + 2][i];

                                                     vpj2 = v0[j + 2][i];

                                                     umm1 = u0[j - 1][i - 1];

                                                     upp1 = u0[j + 1][i + 1];

                                                     ump1 = u0[j - 1][i + 1];

                                                     upm1 = u0[j + 1][i - 1];

                                                     vmm1 = v0[j - 1][i - 1];

                                                     vpp1 = v0[j + 1][i + 1];

                                                     vmp1 = v0[j - 1][i + 1];

                                                     vpm1 = v0[j + 1][i - 1];

                                                     ix = i0x[j][i];

                                                     jx = j0x[j][i];

                                                     iy = i0y[j][i];

                                                     jy = j0y[j][i];

                                                     di = d2i[j][i];

                                                     dj = d2j[j][i];

                                                     pmi1 = p0[j][i - 1];

                                                     ppi1 = p0[j][i + 1];

                                                     pmj1 = p0[j - 1][i];

                                                     ppj1 = p0[j + 1][i];

                                                     leftvel = 2.0*(ix * ix + iy * iy + jx * jx + jy * jy) / Re + (fabs(u000*ix + v000 * iy) + fabs(u000*jx + v000 * jy))*0.5;

                                                     rhs_u = ((ix * ix + iy * iy)*(umi1 + upi1) + (jx * jx + jy * jy)*(umj1 + upj1)

                                                                       + 2.0*(ix * jx + iy * jy)*(umm1 - ump1 - upm1 + upp1)

                                                                       + di * (-umi1 + upi1)*0.5 + dj * (-umj1 + upj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *ix + (-pmj1 + ppj1)*jx)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(umi2 + 8.0*(-umi1 + upi1) - upi2) + fabs(u000*ix + v000 * iy)*(umi2 - 4.0*(umi1 + upi1) + upi2)) / 12.0

                                                                                         + ((u000*jx + v000 * jy)*(umj2 + 8.0*(-umj1 + upj1) - upj2) + fabs(u000*jx + v000 * jy)*(umj2 - 4.0*(umj1 + upj1) + upj2)) / 12.0

                                                                                         );

                                                     rhs_v = ((ix * ix + iy * iy)*(vmi1 + vpi1) + (jx * jx + jy * jy)*(vmj1 + vpj1)

                                                                       + 2.0*(ix * jx + iy * jy)*(vmm1 - vmp1 - vpm1 + vpp1)

                                                                       + di * (-vmi1 + vpi1)*0.5 + dj * (-vmj1 + vpj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *iy + (-pmj1 + ppj1)*jy)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(vmi2 + 8.0*(-vmi1 + vpi1) - vpi2) + fabs(u000*ix + v000 * iy)*(vmi2 - 4.0*(vmi1 + vpi1) + vpi2)) / 12.0

                                                                                         + ((u000*jx + v000 * jy)*(vmj2 + 8.0*(-vmj1 + vpj1) - vpj2) + fabs(u000*jx + v000 * jy)*(vmj2 - 4.0*(vmj1 + vpj1) + vpj2)) / 12.0

                                                                                         );

                                                     u0[j][i] = (u[j][i] + dt * 0.5 * (rhs_u + us[j][i])) / (1.0 + dt * 0.5 * leftvel);

                                                     v0[j][i] = (v[j][i] + dt * 0.5 * (rhs_v + vs[j][i])) / (1.0 + dt * 0.5 * leftvel);

                                                     u0[j][i] = u000 + SGM2 * (u0[j][i] - u000);

                                                     v0[j][i] = v000 + SGM2 * (v0[j][i] - v000);

                                    }

                  }

#pragma omp parallel for private(i, u000, umi1, upi1, umj1, upj1, umi2, upi2, umj2, upj2, v000, vmi1, vpi1, vmj1, vpj1, vmi2, vpi2, vmj2, vpj2, rhs_u, rhs_v, leftvel, ix, iy, jx, jy, di, dj, umm1, upp1, ump1, upm1, vmm1, vpp1, vmp1, vpm1, pmi1, ppi1, pmj1, ppj1) firstprivate(SGM2)

                  for (j = 4; j < JMAX - 1; j += 3) {

                                    for (i = 2; i < IMAX - 1; i++) {

                                                     u000 = u0[j][i];

                                                     v000 = v0[j][i];

                                                     umi1 = u0[j][i - 1];

                                                     vmi1 = v0[j][i - 1];

                                                     upi1 = u0[j][i + 1];

                                                     vpi1 = v0[j][i + 1];

                                                     umj1 = u0[j - 1][i];

                                                     vmj1 = v0[j - 1][i];

                                                     upj1 = u0[j + 1][i];

                                                     vpj1 = v0[j + 1][i];

                                                     umi2 = u0[j][i - 2];

                                                     vmi2 = v0[j][i - 2];

                                                     upi2 = u0[j][i + 2];

                                                     vpi2 = v0[j][i + 2];

                                                     umj2 = u0[j - 2][i];

                                                     vmj2 = v0[j - 2][i];

                                                     upj2 = u0[j + 2][i];

                                                     vpj2 = v0[j + 2][i];

                                                     umm1 = u0[j - 1][i - 1];

                                                     upp1 = u0[j + 1][i + 1];

                                                     ump1 = u0[j - 1][i + 1];

                                                     upm1 = u0[j + 1][i - 1];

                                                     vmm1 = v0[j - 1][i - 1];

                                                     vpp1 = v0[j + 1][i + 1];

                                                     vmp1 = v0[j - 1][i + 1];

                                                     vpm1 = v0[j + 1][i - 1];

                                                     ix = i0x[j][i];

                                                     jx = j0x[j][i];

                                                     iy = i0y[j][i];

                                                     jy = j0y[j][i];

                                                     di = d2i[j][i];

                                                     dj = d2j[j][i];

                                                     pmi1 = p0[j][i - 1];

                                                     ppi1 = p0[j][i + 1];

                                                     pmj1 = p0[j - 1][i];

                                                     ppj1 = p0[j + 1][i];

                                                     leftvel = 2.0*(ix * ix + iy * iy + jx * jx + jy * jy) / Re + (fabs(u000*ix + v000 * iy) + fabs(u000*jx + v000 * jy))*0.5;

                                                     rhs_u = ((ix * ix + iy * iy)*(umi1 + upi1) + (jx * jx + jy * jy)*(umj1 + upj1)

                                                                       + 2.0*(ix * jx + iy * jy)*(umm1 - ump1 - upm1 + upp1)

                                                                       + di * (-umi1 + upi1)*0.5 + dj * (-umj1 + upj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *ix + (-pmj1 + ppj1)*jx)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(umi2 + 8.0*(-umi1 + upi1) - upi2) + fabs(u000*ix + v000 * iy)*(umi2 - 4.0*(umi1 + upi1) + upi2)) / 12.0

                                                                                         + ((u000*jx + v000 * jy)*(umj2 + 8.0*(-umj1 + upj1) - upj2) + fabs(u000*jx + v000 * jy)*(umj2 - 4.0*(umj1 + upj1) + upj2)) / 12.0

                                                                                         );

                                                     rhs_v = ((ix * ix + iy * iy)*(vmi1 + vpi1) + (jx * jx + jy * jy)*(vmj1 + vpj1)

                                                                       + 2.0*(ix * jx + iy * jy)*(vmm1 - vmp1 - vpm1 + vpp1)

                                                                       + di * (-vmi1 + vpi1)*0.5 + dj * (-vmj1 + vpj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *iy + (-pmj1 + ppj1)*jy)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(vmi2 + 8.0*(-vmi1 + vpi1) - vpi2) + fabs(u000*ix + v000 * iy)*(vmi2 - 4.0*(vmi1 + vpi1) + vpi2)) / 12.0

                                                                                         + ((u000*jx + v000 * jy)*(vmj2 + 8.0*(-vmj1 + vpj1) - vpj2) + fabs(u000*jx + v000 * jy)*(vmj2 - 4.0*(vmj1 + vpj1) + vpj2)) / 12.0

                                                                                         );

                                                     u0[j][i] = (u[j][i] + dt * 0.5 * (rhs_u + us[j][i])) / (1.0 + dt * 0.5 * leftvel);

                                                     v0[j][i] = (v[j][i] + dt * 0.5 * (rhs_v + vs[j][i])) / (1.0 + dt * 0.5 * leftvel);

                                                     u0[j][i] = u000 + SGM2 * (u0[j][i] - u000);

                                                     v0[j][i] = v000 + SGM2 * (v0[j][i] - v000);

                                    }

                  }

                  for (j = 1; j < JMAX; j += JMAX - 2) {

#pragma omp parallel for private(u000, umi1, upi1, umj1, upj1, v000, vmi1, vpi1, vmj1, vpj1, rhs_u, rhs_v, leftvel, ix, iy, jx, jy, di, dj, umm1, upp1, ump1, upm1, vmm1, vpp1, vmp1, vpm1, pmi1, ppi1, pmj1, ppj1) firstprivate(SGM2)

                                    for (i = 1; i < IMAX; i += 2) {

                                                     u000 = u0[j][i];

                                                     v000 = v0[j][i];

                                                     umi1 = u0[j][i - 1];

                                                     vmi1 = v0[j][i - 1];

                                                     upi1 = u0[j][i + 1];

                                                     vpi1 = v0[j][i + 1];

                                                     umj1 = u0[j - 1][i];

                                                     vmj1 = v0[j - 1][i];

                                                     upj1 = u0[j + 1][i];

                                                     vpj1 = v0[j + 1][i];

                                                     umm1 = u0[j - 1][i - 1];

                                                     upp1 = u0[j + 1][i + 1];

                                                     ump1 = u0[j - 1][i + 1];

                                                     upm1 = u0[j + 1][i - 1];

                                                     vmm1 = v0[j - 1][i - 1];

                                                     vpp1 = v0[j + 1][i + 1];

                                                     vmp1 = v0[j - 1][i + 1];

                                                     vpm1 = v0[j + 1][i - 1];

                                                     ix = i0x[j][i];

                                                     jx = j0x[j][i];

                                                     iy = i0y[j][i];

                                                     jy = j0y[j][i];

                                                     di = d2i[j][i];

                                                     dj = d2j[j][i];

                                                     pmi1 = p0[j][i - 1];

                                                     ppi1 = p0[j][i + 1];

                                                     pmj1 = p0[j - 1][i];

                                                     ppj1 = p0[j + 1][i];

                                                     leftvel = 2.0*(ix * ix + iy * iy + jx * jx + jy * jy) / Re + fabs(u000*ix + v000 * iy) + fabs(u000*jx + v000 * jy);

                                                     rhs_u = ((ix * ix + iy * iy)*(umi1 + upi1) + (jx * jx + jy * jy)*(umj1 + upj1)

                                                                       + 2.0*(ix * jx + iy * jy)*(umm1 - ump1 - upm1 + upp1)

                                                                       + di * (-umi1 + upi1)*0.5 + dj * (-umj1 + upj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *ix + (-pmj1 + ppj1)*jx)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(-umi1 + upi1) + fabs(u000*ix + v000 * iy)*(-umi1 - upi1)) *0.5

                                                                                         + ((u000*jx + v000 * jy)*(-umj1 + upj1) + fabs(u000*jx + v000 * jy)*(-umj1 - upj1)) *0.5

                                                                                         );

                                                     rhs_v = ((ix * ix + iy * iy)*(vmi1 + vpi1) + (jx * jx + jy * jy)*(vmj1 + vpj1)

                                                                       + 2.0*(ix * jx + iy * jy)*(vmm1 - vmp1 - vpm1 + vpp1)

                                                                       + di * (-vmi1 + vpi1)*0.5 + dj * (-vmj1 + vpj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *iy + (-pmj1 + ppj1)*jy)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(-vmi1 + vpi1) + fabs(u000*ix + v000 * iy)*(-vmi1 - vpi1)) *0.5

                                                                                         + ((u000*jx + v000 * jy)*(-vmj1 + vpj1) + fabs(u000*jx + v000 * jy)*(-vmj1 - vpj1)) *0.5

                                                                                         );

                                                     u0[j][i] = (u[j][i] + dt * 0.5 * (rhs_u + us[j][i])) / (1.0 + dt * 0.5 * leftvel);

                                                     v0[j][i] = (v[j][i] + dt * 0.5 * (rhs_v + vs[j][i])) / (1.0 + dt * 0.5 * leftvel);

                                                     u0[j][i] = u000 + SGM2 * (u0[j][i] - u000);

                                                     v0[j][i] = v000 + SGM2 * (v0[j][i] - v000);

                                    }

#pragma omp parallel for private(u000, umi1, upi1, umj1, upj1, v000, vmi1, vpi1, vmj1, vpj1, rhs_u, rhs_v, leftvel, ix, iy, jx, jy, di, dj, umm1, upp1, ump1, upm1, vmm1, vpp1, vmp1, vpm1, pmi1, ppi1, pmj1, ppj1) firstprivate(SGM2)

                                    for (i = 2; i < IMAX; i += 2) {

                                                     u000 = u0[j][i];

                                                     v000 = v0[j][i];

                                                     umi1 = u0[j][i - 1];

                                                     vmi1 = v0[j][i - 1];

                                                     upi1 = u0[j][i + 1];

                                                     vpi1 = v0[j][i + 1];

                                                     umj1 = u0[j - 1][i];

                                                     vmj1 = v0[j - 1][i];

                                                     upj1 = u0[j + 1][i];

                                                     vpj1 = v0[j + 1][i];

                                                     umm1 = u0[j - 1][i - 1];

                                                     upp1 = u0[j + 1][i + 1];

                                                     ump1 = u0[j - 1][i + 1];

                                                     upm1 = u0[j + 1][i - 1];

                                                     vmm1 = v0[j - 1][i - 1];

                                                     vpp1 = v0[j + 1][i + 1];

                                                     vmp1 = v0[j - 1][i + 1];

                                                     vpm1 = v0[j + 1][i - 1];

                                                     ix = i0x[j][i];

                                                     jx = j0x[j][i];

                                                     iy = i0y[j][i];

                                                     jy = j0y[j][i];

                                                     di = d2i[j][i];

                                                     dj = d2j[j][i];

                                                     pmi1 = p0[j][i - 1];

                                                      ppi1 = p0[j][i + 1];

                                                     pmj1 = p0[j - 1][i];

                                                     ppj1 = p0[j + 1][i];

                                                     leftvel = 2.0*(ix * ix + iy * iy + jx * jx + jy * jy) / Re + fabs(u000*ix + v000 * iy) + fabs(u000*jx + v000 * jy);

                                                     rhs_u = ((ix * ix + iy * iy)*(umi1 + upi1) + (jx * jx + jy * jy)*(umj1 + upj1)

                                                                       + 2.0*(ix * jx + iy * jy)*(umm1 - ump1 - upm1 + upp1)

                                                                       + di * (-umi1 + upi1)*0.5 + dj * (-umj1 + upj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *ix + (-pmj1 + ppj1)*jx)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(-umi1 + upi1) + fabs(u000*ix + v000 * iy)*(-umi1 - upi1)) *0.5

                                                                                         + ((u000*jx + v000 * jy)*(-umj1 + upj1) + fabs(u000*jx + v000 * jy)*(-umj1 - upj1)) *0.5

                                                                                         );

                                                     rhs_v = ((ix * ix + iy * iy)*(vmi1 + vpi1) + (jx * jx + jy * jy)*(vmj1 + vpj1)

                                                                       + 2.0*(ix * jx + iy * jy)*(vmm1 - vmp1 - vpm1 + vpp1)

                                                                       + di * (-vmi1 + vpi1)*0.5 + dj * (-vmj1 + vpj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *iy + (-pmj1 + ppj1)*jy)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(-vmi1 + vpi1) + fabs(u000*ix + v000 * iy)*(-vmi1 - vpi1)) *0.5

                                                                                         + ((u000*jx + v000 * jy)*(-vmj1 + vpj1) + fabs(u000*jx + v000 * jy)*(-vmj1 - vpj1)) *0.5

                                                                                         );

                                                     u0[j][i] = (u[j][i] + dt * 0.5 * (rhs_u + us[j][i])) / (1.0 + dt * 0.5 * leftvel);

                                                     v0[j][i] = (v[j][i] + dt * 0.5 * (rhs_v + vs[j][i])) / (1.0 + dt * 0.5 * leftvel);

                                                     u0[j][i] = u000 + SGM2 * (u0[j][i] - u000);

                                                     v0[j][i] = v000 + SGM2 * (v0[j][i] - v000);

                                    }

                  }

#pragma omp parallel for private(i, u000, umi1, upi1, umj1, upj1, v000, vmi1, vpi1, vmj1, vpj1, rhs_u, rhs_v, leftvel, ix, iy, jx, jy, di, dj, umm1, upp1, ump1, upm1, vmm1, vpp1, vmp1, vpm1, pmi1, ppi1, pmj1, ppj1) firstprivate(SGM2)

                  for (j = 2; j < JMAX - 1; j += 2) {

                                    for (i = 1; i < IMAX; i += IMAX - 2) {

                                                     u000 = u0[j][i];

                                                     v000 = v0[j][i];

                                                     umi1 = u0[j][i - 1];

                                                     vmi1 = v0[j][i - 1];

                                                     upi1 = u0[j][i + 1];

                                                     vpi1 = v0[j][i + 1];

                                                     umj1 = u0[j - 1][i];

                                                     vmj1 = v0[j - 1][i];

                                                     upj1 = u0[j + 1][i];

                                                     vpj1 = v0[j + 1][i];

                                                     umm1 = u0[j - 1][i - 1];

                                                     upp1 = u0[j + 1][i + 1];

                                                     ump1 = u0[j - 1][i + 1];

                                                     upm1 = u0[j + 1][i - 1];

                                                     vmm1 = v0[j - 1][i - 1];

                                                     vpp1 = v0[j + 1][i + 1];

                                                     vmp1 = v0[j - 1][i + 1];

                                                     vpm1 = v0[j + 1][i - 1];

                                                     ix = i0x[j][i];

                                                     jx = j0x[j][i];

                                                     iy = i0y[j][i];

                                                     jy = j0y[j][i];

                                                     di = d2i[j][i];

                                                     dj = d2j[j][i];

                                                     pmi1 = p0[j][i - 1];

                                                     ppi1 = p0[j][i + 1];

                                                     pmj1 = p0[j - 1][i];

                                                     ppj1 = p0[j + 1][i];

                                                     leftvel = 2.0*(ix * ix + iy * iy + jx * jx + jy * jy) / Re + fabs(u000*ix + v000 * iy) + fabs(u000*jx + v000 * jy);

                                                     rhs_u = ((ix * ix + iy * iy)*(umi1 + upi1) + (jx * jx + jy * jy)*(umj1 + upj1)

                                                                       + 2.0*(ix * jx + iy * jy)*(umm1 - ump1 - upm1 + upp1)

                                                                       + di * (-umi1 + upi1)*0.5 + dj * (-umj1 + upj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *ix + (-pmj1 + ppj1)*jx)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(-umi1 + upi1) + fabs(u000*ix + v000 * iy)*(-umi1 - upi1)) *0.5

                                                                                         + ((u000*jx + v000 * jy)*(-umj1 + upj1) + fabs(u000*jx + v000 * jy)*(-umj1 - upj1)) *0.5

                                                                                         );

                                                     rhs_v = ((ix * ix + iy * iy)*(vmi1 + vpi1) + (jx * jx + jy * jy)*(vmj1 + vpj1)

                                                                       + 2.0*(ix * jx + iy * jy)*(vmm1 - vmp1 - vpm1 + vpp1)

                                                                       + di * (-vmi1 + vpi1)*0.5 + dj * (-vmj1 + vpj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *iy + (-pmj1 + ppj1)*jy)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(-vmi1 + vpi1) + fabs(u000*ix + v000 * iy)*(-vmi1 - vpi1)) *0.5

                                                                                         + ((u000*jx + v000 * jy)*(-vmj1 + vpj1) + fabs(u000*jx + v000 * jy)*(-vmj1 - vpj1)) *0.5

                                                                                         );

                                                     u0[j][i] = (u[j][i] + dt * 0.5 * (rhs_u + us[j][i])) / (1.0 + dt * 0.5 * leftvel);

                                                     v0[j][i] = (v[j][i] + dt * 0.5 * (rhs_v + vs[j][i])) / (1.0 + dt * 0.5 * leftvel);

                                                     u0[j][i] = u000 + SGM2 * (u0[j][i] - u000);

                                                     v0[j][i] = v000 + SGM2 * (v0[j][i] - v000);

                                    }

                  }

#pragma omp parallel for private(i, u000, umi1, upi1, umj1, upj1, v000, vmi1, vpi1, vmj1, vpj1, rhs_u, rhs_v, leftvel, ix, iy, jx, jy, di, dj, umm1, upp1, ump1, upm1, vmm1, vpp1, vmp1, vpm1, pmi1, ppi1, pmj1, ppj1) firstprivate(SGM2)

                  for (j = 3; j < JMAX - 1; j += 2) {

                                    for (i = 1; i < IMAX; i += IMAX - 2) {

                                                     u000 = u0[j][i];

                                                     v000 = v0[j][i];

                                                     umi1 = u0[j][i - 1];

                                                     vmi1 = v0[j][i - 1];

                                                     upi1 = u0[j][i + 1];

                                                     vpi1 = v0[j][i + 1];

                                                     umj1 = u0[j - 1][i];

                                                     vmj1 = v0[j - 1][i];

                                                     upj1 = u0[j + 1][i];

                                                     vpj1 = v0[j + 1][i];

                                                     umm1 = u0[j - 1][i - 1];

                                                     upp1 = u0[j + 1][i + 1];

                                                     ump1 = u0[j - 1][i + 1];

                                                     upm1 = u0[j + 1][i - 1];

                                                     vmm1 = v0[j - 1][i - 1];

                                                     vpp1 = v0[j + 1][i + 1];

                                                     vmp1 = v0[j - 1][i + 1];

                                                     vpm1 = v0[j + 1][i - 1];

                                                     ix = i0x[j][i];

                                                     jx = j0x[j][i];

                                                     iy = i0y[j][i];

                                                     jy = j0y[j][i];

                                                     di = d2i[j][i];

                                                     dj = d2j[j][i];

                                                     pmi1 = p0[j][i - 1];

                                                     ppi1 = p0[j][i + 1];

                                                     pmj1 = p0[j - 1][i];

                                                     ppj1 = p0[j + 1][i];

                                                     leftvel = 2.0*(ix * ix + iy * iy + jx * jx + jy * jy) / Re + fabs(u000*ix + v000 * iy) + fabs(u000*jx + v000 * jy);

                                                     rhs_u = ((ix * ix + iy * iy)*(umi1 + upi1) + (jx * jx + jy * jy)*(umj1 + upj1)

                                                                       + 2.0*(ix * jx + iy * jy)*(umm1 - ump1 - upm1 + upp1)

                                                                       + di * (-umi1 + upi1)*0.5 + dj * (-umj1 + upj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *ix + (-pmj1 + ppj1)*jx)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(-umi1 + upi1) + fabs(u000*ix + v000 * iy)*(-umi1 - upi1)) *0.5

                                                                                         + ((u000*jx + v000 * jy)*(-umj1 + upj1) + fabs(u000*jx + v000 * jy)*(-umj1 - upj1)) *0.5

                                                                                         );

                                                     rhs_v = ((ix * ix + iy * iy)*(vmi1 + vpi1) + (jx * jx + jy * jy)*(vmj1 + vpj1)

                                                                       + 2.0*(ix * jx + iy * jy)*(vmm1 - vmp1 - vpm1 + vpp1)

                                                                       + di * (-vmi1 + vpi1)*0.5 + dj * (-vmj1 + vpj1)*0.5) / Re

                                                                       - (

                                                                       ((-pmi1 + ppi1) *iy + (-pmj1 + ppj1)*jy)*0.5

                                                                                         + ((u000*ix + v000 * iy)*(-vmi1 + vpi1) + fabs(u000*ix + v000 * iy)*(-vmi1 - vpi1)) *0.5

                                                                                         + ((u000*jx + v000 * jy)*(-vmj1 + vpj1) + fabs(u000*jx + v000 * jy)*(-vmj1 - vpj1)) *0.5

                                                                                         );

                                                     u0[j][i] = (u[j][i] + dt * 0.5 * (rhs_u + us[j][i])) / (1.0 + dt * 0.5 * leftvel);

                                                     v0[j][i] = (v[j][i] + dt * 0.5 * (rhs_v + vs[j][i])) / (1.0 + dt * 0.5 * leftvel);

                                                     u0[j][i] = u000 + SGM2 * (u0[j][i] - u000);

                                                     v0[j][i] = v000 + SGM2 * (v0[j][i] - v000);

                                    }

                  }

}

void write_data_vt(double u0[][IMAX + 1], double x[][IMAX + 1], double y[][IMAX + 1]) {

                  ofstream rdi;

                  rdi.precision(18);

                  char str[20];

                  sprintf_s(str, "data%d.dat", n);// Convert i to a char

                  string datafile = "./data/";

                  datafile.append(str);

                  rdi.open(datafile.c_str());

                  for (int j = 0; j < JMAX + 1; j++) {

                                    for (int i = 0; i < IMAX + 1; i++) {

                                                     rdi << x[j][i] << ' ' << y[j][i] << ' ' << u0[j][i] << endl;

                                    }

                                    rdi << endl;

                  }

                  rdi.close();

}

int main() {

                  cout.precision(15);

                  double check0 = 0.0, check1 = 0.0, check2 = 0.0, check3 = 0.0;

                  typedef double IJ[IMAX + 1];

                  IJ *u0, *u, *v0, *v, *p0, *rhs, *x0, *y0, *us, *vs, *i0x, *i0y, *j0x, *j0y, *d2i, *d2j;

                  u0 = (IJ *)malloc((IMAX + 1) * (JMAX + 1) * sizeof(double));

                  u = (IJ *)malloc((IMAX + 1) * (JMAX + 1) * sizeof(double));

                  v0 = (IJ *)malloc((IMAX + 1) * (JMAX + 1) * sizeof(double));

                  v = (IJ *)malloc((IMAX + 1) * (JMAX + 1) * sizeof(double));

                  p0 = (IJ *)malloc((IMAX + 1) * (JMAX + 1) * sizeof(double));

                  rhs = (IJ *)malloc((IMAX + 1) * (JMAX + 1) * sizeof(double));

                  x0 = (IJ *)malloc((IMAX + 1) * (JMAX + 1) * sizeof(double));

                  y0 = (IJ *)malloc((IMAX + 1) * (JMAX + 1) * sizeof(double));

                  us = (IJ *)malloc((IMAX + 1) * (JMAX + 1) * sizeof(double));

                  vs = (IJ *)malloc((IMAX + 1) * (JMAX + 1) * sizeof(double));

                  i0x = (IJ *)malloc((IMAX + 1) * (JMAX + 1) * sizeof(double));

                  i0y = (IJ *)malloc((IMAX + 1) * (JMAX + 1) * sizeof(double));

                  j0x = (IJ *)malloc((IMAX + 1) * (JMAX + 1) * sizeof(double));

                  j0y = (IJ *)malloc((IMAX + 1) * (JMAX + 1) * sizeof(double));

                  d2i = (IJ *)malloc((IMAX + 1) * (JMAX + 1) * sizeof(double));

                  d2j = (IJ *)malloc((IMAX + 1) * (JMAX + 1) * sizeof(double));

                  initialization_values(u0, u, v0, v, p0, rhs, x0, y0, us, vs, i0x, i0y, j0x, j0y, d2i, d2j);

                  domain(x0, y0);

                  change_domain_calculation(x0, y0, i0x, i0y, j0x, j0y, d2i, d2j);

                  initial_condition(u0, v0);

                  vel_boundary_condition(u0, v0);

                  pre_boundary_condition(p0);

                  write_data_vt(u0, x0, y0);

                  for (n = 1; n < NMAX + 1; n++) {

                                    rhs_calculation(u0, v0, rhs, i0x, i0y, j0x, j0y);

                                    for (int loop = 1; loop < 51; loop++) {

                                                     pre_calculation(p0, rhs, i0x, i0y, j0x, j0y, d2i, d2j);

                                    }

                                    check0 = p0[5][5];

                                    pre_calculation(p0, rhs, i0x, i0y, j0x, j0y, d2i, d2j);

                                    check1 = p0[5][5];

                                    pre_boundary_condition(p0);

                                    memcpy(u, u0, ((IMAX + 1)*(JMAX + 1) * sizeof(double)));

                                    memcpy(v, v0, ((IMAX + 1)*(JMAX + 1) * sizeof(double)));

                                    vel_explicit_calculation(u0, u, v0, v, p0, us, vs, i0x, i0y, j0x, j0y, d2i, d2j);

                                    for (int loop = 1; loop < 6; loop++) {

                                                     vel_implicit_calculation(u0, u, v0, v, p0, us, vs, i0x, i0y, j0x, j0y, d2i, d2j);

                                    }

                                    check2 = u0[5][5];

                                    vel_implicit_calculation(u0, u, v0, v, p0, us, vs, i0x, i0y, j0x, j0y, d2i, d2j);

                                    check3 = u0[5][5];

                                    if (n % 100 == 0) {

                                                     cout << n << ' ' << fabs(check1 - check0) << ' ' << fabs(check2 - check3) << endl;

                                    }

                                    vel_boundary_condition(u0, v0);

                                    if (n % 100 == 0) {

                                                     write_data_vt(u0, x0, y0);

                                    }

                  }

                  free(u0);

                  free(u);

                  free(v0);

                  free(v);

                  free(p0);

                  free(rhs);

                  free(x0);

                  free(y0);

                  free(us);

                  free(vs);

                  free(i0x);

                  free(i0y);

                  free(j0x);

                  free(j0y);

                  free(d2i);

                  free(d2j);

                  return 0;

}

実ð·ñ¨øö変üµÌõ数ªòìýªìªÆÍªß©ªòª·ªÆªßªÆ¡¢ì¤îñªÈÔÒª¸Ì¿Íýª¬õóªìªÐª¤ª¤¡£áóï᪹ªëªÈª­ªÏ¡¢rhs_calculationªÎݻݪò໪Ëáóï᪷ªÆ¡¢ª½ªÎªÞªÞͪߩªòüÞª·ªÆ¡¢ï᪷ª¤Ì¿Íýª¬õóªëª«ü¬ì㪹ªë¡£ªÇª­ª¿ªé¡¢pre_calculationªÎݻݪòáóï᪷ü¬ì㪷¡¢ï᪷ª¯ªÊªÃªÆª¤ªëª«ªòü¬ì㪹ªë¡£ª½ªÎý­ªÏåÕú°ÛöªÎáÜÓø¡¢õÌðûîܪ˪Ïëäú°ÛöªÎáÜÓøªòáóï᪷ü¬ì㪹ªìªÐª¤ª¤¡£

ª·ª«ª·¡¢ÐѪÎÌ«í­ªÀªÈÌ«í­変üµÌõ数ªòÞŪ¦ëòÚ«ª¬ªÊª¤¡£ª½ªÎª¿ªá¡¢yÛ°ú¾Ì«í­Êà̰ªòÞªÔõÊà̰ªËíªêÆÍªß©ªòª·ªÆªßªèª¦¡£

úÞÎyÛ°ú¾Ì«í­ªÎãÒªÏ

y0[j][i] = dy * (double)j;

ªÇª¢ªë¡£

ª³ªìªò¡¢ÔõÝï数ÖªªÎûúªÎãÒªòÞŪêơ¢yª¬0ÜõÐΪÎÌ«í­ªòᬪ«ª¯ª·¡¢2ªËÐΪ¯ªÊªëªÛªÉðØª¯ªÊªëÌ«í­ªòíªêƪߪ誦¡£

ÔõÝï数ÖªªÎûúªÎãҪϡ¢

ª³ª³ªÇ¡¢aªÏôøú£¡¢rªÏÍëÝïªÇª¢ªë¡£実ð·¡¢yÛ°ú¾ªÎÌ«í­ªòì¤ù»ªÎªèª¦ªËáóï᪷ͪߩª¹ªë¡£

y0[j][i] = 0.05*(pow(1.0677448,(double)(j))-1.0)/(0.0677448);

ÔõÊà̰ªÎÌ«í­ªÈÞªÔõÊà̰ªÎÌ«í­ªÎö·ªòÝïÎòª¹ªëªÈì¤ù»ªÎªèª¦ªÊøúªËªÊªë¡£

j

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

ÔõÊà̰

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

1.1

1.2

1.3

1.4

1.5

1.6

1.7

1.8

1.9

2

ÞªÔõÊà̰

0

0.05

0.103387

0.160391

0.221257

0.286246

0.355638

0.42973

0.508842

0.593314

0.683507

0.779811

0.88264

0.992434

1.109666

1.23484

1.368494

1.511203

1.663579

1.826278

1.999998

 

ͪߩ̿ÍýªÏì¤ù»ªËªÊªë¡£

yª¬0ªÎÜõÐΪÏÌ«í­ª¬á¬ª«ª¯ªÆ¡¢2ªÎÜõÐΪÏðØª¯ªÊªÃªÆª¤ªëª³ªÈª¬ªïª«ªë¡£í»ÝªÇü¬ì㪹ªëª³ªÈ¡£

ª³ª³ªÇ¡¢ñ¨øö変üµÌõ数ªËªÄª¤ªÆ¡¢ªâª¦ìéüÞÍŪ¨ªÆªßªèª¦¡£

2ó­êªªÎíÞùꡢϴªáªÊª¤ªÈª¤ª±ªÊª¤変数ª¬6ªÄðí¹ªë¡£ª·ª«ª·¡¢ß¾ªÎªèª¦ªÊÌ«í­ªÀªÈ¡¢yÛ°ú¾ªËÞªÔõÊà̰ªÇª¢ªêñ¨øö変üµÍöÊàªÎ¥çÛ°ú¾ª·ª«関与ª·ªÊª¤¡£ª³ªÎªèª¦ªË1ªÄªÎÛ°ú¾ªÀª±ªò変ª¨ªëíÞùêªËù±é©ªÊñ¨øö変üµÌõ数ªÏ2ªÄªÀª±ªÇª¤ª¤¡£ß¾ªÎÌ«í­条ËìªÀªÈ¡¢

ªËªÊªëú£ªÏ¥ÄxªòÞŪ¦ìéÚõªÎó¬ÝªǪ¤ª¤¡£

yªÀª±¥çÛ°ú¾ªËÞªÔõÊà̰ªËªÊªÃªÆª¤ªëª¿ªá¡¢yªË関ª¹ªëø¶Ú°ÝªÀª±ñ¨øö変üµÌõ数ªòÞŪ¨ªÐͪߩª¬ªÇª­ªë¡£«á«ê«Ã«ÈªÈª·ªÆªÏòÁÊÇñ¨øöͧªÎͪߩª³ªÈª«ªéñ¨øö変üµÌõ数ªòÓôìýª¹ªëªÈª­¡¢áóï᪬ù±é©ªÊݻݪ¬á´ªÊª¯ªÊªëª³ªÈª«ªé¡¢«Ð«¯ª¬Ð¼îܪËÊõªë¡£ªÞª¿¡¢Íªß©ß¾¡¢参ðΪ¹ªë変数ªÎ数ª¬Êõªëª³ªÈª«ªé¡¢Íªß©áÜÓøªâáܪ¯ªÊªë¡£ª³ªÎãÁªÎñ¨øö変üµÌõ数ªÏì¤ù»ªÎªèª¦ªËÏ´ªáªéªìªë¡£

ö¢ªêùꪨªº¡¢ÐñÜâû¡ª«ªéÍŪ¨ªÆªßªëªÈ¡¢

ªËªÊªë¡£×â릪Ȫ·ªÆªÏ¡¢yªÏ¥îªÈòÁÎߪ·ªÆª¤ªëª«ªéªÇª¢ªë¡£Ì¿ÏÑ¡¢

ªÈªÊªê¡¢ªòÏ´ªáª¿ªé¡¢ªÎó¬Ýª¬ªÇª­ªë¡£ªÎÏ´ªáÛ°ªÏ既ðíªÎÏ´ªáÛ°ªÇÏ´ªáªìªÐª¤ª¤¡£

í»ªéÏ´ªáªÆªßª¿ªé¡¢

ªÎªèª¦ªËªÊªë¡£2ó­ø¶Ú°ÝÂÛ°ïïãҪϡ¢

ªÈªÊªê¡¢ªòÏ´ªáªëªÈ¡¢ªÎó¬ÝªâªÇª­ªë¡£ªâí»ªéÏ´ªáªÆªßªëªÈ¡¢

ªÇª¢ªë¡£ù±ªºí»ªéÏ´ªáªÆªßªëª³ªÈ¡£

6ªÄªÎ変数ª¬îïÝ»ù±é©ªÊÌ«í­ªÏì¤ù»ªÎªèª¦ªË¡¢

r0 = (D0*0.5 + 0.004*(pow(1.0221, (double)(i)) - 1.0) / 0.0221);

                                                     x0[j][i] = r0 * cos((double)(j)*1.0 / rde);

                                                     y0[j][i] = r0 * sin((double)(j)*1.0 / rde);

å÷÷Õñ¨øöªòíªê¿ªÈª­ªÇª¢ªë¡£

xªÏiªÈj¡¢ªÄªÞªê¡¢¥îªÈ¥çªË関ªïªÃªÆª¤ªë¡£yªâ¥îªÈ¥çªË関ªïªÃªÆª¤ªë¡£ª³ªÎíÞùêªÀªÈ¡¢6ªÄªÎñ¨øö変üµÌõ数ª¬ù±é©ªÇª¢ªë¡£

ªÞª¿¡¢

x0[j][i] = 0.05*(pow(1.0677448,(double)(i))-1.0)/(0.0677448);

y0[j][i] = 0.05*(pow(1.0677448,(double)(j))-1.0)/(0.0677448);

ª³ªÎªèª¦ªË¡¢xªÏiªÈ¡¢yªÏjªÈ関Ìõª·ªÆª¤ªÆ¡¢ÞªÔõÊà̰ªÇª¢ªìªÏ¡¢4ªÄªÎ変数ª¬ù±é©ªÇª¢ªë¡£