Implemented Function pointer for SOR, RB and RBA variants

This commit is contained in:
2023-07-14 21:50:38 +02:00
parent 9f55413efb
commit b50dbe7d4b
30 changed files with 61658 additions and 61142 deletions

View File

@@ -22,7 +22,7 @@ enum VARIANT { SOR = 1, RB, RBA };
int main (int argc, char** argv)
{
int rank;
int variant = SOR;
int variant = RB;
double S, E;
Parameter params;
@@ -52,11 +52,14 @@ int main (int argc, char** argv)
double te = solver.te;
double t = 0.0;
int (*solver_generic[])(solver) = {solve, solveRB, solveRBA};
S = getTimeStamp();
switch (variant) {
case SOR:
printf("Plain SOR\n");
while (t <= te) {
while (t <= te)
{
if (tau > 0.0) {
computeTimestep(&solver);
}
@@ -65,47 +68,10 @@ int main (int argc, char** argv)
setSpecialBoundaryCondition(&solver);
computeFG(&solver);
computeRHS(&solver);
solve(&solver);
(*solver_generic[variant - 1])(&solver);
adaptUV(&solver);
t += solver.dt;
}
break;
case RB:
printf("Red-black SOR\n");
while (t <= te) {
if (tau > 0.0) {
computeTimestep(&solver);
}
setBoundaryConditions(&solver);
setSpecialBoundaryCondition(&solver);
computeFG(&solver);
computeRHS(&solver);
solveRB(&solver);
adaptUV(&solver);
t += solver.dt;
}
break;
case RBA:
printf("Red-black SOR with acceleration\n");
while (t <= te) {
if (tau > 0.0) {
computeTimestep(&solver);
}
setBoundaryConditions(&solver);
setSpecialBoundaryCondition(&solver);
computeFG(&solver);
computeRHS(&solver);
solveRBA(&solver);
adaptUV(&solver);
t += solver.dt;
}
break;
}
#ifdef VERBOSE
if (rank == 0) {
@@ -114,6 +80,7 @@ int main (int argc, char** argv)
#else
printProgress(t);
#endif
}
E = getTimeStamp();
stopProgress();