mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-10 22:20:45 +01:00
Added the ability for Perambulator module to save unsmeared sinks through the addition of two optional parameters:
UnsmearedSinkFileName: If present, specifies the filename to write to UnsmearedSinkMultiFile: defaults to true to write each sink vector to a different file, but can be set to 0 for a single file
This commit is contained in:
parent
5fc0188205
commit
ae3abbe53d
@ -49,6 +49,8 @@ public:
|
|||||||
std::string, solver,
|
std::string, solver,
|
||||||
std::string, noise,
|
std::string, noise,
|
||||||
std::string, PerambFileName, //stem!!!
|
std::string, PerambFileName, //stem!!!
|
||||||
|
std::string, UnsmearedSinkFileName, // Filename to save unsmeared sink
|
||||||
|
std::string, UnsmearedSinkMultiFile, // One file per vector?
|
||||||
int, nvec,
|
int, nvec,
|
||||||
DistilParameters, Distil);
|
DistilParameters, Distil);
|
||||||
};
|
};
|
||||||
@ -125,7 +127,10 @@ void TPerambulator<FImpl>::setup(void)
|
|||||||
grid4d = env().getGrid();
|
grid4d = env().getGrid();
|
||||||
grid3d = MakeLowerDimGrid(grid4d);
|
grid3d = MakeLowerDimGrid(grid4d);
|
||||||
DISTIL_PARAMETERS_DEFINE( true );
|
DISTIL_PARAMETERS_DEFINE( true );
|
||||||
|
const std::string UnsmearedSinkFileName{ par().UnsmearedSinkFileName };
|
||||||
|
if( !UnsmearedSinkFileName.empty() )
|
||||||
|
bool bMulti = ( Hadrons::MDistil::DistilParameters::ParameterDefault( par().UnsmearedSinkMultiFile, 1, true ) != 0 );
|
||||||
|
|
||||||
envCreate(PerambTensor, getName(), 1, PerambIndexNames,Nt,nvec,LI,nnoise,Nt_inv,SI);
|
envCreate(PerambTensor, getName(), 1, PerambIndexNames,Nt,nvec,LI,nnoise,Nt_inv,SI);
|
||||||
envCreate(std::vector<FermionField>, getName() + "_unsmeared_sink", 1,
|
envCreate(std::vector<FermionField>, getName() + "_unsmeared_sink", 1,
|
||||||
nnoise*LI*Ns*Nt_inv, envGetGrid(FermionField));
|
nnoise*LI*Ns*Nt_inv, envGetGrid(FermionField));
|
||||||
@ -244,7 +249,7 @@ void TPerambulator<FImpl>::execute(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::cout << "perambulator done" << std::endl;
|
std::cout << "perambulator done" << std::endl;
|
||||||
perambulator.SliceShare( grid3d, grid4d );
|
perambulator.SliceShare( grid3d, grid4d );
|
||||||
|
|
||||||
@ -258,42 +263,43 @@ void TPerambulator<FImpl>::execute(void)
|
|||||||
perambulator.write(sPerambName.c_str());
|
perambulator.write(sPerambName.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
const int X{grid4d->GlobalDimensions()[0]};
|
// Save the unsmeared sink as well if requested
|
||||||
const int Y{grid4d->GlobalDimensions()[1]};
|
/*const int X{grid4d->GlobalDimensions()[0]};
|
||||||
const int Z{grid4d->GlobalDimensions()[2]};
|
const int Y{grid4d->GlobalDimensions()[1]};
|
||||||
const int T{grid4d->GlobalDimensions()[3]};
|
const int Z{grid4d->GlobalDimensions()[2]};
|
||||||
|
const int T{grid4d->GlobalDimensions()[3]};
|
||||||
|
|
||||||
|
if(grid4d->IsBoss()) {
|
||||||
if(grid4d->IsBoss()) {
|
Eigen::Tensor<ComplexD, 10> sink(nnoise,LI,Nt_inv,SI,X,Y,Z,T,3,4);
|
||||||
Eigen::Tensor<ComplexD, 10> sink(nnoise,LI,Nt_inv,SI,X,Y,Z,T,3,4);
|
|
||||||
|
for (int inoise = 0; inoise < nnoise; inoise++) {
|
||||||
for (int inoise = 0; inoise < nnoise; inoise++) {
|
for (int dk = 0; dk < LI; dk++) {
|
||||||
for (int dk = 0; dk < LI; dk++) {
|
for (int dt = 0; dt < Nt_inv; dt++) {
|
||||||
for (int dt = 0; dt < Nt_inv; dt++) {
|
for (int ds = 0; ds < SI; ds++) {
|
||||||
for (int ds = 0; ds < SI; ds++) {
|
for (int ix=0; ix < X; ix++) {
|
||||||
for (int ix=0; ix < X; ix++) {
|
|
||||||
for (int iy=0; iy < Y; iy++) {
|
for (int iy=0; iy < Y; iy++) {
|
||||||
for (int iz=0; iz < Z; iz++) {
|
for (int iz=0; iz < Z; iz++) {
|
||||||
for (int it=0; it < T; it++) {
|
for (int it=0; it < T; it++) {
|
||||||
std::vector<int> site({ix,iy,iz,it});
|
std::vector<int> site({ix,iy,iz,it});
|
||||||
for (int ic=0; ic < 3; ic++) {
|
for (int ic=0; ic < 3; ic++) {
|
||||||
for (int is=0; is < 4; is++) {
|
for (int is=0; is < 4; is++) {
|
||||||
//peekSite(sink[inoise,dk,dt,ds,ix,iy,iz,it,ic,is],unsmeared_sink[inoise+nnoise*(dk+LI*(dt+Nt_inv*ds))]()(is)(ic),site); // Build fails when uncommenting
|
//peekSite(sink[inoise,dk,dt,ds,ix,iy,iz,it,ic,is],unsmeared_sink[inoise+nnoise*(dk+LI*(dt+Nt_inv*ds))]()(is)(ic),site); // Build fails when uncommenting
|
||||||
|
|
||||||
}}
|
}}
|
||||||
}}}}
|
}}}}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
std::string filename ="./" + par().PerambFileName + "_sink.h5";
|
const std::string UnsmearedSinkFileName{ par().UnsmearedSinkFileName };
|
||||||
std::cout << "Writing to file " << filename << std::endl;
|
if( !UnsmearedSinkFileName.empty() ) {
|
||||||
Grid::Hdf5Writer writer(filename);
|
bool bMulti = ( Hadrons::MDistil::DistilParameters::ParameterDefault( par().UnsmearedSinkMultiFile, 1, false ) != 0 );
|
||||||
write(writer,"unsmeared_sink",sink);
|
std::cout << "Writing unsmeared sink to " << UnsmearedSinkFileName << std::endl;
|
||||||
}
|
//Grid::Hdf5Writer writer(filename);
|
||||||
|
//write(writer,"unsmeared_sink",sink);
|
||||||
|
A2AVectorsIo::write(UnsmearedSinkFileName, unsmeared_sink, bMulti, vm().getTrajectory());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
END_MODULE_NAMESPACE
|
END_MODULE_NAMESPACE
|
||||||
|
Loading…
x
Reference in New Issue
Block a user