diff options
Diffstat (limited to 'mg2d.c')
-rw-r--r-- | mg2d.c | 10 |
1 files changed, 7 insertions, 3 deletions
@@ -40,6 +40,7 @@ typedef struct MG2DLevel { unsigned int depth; EGSContext *solver; + int egs_init_flags; GridTransferContext *transfer_restrict; GridTransferContext *transfer_prolong; @@ -139,9 +140,10 @@ static int mg_solve_subgrid(MG2DContext *ctx, MG2DLevel *level) level->solver->domain_size[1]); /* re-init the current-level solver (re-calc the residual) */ - ret = mg2di_egs_init(level->solver); + ret = mg2di_egs_init(level->solver, level->egs_init_flags); if (ret < 0) return ret; + level->egs_init_flags |= EGS_INIT_FLAG_SAME_DIFF_COEFFS; } res_old = level->solver->residual_max; @@ -198,7 +200,7 @@ static int mg_solve_subgrid(MG2DContext *ctx, MG2DLevel *level) /* re-init the current-level solver (re-calc the residual) */ res_prev = level->solver->residual_max; start = gettime(); - ret = mg2di_egs_init(level->solver); + ret = mg2di_egs_init(level->solver, 0); if (ret < 0) return ret; level->time_reinit += gettime() - start; @@ -434,6 +436,8 @@ static int mg_levels_init(MG2DContext *ctx) return ret; } + cur->egs_init_flags &= ~EGS_INIT_FLAG_SAME_DIFF_COEFFS; + cur = cur->child; } @@ -490,7 +494,7 @@ int mg2d_solve(MG2DContext *ctx) if (ret < 0) return ret; - ret = mg2di_egs_init(s_root); + ret = mg2di_egs_init(s_root, 0); if (ret < 0) return ret; |