From e3745799974cab80ff95a09958477456e1b93f24 Mon Sep 17 00:00:00 2001 From: Martin Kronbichler Date: Tue, 24 Nov 2020 17:50:56 +0100 Subject: [PATCH] Multigrid: Only call MGLevelObject::resize() if necessary --- .../deal.II/multigrid/multigrid.templates.h | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/include/deal.II/multigrid/multigrid.templates.h b/include/deal.II/multigrid/multigrid.templates.h index 5459468171..b8a7f3ba6e 100644 --- a/include/deal.II/multigrid/multigrid.templates.h +++ b/include/deal.II/multigrid/multigrid.templates.h @@ -251,12 +251,17 @@ void Multigrid::cycle() { // The defect vector has been initialized by copy_to_mg. Now adjust the - // other vectors. - solution.resize(minlevel, maxlevel); - t.resize(minlevel, maxlevel); - if (cycle_type != v_cycle) + // other vectors. First out a check if we have the right number of levels. + if (solution.min_level() != minlevel || solution.max_level() != maxlevel) + { + solution.resize(minlevel, maxlevel); + t.resize(minlevel, maxlevel); + } + if (cycle_type != v_cycle && + (defect2.min_level() != minlevel || defect2.max_level() != maxlevel)) defect2.resize(minlevel, maxlevel); + // And now we go and reinit the vectors on the levels. for (unsigned int level = minlevel; level <= maxlevel; ++level) { // the vectors for level>minlevel will be overwritten by the apply() @@ -280,10 +285,14 @@ void Multigrid::vcycle() { // The defect vector has been initialized by copy_to_mg. Now adjust the - // other vectors. - solution.resize(minlevel, maxlevel); - t.resize(minlevel, maxlevel); + // other vectors. First out a check if we have the right number of levels. + if (solution.min_level() != minlevel || solution.max_level() != maxlevel) + { + solution.resize(minlevel, maxlevel); + t.resize(minlevel, maxlevel); + } + // And now we go and reinit the vectors on the levels. for (unsigned int level = minlevel; level <= maxlevel; ++level) { solution[level].reinit(defect[level], level > minlevel); -- 2.39.5