aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2019-01-16 11:27:08 +0100
committerAnton Khirnov <anton@khirnov.net>2019-01-16 11:27:08 +0100
commitd0ec0a0ba813dd20a7d4c34d77dacd9b81c63b6e (patch)
treec5c89cc032e4f182257cbd3f3ffae695b9984b91
parent37acb9a97cd3ff034f529b78739f93707877855c (diff)
mg2d: factor out the relaxation step call
-rw-r--r--mg2d.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/mg2d.c b/mg2d.c
index 886ef27..5d089b8 100644
--- a/mg2d.c
+++ b/mg2d.c
@@ -240,6 +240,20 @@ static void prolong_solution(MG2DContext *ctx, MG2DLevel *dst, MG2DLevel *src)
}
}
+static int mg_relax_step(MG2DLevel *level)
+{
+ int64_t start;
+ int ret;
+
+ start = gettime();
+
+ ret = mg2di_ell_relax_step(level->solver);
+
+ level->time_relax += gettime() - start;
+
+ return ret;
+}
+
static int mg_solve_subgrid(MG2DContext *ctx, MG2DLevel *level)
{
int ret;
@@ -258,15 +272,12 @@ static int mg_solve_subgrid(MG2DContext *ctx, MG2DLevel *level)
/* handle coarsest grid */
if (!level->child) {
- int64_t start = gettime();
for (int j = 0; j < 16; j++) {
- ret = mg2di_ell_relax_step(level->solver);
+ ret = mg_relax_step(level);
if (ret < 0)
return ret;
}
-
- level->time_relax += gettime() - start;
level->count_cycles++;
goto finish;
@@ -276,13 +287,11 @@ static int mg_solve_subgrid(MG2DContext *ctx, MG2DLevel *level)
int64_t start;
/* pre-restrict relaxation */
- start = gettime();
for (int j = 0; j < ctx->nb_relax_pre; j++) {
- ret = mg2di_ell_relax_step(level->solver);
+ ret = mg_relax_step(level);
if (ret < 0)
return ret;
}
- level->time_relax += gettime() - start;
/* restrict the residual as to the coarser-level rhs */
start = gettime();
@@ -314,13 +323,11 @@ static int mg_solve_subgrid(MG2DContext *ctx, MG2DLevel *level)
level->time_reinit += gettime() - start;
/* post-correct relaxation */
- start = gettime();
for (int j = 0; j < ctx->nb_relax_pre; j++) {
- ret = mg2di_ell_relax_step(level->solver);
+ ret = mg_relax_step(level);
if (ret < 0)
return ret;
}
- level->time_relax += gettime() - start;
level->count_cycles++;
}