mirror of
https://github.com/paboyle/Grid.git
synced 2024-11-10 07:55:35 +00:00
Added option to NerscIO to disable exit on failing plaquette check allowing for circumvention of factor of 2 error in CPS-generated G-parity config headers
Adapted mixed-prec multi-shift test to new way to pass gauge BC directions and added cmdline option to perform the G-parity plaquette comparison with the corrected plaquette when loading config
This commit is contained in:
parent
c3712b8e06
commit
7a06826cf1
@ -39,9 +39,11 @@ using namespace Grid;
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
class NerscIO : public BinaryIO {
|
class NerscIO : public BinaryIO {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
typedef Lattice<vLorentzColourMatrixD> GaugeField;
|
typedef Lattice<vLorentzColourMatrixD> GaugeField;
|
||||||
|
|
||||||
|
// Enable/disable exiting if the plaquette in the header does not match the value computed (default true)
|
||||||
|
static bool & exitOnReadPlaquetteMismatch(){ static bool v=true; return v; }
|
||||||
|
|
||||||
static inline void truncate(std::string file){
|
static inline void truncate(std::string file){
|
||||||
std::ofstream fout(file,std::ios::out);
|
std::ofstream fout(file,std::ios::out);
|
||||||
}
|
}
|
||||||
@ -198,7 +200,7 @@ public:
|
|||||||
std::cerr << " nersc_csum " <<std::hex<< nersc_csum << " " << header.checksum<< std::dec<< std::endl;
|
std::cerr << " nersc_csum " <<std::hex<< nersc_csum << " " << header.checksum<< std::dec<< std::endl;
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
assert(fabs(clone.plaquette -header.plaquette ) < 1.0e-5 );
|
if(exitOnReadPlaquetteMismatch()) assert(fabs(clone.plaquette -header.plaquette ) < 1.0e-5 );
|
||||||
assert(fabs(clone.link_trace-header.link_trace) < 1.0e-6 );
|
assert(fabs(clone.link_trace-header.link_trace) < 1.0e-6 );
|
||||||
assert(nersc_csum == header.checksum );
|
assert(nersc_csum == header.checksum );
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ Author: Christopher Kelly <ckelly@bnl.gov>
|
|||||||
|
|
||||||
using namespace Grid;
|
using namespace Grid;
|
||||||
|
|
||||||
template<typename SpeciesD, typename SpeciesF>
|
template<typename SpeciesD, typename SpeciesF, typename GaugeStatisticsType>
|
||||||
void run_test(int argc, char ** argv, const typename SpeciesD::ImplParams ¶ms){
|
void run_test(int argc, char ** argv, const typename SpeciesD::ImplParams ¶ms){
|
||||||
const int Ls = 16;
|
const int Ls = 16;
|
||||||
GridCartesian* UGrid_d = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(), GridDefaultSimd(Nd, vComplexD::Nsimd()), GridDefaultMpi());
|
GridCartesian* UGrid_d = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(), GridDefaultSimd(Nd, vComplexD::Nsimd()), GridDefaultMpi());
|
||||||
@ -57,6 +57,15 @@ void run_test(int argc, char ** argv, const typename SpeciesD::ImplParams ¶m
|
|||||||
|
|
||||||
LatticeGaugeFieldD Umu_d(UGrid_d);
|
LatticeGaugeFieldD Umu_d(UGrid_d);
|
||||||
|
|
||||||
|
//CPS-created G-parity ensembles have a factor of 2 error in the plaquette that causes the read to fail unless we workaround it
|
||||||
|
bool gparity_plaquette_fix = false;
|
||||||
|
for(int i=1;i<argc;i++){
|
||||||
|
if(std::string(argv[i]) == "--gparity_plaquette_fix"){
|
||||||
|
gparity_plaquette_fix=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool cfg_loaded=false;
|
bool cfg_loaded=false;
|
||||||
for(int i=1;i<argc;i++){
|
for(int i=1;i<argc;i++){
|
||||||
if(std::string(argv[i]) == "--load_config"){
|
if(std::string(argv[i]) == "--load_config"){
|
||||||
@ -64,7 +73,22 @@ void run_test(int argc, char ** argv, const typename SpeciesD::ImplParams ¶m
|
|||||||
std::string file = argv[i+1];
|
std::string file = argv[i+1];
|
||||||
NerscIO io;
|
NerscIO io;
|
||||||
FieldMetaData metadata;
|
FieldMetaData metadata;
|
||||||
io.readConfiguration(Umu_d, metadata, file);
|
|
||||||
|
if(gparity_plaquette_fix) NerscIO::exitOnReadPlaquetteMismatch() = false;
|
||||||
|
|
||||||
|
io.readConfiguration<GaugeStatisticsType>(Umu_d, metadata, file);
|
||||||
|
|
||||||
|
if(gparity_plaquette_fix){
|
||||||
|
metadata.plaquette *= 2.; //correct header value
|
||||||
|
|
||||||
|
//Get the true plaquette
|
||||||
|
FieldMetaData tmp;
|
||||||
|
GaugeStatisticsType gs; gs(Umu_d, tmp);
|
||||||
|
|
||||||
|
std::cout << "After correction: plaqs " << tmp.plaquette << " " << metadata.plaquette << std::endl;
|
||||||
|
assert(fabs(tmp.plaquette -metadata.plaquette ) < 1.0e-5 );
|
||||||
|
}
|
||||||
|
|
||||||
cfg_loaded=true;
|
cfg_loaded=true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -130,11 +154,16 @@ int main (int argc, char ** argv)
|
|||||||
std::cout << "Running test with G-parity BCs in " << gpdir << " direction" << std::endl;
|
std::cout << "Running test with G-parity BCs in " << gpdir << " direction" << std::endl;
|
||||||
GparityWilsonImplParams params;
|
GparityWilsonImplParams params;
|
||||||
params.twists[gpdir] = 1;
|
params.twists[gpdir] = 1;
|
||||||
run_test<GparityDomainWallFermionD, GparityDomainWallFermionF>(argc,argv,params);
|
|
||||||
|
std::vector<int> conj_dirs(Nd,0);
|
||||||
|
conj_dirs[gpdir] = 1;
|
||||||
|
ConjugateGimplD::setDirections(conj_dirs);
|
||||||
|
|
||||||
|
run_test<GparityDomainWallFermionD, GparityDomainWallFermionF, ConjugateGaugeStatistics>(argc,argv,params);
|
||||||
}else{
|
}else{
|
||||||
std::cout << "Running test with periodic BCs" << std::endl;
|
std::cout << "Running test with periodic BCs" << std::endl;
|
||||||
WilsonImplParams params;
|
WilsonImplParams params;
|
||||||
run_test<DomainWallFermionD, DomainWallFermionF>(argc,argv,params);
|
run_test<DomainWallFermionD, DomainWallFermionF, PeriodicGaugeStatistics>(argc,argv,params);
|
||||||
}
|
}
|
||||||
|
|
||||||
Grid_finalize();
|
Grid_finalize();
|
||||||
|
Loading…
Reference in New Issue
Block a user