mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-10-26 09:39:34 +00:00 
			
		
		
		
	added polyakov loop observable to the hmc
This commit is contained in:
		| @@ -92,6 +92,19 @@ class PlaquetteMod: public ObservableModule<PlaquetteLogger<Impl>, NoParameters> | |||||||
|   PlaquetteMod(): ObsBase(NoParameters()){} |   PlaquetteMod(): ObsBase(NoParameters()){} | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | template < class Impl > | ||||||
|  | class PolyakovMod: public ObservableModule<PolyakovLogger<Impl>, NoParameters>{ | ||||||
|  |   typedef ObservableModule<PolyakovLogger<Impl>, NoParameters> ObsBase; | ||||||
|  |   using ObsBase::ObsBase; // for constructors | ||||||
|  |  | ||||||
|  |   // acquire resource | ||||||
|  |   virtual void initialize(){ | ||||||
|  |     this->ObservablePtr.reset(new PolyakovLogger<Impl>()); | ||||||
|  |   } | ||||||
|  |   public: | ||||||
|  |   PolyakovMod(): ObsBase(NoParameters()){} | ||||||
|  | }; | ||||||
|  |  | ||||||
|  |  | ||||||
| template < class Impl > | template < class Impl > | ||||||
| class TopologicalChargeMod: public ObservableModule<TopologicalCharge<Impl>, TopologyObsParameters>{ | class TopologicalChargeMod: public ObservableModule<TopologicalCharge<Impl>, TopologyObsParameters>{ | ||||||
|   | |||||||
| @@ -45,5 +45,7 @@ class HmcObservable { | |||||||
|  |  | ||||||
| #include "plaquette.h" | #include "plaquette.h" | ||||||
| #include "topological_charge.h" | #include "topological_charge.h" | ||||||
|  | #include "polyakov_loop.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| #endif  //  HMC_OBSERVABLE_H | #endif  //  HMC_OBSERVABLE_H | ||||||
|   | |||||||
							
								
								
									
										68
									
								
								lib/qcd/observables/polyakov_loop.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								lib/qcd/observables/polyakov_loop.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | |||||||
|  | /************************************************************************************* | ||||||
|  |  | ||||||
|  | Grid physics library, www.github.com/paboyle/Grid | ||||||
|  |  | ||||||
|  | Source file: ./lib/qcd/modules/polyakov_line.h | ||||||
|  |  | ||||||
|  | Copyright (C) 2017 | ||||||
|  |  | ||||||
|  | Author: David Preti <david.preti@csic.es> | ||||||
|  |  | ||||||
|  | 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 */ | ||||||
|  |  | ||||||
|  | #ifndef HMC_POLYAKOV_H | ||||||
|  | #define HMC_POLYAKOV_H | ||||||
|  |  | ||||||
|  | namespace Grid { | ||||||
|  | namespace QCD { | ||||||
|  |  | ||||||
|  | // this is only defined for a gauge theory | ||||||
|  | template <class Impl> | ||||||
|  | class PolyakovLogger : public HmcObservable<typename Impl::Field> { | ||||||
|  |  public: | ||||||
|  |   // here forces the Impl to be of gauge fields | ||||||
|  |   // if not the compiler will complain | ||||||
|  |   INHERIT_GIMPL_TYPES(Impl); | ||||||
|  |  | ||||||
|  |   // necessary for HmcObservable compatibility | ||||||
|  |   typedef typename Impl::Field Field; | ||||||
|  |  | ||||||
|  |   void TrajectoryComplete(int traj, | ||||||
|  |                           Field &U, | ||||||
|  |                           GridSerialRNG &sRNG, | ||||||
|  |                           GridParallelRNG &pRNG) { | ||||||
|  |  | ||||||
|  |     ComplexD polyakov = WilsonLoops<Impl>::avgPolyakovLoop(U); | ||||||
|  |  | ||||||
|  |     int def_prec = std::cout.precision(); | ||||||
|  |  | ||||||
|  |     std::cout << GridLogMessage | ||||||
|  |         << std::setprecision(std::numeric_limits<Real>::digits10 + 1) | ||||||
|  |         << "Polyakov Loop: [ " << traj << " ] "<< polyakov << std::endl; | ||||||
|  |  | ||||||
|  |     std::cout.precision(def_prec); | ||||||
|  |  | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | }  // namespace QCD | ||||||
|  | }  // namespace Grid | ||||||
|  |  | ||||||
|  | #endif  // HMC_POLYAKOV_H | ||||||
| @@ -123,6 +123,29 @@ public: | |||||||
|     return sumplaq / vol / faces / Nc; // Nd , Nc dependent... FIXME |     return sumplaq / vol / faces / Nc; // Nd , Nc dependent... FIXME | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   ////////////////////////////////////////////////// | ||||||
|  |   // average over all x,y,z the temporal loop | ||||||
|  |   ////////////////////////////////////////////////// | ||||||
|  |   static ComplexD avgPolyakovLoop(const GaugeField &Umu) {  //assume Nd=4 | ||||||
|  |     GaugeMat Ut(Umu._grid), P(Umu._grid); | ||||||
|  |     ComplexD out; | ||||||
|  |     int T = Umu._grid->GlobalDimensions()[3]; | ||||||
|  |     int X = Umu._grid->GlobalDimensions()[0]; | ||||||
|  |     int Y = Umu._grid->GlobalDimensions()[1]; | ||||||
|  |     int Z = Umu._grid->GlobalDimensions()[2]; | ||||||
|  |  | ||||||
|  |     std::cout << X << Y << Z << T << std::endl; | ||||||
|  |     Ut = peekLorentz(Umu,3); //Select temporal direction | ||||||
|  |     P = Ut; | ||||||
|  |     for (int t=1;t<T;t++){  | ||||||
|  |       P = Gimpl::CovShiftForward(Ut,3,P); | ||||||
|  |     } | ||||||
|  |    RealD norm = 1.0/(Nc*X*Y*Z*T); | ||||||
|  |    out = sum(trace(P))*norm; | ||||||
|  |    return out;    | ||||||
|  | } | ||||||
|  |  | ||||||
|   ////////////////////////////////////////////////// |   ////////////////////////////////////////////////// | ||||||
|   // average over traced single links |   // average over traced single links | ||||||
|   ////////////////////////////////////////////////// |   ////////////////////////////////////////////////// | ||||||
|   | |||||||
| @@ -67,6 +67,9 @@ int main(int argc, char **argv) | |||||||
|   // Construct observables |   // Construct observables | ||||||
|   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; |   typedef PlaquetteMod<HMCWrapper::ImplPolicy> PlaqObs; | ||||||
|   TheHMC.Resources.AddObservable<PlaqObs>(); |   TheHMC.Resources.AddObservable<PlaqObs>(); | ||||||
|  |  | ||||||
|  |   typedef PolyakovMod<HMCWrapper::ImplPolicy> PolyakovObs; | ||||||
|  |   TheHMC.Resources.AddObservable<PolyakovObs>(); | ||||||
|   ////////////////////////////////////////////// |   ////////////////////////////////////////////// | ||||||
|  |  | ||||||
|   ///////////////////////////////////////////////////////////// |   ///////////////////////////////////////////////////////////// | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user