Implemented Function pointer for SOR, RB and RBA variants
This commit is contained in:
@@ -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;
|
||||
Solver solver;
|
||||
@@ -47,15 +47,17 @@ int main (int argc, char** argv)
|
||||
initSolver(&solver, ¶ms);
|
||||
initProgress(solver.te);
|
||||
|
||||
void (*solver_generic[])(solver) = {solve, solveRB, solveRBA};
|
||||
|
||||
|
||||
double tau = solver.tau;
|
||||
double te = solver.te;
|
||||
double t = 0.0;
|
||||
|
||||
S = getTimeStamp();
|
||||
switch (variant) {
|
||||
case SOR:
|
||||
printf("Plain SOR\n");
|
||||
while (t <= te) {
|
||||
|
||||
while (t <= te)
|
||||
{
|
||||
if (tau > 0.0) {
|
||||
computeTimestep(&solver);
|
||||
}
|
||||
@@ -64,49 +66,9 @@ 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) {
|
||||
printf("TIME %f , TIMESTEP %f\n", t, solver.dt);
|
||||
@@ -114,6 +76,7 @@ int main (int argc, char** argv)
|
||||
#else
|
||||
printProgress(t);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
E = getTimeStamp();
|
||||
|
Reference in New Issue
Block a user