CHROMA
const_lcm_hmc.h
Go to the documentation of this file.
1 // -*- C++ -*-
2 /*! \file
3  * \brief HMC trajectory
4  *
5  * HMC trajectory
6  */
7 
8 #ifndef CONST_LAT_COL_MAT_HMC_NEW_H
9 #define CONST_LAT_COL_MAT_HMC_NEW_H
10 
11 #include "chromabase.h"
16 #include "handle.h"
17 // The accept Reject
19 
20 #include "util/gauge/taproj.h"
21 
22 
23 namespace Chroma
24 {
25 
26  //! HMC trajectory
27  /*! @ingroup hmc */
28  class ConstLatColMatHMCTrj : public AbsHMCTrj<multi1d<LatticeColorMatrix>,
29  multi1d<LatticeColorMatrix> >
30  {
31  public:
32 
33  // Destructor
35 
36  // Constructor
37  ConstLatColMatHMCTrj( Handle< AbsHamiltonian< multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> > >& _H_MC,
38  Handle< AbsMDIntegrator< multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> > >& _MD_int)
39  : the_MD(_MD_int), the_H_MC(_H_MC) {}
40 
41  private:
43 
45  protected:
46 
47  AbsHamiltonian< multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> >& getMCHamiltonian(void) {
48  return *the_H_MC;
49  }
50 
51  AbsMDIntegrator< multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> >& getMDIntegrator(void) {
52  return *the_MD;
53  }
54 
55  bool acceptReject( const Double& DeltaH ) const {
56  return globalMetropolisAcceptReject(DeltaH);
57  }
58 
59 
60  void refreshP(AbsFieldState<multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> >& s) const
61  {
62  START_CODE();
63 
64  LatticeColorMatrix P ;
65  // Loop over direcsions
66  for(int mu = 0; mu < Nd; mu++)
67  {
68  // Given that gauge fields are constant
69  // Pull a single matrix noise gaussian noise
70 
71  gaussian(P);
72 
73  s.getP()[mu] = sum(P)/sqrt(toDouble(Layout::vol())) ;
74  // Old conventions
75  //s.getP()[mu] *= sqrt(0.5); // Gaussian Normalisation
76 
77  // Normalisation factor in variance of momenta
78  // one factor of sqrt(2) to move the variance of the noise
79  // one factor of sqrt(2) to account for Taproj normalisation
80  // => sqrt(1/2)*sqrt(1/2) = sqrt(1/4) = 1/2
81  s.getP()[mu] *= sqrt(Real(0.5));
82 
83  // Make traceless and antihermitian
84  taproj(s.getP()[mu]);
85  }
86 
87  END_CODE();
88  }
89 
90 
91  void flipMomenta(AbsFieldState<multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> >& s) const {
92 
93  multi1d<LatticeColorMatrix>& p = s.getP();
94  for(int mu=0; mu < Nd; mu++) {
95  p[mu] *= Real(-1);
96  }
97  }
98 
99  void reverseCheckMetrics(Double& deltaQ, Double& deltaP,
100  const AbsFieldState<multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> >& s,
101  const AbsFieldState<multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> >& s_old
102  ) const {
103 
104  multi1d<LatticeColorMatrix> DelQ(Nd);
105  multi1d<LatticeColorMatrix> DelP(Nd);
106  for(int mu=0; mu < Nd; mu++) {
107  DelQ[mu]=s.getQ()[mu] - s_old.getQ()[mu];
108  DelP[mu]=s.getP()[mu] - s_old.getP()[mu];
109  }
110 
111  deltaQ = sqrt(norm2(DelQ[0]));
112  deltaP = sqrt(norm2(DelP[0]));
113  for(int mu=1; mu < Nd; mu++) {
114  deltaQ += sqrt(norm2(DelQ[mu]));
115  deltaP += sqrt(norm2(DelP[mu]));
116  }
117 
118  deltaQ /= Double(Nd*Layout::vol());
119  deltaP /= Double(Nd*Layout::vol());
120 
121 
122  }
123 
124  };
125 }
126 
127 #endif
Abstract Hamiltonian.
Abstract HMC trajectory Using the new structure.
Integrators.
Primary include file for CHROMA library code.
Abstract field state.
Definition: field_state.h:27
Abstract HMC trajectory.
Definition: abs_hmc.h:25
New Abstract Hamiltonian.
New MD integrator interface.
void flipMomenta(AbsFieldState< multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > &s) const
Definition: const_lcm_hmc.h:91
ConstLatColMatHMCTrj(Handle< AbsHamiltonian< multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > > &_H_MC, Handle< AbsMDIntegrator< multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > > &_MD_int)
Definition: const_lcm_hmc.h:37
void refreshP(AbsFieldState< multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > &s) const
Definition: const_lcm_hmc.h:60
void reverseCheckMetrics(Double &deltaQ, Double &deltaP, const AbsFieldState< multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > &s, const AbsFieldState< multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > &s_old) const
Definition: const_lcm_hmc.h:99
Handle< AbsHamiltonian< multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > > the_H_MC
Definition: const_lcm_hmc.h:44
Handle< AbsMDIntegrator< multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > > the_MD
Definition: const_lcm_hmc.h:42
AbsMDIntegrator< multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > & getMDIntegrator(void)
Definition: const_lcm_hmc.h:51
bool acceptReject(const Double &DeltaH) const
Definition: const_lcm_hmc.h:55
AbsHamiltonian< multi1d< LatticeColorMatrix >, multi1d< LatticeColorMatrix > > & getMCHamiltonian(void)
Definition: const_lcm_hmc.h:47
Class for counted reference semantics.
Definition: handle.h:33
int mu
Definition: cool.cc:24
Field state.
Global metropolis.
void taproj(LatticeColorMatrix &a)
Take the traceless antihermitian projection of a color matrix.
Definition: taproj.cc:31
bool globalMetropolisAcceptReject(const Double &DeltaH)
Class for counted reference semantics.
Nd
Definition: meslate.cc:74
multi1d< LatticeColorMatrix > P
Asqtad Staggered-Dirac operator.
Definition: klein_gord.cc:10
gaussian(aux)
START_CODE()
multi1d< LatticeFermion > s(Ncb)
FloatingPoint< double > Double
Definition: gtest.h:7351
Double sum
Definition: qtopcor.cc:37
multi1d< LatticeColorMatrix > P
Definition: t_clover.cc:13
Take the traceless antihermitian projection of a color matrix.