Bridge++  Ver. 1.3.x
fopr.h
Go to the documentation of this file.
1 
15 #ifndef FOPR_INCLUDED
16 #define FOPR_INCLUDED
17 
18 #include "field_F.h"
19 #include "parameters.h"
20 
21 #include "bridgeIO.h"
22 using Bridge::vout;
23 
24 #ifdef USE_FACTORY
25 #include "factory.h"
26 #include "director.h"
27 #endif
28 
29 #ifdef USE_PARAMETERS_FACTORY
30 #include "parameters_factory.h"
31 #endif
32 
34 
49 class Fopr
50 {
51  public:
52 
53  Fopr()
54  : m_vl(CommonParameters::Vlevel()) {}
55 
56  virtual ~Fopr() {}
57 
58  private:
59  // non-copyable
60  Fopr(const Fopr&);
61  Fopr& operator=(const Fopr&);
62 
63  public:
64  virtual void set_parameters(const Parameters&) = 0;
65 
67 
69  virtual void set_config(Field *) = 0;
70  virtual void set_config(unique_ptr<Field_G>&) = 0;
71 
73  // and set the resultant field to the 1st argument.
74  virtual void mult(Field&, const Field&) = 0;
75 
77  virtual void mult_dag(Field&, const Field&) {}
78 
80  virtual void mult_up(int mu, Field&, const Field&) {}
81  virtual void mult_dn(int mu, Field&, const Field&) {}
82 
85  virtual void set_mode(std::string mode)
86  {
87  vout.general(m_vl, "Fopr: set_mode not implemented.\n");
88  }
89 
91  // virtual void set_lowmodes(int Nsbt, std::vector<double> *ev,
92  // std::vector<Field> *vk);
93 
94  virtual std::string get_mode() const
95  {
96  vout.general(m_vl, "Fopr: get_mode not implemented.\n");
97  return std::string();
98  }
99 
101  virtual int field_nvol() = 0;
102 
104  virtual int field_nin() = 0;
105 
107  virtual int field_nex() = 0;
108 
110  virtual double flop_count() { return 0.0; }
111 
112  protected:
114 
115 
116 #ifdef USE_FACTORY
117  public:
118  typedef Fopr *(*ProductCreator_noarg)();
119  typedef Fopr *(*ProductCreator_fopr)(Fopr *fopr);
120  typedef Fopr *(*ProductCreator_fopr_director)(Fopr *fopr, Director *director);
121  typedef Fopr *(*ProductCreator_string)(const std::string& arg);
122 
123  typedef FactoryTemplate<Fopr, ProductCreator_noarg> Factory_noarg;
124  typedef FactoryTemplate<Fopr, ProductCreator_fopr> Factory_fopr;
125  typedef FactoryTemplate<Fopr, ProductCreator_fopr_director> Factory_fopr_director;
126  typedef FactoryTemplate<Fopr, ProductCreator_string> Factory_string;
127 
128  static Fopr *New(const IdentifierType& subtype)
129  {
130  ProductCreator_noarg p = Factory_noarg::Find(subtype);
131 
132  return p ? (*p)() : 0;
133  }
134 
135  static Fopr *New(const IdentifierType& subtype, Fopr *fopr)
136  {
137  ProductCreator_fopr p = Factory_fopr::Find(subtype);
138 
139  return p ? (*p)(fopr) : 0;
140  }
141 
142  static Fopr *New(const IdentifierType& subtype, unique_ptr<Fopr>& fopr)
143  {
144  ProductCreator_fopr p = Factory_fopr::Find(subtype);
145 
146  return p ? (*p)(fopr.get()) : 0;
147  }
148 
149  static Fopr *New(const IdentifierType& subtype, Fopr *fopr, Director *director)
150  {
151  ProductCreator_fopr_director p = Factory_fopr_director::Find(subtype);
152 
153  return p ? (*p)(fopr, director) : 0;
154  }
155 
156  static Fopr *New(const IdentifierType& subtype, unique_ptr<Fopr>& fopr, unique_ptr<Director>& director)
157  {
158  ProductCreator_fopr_director p = Factory_fopr_director::Find(subtype);
159 
160  return p ? (*p)(fopr.get(), director.get()) : 0;
161  }
162 
163  static Fopr *New(const IdentifierType& subtype, const std::string& arg)
164  {
165  ProductCreator_string p = Factory_string::Find(subtype);
166 
167  return p ? (*p)(arg) : 0;
168  }
169 #endif
170 };
171 #endif
BridgeIO vout
Definition: bridgeIO.cpp:278
void general(const char *format,...)
Definition: bridgeIO.cpp:65
virtual void set_config(Field *)=0
setting pointer to the gauge configuration.
Container of Field-type object.
Definition: field.h:39
void set_parameter_verboselevel(const Bridge::VerboseLevel vl)
Definition: fopr.h:66
Class for parameters.
Definition: parameters.h:38
virtual void mult_dn(int mu, Field &, const Field &)
Definition: fopr.h:81
virtual int field_nin()=0
returns the on-site d.o.f. for which the fermion operator is defined.
Manager of commonly used data object in HMC.
Definition: director.h:37
Fopr()
Definition: fopr.h:53
Bridge::VerboseLevel m_vl
Definition: fopr.h:113
virtual double flop_count()
returns the flops per site.
Definition: fopr.h:110
virtual std::string get_mode() const
only for Fopr_Overlap
Definition: fopr.h:94
pointer get() const
virtual int field_nex()=0
returns the external d.o.f. for which the fermion operator is defined.
Common parameter class: provides parameters as singleton.
virtual void set_parameters(const Parameters &)=0
virtual void mult_up(int mu, Field &, const Field &)
nearest neighbor hopping term: temporary entry [H.Matsufuru]
Definition: fopr.h:80
Fopr & operator=(const Fopr &)
virtual ~Fopr()
Definition: fopr.h:56
Bridge::VerboseLevel vl
Definition: checker.cpp:18
VerboseLevel
Definition: bridgeIO.h:39
virtual void mult(Field &, const Field &)=0
multiplies fermion operator to a given field (2nd argument)
virtual void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
Definition: fopr.h:85
std::string IdentifierType
Factory template class.
Definition: factory.h:33
virtual void mult_dag(Field &, const Field &)
hermitian conjugate of mult(Field&, const Field&).
Definition: fopr.h:77
Base class of fermion operator family.
Definition: fopr.h:49
virtual int field_nvol()=0
returns the volume for which the fermion operator is defined.