From 23c22683ad168f3690ad17c77d392e365f12ff2e Mon Sep 17 00:00:00 2001 From: Jean-Luc Fattebert Date: Tue, 13 Nov 2018 11:44:24 -0500 Subject: [PATCH] Fixed bug in deallocator of CellPoissonFACSolver --- source/SAMRAI/solv/CellPoissonFACSolver.C | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/source/SAMRAI/solv/CellPoissonFACSolver.C b/source/SAMRAI/solv/CellPoissonFACSolver.C index fd867e0a97..44c9bcd7ad 100644 --- a/source/SAMRAI/solv/CellPoissonFACSolver.C +++ b/source/SAMRAI/solv/CellPoissonFACSolver.C @@ -209,8 +209,12 @@ CellPoissonFACSolver::initializeSolverState( int ln; for (ln = d_ln_min; ln <= d_ln_max; ++ln) { - d_hierarchy->getPatchLevel(ln)->allocatePatchData( - s_weight_id[d_dim.getValue() - 1]); + const int weight_id = s_weight_id[d_dim.getValue() - 1]; + std::shared_ptr level( + d_hierarchy->getPatchLevel(ln)); + if (!level->checkAllocated(weight_id)) { + level->allocatePatchData(weight_id); + } } d_fac_ops->computeVectorWeights(d_hierarchy, @@ -246,12 +250,17 @@ CellPoissonFACSolver::deallocateSolverState() d_fac_precond->deallocateSolverState(); /* - * Delete internally managed data. + * Delete internally managed data if not already done by other + * instance of class */ int ln; for (ln = d_ln_min; ln <= d_ln_max; ++ln) { - d_hierarchy->getPatchLevel(ln)->deallocatePatchData( - s_weight_id[d_dim.getValue() - 1]); + const int weight_id = s_weight_id[d_dim.getValue() - 1]; + if( weight_id>=0 ){ + std::shared_ptr level( + d_hierarchy->getPatchLevel(ln)); + level->deallocatePatchData(weight_id); + } } d_hierarchy.reset();