Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fopr_TMWilson.cpp
Go to the documentation of this file.
1 
14 #include "fopr_TMWilson.h"
15 
16 #ifdef USE_PARAMETERS_FACTORY
17 #include "parameters_factory.h"
18 #endif
19 
20 using std::valarray;
21 
22 //- parameter entries
23 namespace {
24  void append_entry(Parameters& param)
25  {
26  param.Register_string("gamma_matrix_type", "NULL");
27 
28  param.Register_double("hopping_parameter", 0.0);
29  param.Register_double("twisted_mass", 0.0);
30  param.Register_int_vector("boundary_condition", std::valarray<int>());
31 
32  param.Register_string("verbose_level", "NULL");
33  }
34 
35 
36 #ifdef USE_PARAMETERS_FACTORY
37  bool init_param = ParametersFactory::Register("Fopr.TMWilson", append_entry);
38 #endif
39 }
40 //- end
41 
42 //- parameters class
44 //- end
45 
46 //====================================================================
48 {
49  const string str_vlevel = params.get_string("verbose_level");
50 
51  m_vl = vout.set_verbose_level(str_vlevel);
52 
53  //- fetch and check input parameters
54  double kappa, tw_mass;
55  valarray<int> bc;
56 
57  int err = 0;
58  err += params.fetch_double("hopping_parameter", kappa);
59  err += params.fetch_double("twisted_mass", tw_mass);
60  err += params.fetch_int_vector("boundary_condition", bc);
61 
62  if (err) {
63  vout.crucial(m_vl, "Fopr_TMWilson: fetch error, input parameter not found.\n");
64  abort();
65  }
66 
67 
68  set_parameters(kappa, tw_mass, bc);
69 }
70 
71 
72 //====================================================================
73 void Fopr_TMWilson::set_parameters(double kappa, double tw_mass,
74  std::valarray<int> bc)
75 {
76  //- print input parameters
77  vout.general(m_vl, "Parameters of twisted mass fermion operator:\n");
78  vout.general(m_vl, " kappa = %8.4f\n", kappa);
79  vout.general(m_vl, " tw_mass = %8.4f\n", tw_mass);
80  for (int mu = 0; mu < m_Ndim; ++mu) {
81  vout.general(m_vl, " boundary[%d] = %2d\n", mu, bc[mu]);
82  }
83 
84  //- range check
85  // NB. kappa,tw_mass = 0 is allowed.
86  assert(bc.size() == m_Ndim);
87 
88  //- store values
89  m_kappa = kappa;
90  m_tw_mass = tw_mass;
91 
92  m_boundary.resize(m_Ndim);
93  for (int mu = 0; mu < m_Ndim; ++mu) {
94  m_boundary[mu] = bc[mu];
95  }
96 
97  //- propagate parameters
99 }
100 
101 
102 //====================================================================
103 void Fopr_TMWilson::D(Field& v, const Field& f)
104 {
105  Field_F w2(f.nvol(), f.nex());
106 
107  m_fopr_w->D(v, f);
108  m_fopr_w->mult_gm5(w2, f);
109  w2.xI();
110  double tm_2K = 2.0 * m_kappa * m_tw_mass;
111  v += tm_2K * (Field)w2;
112 }
113 
114 
115 //====================================================================
116 void Fopr_TMWilson::Ddag(Field& v, const Field& f)
117 {
118  Field_F w2(f.nvol(), f.nex());
119 
120  m_fopr_w->Ddag(v, f);
121  m_fopr_w->mult_gm5(w2, f);
122  w2.xI();
123  double tm_2K = 2.0 * m_kappa * m_tw_mass;
124  v -= tm_2K * (Field)w2;
125 }
126 
127 
128 //====================================================================
129 void Fopr_TMWilson::H(Field& v, const Field& f)
130 {
131  Field_F w2(f.nvol(), f.nex());
132 
133  m_fopr_w->H(v, f);
134  w2.Ix(f);
135  double tm_2K = 2.0 * m_kappa * m_tw_mass;
136  v += tm_2K * (Field)w2;
137 }
138 
139 
140 //====================================================================
141 void Fopr_TMWilson::Hdag(Field& v, const Field& f)
142 {
143  Field_F w2(f.nvol(), f.nex());
144 
145  m_fopr_w->H(v, f);
146  w2.Ix(f);
147  double tm_2K = 2.0 * m_kappa * m_tw_mass;
148  v -= tm_2K * (Field)w2;
149 }
150 
151 
152 //====================================================================
153 void Fopr_TMWilson::DdagD(Field& v, const Field& f)
154 {
155  m_fopr_w->DdagD(v, f);
156  double tm_2K = 2.0 * m_kappa * m_tw_mass;
157  v += (tm_2K * tm_2K) * f;
158 }
159 
160 
161 //====================================================================
162 //============================================================END=====