From ed929ab7524359708cb1a25cd0415051ef27aa9d Mon Sep 17 00:00:00 2001 From: Jan Eitzinger Date: Tue, 5 Mar 2024 13:16:04 +0100 Subject: [PATCH] Cleanup --- BasicSolver/2D-seq/src/main.c | 2 ++ BasicSolver/2D-seq/src/parameter.c | 5 ++--- BasicSolver/2D-seq/src/solver-mg.c | 26 ++++++++++---------------- 3 files changed, 14 insertions(+), 19 deletions(-) diff --git a/BasicSolver/2D-seq/src/main.c b/BasicSolver/2D-seq/src/main.c index a284745..822e32a 100644 --- a/BasicSolver/2D-seq/src/main.c +++ b/BasicSolver/2D-seq/src/main.c @@ -20,6 +20,7 @@ int main(int argc, char** argv) Parameter p; Discretization d; Solver s; + initParameter(&p); if (argc != 2) { @@ -31,6 +32,7 @@ int main(int argc, char** argv) printParameter(&p); initDiscretization(&d, &p); initSolver(&s, &d, &p); + #ifndef VERBOSE initProgress(d.te); #endif diff --git a/BasicSolver/2D-seq/src/parameter.c b/BasicSolver/2D-seq/src/parameter.c index 704f24e..e559545 100644 --- a/BasicSolver/2D-seq/src/parameter.c +++ b/BasicSolver/2D-seq/src/parameter.c @@ -9,15 +9,14 @@ #include #include "parameter.h" -#include "util.h" #define MAXLINE 4096 void initParameter(Parameter* param) { param->xlength = 1.0; param->ylength = 1.0; - param->imax = 100; - param->jmax = 100; + param->imax = 128; + param->jmax = 128; param->itermax = 1000; param->eps = 0.0001; param->omg = 1.7; diff --git a/BasicSolver/2D-seq/src/solver-mg.c b/BasicSolver/2D-seq/src/solver-mg.c index ccd884c..d1e56b4 100644 --- a/BasicSolver/2D-seq/src/solver-mg.c +++ b/BasicSolver/2D-seq/src/solver-mg.c @@ -12,7 +12,7 @@ #include "util.h" #define FINEST_LEVEL 0 -#define COARSEST_LEVEL (solver->levels - 1) +#define COARSEST_LEVEL (s->levels - 1) #define S(i, j) s[(j) * (imax + 2) + (i)] #define E(i, j) e[(j) * (imax + 2) + (i)] #define R(i, j) r[(j) * (imax + 2) + (i)] @@ -106,47 +106,41 @@ static double smooth(Solver* s, double* p, double* rhs, int level, int imax, int return res; } -static double multiGrid( - Solver* solver, double* p, double* rhs, int level, int imax, int jmax) +static double multiGrid(Solver* s, double* p, double* rhs, int level, int imax, int jmax) { double res = 0.0; // coarsest level TODO: Use direct solver? - if (level == (solver->levels - 1)) { + if (level == COARSEST_LEVEL) { for (int i = 0; i < 5; i++) { - smooth(solver, p, rhs, level, imax, jmax); + smooth(s, p, rhs, level, imax, jmax); } return res; } // pre-smoothing TODO: Make smoothing steps configurable? for (int i = 0; i < 5; i++) { - smooth(solver, p, rhs, level, imax, jmax); + smooth(s, p, rhs, level, imax, jmax); if (level == FINEST_LEVEL) setBoundaryCondition(p, imax, jmax); } // restrict - restrictMG(solver, level, imax, jmax); + restrictMG(s, level, imax, jmax); // MGSolver on residual and error. // TODO: What if there is a rest? - multiGrid(solver, - solver->e[level + 1], - solver->r[level + 1], - level + 1, - imax / 2, - jmax / 2); + multiGrid(s, s->e[level + 1], s->r[level + 1], level + 1, imax / 2, jmax / 2); // prolongate - prolongate(solver, level, imax, jmax); + prolongate(s, level, imax, jmax); // correct p on finer level using residual - correct(solver, p, level, imax, jmax); + correct(s, p, level, imax, jmax); if (level == FINEST_LEVEL) setBoundaryCondition(p, imax, jmax); // post-smoothing for (int i = 0; i < 5; i++) { - res = smooth(solver, p, rhs, level, imax, jmax); + res = smooth(s, p, rhs, level, imax, jmax); if (level == FINEST_LEVEL) setBoundaryCondition(p, imax, jmax); }