mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 05:54:32 +00:00 
			
		
		
		
	Merge remote-tracking branch 'upstream/develop' into feature/wilsonmg
This commit is contained in:
		@@ -45,7 +45,8 @@ public:
 | 
			
		||||
                          bool , b,
 | 
			
		||||
                          std::vector<double>, array,
 | 
			
		||||
                          std::vector<std::vector<double> >, twodimarray,
 | 
			
		||||
                          std::vector<std::vector<std::vector<Complex> > >, cmplx3darray
 | 
			
		||||
                          std::vector<std::vector<std::vector<Complex> > >, cmplx3darray,
 | 
			
		||||
                          SpinColourMatrix, scm
 | 
			
		||||
                          );
 | 
			
		||||
  myclass() {}
 | 
			
		||||
  myclass(int i)
 | 
			
		||||
@@ -59,6 +60,12 @@ public:
 | 
			
		||||
    y=2*i;
 | 
			
		||||
    b=true;
 | 
			
		||||
    name="bother said pooh";
 | 
			
		||||
    scm()(0, 1)(2, 1) = 2.356;
 | 
			
		||||
    scm()(3, 0)(1, 1) = 1.323;
 | 
			
		||||
    scm()(2, 1)(0, 1) = 5.3336;
 | 
			
		||||
    scm()(0, 2)(1, 1) = 6.336;
 | 
			
		||||
    scm()(2, 1)(2, 2) = 7.344;
 | 
			
		||||
    scm()(1, 1)(2, 0) = 8.3534;
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -93,8 +100,30 @@ void ioTest(const std::string &filename, const O &object, const std::string &nam
 | 
			
		||||
  if (!good) exit(EXIT_FAILURE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
void tensorConvTestFn(GridSerialRNG &rng, const std::string label)
 | 
			
		||||
{
 | 
			
		||||
  T    t, ft;
 | 
			
		||||
  Real n;
 | 
			
		||||
  bool good;
 | 
			
		||||
 | 
			
		||||
  random(rng, t);
 | 
			
		||||
  auto tv = tensorToVec(t);
 | 
			
		||||
  vecToTensor(ft, tv);
 | 
			
		||||
  n    = norm2(t - ft);
 | 
			
		||||
  good = (n == 0);
 | 
			
		||||
  std::cout << label << " norm 2 diff: " << n << " -- " 
 | 
			
		||||
            << (good ? "success" : "failure") << std::endl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define tensorConvTest(rng, type) tensorConvTestFn<type>(rng, #type)
 | 
			
		||||
 | 
			
		||||
int main(int argc,char **argv)
 | 
			
		||||
{
 | 
			
		||||
  GridSerialRNG    rng;
 | 
			
		||||
 | 
			
		||||
  rng.SeedFixedIntegers(std::vector<int>({42,10,81,9}));
 | 
			
		||||
  
 | 
			
		||||
  std::cout << "==== basic IO" << std::endl;
 | 
			
		||||
  XmlWriter WR("bother.xml");
 | 
			
		||||
 | 
			
		||||
@@ -120,7 +149,7 @@ int main(int argc,char **argv)
 | 
			
		||||
  std::cout << "-- serialisable class writing to 'bother.xml'..." << std::endl;
 | 
			
		||||
  write(WR,"obj",obj);
 | 
			
		||||
  WR.write("obj2", obj);
 | 
			
		||||
  vec.push_back(myclass(1234));
 | 
			
		||||
  vec.push_back(obj);
 | 
			
		||||
  vec.push_back(myclass(5678));
 | 
			
		||||
  vec.push_back(myclass(3838));
 | 
			
		||||
  pair = std::make_pair(myenum::red, myenum::blue);
 | 
			
		||||
@@ -131,8 +160,6 @@ int main(int argc,char **argv)
 | 
			
		||||
  std::cout << "-- serialisable class comparison:" << std::endl;
 | 
			
		||||
  std::cout << "vec[0] == obj: " << ((vec[0] == obj) ? "true" : "false") << std::endl;
 | 
			
		||||
  std::cout << "vec[1] == obj: " << ((vec[1] == obj) ? "true" : "false") << std::endl;
 | 
			
		||||
 | 
			
		||||
  write(WR, "objpair", pair);
 | 
			
		||||
  std::cout << "-- pair writing to std::cout:" << std::endl;
 | 
			
		||||
  std::cout << pair << std::endl;
 | 
			
		||||
 | 
			
		||||
@@ -141,26 +168,20 @@ int main(int argc,char **argv)
 | 
			
		||||
  //// XML
 | 
			
		||||
  ioTest<XmlWriter, XmlReader>("iotest.xml", obj, "XML    (object)           ");
 | 
			
		||||
  ioTest<XmlWriter, XmlReader>("iotest.xml", vec, "XML    (vector of objects)");
 | 
			
		||||
  ioTest<XmlWriter, XmlReader>("iotest.xml", pair, "XML    (pair of objects)");
 | 
			
		||||
  //// binary
 | 
			
		||||
  ioTest<BinaryWriter, BinaryReader>("iotest.bin", obj, "binary (object)           ");
 | 
			
		||||
  ioTest<BinaryWriter, BinaryReader>("iotest.bin", vec, "binary (vector of objects)");
 | 
			
		||||
  ioTest<BinaryWriter, BinaryReader>("iotest.bin", pair, "binary (pair of objects)");
 | 
			
		||||
  //// text
 | 
			
		||||
  ioTest<TextWriter, TextReader>("iotest.dat", obj, "text   (object)           ");
 | 
			
		||||
  ioTest<TextWriter, TextReader>("iotest.dat", vec, "text   (vector of objects)");
 | 
			
		||||
  ioTest<TextWriter, TextReader>("iotest.dat", pair, "text   (pair of objects)");
 | 
			
		||||
  //// text
 | 
			
		||||
  ioTest<JSONWriter, JSONReader>("iotest.json", obj,  "JSON   (object)           ");
 | 
			
		||||
  ioTest<JSONWriter, JSONReader>("iotest.json", vec,  "JSON   (vector of objects)");
 | 
			
		||||
  ioTest<JSONWriter, JSONReader>("iotest.json", pair, "JSON   (pair of objects)");
 | 
			
		||||
 | 
			
		||||
  //// HDF5
 | 
			
		||||
#undef HAVE_HDF5
 | 
			
		||||
#ifdef HAVE_HDF5
 | 
			
		||||
  ioTest<Hdf5Writer, Hdf5Reader>("iotest.h5", obj, "HDF5   (object)           ");
 | 
			
		||||
  ioTest<Hdf5Writer, Hdf5Reader>("iotest.h5", vec, "HDF5   (vector of objects)");
 | 
			
		||||
  ioTest<Hdf5Writer, Hdf5Reader>("iotest.h5", pair, "HDF5   (pair of objects)");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  std::cout << "\n==== vector flattening/reconstruction" << std::endl;
 | 
			
		||||
@@ -197,68 +218,11 @@ int main(int argc,char **argv)
 | 
			
		||||
  std::cout << flatdv.getVector() << std::endl;
 | 
			
		||||
  std::cout << std::endl;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  std::cout << ".:::::: Testing JSON classes "<< std::endl;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  {
 | 
			
		||||
    JSONWriter JW("bother.json");
 | 
			
		||||
 | 
			
		||||
    // test basic type writing
 | 
			
		||||
    myenum a = myenum::red;
 | 
			
		||||
    push(JW,"BasicTypes");
 | 
			
		||||
    write(JW,std::string("i16"),i16);
 | 
			
		||||
    write(JW,"myenum",a);
 | 
			
		||||
    write(JW,"u16",u16);
 | 
			
		||||
    write(JW,"i32",i32);
 | 
			
		||||
    write(JW,"u32",u32);
 | 
			
		||||
    write(JW,"i64",i64);
 | 
			
		||||
    write(JW,"u64",u64);
 | 
			
		||||
    write(JW,"f",f);
 | 
			
		||||
    write(JW,"d",d);
 | 
			
		||||
    write(JW,"b",b);
 | 
			
		||||
    pop(JW);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // test serializable class writing
 | 
			
		||||
    myclass obj(1234); // non-trivial constructor
 | 
			
		||||
    std::cout << obj << std::endl;
 | 
			
		||||
    std::cout << "-- serialisable class writing to 'bother.json'..." << std::endl;
 | 
			
		||||
    write(JW,"obj",obj);
 | 
			
		||||
    JW.write("obj2", obj);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    std::vector<myclass> vec;
 | 
			
		||||
    vec.push_back(myclass(1234));
 | 
			
		||||
    vec.push_back(myclass(5678));
 | 
			
		||||
    vec.push_back(myclass(3838));
 | 
			
		||||
    write(JW, "objvec", vec);
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  {
 | 
			
		||||
    JSONReader RD("bother.json");
 | 
			
		||||
    myclass jcopy1;
 | 
			
		||||
    std::vector<myclass> jveccopy1;
 | 
			
		||||
    read(RD,"obj",jcopy1);
 | 
			
		||||
    read(RD,"objvec", jveccopy1);
 | 
			
		||||
    std::cout << "Loaded (JSON) -----------------" << std::endl;
 | 
			
		||||
    std::cout << jcopy1 << std::endl << jveccopy1 << std::endl;
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
  // This is still work in progress
 | 
			
		||||
  {
 | 
			
		||||
    // Testing the next element function
 | 
			
		||||
    JSONReader RD("test.json");
 | 
			
		||||
    RD.push("grid");
 | 
			
		||||
    RD.push("Observable");
 | 
			
		||||
    std::string name;
 | 
			
		||||
    read(RD,"name", name);
 | 
			
		||||
  }
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  std::cout << "==== Grid tensor to vector test" << std::endl;
 | 
			
		||||
  tensorConvTest(rng, SpinColourMatrix);
 | 
			
		||||
  tensorConvTest(rng, SpinColourVector);
 | 
			
		||||
  tensorConvTest(rng, ColourMatrix);
 | 
			
		||||
  tensorConvTest(rng, ColourVector);
 | 
			
		||||
  tensorConvTest(rng, SpinMatrix);
 | 
			
		||||
  tensorConvTest(rng, SpinVector);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -103,6 +103,33 @@ int main (int argc, char ** argv)
 | 
			
		||||
 | 
			
		||||
  std::cout << "Diff between mixed and regular CG: " << diff << std::endl;
 | 
			
		||||
 | 
			
		||||
  #ifdef HAVE_LIME
 | 
			
		||||
  if( GridCmdOptionExists(argv,argv+argc,"--checksums") ){
 | 
			
		||||
  
 | 
			
		||||
  std::string file1("./Propagator1");
 | 
			
		||||
  std::string file2("./Propagator2");
 | 
			
		||||
  emptyUserRecord record;
 | 
			
		||||
  uint32_t nersc_csum;
 | 
			
		||||
  uint32_t scidac_csuma;
 | 
			
		||||
  uint32_t scidac_csumb;
 | 
			
		||||
  typedef SpinColourVectorD   FermionD;
 | 
			
		||||
  typedef vSpinColourVectorD vFermionD;
 | 
			
		||||
 | 
			
		||||
  BinarySimpleMunger<FermionD,FermionD> munge;
 | 
			
		||||
  std::string format = getFormatString<vFermionD>();
 | 
			
		||||
  
 | 
			
		||||
  BinaryIO::writeLatticeObject<vFermionD,FermionD>(result_o,file1,munge, 0, format,
 | 
			
		||||
						   nersc_csum,scidac_csuma,scidac_csumb);
 | 
			
		||||
 | 
			
		||||
  std::cout << " Mixed checksums "<<std::hex << scidac_csuma << " "<<scidac_csumb<<std::endl;
 | 
			
		||||
 | 
			
		||||
  BinaryIO::writeLatticeObject<vFermionD,FermionD>(result_o_2,file1,munge, 0, format,
 | 
			
		||||
						   nersc_csum,scidac_csuma,scidac_csumb);
 | 
			
		||||
 | 
			
		||||
  std::cout << " CG checksums "<<std::hex << scidac_csuma << " "<<scidac_csumb<<std::endl;
 | 
			
		||||
  }
 | 
			
		||||
  #endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  Grid_finalize();
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -393,7 +393,6 @@ int main(int argc, char **argv) {
 | 
			
		||||
      }
 | 
			
		||||
      random(Foo);
 | 
			
		||||
      */
 | 
			
		||||
      lex_sites(Foo);
 | 
			
		||||
 | 
			
		||||
      Integer mm[4];
 | 
			
		||||
      mm[0] = 1;
 | 
			
		||||
 
 | 
			
		||||
@@ -111,6 +111,7 @@ int main (int argc, char ** argv)
 | 
			
		||||
  std::cout<<GridLogMessage<<"Error "<<norm2(err)<<std::endl;
 | 
			
		||||
 | 
			
		||||
  const int nbasis = 2;
 | 
			
		||||
  const int cb = 0 ;
 | 
			
		||||
  LatticeFermion prom(FGrid);
 | 
			
		||||
 | 
			
		||||
  std::vector<LatticeFermion> subspace(nbasis,FGrid);
 | 
			
		||||
@@ -119,7 +120,7 @@ int main (int argc, char ** argv)
 | 
			
		||||
 | 
			
		||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion> HermDefOp(Ddwf);
 | 
			
		||||
  typedef Aggregation<vSpinColourVector,vTComplex,nbasis> Subspace;
 | 
			
		||||
  Subspace Aggregates(Coarse5d,FGrid);
 | 
			
		||||
  Subspace Aggregates(Coarse5d,FGrid,cb);
 | 
			
		||||
  Aggregates.CreateSubspaceRandom(RNG5);
 | 
			
		||||
 | 
			
		||||
  subspace=Aggregates.subspace;
 | 
			
		||||
 
 | 
			
		||||
@@ -78,6 +78,7 @@ int main (int argc, char ** argv)
 | 
			
		||||
 | 
			
		||||
  RealD mass=0.1;
 | 
			
		||||
  RealD M5=1.5;
 | 
			
		||||
  int cb=0;
 | 
			
		||||
 | 
			
		||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
			
		||||
  std::cout<<GridLogMessage << "Building g5R5 hermitian DWF operator" <<std::endl;
 | 
			
		||||
@@ -95,7 +96,7 @@ int main (int argc, char ** argv)
 | 
			
		||||
  std::cout<<GridLogMessage << "Calling Aggregation class to build subspace" <<std::endl;
 | 
			
		||||
  std::cout<<GridLogMessage << "**************************************************"<< std::endl;
 | 
			
		||||
  MdagMLinearOperator<DomainWallFermionR,LatticeFermion> HermDefOp(Ddwf);
 | 
			
		||||
  Subspace Aggregates(Coarse5d,FGrid);
 | 
			
		||||
  Subspace Aggregates(Coarse5d,FGrid,cb);
 | 
			
		||||
  Aggregates.CreateSubspace(RNG5,HermDefOp);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										123
									
								
								tests/forces/Test_gp_plaq_force.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								tests/forces/Test_gp_plaq_force.cc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,123 @@
 | 
			
		||||
    /*************************************************************************************
 | 
			
		||||
 | 
			
		||||
    Grid physics library, www.github.com/paboyle/Grid 
 | 
			
		||||
 | 
			
		||||
    Source file: ./tests/Test_gp_rect_force.cc
 | 
			
		||||
 | 
			
		||||
    Copyright (C) 2015
 | 
			
		||||
 | 
			
		||||
Author: paboyle <paboyle@ph.ed.ac.uk>
 | 
			
		||||
 | 
			
		||||
    This program is free software; you can redistribute it and/or modify
 | 
			
		||||
    it under the terms of the GNU General Public License as published by
 | 
			
		||||
    the Free Software Foundation; either version 2 of the License, or
 | 
			
		||||
    (at your option) any later version.
 | 
			
		||||
 | 
			
		||||
    This program is distributed in the hope that it will be useful,
 | 
			
		||||
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
    GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
    You should have received a copy of the GNU General Public License along
 | 
			
		||||
    with this program; if not, write to the Free Software Foundation, Inc.,
 | 
			
		||||
    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | 
			
		||||
 | 
			
		||||
    See the full license in the file "LICENSE" in the top level distribution directory
 | 
			
		||||
    *************************************************************************************/
 | 
			
		||||
    /*  END LEGAL */
 | 
			
		||||
#include <Grid/Grid.h>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace Grid;
 | 
			
		||||
using namespace Grid::QCD;
 | 
			
		||||
 | 
			
		||||
int main (int argc, char ** argv)
 | 
			
		||||
{
 | 
			
		||||
  Grid_init(&argc,&argv);
 | 
			
		||||
 | 
			
		||||
  std::vector<int> latt_size   = GridDefaultLatt();
 | 
			
		||||
  std::vector<int> simd_layout = GridDefaultSimd(Nd,vComplex::Nsimd());
 | 
			
		||||
  std::vector<int> mpi_layout  = GridDefaultMpi();
 | 
			
		||||
 | 
			
		||||
  GridCartesian               Grid(latt_size,simd_layout,mpi_layout);
 | 
			
		||||
  GridRedBlackCartesian     RBGrid(&Grid);
 | 
			
		||||
 | 
			
		||||
  int threads = GridThread::GetThreads();
 | 
			
		||||
  std::cout<<GridLogMessage << "Grid is setup to use "<<threads<<" threads"<<std::endl;
 | 
			
		||||
 | 
			
		||||
  std::vector<int> seeds({1,2,3,4});
 | 
			
		||||
 | 
			
		||||
  GridParallelRNG          pRNG(&Grid);
 | 
			
		||||
  pRNG.SeedFixedIntegers(std::vector<int>({45,12,81,9}));
 | 
			
		||||
 | 
			
		||||
  LatticeGaugeField U(&Grid);
 | 
			
		||||
 | 
			
		||||
  SU3::HotConfiguration(pRNG,U);
 | 
			
		||||
  
 | 
			
		||||
  double beta = 1.0;
 | 
			
		||||
  double c1   = 0.331;
 | 
			
		||||
 | 
			
		||||
  //ConjugatePlaqPlusRectangleActionR Action(beta,c1);
 | 
			
		||||
  ConjugateWilsonGaugeActionR Action(beta);
 | 
			
		||||
  //WilsonGaugeActionR Action(beta);
 | 
			
		||||
 | 
			
		||||
  ComplexD S    = Action.S(U);
 | 
			
		||||
 | 
			
		||||
  // get the deriv of phidag MdagM phi with respect to "U"
 | 
			
		||||
  LatticeGaugeField UdSdU(&Grid);
 | 
			
		||||
 | 
			
		||||
  Action.deriv(U,UdSdU);
 | 
			
		||||
 | 
			
		||||
  ////////////////////////////////////
 | 
			
		||||
  // Modify the gauge field a little 
 | 
			
		||||
  ////////////////////////////////////
 | 
			
		||||
  RealD dt = 0.0001;
 | 
			
		||||
 | 
			
		||||
  LatticeColourMatrix mommu(&Grid); 
 | 
			
		||||
  LatticeColourMatrix forcemu(&Grid); 
 | 
			
		||||
  LatticeGaugeField mom(&Grid); 
 | 
			
		||||
  LatticeGaugeField Uprime(&Grid); 
 | 
			
		||||
 | 
			
		||||
  for(int mu=0;mu<Nd;mu++){
 | 
			
		||||
 | 
			
		||||
    SU3::GaussianFundamentalLieAlgebraMatrix(pRNG, mommu); // Traceless antihermitian momentum; gaussian in lie alg
 | 
			
		||||
 | 
			
		||||
    PokeIndex<LorentzIndex>(mom,mommu,mu);
 | 
			
		||||
 | 
			
		||||
    // fourth order exponential approx
 | 
			
		||||
    parallel_for(auto i=mom.begin();i<mom.end();i++){ // exp(pmu dt) * Umu
 | 
			
		||||
      Uprime[i](mu) = U[i](mu) + mom[i](mu)*U[i](mu)*dt ;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ComplexD Sprime    = Action.S(Uprime);
 | 
			
		||||
 | 
			
		||||
  //////////////////////////////////////////////
 | 
			
		||||
  // Use derivative to estimate dS
 | 
			
		||||
  //////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
  LatticeComplex dS(&Grid); dS = zero;
 | 
			
		||||
 | 
			
		||||
  for(int mu=0;mu<Nd;mu++){
 | 
			
		||||
 | 
			
		||||
    auto UdSdUmu = PeekIndex<LorentzIndex>(UdSdU,mu);
 | 
			
		||||
         mommu   = PeekIndex<LorentzIndex>(mom,mu);
 | 
			
		||||
 | 
			
		||||
    // Update gauge action density
 | 
			
		||||
    // U = exp(p dt) U
 | 
			
		||||
    // dU/dt = p U
 | 
			
		||||
    // so dSdt = trace( dUdt dSdU) = trace( p UdSdUmu ) 
 | 
			
		||||
 | 
			
		||||
    dS = dS - trace(mommu*UdSdUmu)*dt*2.0;
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
  ComplexD dSpred    = sum(dS);
 | 
			
		||||
 | 
			
		||||
  std::cout << GridLogMessage << " S      "<<S<<std::endl;
 | 
			
		||||
  std::cout << GridLogMessage << " Sprime "<<Sprime<<std::endl;
 | 
			
		||||
  std::cout << GridLogMessage << "dS      "<<Sprime-S<<std::endl;
 | 
			
		||||
  std::cout << GridLogMessage << "pred dS "<< dSpred <<std::endl;
 | 
			
		||||
  assert( fabs(real(Sprime-S-dSpred)) < 1.0e-2 ) ;
 | 
			
		||||
  std::cout<< GridLogMessage << "Done" <<std::endl;
 | 
			
		||||
  Grid_finalize();
 | 
			
		||||
}
 | 
			
		||||
@@ -59,8 +59,8 @@ int main (int argc, char ** argv)
 | 
			
		||||
  double beta = 1.0;
 | 
			
		||||
  double c1   = 0.331;
 | 
			
		||||
 | 
			
		||||
  //GparityPlaqPlusRectangleActionR Action(beta,c1);
 | 
			
		||||
  ConjugateWilsonGaugeActionR Action(beta);
 | 
			
		||||
  ConjugatePlaqPlusRectangleActionR Action(beta,c1);
 | 
			
		||||
  //  ConjugateWilsonGaugeActionR Action(beta);
 | 
			
		||||
  //WilsonGaugeActionR Action(beta);
 | 
			
		||||
 | 
			
		||||
  ComplexD S    = Action.S(U);
 | 
			
		||||
 
 | 
			
		||||
@@ -91,7 +91,7 @@ int main (int argc, char ** argv)
 | 
			
		||||
  ////////////////////////////////////
 | 
			
		||||
  // Modify the gauge field a little 
 | 
			
		||||
  ////////////////////////////////////
 | 
			
		||||
  RealD dt = 0.0001;
 | 
			
		||||
  RealD dt = 0.01;
 | 
			
		||||
 | 
			
		||||
  LatticeColourMatrix mommu(UGrid); 
 | 
			
		||||
  LatticeColourMatrix forcemu(UGrid); 
 | 
			
		||||
 
 | 
			
		||||
@@ -56,12 +56,12 @@ public:
 | 
			
		||||
 | 
			
		||||
  void checkpointFine(std::string evecs_file,std::string evals_file)
 | 
			
		||||
  {
 | 
			
		||||
    assert(this->_Aggregate.subspace.size()==nbasis);
 | 
			
		||||
    assert(this->subspace.size()==nbasis);
 | 
			
		||||
    emptyUserRecord record;
 | 
			
		||||
    Grid::QCD::ScidacWriter WR;
 | 
			
		||||
    WR.open(evecs_file);
 | 
			
		||||
    for(int k=0;k<nbasis;k++) {
 | 
			
		||||
      WR.writeScidacFieldRecord(this->_Aggregate.subspace[k],record);
 | 
			
		||||
      WR.writeScidacFieldRecord(this->subspace[k],record);
 | 
			
		||||
    }
 | 
			
		||||
    WR.close();
 | 
			
		||||
    
 | 
			
		||||
@@ -72,7 +72,7 @@ public:
 | 
			
		||||
  void checkpointFineRestore(std::string evecs_file,std::string evals_file)
 | 
			
		||||
  {
 | 
			
		||||
    this->evals_fine.resize(nbasis);
 | 
			
		||||
    this->_Aggregate.subspace.resize(nbasis,this->_FineGrid);
 | 
			
		||||
    this->subspace.resize(nbasis,this->_FineGrid);
 | 
			
		||||
    
 | 
			
		||||
    std::cout << GridLogIRL<< "checkpointFineRestore:  Reading evals from "<<evals_file<<std::endl;
 | 
			
		||||
    XmlReader RDx(evals_file);
 | 
			
		||||
@@ -85,8 +85,8 @@ public:
 | 
			
		||||
    Grid::QCD::ScidacReader RD ;
 | 
			
		||||
    RD.open(evecs_file);
 | 
			
		||||
    for(int k=0;k<nbasis;k++) {
 | 
			
		||||
      this->_Aggregate.subspace[k].checkerboard=this->_checkerboard;
 | 
			
		||||
      RD.readScidacFieldRecord(this->_Aggregate.subspace[k],record);
 | 
			
		||||
      this->subspace[k].checkerboard=this->_checkerboard;
 | 
			
		||||
      RD.readScidacFieldRecord(this->subspace[k],record);
 | 
			
		||||
      
 | 
			
		||||
    }
 | 
			
		||||
    RD.close();
 | 
			
		||||
@@ -180,7 +180,6 @@ int main (int argc, char ** argv) {
 | 
			
		||||
  GridCartesian         * CoarseGrid4    = SpaceTimeGrid::makeFourDimGrid(coarseLatt, GridDefaultSimd(Nd,vComplex::Nsimd()),GridDefaultMpi());
 | 
			
		||||
  GridRedBlackCartesian * CoarseGrid4rb  = SpaceTimeGrid::makeFourDimRedBlackGrid(CoarseGrid4);
 | 
			
		||||
  GridCartesian         * CoarseGrid5    = SpaceTimeGrid::makeFiveDimGrid(cLs,CoarseGrid4);
 | 
			
		||||
  GridRedBlackCartesian * CoarseGrid5rb  = SpaceTimeGrid::makeFourDimRedBlackGrid(CoarseGrid5);
 | 
			
		||||
 | 
			
		||||
  // Gauge field
 | 
			
		||||
  LatticeGaugeField Umu(UGrid);
 | 
			
		||||
@@ -206,7 +205,7 @@ int main (int argc, char ** argv) {
 | 
			
		||||
 | 
			
		||||
  const int nbasis= 60;
 | 
			
		||||
  assert(nbasis==Ns1);
 | 
			
		||||
  LocalCoherenceLanczosScidac<vSpinColourVector,vTComplex,nbasis> _LocalCoherenceLanczos(FrbGrid,CoarseGrid5rb,HermOp,Odd);
 | 
			
		||||
  LocalCoherenceLanczosScidac<vSpinColourVector,vTComplex,nbasis> _LocalCoherenceLanczos(FrbGrid,CoarseGrid5,HermOp,Odd);
 | 
			
		||||
  std::cout << GridLogMessage << "Constructed LocalCoherenceLanczos" << std::endl;
 | 
			
		||||
 | 
			
		||||
  assert( (Params.doFine)||(Params.doFineRead));
 | 
			
		||||
@@ -221,7 +220,9 @@ int main (int argc, char ** argv) {
 | 
			
		||||
    std::cout << GridLogIRL<<"Checkpointing Fine evecs"<<std::endl;
 | 
			
		||||
    _LocalCoherenceLanczos.checkpointFine(std::string("evecs.scidac"),std::string("evals.xml"));
 | 
			
		||||
    _LocalCoherenceLanczos.testFine(fine.resid*100.0); // Coarse check
 | 
			
		||||
    std::cout << GridLogIRL<<"Orthogonalising"<<std::endl;
 | 
			
		||||
    _LocalCoherenceLanczos.Orthogonalise();
 | 
			
		||||
    std::cout << GridLogIRL<<"Orthogonaled"<<std::endl;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ( Params.doFineRead ) { 
 | 
			
		||||
@@ -231,8 +232,6 @@ int main (int argc, char ** argv) {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ( Params.doCoarse ) {
 | 
			
		||||
    std::cout << GridLogMessage << "Orthogonalising " << nbasis<<" Nm "<<Nm2<< std::endl;
 | 
			
		||||
    
 | 
			
		||||
    std::cout << GridLogMessage << "Performing coarse grid IRL Nstop "<< Ns2<< " Nk "<<Nk2<<" Nm "<<Nm2<< std::endl;
 | 
			
		||||
    _LocalCoherenceLanczos.calcCoarse(coarse.Cheby,Params.Smoother,Params.coarse_relax_tol,
 | 
			
		||||
			      coarse.Nstop, coarse.Nk,coarse.Nm,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user