diff options
Diffstat (limited to 'mg2d.c')
-rw-r--r-- | mg2d.c | 27 |
1 files changed, 17 insertions, 10 deletions
@@ -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++; } |