Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fopr_CRS.h
Go to the documentation of this file.
1 
15 #ifndef FOPR_CRS_INCLUDED
16 #define FOPR_CRS_INCLUDED
17 
18 #include <valarray>
19 #include <string>
20 
21 #include "fopr.h"
22 
23 #include "bridgeIO.h"
24 using Bridge::vout;
25 
27 
38 class Fopr_CRS : public Fopr
39 {
40  public:
41  static const std::string class_name;
42 
43  private:
45  int m_Nsize, m_Nnz;
46  std::valarray<int> m_rowidx_nz;
47  std::valarray<int> m_column_nz;
48  std::valarray<double> m_elem_nz;
49  std::string m_mode;
51 
52  public:
53 
54  Fopr_CRS(Fopr *fopr)
55  : Fopr(), m_fopr(fopr)
56  {
57  set_matrix();
58  }
59 
60  Fopr_CRS(std::string fname)
61  : Fopr(), m_fopr(0)
62  {
63  set_matrix(fname);
64  }
65 
66  void set_parameters(const Parameters&);
67 
68  void write_matrix(std::string);
69 
70  void set_config(Field *U)
71  {
72  if (m_fopr == 0) {
73  vout.crucial(m_vl, "%s: fopr is not set.\n", class_name.c_str());
74  abort();
75  } else {
76  m_fopr->set_config(U);
77  }
78  }
79 
80  void set_mode(std::string mode)
81  {
82  m_mode = mode;
83  }
84 
85  std::string get_mode() const
86  {
87  return m_mode;
88  }
89 
90  const Field mult(const Field& f)
91  {
92  Field v(f.nin(), f.nvol(), f.nex());
93 
94  mult(v, f);
95  return v;
96  }
97 
98  const Field mult_dag(const Field& f)
99  {
100  Field v(f.nin(), f.nvol(), f.nex());
101 
102  mult_dag(v, f);
103  return v;
104  }
105 
106  void mult(Field& v, const Field& f)
107  {
108  if (m_mode == "D") {
109  D(v, f);
110  } else if (m_mode == "DdagD") {
111  DdagD(v, f);
112  } else if (m_mode == "Ddag") {
113  Ddag(v, f);
114  } else {
115  vout.crucial(m_vl, "%s: mode undefined.\n", class_name.c_str());
116  abort();
117  }
118  }
119 
120  void mult_dag(Field& v, const Field& f)
121  {
122  if (m_mode == "D") {
123  Ddag(v, f);
124  } else if (m_mode == "DdagD") {
125  DdagD(v, f);
126  } else if (m_mode == "Ddag") {
127  D(v, f);
128  } else {
129  vout.crucial(m_vl, "%s: mode undefined.\n", class_name.c_str());
130  abort();
131  }
132  }
133 
134  void DdagD(Field&, const Field&);
135  void D(Field&, const Field&);
136  void Ddag(Field&, const Field&);
137  void H(Field&, const Field&);
138 
139  int field_nvol() { return m_Nvol; }
140  int field_nin() { return m_Nin; }
141  int field_nex() { return m_Nex; }
142 
143  private:
144  void set_matrix();
145  void set_matrix(std::string);
146 
147  void set_matrix_1row(int&, std::valarray<int>&,
148  std::valarray<double>&, Field&);
149 };
150 #endif
const Field mult_dag(const Field &f)
hermitian conjugate of mult(const Field&amp;).
Definition: fopr_CRS.h:98
int m_Nin
Definition: fopr_CRS.h:44
int m_Nsize
Definition: fopr_CRS.h:45
BridgeIO vout
Definition: bridgeIO.cpp:207
int m_Nvol
Definition: fopr_CRS.h:44
Fopr_CRS(std::string fname)
Definition: fopr_CRS.h:60
virtual void set_config(Field *)=0
setting pointer to the gauge configuration.
Container of Field-type object.
Definition: field.h:37
int nvol() const
Definition: field.h:101
void Ddag(Field &, const Field &)
Definition: fopr_CRS.cpp:76
void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
Definition: fopr_CRS.h:80
Class for parameters.
Definition: parameters.h:40
std::string get_mode() const
Definition: fopr_CRS.h:85
std::valarray< int > m_column_nz
Definition: fopr_CRS.h:47
int m_Nex
Definition: fopr_CRS.h:44
std::valarray< int > m_rowidx_nz
Definition: fopr_CRS.h:46
int nin() const
Definition: field.h:100
int field_nex()
returns the external d.o.f. for which the fermion operator is defined.
Definition: fopr_CRS.h:141
std::string m_mode
Definition: fopr_CRS.h:49
int m_Nnz
Definition: fopr_CRS.h:45
Bridge::VerboseLevel m_vl
Definition: fopr.h:99
void write_matrix(std::string)
Definition: fopr_CRS.cpp:260
Fopr_CRS(Fopr *fopr)
Definition: fopr_CRS.h:54
void H(Field &, const Field &)
int field_nvol()
returns the volume for which the fermion operator is defined.
Definition: fopr_CRS.h:139
int nex() const
Definition: field.h:102
void set_matrix()
Definition: fopr_CRS.cpp:109
void set_parameters(const Parameters &)
Definition: fopr_CRS.cpp:25
static const std::string class_name
Definition: fopr_CRS.h:41
void crucial(const char *format,...)
Definition: bridgeIO.cpp:26
void DdagD(Field &, const Field &)
Definition: fopr_CRS.cpp:34
std::valarray< double > m_elem_nz
Definition: fopr_CRS.h:48
void set_matrix_1row(int &, std::valarray< int > &, std::valarray< double > &, Field &)
Definition: fopr_CRS.cpp:192
void set_config(Field *U)
setting pointer to the gauge configuration.
Definition: fopr_CRS.h:70
void D(Field &, const Field &)
Definition: fopr_CRS.cpp:44
Base class of fermion operator family.
Definition: fopr.h:39
void mult(Field &v, const Field &f)
multiplies fermion operator to a given field (2nd argument)
Definition: fopr_CRS.h:106
const Field mult(const Field &f)
multiplies fermion operator to a given field and returns the resultant field.
Definition: fopr_CRS.h:90
Fermion operator with CRS matrix format.
Definition: fopr_CRS.h:38
void mult_dag(Field &v, const Field &f)
hermitian conjugate of mult(Field&amp;, const Field&amp;).
Definition: fopr_CRS.h:120
int field_nin()
returns the on-site d.o.f. for which the fermion operator is defined.
Definition: fopr_CRS.h:140
Fopr * m_fopr
Definition: fopr_CRS.h:50