mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 14:04:32 +00:00 
			
		
		
		
	Debugged vector version of ProjectOnGroup
This commit is contained in:
		@@ -10,7 +10,6 @@ class Action {
 | 
			
		||||
  virtual void  init(const GaugeField &U, GridParallelRNG& pRNG) = 0;
 | 
			
		||||
  virtual RealD S(const GaugeField &U)                           = 0;  // evaluate the action
 | 
			
		||||
  virtual void  deriv(const GaugeField &U,GaugeField & dSdU )    = 0;  // evaluate the action derivative
 | 
			
		||||
  virtual void  staple(const GaugeField &U,GaugeField & dSdU )   = 0;  // evaluate the action derivative
 | 
			
		||||
  //virtual void  refresh(const GaugeField & ) {}                ; 
 | 
			
		||||
  // Boundary conditions?
 | 
			
		||||
  // Heatbath?
 | 
			
		||||
 
 | 
			
		||||
@@ -17,17 +17,28 @@ namespace Grid{
 | 
			
		||||
      virtual void init(const GaugeField &U, GridParallelRNG& pRNG) {};
 | 
			
		||||
      
 | 
			
		||||
      virtual RealD S(const GaugeField &U) {
 | 
			
		||||
	return WilsonLoops<MatrixField,GaugeField>::sumPlaquette(U);
 | 
			
		||||
	RealD plaq = WilsonLoops<MatrixField,GaugeField>::avgPlaquette(U);
 | 
			
		||||
	std::cout << "Plaq : "<<plaq << "\n";
 | 
			
		||||
	double vol = U._grid->gSites();
 | 
			
		||||
	return beta*(1.0 -plaq)*(Nd*(Nd-1.0))*vol*0.5;
 | 
			
		||||
      };
 | 
			
		||||
      virtual void deriv(const GaugeField &U,GaugeField & dSdU) {
 | 
			
		||||
	//FIXME loop on directions
 | 
			
		||||
 | 
			
		||||
	//not optimal implementation FIXME
 | 
			
		||||
	//extend Ta to include Lorentz indexes
 | 
			
		||||
	RealD factor = 0.5*beta/RealD(Nc);
 | 
			
		||||
	std::cout << "Debug force Wilson  "<< factor << "\n";
 | 
			
		||||
	MatrixField dSdU_mu(U._grid);
 | 
			
		||||
	WilsonLoops<MatrixField,GaugeField>::Staple(dSdU_mu,U,0);
 | 
			
		||||
      };
 | 
			
		||||
      virtual void  staple(const GaugeField &stap,GaugeField & U) {
 | 
			
		||||
	//FIXME loop on directions
 | 
			
		||||
	MatrixField stap_mu(U._grid);
 | 
			
		||||
	WilsonLoops<MatrixField,GaugeField>::Staple(stap_mu,U,0);
 | 
			
		||||
	MatrixField Umu(U._grid);
 | 
			
		||||
	for (int mu=0; mu < Nd; mu++){
 | 
			
		||||
	  Umu = PeekIndex<LorentzIndex>(U,mu);
 | 
			
		||||
	  // Staple in direction mu
 | 
			
		||||
	  WilsonLoops<MatrixField,GaugeField>::Staple(dSdU_mu,U,mu);
 | 
			
		||||
	  std::cout << "Staple norm ["<<mu<<"] = "<< norm2(dSdU_mu) <<"\n";
 | 
			
		||||
	  dSdU_mu = Ta(Umu*adj(dSdU_mu))*factor;
 | 
			
		||||
	  std::cout << "Force norm ["<<mu<<"] = "<< norm2(dSdU_mu) << "  : Umu "<< norm2(Umu)<<"\n";
 | 
			
		||||
	  pokeLorentz(dSdU, dSdU_mu, mu);
 | 
			
		||||
	}
 | 
			
		||||
      };
 | 
			
		||||
    };
 | 
			
		||||
    
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user