From e10de4eb2582cc33247b2f90d9fafb152b72bad0 Mon Sep 17 00:00:00 2001 From: William F Godoy Date: Tue, 31 Aug 2021 11:01:26 -0400 Subject: [PATCH] Fix memory leak in Backflow_eI member containers Failing tests: 508 - deterministic-bccH_2x2x2_ae_bf-opt-1-1 (Failed) 516 - deterministic-bccH_2x2x2_ae-vmc_bf-1-1 (Failed) --- src/QMCWaveFunctions/Fermion/BackflowBuilder.cpp | 8 ++++---- src/QMCWaveFunctions/Fermion/Backflow_eI.h | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/QMCWaveFunctions/Fermion/BackflowBuilder.cpp b/src/QMCWaveFunctions/Fermion/BackflowBuilder.cpp index e8227409c..ce18fef60 100644 --- a/src/QMCWaveFunctions/Fermion/BackflowBuilder.cpp +++ b/src/QMCWaveFunctions/Fermion/BackflowBuilder.cpp @@ -250,16 +250,16 @@ std::unique_ptr BackflowBuilder::addOneBody(xmlNodePtr cur for (int i = 0; i < funs.size(); i++) { // BsplineFunctor *bsp = new BsplineFunctor(cusps[i]); - BsplineFunctor* bsp = new BsplineFunctor(); - bsp->cutoff_radius = targetPtcl.Lattice.WignerSeitzRadius; + auto bsp = std::make_unique>(); + bsp->cutoff_radius = targetPtcl.Lattice.WignerSeitzRadius; bsp->put(funs[i]); if (bsp->cutoff_radius > cutOff) cutOff = bsp->cutoff_radius; bsp->myVars.setParameterType(optimize::BACKFLOW_P); //bsp->print(); - dum->uniqueRadFun.push_back(bsp); offsets.push_back(num_params); num_params += bsp->NumParams; + dum->uniqueRadFun.push_back(std::move(bsp)); } dum->derivs.resize(num_params); dum->offsetPrms.resize(nIons); @@ -270,7 +270,7 @@ std::unique_ptr BackflowBuilder::addOneBody(xmlNodePtr cur { APP_ABORT("backflowTransformation::put() ion not mapped to radial function.\n"); } - dum->RadFun[i] = dum->uniqueRadFun[ion2functor[i]]; + dum->RadFun[i] = dum->uniqueRadFun[ion2functor[i]].get(); dum->offsetPrms[i] = offsets[ion2functor[i]]; } tbf = std::move(dum); diff --git a/src/QMCWaveFunctions/Fermion/Backflow_eI.h b/src/QMCWaveFunctions/Fermion/Backflow_eI.h index 286e95f34..d0fa4a708 100644 --- a/src/QMCWaveFunctions/Fermion/Backflow_eI.h +++ b/src/QMCWaveFunctions/Fermion/Backflow_eI.h @@ -31,7 +31,7 @@ private: public: std::vector RadFun; - std::vector uniqueRadFun; + std::vector> uniqueRadFun; std::vector offsetPrms; Backflow_eI(ParticleSet& ions, ParticleSet& els) : BackflowFunctionBase(ions, els), myTableIndex_(els.addTable(ions)) @@ -60,15 +60,15 @@ public: clone->uniqueRadFun.resize(uniqueRadFun.size()); clone->RadFun.resize(RadFun.size()); for (int i = 0; i < uniqueRadFun.size(); i++) - clone->uniqueRadFun[i] = new FT(*(uniqueRadFun[i])); + clone->uniqueRadFun[i] = std::make_unique(*(uniqueRadFun[i])); for (int i = 0; i < RadFun.size(); i++) { bool done = false; for (int k = 0; k < uniqueRadFun.size(); k++) - if (RadFun[i] == uniqueRadFun[k]) + if (RadFun[i] == uniqueRadFun[k].get()) { done = true; - clone->RadFun[i] = clone->uniqueRadFun[k]; + clone->RadFun[i] = clone->uniqueRadFun[k].get(); break; } if (!done)