mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-10-30 19:44:32 +00:00 
			
		
		
		
	Added ExpScalar observable
This commit is contained in:
		| @@ -51,7 +51,7 @@ namespace QCD { | |||||||
|  |  | ||||||
|     static const int Nc=3; |     static const int Nc=3; | ||||||
|     static const int Ns=4; |     static const int Ns=4; | ||||||
|     static const int Nd=4; |     static const int Nd=2; | ||||||
|     static const int Nhs=2; // half spinor |     static const int Nhs=2; // half spinor | ||||||
|     static const int Nds=8; // double stored gauge field |     static const int Nds=8; // double stored gauge field | ||||||
|     static const int Ngp=2; // gparity index range |     static const int Ngp=2; // gparity index range | ||||||
|   | |||||||
| @@ -92,6 +92,20 @@ class PlaquetteMod: public ObservableModule<PlaquetteLogger<Impl>, NoParameters> | |||||||
|   PlaquetteMod(): ObsBase(NoParameters()){} |   PlaquetteMod(): ObsBase(NoParameters()){} | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | template < class Impl > | ||||||
|  | class ExpScalarMod: public ObservableModule<ExpScalarLogger<Impl>, ExpScalarParameters>{ | ||||||
|  |   typedef ObservableModule<ExpScalarLogger<Impl>, ExpScalarParameters> ObsBase; | ||||||
|  |   using ObsBase::ObsBase; // for constructors | ||||||
|  |  | ||||||
|  |   // acquire resource | ||||||
|  |   virtual void initialize(){ | ||||||
|  |     this->ObservablePtr.reset(new ExpScalarLogger<Impl>(this->Par_)); | ||||||
|  |   } | ||||||
|  |   public: | ||||||
|  |   ExpScalarMod(ExpScalarParameters P): ObsBase(P){} | ||||||
|  |   ExpScalarMod():ObsBase(){}; | ||||||
|  | }; | ||||||
|  |  | ||||||
| template < class Impl > | template < class Impl > | ||||||
| class PolyakovMod: public ObservableModule<PolyakovLogger<Impl>, NoParameters>{ | class PolyakovMod: public ObservableModule<PolyakovLogger<Impl>, NoParameters>{ | ||||||
|   typedef ObservableModule<PolyakovLogger<Impl>, NoParameters> ObsBase; |   typedef ObservableModule<PolyakovLogger<Impl>, NoParameters> ObsBase; | ||||||
|   | |||||||
							
								
								
									
										80
									
								
								lib/qcd/observables/exp_scalar.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								lib/qcd/observables/exp_scalar.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,80 @@ | |||||||
|  | /************************************************************************************* | ||||||
|  |  | ||||||
|  | Grid physics library, www.github.com/paboyle/Grid | ||||||
|  |  | ||||||
|  | Source file: ./lib/qcd/modules/exp_scalar.h | ||||||
|  |  | ||||||
|  | Copyright (C) 2018 | ||||||
|  |  | ||||||
|  | Author: Guido Cossu <guido.cossu@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 */ | ||||||
|  |  | ||||||
|  | #ifndef HMC_EXP_SCALAR_H | ||||||
|  | #define HMC_EXP_SCALAR_H | ||||||
|  |  | ||||||
|  | namespace Grid { | ||||||
|  | namespace QCD { | ||||||
|  |  | ||||||
|  | struct ExpScalarParameters : Serializable { | ||||||
|  |     GRID_SERIALIZABLE_CLASS_MEMBERS(ExpScalarParameters, | ||||||
|  |     double, a) | ||||||
|  |  | ||||||
|  |     ExpScalarParameters(double _a = 0.0):a(_a){} | ||||||
|  |  | ||||||
|  |     template < class ReaderClass > | ||||||
|  |     ExpScalarParameters(Reader<ReaderClass>& Reader){ | ||||||
|  |         read(Reader, "ExpScalar", *this);   | ||||||
|  |     }   | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <class Impl> | ||||||
|  | class ExpScalarLogger : public HmcObservable<typename Impl::Field> { | ||||||
|  |   ExpScalarParameters Pars; | ||||||
|  |  public: | ||||||
|  |  | ||||||
|  |   // necessary for HmcObservable compatibility | ||||||
|  |   typedef typename Impl::Field Field; | ||||||
|  |  | ||||||
|  |   ExpScalarLogger(double _a):Pars(_a){} | ||||||
|  |  | ||||||
|  |   ExpScalarLogger(ExpScalarParameters P):Pars(P){} | ||||||
|  |  | ||||||
|  |   void TrajectoryComplete(int traj, typename Impl::Field &U, | ||||||
|  |                           GridSerialRNG &sRNG, | ||||||
|  |                           GridParallelRNG &pRNG) { | ||||||
|  |  | ||||||
|  |     double e = sum(trace(exp(Pars.a*U))); | ||||||
|  |  | ||||||
|  |     int def_prec = std::cout.precision(); | ||||||
|  |  | ||||||
|  |     std::cout << GridLogMessage | ||||||
|  |         << std::setprecision(std::numeric_limits<Real>::digits10 + 1) | ||||||
|  |         << "ExpScalar: [ " << traj << " ] "<< e << std::endl; | ||||||
|  |  | ||||||
|  |     std::cout.precision(def_prec); | ||||||
|  |  | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | }  // namespace QCD | ||||||
|  | }  // namespace Grid | ||||||
|  |  | ||||||
|  | #endif  // HMC_PLAQUETTE_H | ||||||
| @@ -46,6 +46,6 @@ class HmcObservable { | |||||||
| #include "plaquette.h" | #include "plaquette.h" | ||||||
| #include "topological_charge.h" | #include "topological_charge.h" | ||||||
| #include "polyakov_loop.h" | #include "polyakov_loop.h" | ||||||
|  | #include "exp_scalar.h" | ||||||
|  |  | ||||||
| #endif  //  HMC_OBSERVABLE_H | #endif  //  HMC_OBSERVABLE_H | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								lib/version.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								lib/version.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  |  | ||||||
| @@ -91,6 +91,12 @@ int main(int argc, char **argv) { | |||||||
|   RNGModuleParameters RNGpar(Reader); |   RNGModuleParameters RNGpar(Reader); | ||||||
|   TheHMC.Resources.SetRNGSeeds(RNGpar); |   TheHMC.Resources.SetRNGSeeds(RNGpar); | ||||||
|  |  | ||||||
|  |   // Some online observable measurements | ||||||
|  |   typedef ExpScalarMod<HMCWrapper::ImplPolicy> ExpObs; | ||||||
|  |   ExpScalarParameters ExpParams(Reader); | ||||||
|  |   TheHMC.Resources.AddObservable<ExpObs>(ExpParams); | ||||||
|  |   /////////////////////////////////////////// | ||||||
|  |  | ||||||
|   // Real Scalar sh-Gordon action |   // Real Scalar sh-Gordon action | ||||||
|   ScalarActionParameters SPar(Reader); |   ScalarActionParameters SPar(Reader); | ||||||
|   shGordonActionR Saction(SPar.mass_squared, SPar.g); |   shGordonActionR Saction(SPar.mass_squared, SPar.g); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user