Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
hmc_Leapfrog.h
Go to the documentation of this file.
1 
14 #ifndef HMC_LEAPFROG_INCLUDED
15 #define HMC_LEAPFROG_INCLUDED
16 
17 #include "action.h"
18 #include "director.h"
19 #include "integrator.h"
20 #include "randomNumbers.h"
21 #include "staples.h"
22 
23 #include "bridgeIO.h"
24 using Bridge::vout;
25 
27 
39 //- parameters class
40 class Parameters_HMC_Leapfrog : virtual public Parameters
41 {
42  public:
44 };
45 //- end
46 
48 {
49  private:
50  int m_Nmdc;
51  int m_Nprec;
53  double m_Estep;
54 
56 
57  std::valarray<Action *> m_action;
58  std::valarray<Director *> m_director;
61 
62  public:
63  HMC_Leapfrog(std::valarray<Action *> action,
64  RandomNumbers *rand)
65  : m_vl(CommonParameters::Vlevel())
66  {
67  m_action.resize(action.size());
68  for (int i = 0; i < action.size(); ++i) {
69  m_action[i] = action[i];
70  }
71  m_staple = new Staples;
72  m_rand = rand;
73  m_Estep = 0.0;
74  m_Nmdc = 0;
75  m_Nprec = 0;
76  m_Mtpl_test = 0;
77  }
78 
79  HMC_Leapfrog(std::valarray<Action *> action,
80  std::valarray<Director *> director,
81  RandomNumbers *rand)
82  : m_vl(CommonParameters::Vlevel())
83  {
84  m_action.resize(action.size());
85  for (int i = 0; i < action.size(); ++i) {
86  m_action[i] = action[i];
87  }
88  m_director.resize(director.size());
89  for (int i = 0; i < director.size(); ++i) {
90  m_director[i] = director[i];
91  }
92  m_staple = new Staples;
93  m_rand = rand;
94  m_Estep = 0.0;
95  m_Nmdc = 0;
96  m_Nprec = 0;
97  m_Mtpl_test = 0;
98  }
99 
101  {
102  delete m_staple;
103  }
104 
105  void set_parameters(const Parameters& params);
106  void set_parameters(double Estep, int Nmdc, int Nprec, int Mtpl_test);
107 
109 
110  // Mtpl_test=0: no test, !=0: test
111  double update(Field_G&);
112 
113  double langevin(Field_G& iP, Field_G& U);
114  double langevin_P(Field_G& iP);
115 
116  double calc_Hamiltonian(Field_G& iP, Field_G& U);
117  double calcH_P(Field_G& iP);
118 
119  void integrate(Field_G& iP, Field_G& U);
120 
121  void update_U(double estep, Field_G& iP, Field_G& U);
122  void update_P(double estep, Field_G& iP, Field_G& U);
123 };
124 #endif