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++)
{
// BsplineFunctor<RealType> *bsp = new BsplineFunctor<RealType>(cusps[i]);
BsplineFunctor<RealType>* bsp = new BsplineFunctor<RealType>();
bsp->cutoff_radius = targetPtcl.Lattice.WignerSeitzRadius;
auto bsp = std::make_unique<BsplineFunctor<RealType>>();
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<BackflowFunctionBase> 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);

View File

@ -31,7 +31,7 @@ private:
public:
std::vector<FT*> RadFun;
std::vector<FT*> uniqueRadFun;
std::vector<std::unique_ptr<FT>> uniqueRadFun;
std::vector<int> 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<FT>(*(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)