1
0
mirror of https://github.com/paboyle/Grid.git synced 2025-06-13 04:37:05 +01:00

Fixed grid3d leak in PerambLight

This commit is contained in:
2019-01-30 21:16:09 +00:00
parent c3273eff20
commit f7e4661ca0
3 changed files with 92 additions and 17 deletions

View File

@ -144,9 +144,8 @@ protected:
GridCartesian * gridLD; // Owned by me, so I must delete it
GridCartesian * gridHD; // Owned by environment (so I won't delete it)
int Nx, Ny, Nz, Nt;
protected:
void Cleanup(void);
virtual void Cleanup(void);
};
MODULE_REGISTER_TMP(LapEvec, TLapEvec<GIMPL>, MDistil);

View File

@ -49,7 +49,7 @@ public:
// constructor
TPerambLight(const std::string name);
// destructor
virtual ~TPerambLight(void) {};
virtual ~TPerambLight(void);
// dependency relation
virtual std::vector<std::string> getInput(void);
virtual std::vector<std::string> getOutput(void);
@ -57,6 +57,13 @@ public:
virtual void setup(void);
// execution
virtual void execute(void);
protected:
// These variables are created in setup() and freed in Cleanup()
GridCartesian * grid3d; // Owned by me, so I must delete it
GridCartesian * grid4d; // Owned by environment (so I won't delete it)
protected:
virtual void Cleanup(void);
};
MODULE_REGISTER_TMP(PerambLight, TPerambLight<FIMPL>, MDistil);
@ -67,9 +74,16 @@ MODULE_REGISTER_TMP(PerambLight, TPerambLight<FIMPL>, MDistil);
// constructor /////////////////////////////////////////////////////////////////
template <typename FImpl>
TPerambLight<FImpl>::TPerambLight(const std::string name)
: Module<PerambLightPar>(name)
: grid3d{nullptr}, grid4d{nullptr}, Module<PerambLightPar>(name)
{}
// destructor
template <typename FImpl>
TPerambLight<FImpl>::~TPerambLight(void)
{
Cleanup();
};
// dependencies/products ///////////////////////////////////////////////////////
template <typename FImpl>
std::vector<std::string> TPerambLight<FImpl>::getInput(void)
@ -94,31 +108,32 @@ std::vector<std::string> TPerambLight<FImpl>::getOutput(void)
template <typename FImpl>
void TPerambLight<FImpl>::setup(void)
{
Cleanup();
// auto &noise = envGet(std::vector<std::vector<std::vector<SpinVector>>>, par().noise);
int LI=par().LI;
int SI=par().SI;
int TI=par().TI;
int nnoise=par().nnoise;
int Nt=par().Nt;
int Nt_inv=par().Nt_inv;
int nvec=par().nvec;
const int LI{par().LI};
const int SI{par().SI};
//const int TI{par().TI};
const int nnoise{par().nnoise};
const int Nt{par().Nt};
const int Nt_inv{par().Nt_inv};
const int nvec{par().nvec};
envCreate(Perambulator<SpinVector>, getName() + "_perambulator_light", 1,
Nt,nvec,LI,nnoise,Nt_inv,SI);
envCreate(std::vector<Complex>, getName() + "_noise", 1,
nvec*Ns*Nt*nnoise);
GridCartesian * grid4d = env().getGrid();
std::vector<int> latt_size = GridDefaultLatt();
grid4d = env().getGrid();
/*std::vector<int> latt_size = GridDefaultLatt();
std::vector<int> simd_layout = GridDefaultSimd(Nd, vComplex::Nsimd());
std::vector<int> mpi_layout = GridDefaultMpi();
std::vector<int> simd_layout_3 = GridDefaultSimd(Nd-1, vComplex::Nsimd());
latt_size[Nd-1] = 1;
simd_layout_3.push_back( 1 );
mpi_layout[Nd-1] = 1;
GridCartesian * grid3d = new GridCartesian(latt_size,simd_layout_3,mpi_layout,*grid4d);
mpi_layout[Nd-1] = 1;*/
grid3d = MakeLowerDimGrid(grid4d);//new GridCartesian(latt_size,simd_layout_3,mpi_layout,*grid4d);
envTmp(LatticeSpinColourVector, "dist_source",1,LatticeSpinColourVector(grid4d));
envTmp(LatticeSpinColourVector, "tmp2",1,LatticeSpinColourVector(grid4d));
@ -134,6 +149,17 @@ void TPerambLight<FImpl>::setup(void)
}
// clean up any temporaries created by setup (that aren't stored in the environment)
template <typename FImpl>
void TPerambLight<FImpl>::Cleanup(void)
{
if( grid3d != nullptr ) {
delete grid3d;
grid3d = nullptr;
}
grid4d = nullptr;
}
// execution ///////////////////////////////////////////////////////////////////
template <typename FImpl>
void TPerambLight<FImpl>::execute(void)
@ -144,7 +170,7 @@ void TPerambLight<FImpl>::execute(void)
auto &perambulator = envGet(Perambulator<SpinVector>, getName() + "_perambulator_light");
auto &epack = envGet(Grid::Hadrons::EigenPack<LatticeColourVector>, par().eigenPack);
GridCartesian * grid4d = env().getGrid();
/*GridCartesian * grid4d = env().getGrid();
std::vector<int> latt_size = GridDefaultLatt();
std::vector<int> simd_layout = GridDefaultSimd(Nd, vComplex::Nsimd());
std::vector<int> mpi_layout = GridDefaultMpi();
@ -152,7 +178,7 @@ void TPerambLight<FImpl>::execute(void)
latt_size[Nd-1] = 1;
simd_layout_3.push_back( 1 );
mpi_layout[Nd-1] = 1;
GridCartesian * grid3d = new GridCartesian(latt_size,simd_layout_3,mpi_layout,*grid4d);
GridCartesian * grid3d = new GridCartesian(latt_size,simd_layout_3,mpi_layout,*grid4d);*/
LatticeGaugeField Umu(grid4d);
FieldMetaData header;