Porting working changes from 3D-seq to 3D-MPI

This commit is contained in:
2023-12-04 14:40:02 +01:00
parent 1987056dce
commit 1b3129d3cb
25 changed files with 5162240 additions and 362320 deletions

View File

@@ -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;
}
}
}
}
}
}