Bridge++  Version 1.4.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fopr.h
Go to the documentation of this file.
1 
15 #ifndef FOPR_INCLUDED
16 #define FOPR_INCLUDED
17 
18 #include "Field/field_F.h"
19 #include "Parameters/parameters.h"
20 
21 #include "IO/bridgeIO.h"
22 using Bridge::vout;
23 
24 #ifdef USE_FACTORY
25 #include "Tools/factory.h"
26 #include "Tools/director.h"
27 #endif
28 
29 
31 
47 class Fopr
48 {
49  public:
50 
51  Fopr()
52  : m_vl(CommonParameters::Vlevel()) {}
53 
54  virtual ~Fopr() {}
55 
56  private:
57  // non-copyable
58  Fopr(const Fopr&);
59  Fopr& operator=(const Fopr&);
60 
61  public:
62  virtual void set_parameters(const Parameters&) = 0;
63 
65 
67  virtual void set_config(Field *) = 0;
68  virtual void set_config(unique_ptr<Field_G>&) = 0;
69 
71  // and set the resultant field to the 1st argument.
72  virtual void mult(Field&, const Field&) = 0;
73 
75  virtual void mult_dag(Field&, const Field&) {}
76 
78  virtual void mult(Field&, const Field&, const std::string mode) {}
79 
81  virtual void mult_dag(Field&, const Field&, const std::string mode) {}
82 
84  virtual void mult_gm5(Field&, const Field&)
85  {
86  vout.crucial(m_vl, "Fopr: mult_gm5 not implemented.\n");
87  exit(EXIT_FAILURE);
88  }
89 
91  virtual void mult_up(int mu, Field&, const Field&) {}
92  virtual void mult_dn(int mu, Field&, const Field&) {}
93 
96  virtual void set_mode(std::string mode)
97  {
98  vout.general(m_vl, "Fopr: set_mode not implemented.\n");
99  }
100 
102  // virtual void set_lowmodes(int Nsbt, std::vector<double> *ev,
103  // std::vector<Field> *vk);
104 
105  virtual std::string get_mode() const
106  {
107  vout.general(m_vl, "Fopr: get_mode not implemented.\n");
108  return std::string();
109  }
110 
112  virtual int field_nvol() = 0;
113 
115  virtual int field_nin() = 0;
116 
118  virtual int field_nex() = 0;
119 
121  virtual double flop_count() { return 0.0; }
122 
124  virtual double flop_count(const std::string mode)
125  { return 0.0; }
126 
127  protected:
129 
130 
131 #ifdef USE_FACTORY
132  public:
133  typedef Fopr *(*ProductCreator_noarg)();
134  typedef Fopr *(*ProductCreator_fopr)(Fopr *fopr);
135  typedef Fopr *(*ProductCreator_fopr_director)(Fopr *fopr, Director *director);
136  typedef Fopr *(*ProductCreator_string)(const std::string& arg);
137 
138  typedef FactoryTemplate<Fopr, ProductCreator_noarg> Factory_noarg;
139  typedef FactoryTemplate<Fopr, ProductCreator_fopr> Factory_fopr;
140  typedef FactoryTemplate<Fopr, ProductCreator_fopr_director> Factory_fopr_director;
141  typedef FactoryTemplate<Fopr, ProductCreator_string> Factory_string;
142 
143  static Fopr *New(const IdentifierType& subtype)
144  {
145  ProductCreator_noarg p = Factory_noarg::Find(subtype);
146 
147  return p ? (*p)() : 0;
148  }
149 
150  static Fopr *New(const IdentifierType& subtype, Fopr *fopr)
151  {
152  ProductCreator_fopr p = Factory_fopr::Find(subtype);
153 
154  return p ? (*p)(fopr) : 0;
155  }
156 
157  static Fopr *New(const IdentifierType& subtype, unique_ptr<Fopr>& fopr)
158  {
159  ProductCreator_fopr p = Factory_fopr::Find(subtype);
160 
161  return p ? (*p)(fopr.get()) : 0;
162  }
163 
164  static Fopr *New(const IdentifierType& subtype, Fopr *fopr, Director *director)
165  {
166  ProductCreator_fopr_director p = Factory_fopr_director::Find(subtype);
167 
168  return p ? (*p)(fopr, director) : 0;
169  }
170 
171  static Fopr *New(const IdentifierType& subtype, unique_ptr<Fopr>& fopr, unique_ptr<Director>& director)
172  {
173  ProductCreator_fopr_director p = Factory_fopr_director::Find(subtype);
174 
175  return p ? (*p)(fopr.get(), director.get()) : 0;
176  }
177 
178  static Fopr *New(const IdentifierType& subtype, const std::string& arg)
179  {
180  ProductCreator_string p = Factory_string::Find(subtype);
181 
182  return p ? (*p)(arg) : 0;
183  }
184 #endif
185 };
186 #endif
BridgeIO vout
Definition: bridgeIO.cpp:495
void general(const char *format,...)
Definition: bridgeIO.cpp:195
virtual void set_config(Field *)=0
setting pointer to the gauge configuration.
Container of Field-type object.
Definition: field.h:39
virtual void mult_gm5(Field &, const Field &)
gamma_5 multiplication. [31 Mar 2017 H.Matsufuru]
Definition: fopr.h:84
void set_parameter_verboselevel(const Bridge::VerboseLevel vl)
Definition: fopr.h:64
Class for parameters.
Definition: parameters.h:46
virtual void mult_dag(Field &, const Field &, const std::string mode)
execute mult_dag with specified mode (unchanging internal mode). [23 May 2016 H.Matsufuru].
Definition: fopr.h:81
virtual void mult_dn(int mu, Field &, const Field &)
Definition: fopr.h:92
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:51
virtual void mult(Field &, const Field &, const std::string mode)
execute mult with specified mode (unchanging internal mode). [23 May 2016 H.Matsufuru].
Definition: fopr.h:78
Bridge::VerboseLevel m_vl
Definition: fopr.h:128
virtual double flop_count()
returns the flops per site.
Definition: fopr.h:121
virtual std::string get_mode() const
only for Fopr_Overlap
Definition: fopr.h:105
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:91
virtual double flop_count(const std::string mode)
returns the flops per site for specified mode. [23 May 2016 H.Matsufuru]
Definition: fopr.h:124
Fopr & operator=(const Fopr &)
void crucial(const char *format,...)
Definition: bridgeIO.cpp:178
virtual ~Fopr()
Definition: fopr.h:54
Bridge::VerboseLevel vl
Definition: checker.cpp:18
VerboseLevel
Definition: bridgeIO.h:42
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:96
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:75
Base class of fermion operator family.
Definition: fopr.h:47
virtual int field_nvol()=0
returns the volume for which the fermion operator is defined.