mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-03 21:44:33 +00:00 
			
		
		
		
	Sizable improvement in multigrid for unsquared.
6000 matmuls CG unprec 2000 matmuls CG prec (4000 eo muls) 1050 matmuls PGCR on 16^3 x 32 x 8 m=.01 Substantial effort on timing and logging infrastructure
This commit is contained in:
		@@ -10,12 +10,12 @@ namespace Grid {
 | 
			
		||||
    void ContinuedFractionFermion5D::SetCoefficientsZolotarev(RealD zolo_hi,Approx::zolotarev_data *zdata)
 | 
			
		||||
    {
 | 
			
		||||
      // How to check Ls matches??
 | 
			
		||||
      //      std::cout << Ls << " Ls"<<std::endl;
 | 
			
		||||
      //      std::cout << zdata->n  << " - n"<<std::endl;
 | 
			
		||||
      //      std::cout << zdata->da << " -da "<<std::endl;
 | 
			
		||||
      //      std::cout << zdata->db << " -db"<<std::endl;
 | 
			
		||||
      //      std::cout << zdata->dn << " -dn"<<std::endl;
 | 
			
		||||
      //      std::cout << zdata->dd << " -dd"<<std::endl;
 | 
			
		||||
      //      std::cout<<GridLogMessage << Ls << " Ls"<<std::endl;
 | 
			
		||||
      //      std::cout<<GridLogMessage << zdata->n  << " - n"<<std::endl;
 | 
			
		||||
      //      std::cout<<GridLogMessage << zdata->da << " -da "<<std::endl;
 | 
			
		||||
      //      std::cout<<GridLogMessage << zdata->db << " -db"<<std::endl;
 | 
			
		||||
      //      std::cout<<GridLogMessage << zdata->dn << " -dn"<<std::endl;
 | 
			
		||||
      //      std::cout<<GridLogMessage << zdata->dd << " -dd"<<std::endl;
 | 
			
		||||
 | 
			
		||||
      assert(zdata->db==Ls);// Beta has Ls coeffs
 | 
			
		||||
 | 
			
		||||
@@ -55,7 +55,7 @@ namespace Grid {
 | 
			
		||||
	See[s] = Aee[s] - 1.0/See[s-1];
 | 
			
		||||
      }
 | 
			
		||||
      for(int s=0;s<Ls;s++){
 | 
			
		||||
	std::cout <<"s = "<<s<<" Beta "<<Beta[s]<<" Aee "<<Aee[s] <<" See "<<See[s] <<std::endl;
 | 
			
		||||
	std::cout<<GridLogMessage <<"s = "<<s<<" Beta "<<Beta[s]<<" Aee "<<Aee[s] <<" See "<<See[s] <<std::endl;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ namespace Grid {
 | 
			
		||||
	Approx::zolotarev_data *zdata = Approx::higham(eps,this->Ls);// eps is ignored for higham
 | 
			
		||||
	assert(zdata->n==this->Ls);
 | 
			
		||||
	
 | 
			
		||||
	std::cout << "DomainWallFermion with Ls="<<Ls<<std::endl;
 | 
			
		||||
	std::cout<<GridLogMessage << "DomainWallFermion with Ls="<<Ls<<std::endl;
 | 
			
		||||
	// Call base setter
 | 
			
		||||
	this->CayleyFermion5D::SetCoefficientsTanh(zdata,1.0,0.0);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -30,7 +30,7 @@ namespace Grid {
 | 
			
		||||
      {
 | 
			
		||||
	RealD eps = 1.0;
 | 
			
		||||
 | 
			
		||||
	std::cout << "MobiusFermion (b="<<b<<",c="<<c<<") with Ls= "<<Ls<<" Tanh approx"<<std::endl;
 | 
			
		||||
	std::cout<<GridLogMessage << "MobiusFermion (b="<<b<<",c="<<c<<") with Ls= "<<Ls<<" Tanh approx"<<std::endl;
 | 
			
		||||
	Approx::zolotarev_data *zdata = Approx::higham(eps,this->Ls);// eps is ignored for higham
 | 
			
		||||
	assert(zdata->n==this->Ls);
 | 
			
		||||
	
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ namespace Grid {
 | 
			
		||||
	Approx::zolotarev_data *zdata = Approx::zolotarev(eps,this->Ls,0);
 | 
			
		||||
	assert(zdata->n==this->Ls);
 | 
			
		||||
 | 
			
		||||
	std::cout << "MobiusZolotarevFermion (b="<<b<<",c="<<c<<") with Ls= "<<Ls<<" Zolotarev range ["<<lo<<","<<hi<<"]"<<std::endl;
 | 
			
		||||
	std::cout<<GridLogMessage << "MobiusZolotarevFermion (b="<<b<<",c="<<c<<") with Ls= "<<Ls<<" Zolotarev range ["<<lo<<","<<hi<<"]"<<std::endl;
 | 
			
		||||
	
 | 
			
		||||
	// Call base setter
 | 
			
		||||
	this->CayleyFermion5D::SetCoefficientsZolotarev(hi,zdata,b,c);
 | 
			
		||||
 
 | 
			
		||||
@@ -260,12 +260,12 @@ namespace Grid {
 | 
			
		||||
    void  PartialFractionFermion5D::SetCoefficientsZolotarev(RealD zolo_hi,Approx::zolotarev_data *zdata){
 | 
			
		||||
 | 
			
		||||
      // check on degree matching
 | 
			
		||||
      //      std::cout << Ls << " Ls"<<std::endl;
 | 
			
		||||
      //      std::cout << zdata->n  << " - n"<<std::endl;
 | 
			
		||||
      //      std::cout << zdata->da << " -da "<<std::endl;
 | 
			
		||||
      //      std::cout << zdata->db << " -db"<<std::endl;
 | 
			
		||||
      //      std::cout << zdata->dn << " -dn"<<std::endl;
 | 
			
		||||
      //      std::cout << zdata->dd << " -dd"<<std::endl;
 | 
			
		||||
      //      std::cout<<GridLogMessage << Ls << " Ls"<<std::endl;
 | 
			
		||||
      //      std::cout<<GridLogMessage << zdata->n  << " - n"<<std::endl;
 | 
			
		||||
      //      std::cout<<GridLogMessage << zdata->da << " -da "<<std::endl;
 | 
			
		||||
      //      std::cout<<GridLogMessage << zdata->db << " -db"<<std::endl;
 | 
			
		||||
      //      std::cout<<GridLogMessage << zdata->dn << " -dn"<<std::endl;
 | 
			
		||||
      //      std::cout<<GridLogMessage << zdata->dd << " -dd"<<std::endl;
 | 
			
		||||
      assert(Ls == (2*zdata->da -1) );
 | 
			
		||||
 | 
			
		||||
      // Part frac
 | 
			
		||||
 
 | 
			
		||||
@@ -100,7 +100,7 @@ void WilsonFermion5D::DhopDir(const LatticeFermion &in, LatticeFermion &out,int
 | 
			
		||||
  assert(dirdisp<=7);
 | 
			
		||||
  assert(dirdisp>=0);
 | 
			
		||||
 | 
			
		||||
//PARALLEL_FOR_LOOP
 | 
			
		||||
PARALLEL_FOR_LOOP
 | 
			
		||||
  for(int ss=0;ss<Umu._grid->oSites();ss++){
 | 
			
		||||
    for(int s=0;s<Ls;s++){
 | 
			
		||||
      int sU=ss;
 | 
			
		||||
 
 | 
			
		||||
@@ -360,11 +360,11 @@ void DiracOptHandDhopSite(CartesianStencil &st,LatticeDoubledGaugeField &U,
 | 
			
		||||
    MULT_2SPIN(Xp);
 | 
			
		||||
  }
 | 
			
		||||
  XP_RECON;
 | 
			
		||||
  //  std::cout << "XP_RECON"<<std::endl;
 | 
			
		||||
  //  std::cout << result_00 <<" "<<result_01 <<" "<<result_02 <<std::endl;
 | 
			
		||||
  //  std::cout << result_10 <<" "<<result_11 <<" "<<result_12 <<std::endl;
 | 
			
		||||
  //  std::cout << result_20 <<" "<<result_21 <<" "<<result_22 <<std::endl;
 | 
			
		||||
  //  std::cout << result_30 <<" "<<result_31 <<" "<<result_32 <<std::endl;
 | 
			
		||||
  //  std::cout<<GridLogMessage << "XP_RECON"<<std::endl;
 | 
			
		||||
  //  std::cout<<GridLogMessage << result_00 <<" "<<result_01 <<" "<<result_02 <<std::endl;
 | 
			
		||||
  //  std::cout<<GridLogMessage << result_10 <<" "<<result_11 <<" "<<result_12 <<std::endl;
 | 
			
		||||
  //  std::cout<<GridLogMessage << result_20 <<" "<<result_21 <<" "<<result_22 <<std::endl;
 | 
			
		||||
  //  std::cout<<GridLogMessage << result_30 <<" "<<result_31 <<" "<<result_32 <<std::endl;
 | 
			
		||||
 | 
			
		||||
  // Yp
 | 
			
		||||
  offset = st._offsets [Yp][ss];
 | 
			
		||||
@@ -446,11 +446,11 @@ void DiracOptHandDhopSite(CartesianStencil &st,LatticeDoubledGaugeField &U,
 | 
			
		||||
    MULT_2SPIN(Xm);
 | 
			
		||||
  }
 | 
			
		||||
  XM_RECON_ACCUM;
 | 
			
		||||
  //  std::cout << "XM_RECON_ACCUM"<<std::endl;
 | 
			
		||||
  //  std::cout << result_00 <<" "<<result_01 <<" "<<result_02 <<std::endl;
 | 
			
		||||
  //  std::cout << result_10 <<" "<<result_11 <<" "<<result_12 <<std::endl;
 | 
			
		||||
  //  std::cout << result_20 <<" "<<result_21 <<" "<<result_22 <<std::endl;
 | 
			
		||||
  //  std::cout << result_30 <<" "<<result_31 <<" "<<result_32 <<std::endl;
 | 
			
		||||
  //  std::cout<<GridLogMessage << "XM_RECON_ACCUM"<<std::endl;
 | 
			
		||||
  //  std::cout<<GridLogMessage << result_00 <<" "<<result_01 <<" "<<result_02 <<std::endl;
 | 
			
		||||
  //  std::cout<<GridLogMessage << result_10 <<" "<<result_11 <<" "<<result_12 <<std::endl;
 | 
			
		||||
  //  std::cout<<GridLogMessage << result_20 <<" "<<result_21 <<" "<<result_22 <<std::endl;
 | 
			
		||||
  //  std::cout<<GridLogMessage << result_30 <<" "<<result_31 <<" "<<result_32 <<std::endl;
 | 
			
		||||
  
 | 
			
		||||
  
 | 
			
		||||
  // Ym
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,7 @@ namespace Grid{
 | 
			
		||||
      
 | 
			
		||||
      virtual RealD S(const GaugeField &U) {
 | 
			
		||||
	RealD plaq = WilsonLoops<MatrixField,GaugeField>::avgPlaquette(U);
 | 
			
		||||
	std::cout << "Plaq : "<<plaq << "\n";
 | 
			
		||||
	std::cout<<GridLogMessage << "Plaq : "<<plaq << "\n";
 | 
			
		||||
	double vol = U._grid->gSites();
 | 
			
		||||
	return beta*(1.0 -plaq)*(Nd*(Nd-1.0))*vol*0.5;
 | 
			
		||||
      };
 | 
			
		||||
 
 | 
			
		||||
@@ -36,15 +36,15 @@ namespace Grid{
 | 
			
		||||
	RealD prob = std::exp(-DeltaH);
 | 
			
		||||
	random(sRNG,rn_test);
 | 
			
		||||
      
 | 
			
		||||
	std::cout<< "--------------------------------------------\n";
 | 
			
		||||
	std::cout<< "dH = "<<DeltaH << "  Random = "<< rn_test 
 | 
			
		||||
	std::cout<<GridLogMessage<< "--------------------------------------------\n";
 | 
			
		||||
	std::cout<<GridLogMessage<< "dH = "<<DeltaH << "  Random = "<< rn_test 
 | 
			
		||||
		 << "\nAcc. Probability = " << ((prob<1.0)? prob: 1.0)<< "   ";
 | 
			
		||||
      
 | 
			
		||||
	if((prob >1.0) || (rn_test <= prob)){       // accepted
 | 
			
		||||
	  std::cout <<"-- ACCEPTED\n";
 | 
			
		||||
	  std::cout<<GridLogMessage <<"-- ACCEPTED\n";
 | 
			
		||||
	  return true;
 | 
			
		||||
	} else {                               // rejected
 | 
			
		||||
	  std::cout <<"-- REJECTED\n";
 | 
			
		||||
	  std::cout<<GridLogMessage <<"-- REJECTED\n";
 | 
			
		||||
	  return false;
 | 
			
		||||
	}
 | 
			
		||||
      }
 | 
			
		||||
@@ -53,12 +53,12 @@ namespace Grid{
 | 
			
		||||
 | 
			
		||||
	MD.init(U); // set U and initialize P and phi's 
 | 
			
		||||
	RealD H0 = MD.S(U); // initial state action  
 | 
			
		||||
	std::cout<<"Total H before = "<< H0 << "\n";
 | 
			
		||||
	std::cout<<GridLogMessage<<"Total H before = "<< H0 << "\n";
 | 
			
		||||
      
 | 
			
		||||
	MD.integrate(U);
 | 
			
		||||
      
 | 
			
		||||
	RealD H1 = MD.S(U); // updated state action            
 | 
			
		||||
	std::cout<<"Total H after = "<< H1 << "\n";
 | 
			
		||||
	std::cout<<GridLogMessage<<"Total H after = "<< H1 << "\n";
 | 
			
		||||
      
 | 
			
		||||
	return (H1-H0);
 | 
			
		||||
      }
 | 
			
		||||
@@ -81,17 +81,17 @@ namespace Grid{
 | 
			
		||||
	
 | 
			
		||||
	// Thermalizations
 | 
			
		||||
	for(int iter=1; iter <= Params.ThermalizationSteps; ++iter){
 | 
			
		||||
	  std::cout << "-- # Thermalization step = "<< iter <<  "\n";
 | 
			
		||||
	  std::cout<<GridLogMessage << "-- # Thermalization step = "<< iter <<  "\n";
 | 
			
		||||
	
 | 
			
		||||
	  DeltaH = evolve_step(Uin);
 | 
			
		||||
	  std::cout<< " dH = "<< DeltaH << "\n";
 | 
			
		||||
	  std::cout<<GridLogMessage<< " dH = "<< DeltaH << "\n";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Actual updates (evolve a copy Ucopy then copy back eventually)
 | 
			
		||||
	LatticeLorentzColourMatrix Ucopy(Uin._grid);
 | 
			
		||||
	for(int iter=Params.StartingConfig; 
 | 
			
		||||
	    iter < Params.Nsweeps+Params.StartingConfig; ++iter){
 | 
			
		||||
	  std::cout << "-- # Sweep = "<< iter <<  "\n";
 | 
			
		||||
	  std::cout<<GridLogMessage << "-- # Sweep = "<< iter <<  "\n";
 | 
			
		||||
	  
 | 
			
		||||
	  Ucopy = Uin;
 | 
			
		||||
	  DeltaH = evolve_step(Ucopy);
 | 
			
		||||
 
 | 
			
		||||
@@ -95,7 +95,7 @@ namespace Grid{
 | 
			
		||||
 | 
			
		||||
      //Initialization of momenta and actions
 | 
			
		||||
      void init(LatticeLorentzColourMatrix& U){
 | 
			
		||||
	std::cout<< "Integrator init\n";
 | 
			
		||||
	std::cout<<GridLogMessage<< "Integrator init\n";
 | 
			
		||||
 | 
			
		||||
	MDutils::generate_momenta(*P,pRNG);
 | 
			
		||||
	for(int level=0; level< as.size(); ++level){
 | 
			
		||||
@@ -119,7 +119,7 @@ namespace Grid{
 | 
			
		||||
	
 | 
			
		||||
	RealD H = Hsum.real();
 | 
			
		||||
 | 
			
		||||
	std::cout << "H_p = "<< H << "\n";
 | 
			
		||||
	std::cout<<GridLogMessage << "H_p = "<< H << "\n";
 | 
			
		||||
 | 
			
		||||
	// Actions
 | 
			
		||||
	for(int level=0; level<as.size(); ++level)
 | 
			
		||||
 
 | 
			
		||||
@@ -39,29 +39,29 @@ namespace Grid{
 | 
			
		||||
	  if(clock[level] == 0){    // initial half step 
 | 
			
		||||
	    Integ->update_P(U,level,lambda*eps);
 | 
			
		||||
	    ++clock[level];
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"P "<< clock[level] <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"P "<< clock[level] <<std::endl;
 | 
			
		||||
	  }
 | 
			
		||||
	  
 | 
			
		||||
	  if(level == fl){          // lowest level 
 | 
			
		||||
	    Integ->update_U(U,0.5*eps);
 | 
			
		||||
	    
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"U "<< (clock[level]+1) <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"U "<< (clock[level]+1) <<std::endl;
 | 
			
		||||
	  }else{                 // recursive function call 
 | 
			
		||||
	    step(U,level+1,clock, Integ);
 | 
			
		||||
	  }
 | 
			
		||||
	  
 | 
			
		||||
	  Integ->update_P(U,level,(1.0-2.0*lambda)*eps);
 | 
			
		||||
	  ++clock[level];
 | 
			
		||||
	  for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	  std::cout<<"P "<< (clock[level]) <<std::endl;
 | 
			
		||||
	  for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	  std::cout<<GridLogMessage<<"P "<< (clock[level]) <<std::endl;
 | 
			
		||||
	  
 | 
			
		||||
	  if(level == fl){          // lowest level 
 | 
			
		||||
	    Integ->update_U(U,0.5*eps);
 | 
			
		||||
	    
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"U "<< (clock[level]+1) <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"U "<< (clock[level]+1) <<std::endl;
 | 
			
		||||
	  }else{                 // recursive function call 
 | 
			
		||||
	    step(U,level+1,clock, Integ);
 | 
			
		||||
	  }    
 | 
			
		||||
@@ -71,14 +71,14 @@ namespace Grid{
 | 
			
		||||
	    Integ->update_P(U,level,lambda*eps);
 | 
			
		||||
	    
 | 
			
		||||
	    ++clock[level];
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"P "<< clock[level] <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"P "<< clock[level] <<std::endl;
 | 
			
		||||
	  }else{                  // bulk step
 | 
			
		||||
	    Integ->update_P(U,level,lambda*2.0*eps);
 | 
			
		||||
	    
 | 
			
		||||
	    clock[level]+=2;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"P "<< clock[level] <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"P "<< clock[level] <<std::endl;
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
@@ -112,13 +112,13 @@ namespace Grid{
 | 
			
		||||
	  if(clock[level] == 0){    // initial half step
 | 
			
		||||
	    Integ->update_P(U, level,eps/2.0);
 | 
			
		||||
	    ++clock[level];
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	  }
 | 
			
		||||
	  if(level == fl){          // lowest level
 | 
			
		||||
	    Integ->update_U(U, eps);
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"U "<< 0.5*(clock[level]+1) <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"U "<< 0.5*(clock[level]+1) <<std::endl;
 | 
			
		||||
	  }else{                 // recursive function call
 | 
			
		||||
	    step(U, level+1,clock, Integ);
 | 
			
		||||
	  }
 | 
			
		||||
@@ -126,14 +126,14 @@ namespace Grid{
 | 
			
		||||
	    Integ->update_P(U, level,eps/2.0);
 | 
			
		||||
	    
 | 
			
		||||
	    ++clock[level];
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	  }else{                  // bulk step
 | 
			
		||||
	    Integ->update_P(U, level,eps);
 | 
			
		||||
	    
 | 
			
		||||
	    clock[level]+=2;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -101,7 +101,7 @@ namespace Grid{
 | 
			
		||||
      //Initialization of momenta and actions
 | 
			
		||||
      void init(LatticeLorentzColourMatrix& U,
 | 
			
		||||
		GridParallelRNG& pRNG){
 | 
			
		||||
	std::cout<< "Integrator init\n";
 | 
			
		||||
	std::cout<<GridLogMessage<< "Integrator init\n";
 | 
			
		||||
	if (!P)
 | 
			
		||||
	  P = new LatticeLorentzColourMatrix(U._grid);
 | 
			
		||||
	MDutils::generate_momenta(*P,pRNG);
 | 
			
		||||
@@ -172,13 +172,13 @@ namespace Grid{
 | 
			
		||||
	  if(clock[level] == 0){    // initial half step
 | 
			
		||||
	    Integ->update_P(U, level,eps/2);
 | 
			
		||||
	    ++clock[level];
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	  }
 | 
			
		||||
	  if(level == fl){          // lowest level
 | 
			
		||||
	    Integ->update_U(U, eps);
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"U "<< 0.5*(clock[level]+1) <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"U "<< 0.5*(clock[level]+1) <<std::endl;
 | 
			
		||||
	  }else{                 // recursive function call
 | 
			
		||||
	    step(U, level+1,clock, Integ);
 | 
			
		||||
	  }
 | 
			
		||||
@@ -186,14 +186,14 @@ namespace Grid{
 | 
			
		||||
	    Integ->update_P(U, level,eps/2);
 | 
			
		||||
	    
 | 
			
		||||
	    ++clock[level];
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	  }else{                  // bulk step
 | 
			
		||||
	    Integ->update_P(U, level,eps);
 | 
			
		||||
	    
 | 
			
		||||
	    clock[level]+=2;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -372,7 +372,7 @@ Note that in step D setting B ~ X - A and using B in place of A in step E will g
 | 
			
		||||
    LatticeReal d(grid); d=zero;
 | 
			
		||||
    LatticeReal alpha(grid);
 | 
			
		||||
 | 
			
		||||
    //    std::cout<<"xi "<<xi <<std::endl;
 | 
			
		||||
    //    std::cout<<GridLogMessage<<"xi "<<xi <<std::endl;
 | 
			
		||||
    alpha = toReal(2.0*xi);
 | 
			
		||||
 | 
			
		||||
    do { 
 | 
			
		||||
@@ -468,11 +468,11 @@ Note that in step D setting B ~ X - A and using B in place of A in step E will g
 | 
			
		||||
    LatticeMatrix Vcheck(grid);
 | 
			
		||||
    Vcheck = zero;
 | 
			
		||||
    Vcheck = where(Accepted,V*adj(V) - 1.0,Vcheck);
 | 
			
		||||
    //    std::cout << "SU3 check " <<norm2(Vcheck)<<std::endl;
 | 
			
		||||
    //    std::cout<<GridLogMessage << "SU3 check " <<norm2(Vcheck)<<std::endl;
 | 
			
		||||
    assert(norm2(Vcheck)<1.0e-4);
 | 
			
		||||
    
 | 
			
		||||
    // Verify the link stays in SU(3)
 | 
			
		||||
    //    std::cout <<"Checking the modified link"<<std::endl;
 | 
			
		||||
    //    std::cout<<GridLogMessage <<"Checking the modified link"<<std::endl;
 | 
			
		||||
    Vcheck = link*adj(link) - 1.0;
 | 
			
		||||
    assert(norm2(Vcheck)<1.0e-4);
 | 
			
		||||
    /////////////////////////////////
 | 
			
		||||
@@ -483,42 +483,42 @@ Note that in step D setting B ~ X - A and using B in place of A in step E will g
 | 
			
		||||
    for(int gen=0;gen<generators();gen++){
 | 
			
		||||
      Matrix ta;
 | 
			
		||||
      generator(gen,ta);
 | 
			
		||||
      std::cout<< "Nc = "<<ncolour<<" t_"<<gen<<std::endl;
 | 
			
		||||
      std::cout<<ta<<std::endl;
 | 
			
		||||
      std::cout<<GridLogMessage<< "Nc = "<<ncolour<<" t_"<<gen<<std::endl;
 | 
			
		||||
      std::cout<<GridLogMessage<<ta<<std::endl;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  static void testGenerators(void){
 | 
			
		||||
    Matrix ta;
 | 
			
		||||
    Matrix tb;
 | 
			
		||||
    std::cout<<"Checking trace ta tb is 0.5 delta_ab"<<std::endl;
 | 
			
		||||
    std::cout<<GridLogMessage<<"Checking trace ta tb is 0.5 delta_ab"<<std::endl;
 | 
			
		||||
    for(int a=0;a<generators();a++){
 | 
			
		||||
      for(int b=0;b<generators();b++){
 | 
			
		||||
	generator(a,ta);
 | 
			
		||||
	generator(b,tb);
 | 
			
		||||
	Complex tr =TensorRemove(trace(ta*tb)); 
 | 
			
		||||
	std::cout<<tr<<" ";
 | 
			
		||||
	std::cout<<GridLogMessage<<tr<<" ";
 | 
			
		||||
	if(a==b) assert(abs(tr-Complex(0.5))<1.0e-6);
 | 
			
		||||
	if(a!=b) assert(abs(tr)<1.0e-6);
 | 
			
		||||
      }
 | 
			
		||||
      std::cout<<std::endl;
 | 
			
		||||
      std::cout<<GridLogMessage<<std::endl;
 | 
			
		||||
    }
 | 
			
		||||
    std::cout<<"Checking hermitian"<<std::endl;
 | 
			
		||||
    std::cout<<GridLogMessage<<"Checking hermitian"<<std::endl;
 | 
			
		||||
    for(int a=0;a<generators();a++){
 | 
			
		||||
      generator(a,ta);
 | 
			
		||||
      std::cout<<a<<" ";
 | 
			
		||||
      std::cout<<GridLogMessage<<a<<" ";
 | 
			
		||||
      assert(norm2(ta-adj(ta))<1.0e-6);
 | 
			
		||||
    }    
 | 
			
		||||
    std::cout<<std::endl;
 | 
			
		||||
    std::cout<<GridLogMessage<<std::endl;
 | 
			
		||||
 | 
			
		||||
    std::cout<<"Checking traceless"<<std::endl;
 | 
			
		||||
    std::cout<<GridLogMessage<<"Checking traceless"<<std::endl;
 | 
			
		||||
    for(int a=0;a<generators();a++){
 | 
			
		||||
      generator(a,ta);
 | 
			
		||||
      Complex tr =TensorRemove(trace(ta)); 
 | 
			
		||||
      std::cout<<a<<" ";
 | 
			
		||||
      std::cout<<GridLogMessage<<a<<" ";
 | 
			
		||||
      assert(abs(tr)<1.0e-6);
 | 
			
		||||
    }    
 | 
			
		||||
    std::cout<<std::endl;
 | 
			
		||||
    std::cout<<GridLogMessage<<std::endl;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // reunitarise??
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user