Porting working changes from 3D-seq to 3D-MPI
This commit is contained in:
@@ -93,15 +93,15 @@ static double sumOffset(double* sizes, int init, int offset, int coord)
|
||||
|
||||
void printGrid(Solver* solver, int* grid)
|
||||
{
|
||||
int imax = solver->grid.imax;
|
||||
int jmax = solver->grid.jmax;
|
||||
int imaxlocal = solver->comm.imaxLocal;
|
||||
int jmaxlocal = solver->comm.jmaxLocal;
|
||||
|
||||
for (int k = 0; k < solver->grid.kmax + 2; k++) {
|
||||
for (int k = 0; k < solver->comm.kmaxLocal + 2; k++) {
|
||||
printf("K : %02d:\n", k);
|
||||
for (int j = 0; j < solver->grid.jmax + 2; j++) {
|
||||
for (int j = 0; j < solver->comm.jmaxLocal + 2; j++) {
|
||||
printf("J : %02d: ", j);
|
||||
for (int i = 0; i < solver->grid.imax + 2; i++) {
|
||||
switch (grid[(k) * (imax + 2) * (jmax + 2) + (j) * (imax + 2) + (i)]) {
|
||||
for (int i = 0; i < solver->comm.imaxLocal + 2; i++) {
|
||||
switch (grid[(k) * (imaxlocal + 2) * (jmaxlocal + 2) + (j) * (imaxlocal + 2) + (i)]) {
|
||||
case FRONTFACE:
|
||||
printf("FF ");
|
||||
break;
|
||||
@@ -329,6 +329,7 @@ void initSolver(Solver* s, Parameter* params)
|
||||
|
||||
break;
|
||||
case CIRCLE:
|
||||
|
||||
xCenter = params->xCenter;
|
||||
yCenter = params->yCenter;
|
||||
zCenter = params->zCenter;
|
||||
@@ -517,12 +518,10 @@ void computeRHS(Solver* s)
|
||||
for (int k = 1; k < kmaxLocal + 1; k++) {
|
||||
for (int j = 1; j < jmaxLocal + 1; j++) {
|
||||
for (int i = 1; i < imaxLocal + 1; i++) {
|
||||
if (S(i, j, k) == NONE) {
|
||||
RHS(i, j, k) = ((F(i, j, k) - F(i - 1, j, k)) * idx +
|
||||
(G(i, j, k) - G(i, j - 1, k)) * idy +
|
||||
(H(i, j, k) - H(i, j, k - 1)) * idz) *
|
||||
idt;
|
||||
}
|
||||
RHS(i, j, k) = ((F(i, j, k) - F(i - 1, j, k)) * idx +
|
||||
(G(i, j, k) - G(i, j - 1, k)) * idy +
|
||||
(H(i, j, k) - H(i, j, k - 1)) * idz) *
|
||||
idt;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -569,19 +568,16 @@ void solveRB(Solver* s)
|
||||
isw = jsw;
|
||||
for (int j = 1; j < jmaxLocal + 1; j++) {
|
||||
for (int i = isw; i < imaxLocal + 1; i += 2) {
|
||||
if (S(i, j, k) == NONE) {
|
||||
double r =
|
||||
RHS(i, j, k) -
|
||||
((P(i + 1, j, k) - 2.0 * P(i, j, k) + P(i - 1, j, k)) *
|
||||
idx2 +
|
||||
(P(i, j + 1, k) - 2.0 * P(i, j, k) + P(i, j - 1, k)) *
|
||||
idy2 +
|
||||
(P(i, j, k + 1) - 2.0 * P(i, j, k) + P(i, j, k - 1)) *
|
||||
idz2);
|
||||
double r =
|
||||
RHS(i, j, k) -
|
||||
((P(i + 1, j, k) - 2.0 * P(i, j, k) + P(i - 1, j, k)) * idx2 +
|
||||
(P(i, j + 1, k) - 2.0 * P(i, j, k) + P(i, j - 1, k)) *
|
||||
idy2 +
|
||||
(P(i, j, k + 1) - 2.0 * P(i, j, k) + P(i, j, k - 1)) *
|
||||
idz2);
|
||||
|
||||
P(i, j, k) -= (factor * r);
|
||||
res += (r * r);
|
||||
}
|
||||
P(i, j, k) -= (factor * r);
|
||||
res += (r * r);
|
||||
}
|
||||
isw = 3 - isw;
|
||||
}
|
||||
@@ -637,7 +633,7 @@ void solveRB(Solver* s)
|
||||
}
|
||||
}
|
||||
}
|
||||
setObjectPBoundaryCondition(s);
|
||||
// setObjectPBoundaryCondition(s);
|
||||
|
||||
commReduction(&res, SUM);
|
||||
res = res / (double)(imax * jmax * kmax);
|
||||
@@ -692,18 +688,16 @@ void solve(Solver* s)
|
||||
for (int k = 1; k < kmaxLocal + 1; k++) {
|
||||
for (int j = 1; j < jmaxLocal + 1; j++) {
|
||||
for (int i = 1; i < imaxLocal + 1; i++) {
|
||||
if (S(i, j, k) == NONE) {
|
||||
double r =
|
||||
RHS(i, j, k) -
|
||||
((P(i + 1, j, k) - 2.0 * P(i, j, k) + P(i - 1, j, k)) * idx2 +
|
||||
(P(i, j + 1, k) - 2.0 * P(i, j, k) + P(i, j - 1, k)) *
|
||||
idy2 +
|
||||
(P(i, j, k + 1) - 2.0 * P(i, j, k) + P(i, j, k - 1)) *
|
||||
idz2);
|
||||
double r = RHS(i, j, k) -
|
||||
((P(i + 1, j, k) - 2.0 * P(i, j, k) + P(i - 1, j, k)) *
|
||||
idx2 +
|
||||
(P(i, j + 1, k) - 2.0 * P(i, j, k) + P(i, j - 1, k)) *
|
||||
idy2 +
|
||||
(P(i, j, k + 1) - 2.0 * P(i, j, k) + P(i, j, k - 1)) *
|
||||
idz2);
|
||||
|
||||
P(i, j, k) -= (factor * r);
|
||||
res += (r * r);
|
||||
}
|
||||
P(i, j, k) -= (factor * r);
|
||||
res += (r * r);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -755,7 +749,7 @@ void solve(Solver* s)
|
||||
}
|
||||
}
|
||||
}
|
||||
setObjectPBoundaryCondition(s);
|
||||
// setObjectPBoundaryCondition(s);
|
||||
|
||||
commReduction(&res, SUM);
|
||||
res = res / (double)(imax * jmax * kmax);
|
||||
@@ -817,19 +811,16 @@ void solveRBA(Solver* s)
|
||||
isw = jsw;
|
||||
for (int j = 1; j < jmaxLocal + 1; j++) {
|
||||
for (int i = isw; i < imaxLocal + 1; i += 2) {
|
||||
if (S(i, j, k) == NONE) {
|
||||
double r =
|
||||
RHS(i, j, k) -
|
||||
((P(i + 1, j, k) - 2.0 * P(i, j, k) + P(i - 1, j, k)) *
|
||||
idx2 +
|
||||
(P(i, j + 1, k) - 2.0 * P(i, j, k) + P(i, j - 1, k)) *
|
||||
idy2 +
|
||||
(P(i, j, k + 1) - 2.0 * P(i, j, k) + P(i, j, k - 1)) *
|
||||
idz2);
|
||||
double r =
|
||||
RHS(i, j, k) -
|
||||
((P(i + 1, j, k) - 2.0 * P(i, j, k) + P(i - 1, j, k)) * idx2 +
|
||||
(P(i, j + 1, k) - 2.0 * P(i, j, k) + P(i, j - 1, k)) *
|
||||
idy2 +
|
||||
(P(i, j, k + 1) - 2.0 * P(i, j, k) + P(i, j, k - 1)) *
|
||||
idz2);
|
||||
|
||||
P(i, j, k) -= (omega * factor * r);
|
||||
res += (r * r);
|
||||
}
|
||||
P(i, j, k) -= (omega * factor * r);
|
||||
res += (r * r);
|
||||
}
|
||||
isw = 3 - isw;
|
||||
}
|
||||
@@ -887,7 +878,7 @@ void solveRBA(Solver* s)
|
||||
}
|
||||
}
|
||||
}
|
||||
setObjectPBoundaryCondition(s);
|
||||
// setObjectPBoundaryCondition(s);
|
||||
|
||||
commReduction(&res, SUM);
|
||||
res = res / (double)(imax * jmax * kmax);
|
||||
@@ -1211,6 +1202,27 @@ void setSpecialBoundaryCondition(Solver* s)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (strcmp(s->problem, "karman") == 0) {
|
||||
if (commIsBoundary(&s->comm, LEFT)) {
|
||||
for (int k = 1; k < kmaxLocal + 1; k++) {
|
||||
for (int j = 1; j < jmaxLocal + 1; j++) {
|
||||
U(1, j, k) = 1.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (strcmp(s->problem, "backstep") == 0) {
|
||||
if (commIsBoundary(&s->comm, LEFT)) {
|
||||
int* seg = s->seg;
|
||||
for (int k = 1; k < kmaxLocal + 1; k++) {
|
||||
for (int j = 1; j < jmaxLocal + 1; j++) {
|
||||
if (S(1, j, k) == NONE) U(0, j, k) = 1.0;
|
||||
else {
|
||||
U(0, j, k) = 0.0;
|
||||
U(1, j, k) = 0.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user