public override int go() { int i, j, k, m; int L1, L2; int ist1, iend1; int jst1, jend1; double q; double u21, u31, u41; double tmp; double u21i, u31i, u41i, u51i; double u21j, u31j, u41j, u51j; double u21k, u31k, u41k, u51k; double u21im1, u31im1, u41im1, u51im1; double u21jm1, u31jm1, u41jm1, u51jm1; double u21km1, u31km1, u41km1, u51km1; for (k = 0; k < nz; k++) { for (j = 1; j <= ny; j++) { for (i = 1; i <= nx; i++) { for (m = 0; m < 5; m++) { rsd[k, j + 1, i + 1, m] = -frct[k, j + 1, i + 1, m]; } } } } Exchange30.setParameters(u); Exchange30.go(); L1 = 0; if (north == -1) { L1 = 1; } L2 = nx + 1; if (south == -1) { L2 = nx; } ist1 = 1; iend1 = nx; if (north == -1) { ist1 = 4; } if (south == -1) { iend1 = nx - 3; } for (k = 2; k <= nz - 1; k++) { for (j = jst; j <= jend; j++) { for (i = L1; i <= L2; i++) { flux[k - 1, j, i, 0] = u[k - 1, j + 1, i + 1, 1]; u21 = u[k - 1, j + 1, i + 1, 1] / u[k - 1, j + 1, i + 1, 0]; q = 0.50d * (u[k - 1, j + 1, i + 1, 1] * u[k - 1, j + 1, i + 1, 1] + u[k - 1, j + 1, i + 1, 2] * u[k - 1, j + 1, i + 1, 2] + u[k - 1, j + 1, i + 1, 3] * u[k - 1, j + 1, i + 1, 3]) / u[k - 1, j + 1, i + 1, 0]; flux[k - 1, j, i, 1] = u[k - 1, j + 1, i + 1, 1] * u21 + c2 * (u[k - 1, j + 1, i + 1, 4] - q); flux[k - 1, j, i, 2] = u[k - 1, j + 1, i + 1, 2] * u21; flux[k - 1, j, i, 3] = u[k - 1, j + 1, i + 1, 3] * u21; flux[k - 1, j, i, 4] = (c1 * u[k - 1, j + 1, i + 1, 4] - c2 * q) * u21; } for (i = ist; i <= iend; i++) { for (m = 0; m < 5; m++) { rsd[k - 1, j + 1, i + 1, m] = rsd[k - 1, j + 1, i + 1, m] - tx2 * (flux[k - 1, j, i + 1, m] - flux[k - 1, j, i - 1, m]); } } for (i = ist; i <= L2; i++) { tmp = 1.0d / u[k - 1, j + 1, i + 1, 0]; u21i = tmp * u[k - 1, j + 1, i + 1, 1]; u31i = tmp * u[k - 1, j + 1, i + 1, 2]; u41i = tmp * u[k - 1, j + 1, i + 1, 3]; u51i = tmp * u[k - 1, j + 1, i + 1, 4]; tmp = 1.0d / u[k - 1, j + 1, i, 0]; u21im1 = tmp * u[k - 1, j + 1, i, 1]; u31im1 = tmp * u[k - 1, j + 1, i, 2]; u41im1 = tmp * u[k - 1, j + 1, i, 3]; u51im1 = tmp * u[k - 1, j + 1, i, 4]; flux[k - 1, j, i, 1] = (4.0d / 3.0d) * tx3 * (u21i - u21im1); flux[k - 1, j, i, 2] = tx3 * (u31i - u31im1); flux[k - 1, j, i, 3] = tx3 * (u41i - u41im1); flux[k - 1, j, i, 4] = 0.50d * (1.0d - c1 * c5) * tx3 * ((pow2(u21i) + pow2(u31i) + pow2(u41i)) - (pow2(u21im1) + pow2(u31im1) + pow2(u41im1))) + (1.0d / 6.0d) * tx3 * (pow2(u21i) - pow2(u21im1)) + c1 * c5 * tx3 * (u51i - u51im1); } for (i = ist; i <= iend; i++) { rsd[k - 1, j + 1, i + 1, 0] = rsd[k - 1, j + 1, i + 1, 0] + dx1 * tx1 * (u[k - 1, j + 1, i, 0] - 2.0d * u[k - 1, j + 1, i + 1, 0] + u[k - 1, j + 1, i + 2, 0]); rsd[k - 1, j + 1, i + 1, 1] = rsd[k - 1, j + 1, i + 1, 1] + tx3 * c3 * c4 * (flux[k - 1, j, i + 1, 1] - flux[k - 1, j, i, 1]) + dx2 * tx1 * (u[k - 1, j + 1, i, 1] - 2.0d * u[k - 1, j + 1, i + 1, 1] + u[k - 1, j + 1, i + 2, 1]); rsd[k - 1, j + 1, i + 1, 2] = rsd[k - 1, j + 1, i + 1, 2] + tx3 * c3 * c4 * (flux[k - 1, j, i + 1, 2] - flux[k - 1, j, i, 2]) + dx3 * tx1 * (u[k - 1, j + 1, i, 2] - 2.0d * u[k - 1, j + 1, i + 1, 2] + u[k - 1, j + 1, i + 2, 2]); rsd[k - 1, j + 1, i + 1, 3] = rsd[k - 1, j + 1, i + 1, 3] + tx3 * c3 * c4 * (flux[k - 1, j, i + 1, 3] - flux[k - 1, j, i, 3]) + dx4 * tx1 * (u[k - 1, j + 1, i, 3] - 2.0d * u[k - 1, j + 1, i + 1, 3] + u[k - 1, j + 1, i + 2, 3]); rsd[k - 1, j + 1, i + 1, 4] = rsd[k - 1, j + 1, i + 1, 4] + tx3 * c3 * c4 * (flux[k - 1, j, i + 1, 4] - flux[k - 1, j, i, 4]) + dx5 * tx1 * (u[k - 1, j + 1, i, 4] - 2.0d * u[k - 1, j + 1, i + 1, 4] + u[k - 1, j + 1, i + 2, 4]); } if (north == -1) { for (m = 0; m < 5; m++) { rsd[k - 1, j + 1, 3, m] = rsd[k - 1, j + 1, 3, m] - dssp * (+5.0d * u[k - 1, j + 1, 3, m] - 4.0d * u[k - 1, j + 1, 4, m] + u[k - 1, j + 1, 5, m]); rsd[k - 1, j + 1, 4, m] = rsd[k - 1, j + 1, 4, m] - dssp * (-4.0d * u[k - 1, j + 1, 3, m] + 6.0d * u[k - 1, j + 1, 4, m] - 4.0d * u[k - 1, j + 1, 5, m] + u[k - 1, j + 1, 6, m]); } } for (i = ist1; i <= iend1; i++) { for (m = 0; m < 5; m++) { rsd[k - 1, j + 1, i + 1, m] = rsd[k - 1, j + 1, i + 1, m] - dssp * (u[k - 1, j + 1, i - 1, m] - 4.0d * u[k - 1, j + 1, i, m] + 6.0d * u[k - 1, j + 1, i + 1, m] - 4.0d * u[k - 1, j + 1, i + 2, m] + u[k - 1, j + 1, i + 3, m]); } } if (south == -1) { for (m = 0; m < 5; m++) { rsd[k - 1, j + 1, nx - 1, m] = rsd[k - 1, j + 1, nx - 1, m] - dssp * (u[k - 1, j + 1, nx - 3, m] - 4.0d * u[k - 1, j + 1, nx - 2, m] + 6.0d * u[k - 1, j + 1, nx - 1, m] - 4.0d * u[k - 1, j + 1, nx, m]); rsd[k - 1, j + 1, nx, m] = rsd[k - 1, j + 1, nx, m] - dssp * (u[k - 1, j + 1, nx - 2, m] - 4.0d * u[k - 1, j + 1, nx - 1, m] + 5.0d * u[k - 1, j + 1, nx, m]); } } } } Exchange31.setParameters(u); Exchange31.go(); L1 = 0; if (west == -1) { L1 = 1; } L2 = ny + 1; if (east == -1) { L2 = ny; } jst1 = 1; jend1 = ny; if (west == -1) { jst1 = 4; } if (east == -1) { jend1 = ny - 3; } for (k = 2; k <= nz - 1; k++) { for (j = L1; j <= L2; j++) { for (i = ist; i <= iend; i++) { flux[k - 1, j, i, 0] = u[k - 1, j + 1, i + 1, 2]; u31 = u[k - 1, j + 1, i + 1, 2] / u[k - 1, j + 1, i + 1, 0]; q = 0.50d * (u[k - 1, j + 1, i + 1, 1] * u[k - 1, j + 1, i + 1, 1] + u[k - 1, j + 1, i + 1, 2] * u[k - 1, j + 1, i + 1, 2] + u[k - 1, j + 1, i + 1, 3] * u[k - 1, j + 1, i + 1, 3]) / u[k - 1, j + 1, i + 1, 0]; flux[k - 1, j, i, 1] = u[k - 1, j + 1, i + 1, 1] * u31; flux[k - 1, j, i, 2] = u[k - 1, j + 1, i + 1, 2] * u31 + c2 * (u[k - 1, j + 1, i + 1, 4] - q); flux[k - 1, j, i, 3] = u[k - 1, j + 1, i + 1, 3] * u31; flux[k - 1, j, i, 4] = (c1 * u[k - 1, j + 1, i + 1, 4] - c2 * q) * u31; } } for (j = jst; j <= jend; j++) { for (i = ist; i <= iend; i++) { for (m = 0; m < 5; m++) { rsd[k - 1, j + 1, i + 1, m] = rsd[k - 1, j + 1, i + 1, m] - ty2 * (flux[k - 1, j + 1, i, m] - flux[k - 1, j - 1, i, m]); } } } for (j = jst; j <= L2; j++) { for (i = ist; i <= iend; i++) { tmp = 1.0d / u[k - 1, j + 1, i + 1, 0]; u21j = tmp * u[k - 1, j + 1, i + 1, 1]; u31j = tmp * u[k - 1, j + 1, i + 1, 2]; u41j = tmp * u[k - 1, j + 1, i + 1, 3]; u51j = tmp * u[k - 1, j + 1, i + 1, 4]; tmp = 1.0d / u[k - 1, j, i + 1, 0]; u21jm1 = tmp * u[k - 1, j, i + 1, 1]; u31jm1 = tmp * u[k - 1, j, i + 1, 2]; u41jm1 = tmp * u[k - 1, j, i + 1, 3]; u51jm1 = tmp * u[k - 1, j, i + 1, 4]; flux[k - 1, j, i, 1] = ty3 * (u21j - u21jm1); flux[k - 1, j, i, 2] = (4.0d / 3.0d) * ty3 * (u31j - u31jm1); flux[k - 1, j, i, 3] = ty3 * (u41j - u41jm1); flux[k - 1, j, i, 4] = 0.50d * (1.0d - c1 * c5) * ty3 * ((pow2(u21j) + pow2(u31j) + pow2(u41j)) - (pow2(u21jm1) + pow2(u31jm1) + pow2(u41jm1))) + (1.0d / 6.0d) * ty3 * (pow2(u31j) - pow2(u31jm1)) + c1 * c5 * ty3 * (u51j - u51jm1); } } for (j = jst; j <= jend; j++) { for (i = ist; i <= iend; i++) { rsd[k - 1, j + 1, i + 1, 0] = rsd[k - 1, j + 1, i + 1, 0] + dy1 * ty1 * (u[k - 1, j, i + 1, 0] - 2.0d * u[k - 1, j + 1, i + 1, 0] + u[k - 1, j + 2, i + 1, 0]); rsd[k - 1, j + 1, i + 1, 1] = rsd[k - 1, j + 1, i + 1, 1] + ty3 * c3 * c4 * (flux[k - 1, j + 1, i, 1] - flux[k - 1, j, i, 1]) + dy2 * ty1 * (u[k - 1, j, i + 1, 1] - 2.0d * u[k - 1, j + 1, i + 1, 1] + u[k - 1, j + 2, i + 1, 1]); rsd[k - 1, j + 1, i + 1, 2] = rsd[k - 1, j + 1, i + 1, 2] + ty3 * c3 * c4 * (flux[k - 1, j + 1, i, 2] - flux[k - 1, j, i, 2]) + dy3 * ty1 * (u[k - 1, j, i + 1, 2] - 2.0d * u[k - 1, j + 1, i + 1, 2] + u[k - 1, j + 2, i + 1, 2]); rsd[k - 1, j + 1, i + 1, 3] = rsd[k - 1, j + 1, i + 1, 3] + ty3 * c3 * c4 * (flux[k - 1, j + 1, i, 3] - flux[k - 1, j, i, 3]) + dy4 * ty1 * (u[k - 1, j, i + 1, 3] - 2.0d * u[k - 1, j + 1, i + 1, 3] + u[k - 1, j + 2, i + 1, 3]); rsd[k - 1, j + 1, i + 1, 4] = rsd[k - 1, j + 1, i + 1, 4] + ty3 * c3 * c4 * (flux[k - 1, j + 1, i, 4] - flux[k - 1, j, i, 4]) + dy5 * ty1 * (u[k - 1, j, i + 1, 4] - 2.0d * u[k - 1, j + 1, i + 1, 4] + u[k - 1, j + 2, i + 1, 4]); } } if (west == -1) { for (i = ist; i <= iend; i++) { for (m = 0; m < 5; m++) { rsd[k - 1, 3, i + 1, m] = rsd[k - 1, 3, i + 1, m] - dssp * (+5.0d * u[k - 1, 3, i + 1, m] - 4.0d * u[k - 1, 4, i + 1, m] + u[k - 1, 5, i + 1, m]); rsd[k - 1, 4, i + 1, m] = rsd[k - 1, 4, i + 1, m] - dssp * (-4.0d * u[k - 1, 3, i + 1, m] + 6.0d * u[k - 1, 4, i + 1, m] - 4.0d * u[k - 1, 5, i + 1, m] + u[k - 1, 6, i + 1, m]); } } } for (j = jst1; j <= jend1; j++) { for (i = ist; i <= iend; i++) { for (m = 0; m < 5; m++) { rsd[k - 1, j + 1, i + 1, m] = rsd[k - 1, j + 1, i + 1, m] - dssp * (u[k - 1, j - 1, i + 1, m] - 4.0d * u[k - 1, j, i + 1, m] + 6.0d * u[k - 1, j + 1, i + 1, m] - 4.0d * u[k - 1, j + 2, i + 1, m] + u[k - 1, j + 3, i + 1, m]); } } } if (east == -1) { for (i = ist; i <= iend; i++) { for (m = 0; m < 5; m++) { rsd[k - 1, ny - 1, i + 1, m] = rsd[k - 1, ny - 1, i + 1, m] - dssp * (u[k - 1, ny - 3, i + 1, m] - 4.0d * u[k - 1, ny - 2, i + 1, m] + 6.0d * u[k - 1, ny - 1, i + 1, m] - 4.0d * u[k - 1, ny, i + 1, m]); rsd[k - 1, ny, i + 1, m] = rsd[k - 1, ny, i + 1, m] - dssp * (u[k - 1, ny - 2, i + 1, m] - 4.0d * u[k - 1, ny - 1, i + 1, m] + 5.0d * u[k - 1, ny, i + 1, m]); } } } } for (k = 1; k <= nz; k++) { for (j = jst; j <= jend; j++) { for (i = ist; i <= iend; i++) { flux[k - 1, j, i, 0] = u[k - 1, j + 1, i + 1, 3]; u41 = u[k - 1, j + 1, i + 1, 3] / u[k - 1, j + 1, i + 1, 0]; q = 0.50d * (u[k - 1, j + 1, i + 1, 1] * u[k - 1, j + 1, i + 1, 1] + u[k - 1, j + 1, i + 1, 2] * u[k - 1, j + 1, i + 1, 2] + u[k - 1, j + 1, i + 1, 3] * u[k - 1, j + 1, i + 1, 3]) / u[k - 1, j + 1, i + 1, 0]; flux[k - 1, j, i, 1] = u[k - 1, j + 1, i + 1, 1] * u41; flux[k - 1, j, i, 2] = u[k - 1, j + 1, i + 1, 2] * u41; flux[k - 1, j, i, 3] = u[k - 1, j + 1, i + 1, 3] * u41 + c2 * (u[k - 1, j + 1, i + 1, 4] - q); flux[k - 1, j, i, 4] = (c1 * u[k - 1, j + 1, i + 1, 4] - c2 * q) * u41; } } } for (k = 2; k <= nz - 1; k++) { for (j = jst; j <= jend; j++) { for (i = ist; i <= iend; i++) { for (m = 0; m < 5; m++) { rsd[k - 1, j + 1, i + 1, m] = rsd[k - 1, j + 1, i + 1, m] - tz2 * (flux[k, j, i, m] - flux[k - 2, j, i, m]); } } } } for (k = 2; k <= nz; k++) { for (j = jst; j <= jend; j++) { for (i = ist; i <= iend; i++) { tmp = 1.0d / u[k - 1, j + 1, i + 1, 0]; u21k = tmp * u[k - 1, j + 1, i + 1, 1]; u31k = tmp * u[k - 1, j + 1, i + 1, 2]; u41k = tmp * u[k - 1, j + 1, i + 1, 3]; u51k = tmp * u[k - 1, j + 1, i + 1, 4]; tmp = 1.0d / u[k - 2, j + 1, i + 1, 0]; u21km1 = tmp * u[k - 2, j + 1, i + 1, 1]; u31km1 = tmp * u[k - 2, j + 1, i + 1, 2]; u41km1 = tmp * u[k - 2, j + 1, i + 1, 3]; u51km1 = tmp * u[k - 2, j + 1, i + 1, 4]; flux[k - 1, j, i, 1] = tz3 * (u21k - u21km1); flux[k - 1, j, i, 2] = tz3 * (u31k - u31km1); flux[k - 1, j, i, 3] = (4.0d / 3.0d) * tz3 * (u41k - u41km1); flux[k - 1, j, i, 4] = 0.50d * (1.0d - c1 * c5) * tz3 * ((pow2(u21k) + pow2(u31k) + pow2(u41k)) - (pow2(u21km1) + pow2(u31km1) + pow2(u41km1))) + (1.0d / 6.0d) * tz3 * (pow2(u41k) - pow2(u41km1)) + c1 * c5 * tz3 * (u51k - u51km1); } } } for (k = 2; k <= nz - 1; k++) { for (j = jst; j <= jend; j++) { for (i = ist; i <= iend; i++) { rsd[k - 1, j + 1, i + 1, 0] = rsd[k - 1, j + 1, i + 1, 0] + dz1 * tz1 * (u[k - 2, j + 1, i + 1, 0] - 2.0d * u[k - 1, j + 1, i + 1, 0] + u[k, j + 1, i + 1, 0]); rsd[k - 1, j + 1, i + 1, 1] = rsd[k - 1, j + 1, i + 1, 1] + tz3 * c3 * c4 * (flux[k, j, i, 1] - flux[k - 1, j, i, 1]) + dz2 * tz1 * (u[k - 2, j + 1, i + 1, 1] - 2.0d * u[k - 1, j + 1, i + 1, 1] + u[k, j + 1, i + 1, 1]); rsd[k - 1, j + 1, i + 1, 2] = rsd[k - 1, j + 1, i + 1, 2] + tz3 * c3 * c4 * (flux[k, j, i, 2] - flux[k - 1, j, i, 2]) + dz3 * tz1 * (u[k - 2, j + 1, i + 1, 2] - 2.0d * u[k - 1, j + 1, i + 1, 2] + u[k, j + 1, i + 1, 2]); rsd[k - 1, j + 1, i + 1, 3] = rsd[k - 1, j + 1, i + 1, 3] + tz3 * c3 * c4 * (flux[k, j, i, 3] - flux[k - 1, j, i, 3]) + dz4 * tz1 * (u[k - 2, j + 1, i + 1, 3] - 2.0d * u[k - 1, j + 1, i + 1, 3] + u[k, j + 1, i + 1, 3]); rsd[k - 1, j + 1, i + 1, 4] = rsd[k - 1, j + 1, i + 1, 4] + tz3 * c3 * c4 * (flux[k, j, i, 4] - flux[k - 1, j, i, 4]) + dz5 * tz1 * (u[k - 2, j + 1, i + 1, 4] - 2.0d * u[k - 1, j + 1, i + 1, 4] + u[k, j + 1, i + 1, 4]); } } } for (j = jst; j <= jend; j++) { for (i = ist; i <= iend; i++) { for (m = 0; m < 5; m++) { rsd[-1 + 2, j + 1, i + 1, m] = rsd[-1 + 2, j + 1, i + 1, m] - dssp * (+5.0d * u[-1 + 2, j + 1, i + 1, m] - 4.0d * u[-1 + 3, j + 1, i + 1, m] + u[-1 + 4, j + 1, i + 1, m]); rsd[-1 + 3, j + 1, i + 1, m] = rsd[-1 + 3, j + 1, i + 1, m] - dssp * (-4.0d * u[-1 + 2, j + 1, i + 1, m] + 6.0d * u[-1 + 3, j + 1, i + 1, m] - 4.0d * u[-1 + 4, j + 1, i + 1, m] + u[-1 + 5, j + 1, i + 1, m]); } } } for (k = 4; k <= nz - 3; k++) { for (j = jst; j <= jend; j++) { for (i = ist; i <= iend; i++) { for (m = 0; m < 5; m++) { rsd[k - 1, j + 1, i + 1, m] = rsd[k - 1, j + 1, i + 1, m] - dssp * (u[k - 3, j + 1, i + 1, m] - 4.0d * u[k - 2, j + 1, i + 1, m] + 6.0d * u[k - 1, j + 1, i + 1, m] - 4.0d * u[k, j + 1, i + 1, m] + u[k + 1, j + 1, i + 1, m]); } } } } for (j = jst; j <= jend; j++) { for (i = ist; i <= iend; i++) { for (m = 0; m < 5; m++) { rsd[-1 + nz - 2, j + 1, i + 1, m] = rsd[-1 + nz - 2, j + 1, i + 1, m] - dssp * (u[-1 + nz - 4, j + 1, i + 1, m] - 4.0d * u[-1 + nz - 3, j + 1, i + 1, m] + 6.0d * u[-1 + nz - 2, j + 1, i + 1, m] - 4.0d * u[-1 + nz - 1, j + 1, i + 1, m]); rsd[-1 + nz - 1, j + 1, i + 1, m] = rsd[-1 + nz - 1, j + 1, i + 1, m] - dssp * (u[-1 + nz - 3, j + 1, i + 1, m] - 4.0d * u[-1 + nz - 2, j + 1, i + 1, m] + 5.0d * u[-1 + nz - 1, j + 1, i + 1, m]); } } } return(0); }
public override int go() { int i, j, k, m; int iglob, jglob; int L1, L2; int ist1, iend1; int jst1, jend1; double dsspm; double xi, eta, zeta; double q; double u21, u31, u41; double tmp; double u21i, u31i, u41i, u51i; double u21j, u31j, u41j, u51j; double u21k, u31k, u41k, u51k; double u21im1, u31im1, u41im1, u51im1; double u21jm1, u31jm1, u41jm1, u51jm1; double u21km1, u31km1, u41km1, u51km1; dsspm = dssp; for (k = 0; k < nz; k++) { for (j = 2; j < ny + 2; j++) { for (i = 2; i < nx + 2; i++) { for (m = 0; m < 5; m++) { frct[k, j, i, m] = 0.0d; } } } } for (k = 0; k < nz; k++) { zeta = ((double)(k)) / (nz - 1); for (j = 2; j < ny + 2; j++) { jglob = jpt + j - 2; eta = ((double)(jglob)) / (ny0 - 1); for (i = 2; i < nx + 2; i++) { iglob = ipt + i - 2; xi = ((double)(iglob)) / (nx0 - 1); for (m = 0; m < 5; m++) { rsd[k, j, i, m] = ce[0, m] + ce[1, m] * xi + ce[2, m] * eta + ce[3, m] * zeta + ce[4, m] * xi * xi + ce[5, m] * eta * eta + ce[6, m] * zeta * zeta + ce[7, m] * xi * xi * xi + ce[8, m] * eta * eta * eta + ce[9, m] * zeta * zeta * zeta + ce[10, m] * xi * xi * xi * xi + ce[11, m] * eta * eta * eta * eta + ce[12, m] * zeta * zeta * zeta * zeta; } } } } //--------------------------------------------------------------------- // communicate and receive/send two rows of data //--------------------------------------------------------------------- Exchange30.setParameters(rsd); Exchange30.go(); L1 = 0; if (north == -1) { L1 = 1; } L2 = nx + 1; if (south == -1) { L2 = nx; } ist1 = 1; iend1 = nx; if (north == -1) { ist1 = 4; } if (south == -1) { iend1 = nx - 3; } for (k = 1; k <= nz - 2; k++) { for (j = jst; j <= jend; j++) { for (i = L1; i <= L2; i++) { flux[k, j, i, 0] = rsd[k, j + 1, i + 1, 1]; u21 = rsd[k, j + 1, i + 1, 1] / rsd[k, j + 1, i + 1, 0]; q = 0.50d * (rsd[k, j + 1, i + 1, 1] * rsd[k, j + 1, i + 1, 1] + rsd[k, j + 1, i + 1, 2] * rsd[k, j + 1, i + 1, 2] + rsd[k, j + 1, i + 1, 3] * rsd[k, j + 1, i + 1, 3]) / rsd[k, j + 1, i + 1, 0]; flux[k, j, i, 1] = rsd[k, j + 1, i + 1, 1] * u21 + c2 * (rsd[k, j + 1, i + 1, 4] - q); flux[k, j, i, 2] = rsd[k, j + 1, i + 1, 2] * u21; flux[k, j, i, 3] = rsd[k, j + 1, i + 1, 3] * u21; flux[k, j, i, 4] = (c1 * rsd[k, j + 1, i + 1, 4] - c2 * q) * u21; } } } for (k = 1; k <= nz - 2; k++) { for (j = jst; j <= jend; j++) { for (i = ist; i <= iend; i++) { for (m = 0; m < 5; m++) { frct[k, j + 1, i + 1, m] = frct[k, j + 1, i + 1, m] - tx2 * (flux[k, j, i + 1, m] - flux[k, j, i - 1, m]); } } for (i = ist; i <= L2; i++) { tmp = 1.0d / rsd[k, j + 1, i + 1, 0]; u21i = tmp * rsd[k, j + 1, i + 1, 1]; u31i = tmp * rsd[k, j + 1, i + 1, 2]; u41i = tmp * rsd[k, j + 1, i + 1, 3]; u51i = tmp * rsd[k, j + 1, i + 1, 4]; tmp = 1.0d / rsd[k, j + 1, i, 0]; u21im1 = tmp * rsd[k, j + 1, i, 1]; u31im1 = tmp * rsd[k, j + 1, i, 2]; u41im1 = tmp * rsd[k, j + 1, i, 3]; u51im1 = tmp * rsd[k, j + 1, i, 4]; flux[k, j, i, 1] = (4.0d / 3.0d) * tx3 * (u21i - u21im1); flux[k, j, i, 2] = tx3 * (u31i - u31im1); flux[k, j, i, 3] = tx3 * (u41i - u41im1); flux[k, j, i, 4] = 0.50d * (1.0d - c1 * c5) * tx3 * ((pow2(u21i) + pow2(u31i) + pow2(u41i)) - (pow2(u21im1) + pow2(u31im1) + pow2(u41im1))) + (1.0d / 6.0d) * tx3 * (pow2(u21i) - pow2(u21im1)) + c1 * c5 * tx3 * (u51i - u51im1); } for (i = ist; i <= iend; i++) { frct[k, j + 1, i + 1, 0] = frct[k, j + 1, i + 1, 0] + dx1 * tx1 * (rsd[k, j + 1, i, 0] - 2.0d * rsd[k, j + 1, i + 1, 0] + rsd[k, j + 1, i + 2, 0]); frct[k, j + 1, i + 1, 1] = frct[k, j + 1, i + 1, 1] + tx3 * c3 * c4 * (flux[k, j, i + 1, 1] - flux[k, j, i, 1]) + dx2 * tx1 * (rsd[k, j + 1, i, 1] - 2.0d * rsd[k, j + 1, i + 1, 1] + rsd[k, j + 1, i + 2, 1]); frct[k, j + 1, i + 1, 2] = frct[k, j + 1, i + 1, 2] + tx3 * c3 * c4 * (flux[k, j, i + 1, 2] - flux[k, j, i, 2]) + dx3 * tx1 * (rsd[k, j + 1, i, 2] - 2.0d * rsd[k, j + 1, i + 1, 2] + rsd[k, j + 1, i + 2, 2]); frct[k, j + 1, i + 1, 3] = frct[k, j + 1, i + 1, 3] + tx3 * c3 * c4 * (flux[k, j, i + 1, 3] - flux[k, j, i, 3]) + dx4 * tx1 * (rsd[k, j + 1, i, 3] - 2.0d * rsd[k, j + 1, i + 1, 3] + rsd[k, j + 1, i + 2, 3]); frct[k, j + 1, i + 1, 4] = frct[k, j + 1, i + 1, 4] + tx3 * c3 * c4 * (flux[k, j, i + 1, 4] - flux[k, j, i, 4]) + dx5 * tx1 * (rsd[k, j + 1, i, 4] - 2.0d * rsd[k, j + 1, i + 1, 4] + rsd[k, j + 1, i + 2, 4]); } //--------------------------------------------------------------------- // Fourth-order dissipation //--------------------------------------------------------------------- if (north == -1) { for (m = 0; m < 5; m++) { frct[k, j + 1, 3, m] = frct[k, j + 1, 3, m] - dsspm * (+5.0d * rsd[k, j + 1, 3, m] - 4.0d * rsd[k, j + 1, 4, m] + rsd[k, j + 1, 5, m]); frct[k, j + 1, 4, m] = frct[k, j + 1, 4, m] - dsspm * (-4.0d * rsd[k, j + 1, 3, m] + 6.0d * rsd[k, j + 1, 4, m] - 4.0d * rsd[k, j + 1, 5, m] + rsd[k, j + 1, 6, m]); } } for (i = ist1; i <= iend1; i++) { for (m = 0; m < 5; m++) { frct[k, j + 1, i + 1, m] = frct[k, j + 1, i + 1, m] - dsspm * (rsd[k, j + 1, i - 1, m] - 4.0d * rsd[k, j + 1, i, m] + 6.0d * rsd[k, j + 1, i + 1, m] - 4.0d * rsd[k, j + 1, i + 2, m] + rsd[k, j + 1, i + 3, m]); } } if (south == -1) { for (m = 0; m < 5; m++) { frct[k, j + 1, nx - 1, m] = frct[k, j + 1, nx - 1, m] - dsspm * (rsd[k, j + 1, nx - 3, m] - 4.0d * rsd[k, j + 1, nx - 2, m] + 6.0d * rsd[k, j + 1, nx - 1, m] - 4.0d * rsd[k, j + 1, nx, m]); frct[k, j + 1, nx, m] = frct[k, j + 1, nx, m] - dsspm * (rsd[k, j + 1, nx - 2, m] - 4.0d * rsd[k, j + 1, nx - 1, m] + 5.0d * rsd[k, j + 1, nx, m]); } } } } //--------------------------------------------------------------------- // communicate and receive/send two rows of data //--------------------------------------------------------------------- Exchange31.setParameters(rsd); Exchange31.go(); L1 = 0; if (west == -1) { L1 = 1; } L2 = ny + 1; if (east == -1) { L2 = ny; } jst1 = 1; jend1 = ny; if (west == -1) { jst1 = 4; } if (east == -1) { jend1 = ny - 3; } for (k = 1; k <= nz - 2; k++) { for (j = L1; j <= L2; j++) { for (i = ist; i <= iend; i++) { flux[k, j, i, 0] = rsd[k, j + 1, i + 1, 2]; u31 = rsd[k, j + 1, i + 1, 2] / rsd[k, j + 1, i + 1, 0]; q = 0.50d * (rsd[k, j + 1, i + 1, 1] * rsd[k, j + 1, i + 1, 1] + rsd[k, j + 1, i + 1, 2] * rsd[k, j + 1, i + 1, 2] + rsd[k, j + 1, i + 1, 3] * rsd[k, j + 1, i + 1, 3]) / rsd[k, j + 1, i + 1, 0]; flux[k, j, i, 1] = rsd[k, j + 1, i + 1, 1] * u31; flux[k, j, i, 2] = rsd[k, j + 1, i + 1, 2] * u31 + c2 * (rsd[k, j + 1, i + 1, 4] - q); flux[k, j, i, 3] = rsd[k, j + 1, i + 1, 3] * u31; flux[k, j, i, 4] = (c1 * rsd[k, j + 1, i + 1, 4] - c2 * q) * u31; } } } for (k = 1; k <= nz - 2; k++) { for (i = ist; i <= iend; i++) { for (j = jst; j <= jend; j++) { for (m = 0; m < 5; m++) { frct[k, j + 1, i + 1, m] = frct[k, j + 1, i + 1, m] - ty2 * (flux[k, j + 1, i, m] - flux[k, j - 1, i, m]); } } } for (j = jst; j <= L2; j++) { for (i = ist; i <= iend; i++) { tmp = 1.0d / rsd[k, j + 1, i + 1, 0]; u21j = tmp * rsd[k, j + 1, i + 1, 1]; u31j = tmp * rsd[k, j + 1, i + 1, 2]; u41j = tmp * rsd[k, j + 1, i + 1, 3]; u51j = tmp * rsd[k, j + 1, i + 1, 4]; tmp = 1.0d / rsd[k, j, i + 1, 0]; u21jm1 = tmp * rsd[k, j, i + 1, 1]; u31jm1 = tmp * rsd[k, j, i + 1, 2]; u41jm1 = tmp * rsd[k, j, i + 1, 3]; u51jm1 = tmp * rsd[k, j, i + 1, 4]; flux[k, j, i, 1] = ty3 * (u21j - u21jm1); flux[k, j, i, 2] = (4.0d / 3.0d) * ty3 * (u31j - u31jm1); flux[k, j, i, 3] = ty3 * (u41j - u41jm1); flux[k, j, i, 4] = 0.50d * (1.0d - c1 * c5) * ty3 * ((pow2(u21j) + pow2(u31j) + pow2(u41j)) - (pow2(u21jm1) + pow2(u31jm1) + pow2(u41jm1))) + (1.0d / 6.0d) * ty3 * (pow2(u31j) - pow2(u31jm1)) + c1 * c5 * ty3 * (u51j - u51jm1); } } for (j = jst; j <= jend; j++) { for (i = ist; i <= iend; i++) { frct[k, j + 1, i + 1, 0] = frct[k, j + 1, i + 1, 0] + dy1 * ty1 * (rsd[k, j, i + 1, 0] - 2.0d * rsd[k, j + 1, i + 1, 0] + rsd[k, j + 2, i + 1, 0]); frct[k, j + 1, i + 1, 1] = frct[k, j + 1, i + 1, 1] + ty3 * c3 * c4 * (flux[k, j + 1, i, 1] - flux[k, j, i, 1]) + dy2 * ty1 * (rsd[k, j, i + 1, 1] - 2.0d * rsd[k, j + 1, i + 1, 1] + rsd[k, j + 2, i + 1, 1]); frct[k, j + 1, i + 1, 2] = frct[k, j + 1, i + 1, 2] + ty3 * c3 * c4 * (flux[k, j + 1, i, 2] - flux[k, j, i, 2]) + dy3 * ty1 * (rsd[k, j, i + 1, 2] - 2.0d * rsd[k, j + 1, i + 1, 2] + rsd[k, j + 2, i + 1, 2]); frct[k, j + 1, i + 1, 3] = frct[k, j + 1, i + 1, 3] + ty3 * c3 * c4 * (flux[k, j + 1, i, 3] - flux[k, j, i, 3]) + dy4 * ty1 * (rsd[k, j, i + 1, 3] - 2.0d * rsd[k, j + 1, i + 1, 3] + rsd[k, j + 2, i + 1, 3]); frct[k, j + 1, i + 1, 4] = frct[k, j + 1, i + 1, 4] + ty3 * c3 * c4 * (flux[k, j + 1, i, 4] - flux[k, j, i, 4]) + dy5 * ty1 * (rsd[k, j, i + 1, 4] - 2.0d * rsd[k, j + 1, i + 1, 4] + rsd[k, j + 2, i + 1, 4]); } } //--------------------------------------------------------------------- // fourth-order dissipation //--------------------------------------------------------------------- if (west == -1) { for (i = ist; i <= iend; i++) { for (m = 0; m < 5; m++) { frct[k, 3, i + 1, m] = frct[k, 3, i + 1, m] - dsspm * (+5.0d * rsd[k, 3, i + 1, m] - 4.0d * rsd[k, 4, i + 1, m] + rsd[k, 5, i + 1, m]); frct[k, 4, i + 1, m] = frct[k, 4, i + 1, m] - dsspm * (-4.0d * rsd[k, 3, i + 1, m] + 6.0d * rsd[k, 4, i + 1, m] - 4.0d * rsd[k, 5, i + 1, m] + rsd[k, 6, i + 1, m]); } } } for (j = jst1; j <= jend1; j++) { for (i = ist; i <= iend; i++) { for (m = 0; m < 5; m++) { frct[k, j + 1, i + 1, m] = frct[k, j + 1, i + 1, m] - dsspm * (rsd[k, j - 1, i + 1, m] - 4.0d * rsd[k, j, i + 1, m] + 6.0d * rsd[k, j + 1, i + 1, m] - 4.0d * rsd[k, j + 2, i + 1, m] + rsd[k, j + 3, i + 1, m]); } } } if (east == -1) { for (i = ist; i <= iend; i++) { for (m = 0; m < 5; m++) { frct[k, ny - 1, i + 1, m] = frct[k, ny - 1, i + 1, m] - dsspm * (rsd[k, ny - 3, i + 1, m] - 4.0d * rsd[k, ny - 2, i + 1, m] + 6.0d * rsd[k, ny - 1, i + 1, m] - 4.0d * rsd[k, ny, i + 1, m]); frct[k, ny, i + 1, m] = frct[k, ny, i + 1, m] - dsspm * (rsd[k, ny - 2, i + 1, m] - 4.0d * rsd[k, ny - 1, i + 1, m] + 5.0d * rsd[k, ny, i + 1, m]); } } } } //--------------------------------------------------------------------- // zeta-direction flux differences //--------------------------------------------------------------------- for (k = 0; k < nz; k++) { for (j = jst; j <= jend; j++) { for (i = ist; i <= iend; i++) { flux[k, j, i, 0] = rsd[k, j + 1, i + 1, 3]; u41 = rsd[k, j + 1, i + 1, 3] / rsd[k, j + 1, i + 1, 0]; q = 0.50d * (rsd[k, j + 1, i + 1, 1] * rsd[k, j + 1, i + 1, 1] + rsd[k, j + 1, i + 1, 2] * rsd[k, j + 1, i + 1, 2] + rsd[k, j + 1, i + 1, 3] * rsd[k, j + 1, i + 1, 3]) / rsd[k, j + 1, i + 1, 0]; flux[k, j, i, 1] = rsd[k, j + 1, i + 1, 1] * u41; flux[k, j, i, 2] = rsd[k, j + 1, i + 1, 2] * u41; flux[k, j, i, 3] = rsd[k, j + 1, i + 1, 3] * u41 + c2 * (rsd[k, j + 1, i + 1, 4] - q); flux[k, j, i, 4] = (c1 * rsd[k, j + 1, i + 1, 4] - c2 * q) * u41; } } } for (k = 1; k <= nz - 2; k++) { for (j = jst; j <= jend; j++) { for (i = ist; i <= iend; i++) { for (m = 0; m < 5; m++) { frct[k, j + 1, i + 1, m] = frct[k, j + 1, i + 1, m] - tz2 * (flux[k + 1, j, i, m] - flux[k - 1, j, i, m]); } } } } for (k = 1; k < nz; k++) { for (j = jst; j <= jend; j++) { for (i = ist; i <= iend; i++) { tmp = 1.0d / rsd[k, j + 1, i + 1, 0]; u21k = tmp * rsd[k, j + 1, i + 1, 1]; u31k = tmp * rsd[k, j + 1, i + 1, 2]; u41k = tmp * rsd[k, j + 1, i + 1, 3]; u51k = tmp * rsd[k, j + 1, i + 1, 4]; tmp = 1.0d / rsd[k - 1, j + 1, i + 1, 0]; u21km1 = tmp * rsd[k - 1, j + 1, i + 1, 1]; u31km1 = tmp * rsd[k - 1, j + 1, i + 1, 2]; u41km1 = tmp * rsd[k - 1, j + 1, i + 1, 3]; u51km1 = tmp * rsd[k - 1, j + 1, i + 1, 4]; flux[k, j, i, 1] = tz3 * (u21k - u21km1); flux[k, j, i, 2] = tz3 * (u31k - u31km1); flux[k, j, i, 3] = (4.0d / 3.0d) * tz3 * (u41k - u41km1); flux[k, j, i, 4] = 0.50d * (1.0d - c1 * c5) * tz3 * ((pow2(u21k) + pow2(u31k) + pow2(u41k)) - (pow2(u21km1) + pow2(u31km1) + pow2(u41km1))) + (1.0d / 6.0d) * tz3 * (pow2(u41k) - pow2(u41km1)) + c1 * c5 * tz3 * (u51k - u51km1); } } } for (k = 1; k <= nz - 2; k++) { for (j = jst; j <= jend; j++) { for (i = ist; i <= iend; i++) { frct[k, j + 1, i + 1, 0] = frct[k, j + 1, i + 1, 0] + dz1 * tz1 * (rsd[k + 1, j + 1, i + 1, 0] - 2.0d * rsd[k, j + 1, i + 1, 0] + rsd[k - 1, j + 1, i + 1, 0]); frct[k, j + 1, i + 1, 1] = frct[k, j + 1, i + 1, 1] + tz3 * c3 * c4 * (flux[k + 1, j, i, 1] - flux[k, j, i, 1]) + dz2 * tz1 * (rsd[k + 1, j + 1, i + 1, 1] - 2.0d * rsd[k, j + 1, i + 1, 1] + rsd[k - 1, j + 1, i + 1, 1]); frct[k, j + 1, i + 1, 2] = frct[k, j + 1, i + 1, 2] + tz3 * c3 * c4 * (flux[k + 1, j, i, 2] - flux[k, j, i, 2]) + dz3 * tz1 * (rsd[k + 1, j + 1, i + 1, 2] - 2.0d * rsd[k, j + 1, i + 1, 2] + rsd[k - 1, j + 1, i + 1, 2]); frct[k, j + 1, i + 1, 3] = frct[k, j + 1, i + 1, 3] + tz3 * c3 * c4 * (flux[k + 1, j, i, 3] - flux[k, j, i, 3]) + dz4 * tz1 * (rsd[k + 1, j + 1, i + 1, 3] - 2.0d * rsd[k, j + 1, i + 1, 3] + rsd[k - 1, j + 1, i + 1, 3]); frct[k, j + 1, i + 1, 4] = frct[k, j + 1, i + 1, 4] + tz3 * c3 * c4 * (flux[k + 1, j, i, 4] - flux[k, j, i, 4]) + dz5 * tz1 * (rsd[k + 1, j + 1, i + 1, 4] - 2.0d * rsd[k, j + 1, i + 1, 4] + rsd[k - 1, j + 1, i + 1, 4]); } } } //--------------------------------------------------------------------- // fourth-order dissipation //--------------------------------------------------------------------- for (j = jst; j <= jend; j++) { for (i = ist; i <= iend; i++) { for (m = 0; m < 5; m++) { frct[1, j + 1, i + 1, m] = frct[1, j + 1, i + 1, m] - dsspm * (+5.0d * rsd[1, j + 1, i + 1, m] - 4.0d * rsd[2, j + 1, i + 1, m] + rsd[3, j + 1, i + 1, m]); frct[2, j + 1, i + 1, m] = frct[2, j + 1, i + 1, m] - dsspm * (-4.0d * rsd[1, j + 1, i + 1, m] + 6.0d * rsd[2, j + 1, i + 1, m] - 4.0d * rsd[3, j + 1, i + 1, m] + rsd[4, j + 1, i + 1, m]); } } } for (k = 3; k <= nz - 4; k++) { for (j = jst; j <= jend; j++) { for (i = ist; i <= iend; i++) { for (m = 0; m < 5; m++) { frct[k, j + 1, i + 1, m] = frct[k, j + 1, i + 1, m] - dsspm * (rsd[k - 2, j + 1, i + 1, m] - 4.0d * rsd[k - 1, j + 1, i + 1, m] + 6.0d * rsd[k, j + 1, i + 1, m] - 4.0d * rsd[k + 1, j + 1, i + 1, m] + rsd[k + 2, j + 1, i + 1, m]); } } } } for (j = jst; j <= jend; j++) { for (i = ist; i <= iend; i++) { for (m = 0; m < 5; m++) { frct[nz - 3, j + 1, i + 1, m] = frct[nz - 3, j + 1, i + 1, m] - dsspm * (rsd[nz - 5, j + 1, i + 1, m] - 4.0d * rsd[nz - 4, j + 1, i + 1, m] + 6.0d * rsd[nz - 3, j + 1, i + 1, m] - 4.0d * rsd[nz - 2, j + 1, i + 1, m]); frct[nz - 2, j + 1, i + 1, m] = frct[nz - 2, j + 1, i + 1, m] - dsspm * (rsd[nz - 4, j + 1, i + 1, m] - 4.0d * rsd[nz - 3, j + 1, i + 1, m] + 5.0d * rsd[nz - 2, j + 1, i + 1, m]); } } } return(0); }