Merge pull request #3407 from williamfgc/fix-backflow-leaks

Fix memory leak in Backflow_eI member containers
This commit is contained in:
Ye Luo 2021-08-31 11:13:59 -05:00 committed by GitHub
commit 1ebe25769e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 8 deletions

View File

@ -250,16 +250,16 @@ std::unique_ptr<BackflowFunctionBase> BackflowBuilder::addOneBody(xmlNodePtr cur
for (int i = 0; i < funs.size(); i++) for (int i = 0; i < funs.size(); i++)
{ {
// BsplineFunctor<RealType> *bsp = new BsplineFunctor<RealType>(cusps[i]); // BsplineFunctor<RealType> *bsp = new BsplineFunctor<RealType>(cusps[i]);
BsplineFunctor<RealType>* bsp = new BsplineFunctor<RealType>(); auto bsp = std::make_unique<BsplineFunctor<RealType>>();
bsp->cutoff_radius = targetPtcl.Lattice.WignerSeitzRadius; bsp->cutoff_radius = targetPtcl.Lattice.WignerSeitzRadius;
bsp->put(funs[i]); bsp->put(funs[i]);
if (bsp->cutoff_radius > cutOff) if (bsp->cutoff_radius > cutOff)
cutOff = bsp->cutoff_radius; cutOff = bsp->cutoff_radius;
bsp->myVars.setParameterType(optimize::BACKFLOW_P); bsp->myVars.setParameterType(optimize::BACKFLOW_P);
//bsp->print(); //bsp->print();
dum->uniqueRadFun.push_back(bsp);
offsets.push_back(num_params); offsets.push_back(num_params);
num_params += bsp->NumParams; num_params += bsp->NumParams;
dum->uniqueRadFun.push_back(std::move(bsp));
} }
dum->derivs.resize(num_params); dum->derivs.resize(num_params);
dum->offsetPrms.resize(nIons); dum->offsetPrms.resize(nIons);
@ -270,7 +270,7 @@ std::unique_ptr<BackflowFunctionBase> BackflowBuilder::addOneBody(xmlNodePtr cur
{ {
APP_ABORT("backflowTransformation::put() ion not mapped to radial function.\n"); 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]]; dum->offsetPrms[i] = offsets[ion2functor[i]];
} }
tbf = std::move(dum); tbf = std::move(dum);

View File

@ -31,7 +31,7 @@ private:
public: public:
std::vector<FT*> RadFun; std::vector<FT*> RadFun;
std::vector<FT*> uniqueRadFun; std::vector<std::unique_ptr<FT>> uniqueRadFun;
std::vector<int> offsetPrms; std::vector<int> offsetPrms;
Backflow_eI(ParticleSet& ions, ParticleSet& els) : BackflowFunctionBase(ions, els), myTableIndex_(els.addTable(ions)) Backflow_eI(ParticleSet& ions, ParticleSet& els) : BackflowFunctionBase(ions, els), myTableIndex_(els.addTable(ions))
@ -60,15 +60,15 @@ public:
clone->uniqueRadFun.resize(uniqueRadFun.size()); clone->uniqueRadFun.resize(uniqueRadFun.size());
clone->RadFun.resize(RadFun.size()); clone->RadFun.resize(RadFun.size());
for (int i = 0; i < uniqueRadFun.size(); i++) for (int i = 0; i < uniqueRadFun.size(); i++)
clone->uniqueRadFun[i] = new FT(*(uniqueRadFun[i])); clone->uniqueRadFun[i] = std::make_unique<FT>(*(uniqueRadFun[i]));
for (int i = 0; i < RadFun.size(); i++) for (int i = 0; i < RadFun.size(); i++)
{ {
bool done = false; bool done = false;
for (int k = 0; k < uniqueRadFun.size(); k++) for (int k = 0; k < uniqueRadFun.size(); k++)
if (RadFun[i] == uniqueRadFun[k]) if (RadFun[i] == uniqueRadFun[k].get())
{ {
done = true; done = true;
clone->RadFun[i] = clone->uniqueRadFun[k]; clone->RadFun[i] = clone->uniqueRadFun[k].get();
break; break;
} }
if (!done) if (!done)