Bridge++  Ver.2.1.3
afopr_OptimalDomainwall-tmpl.h
Go to the documentation of this file.
1 
11 
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <assert.h>
15 #include <vector>
16 using namespace std;
17 
20 #include "lib/Tools/math_Sign_Zolotarev_Omega.h"
21 
22 //#include "Field/afield.h"
23 //#include "Field/afield-inc.h"
24 
25 
26 template<typename AFIELD>
28  = "AFopr_OptimalDomainwall";
29 //====================================================================
30 template<typename AFIELD>
32 {
33  vout.general(m_vl, "Initialization of %s:\n", class_name.c_str());
34 
35  int Nc = CommonParameters::Nc();
36  int Nd = CommonParameters::Nd();
37  m_NinF = 2 * Nc * Nd;
38 
39  m_Nvol = CommonParameters::Nvol();
40  m_Ndim = CommonParameters::Ndim();
41 
42  m_foprdw = new AFopr_Domainwall_General<AFIELD>(params);
43 
44  set_parameters(params);
45 
46 }
47 
48 //====================================================================
49 template<typename AFIELD>
51 {
52  delete m_foprdw;
53 }
54 
55 //====================================================================
56 template<typename AFIELD>
58  const Parameters& params)
59 {
60  const string str_vlevel = params.get_string("verbose_level");
61 
62  m_vl = vout.set_verbose_level(str_vlevel);
63 
64  //- fetch and check input parameters
65  string str_gmset_type;
66  double mq, M0;
67  int Ns;
68  std::vector<int> bc;
69  double b, c;
70  double lambda_min, lambda_max;
71 
72  int err_optional = 0;
73  err_optional += params.fetch_string("gamma_matrix_type", str_gmset_type);
74  int err = 0;
75  err += params.fetch_double("quark_mass", mq);
76  err += params.fetch_double("domain_wall_height", M0);
77  err += params.fetch_int("extent_of_5th_dimension", Ns);
78  err += params.fetch_int_vector("boundary_condition", bc);
79  err += params.fetch_double("coefficient_b", b);
80  err += params.fetch_double("coefficient_c", c);
81  err += params.fetch_double("lower_bound", lambda_min);
82  err += params.fetch_double("upper_bound", lambda_max);
83 
84  if (err) {
85  vout.crucial(m_vl, "Error at %s: input parameter not found.\n",
86  class_name.c_str());
87  exit(EXIT_FAILURE);
88  }
89 
90  set_parameters(mq, M0, Ns, bc, b, c, lambda_min, lambda_max);
91 
92 }
93 
94 //====================================================================
95 template<typename AFIELD>
97  const double mq,
98  const double M0,
99  const int Ns,
100  const vector<int> bc,
101  const double b,
102  const double c,
103  const double lambda_min,
104  const double lambda_max)
105 {
106 
107  m_M0 = M0;
108  m_mq = mq;
109  m_Ns = Ns;
110 
111  m_boundary.resize(m_Ndim);
112  assert(bc.size() == m_Ndim);
113  for(int mu = 0; mu < m_Ndim; ++mu){
114  m_boundary[mu] = bc[mu];
115  }
116 
117  vout.general(m_vl, "Parameters specific to %s:\n", class_name.c_str());
118  vout.general(m_vl, " coefficient_b = %8.4f\n", b);
119  vout.general(m_vl, " coefficient_c = %8.4f\n", c);
120  vout.general(m_vl, " lower_bound = %12.8f\n", lambda_min);
121  vout.general(m_vl, " upper_bound = %12.8f\n", lambda_max);
122 
123  m_b.resize(m_Ns);
124  m_c.resize(m_Ns);
125  set_optimalDomainwall(b, c, lambda_min, lambda_max);
126 
127  m_foprdw->set_coefficients(m_b, m_c);
128 
129 }
130 
131 //====================================================================
132 template<typename AFIELD>
134  const double b,
135  const double c,
136  const double lambda_min,
137  const double lambda_max)
138 {
139  vector<double> omega(m_Ns);
140  double bmax = lambda_max/lambda_min;
141  double delta;
142 
143  Math_Sign_Zolotarev_Omega sign_func(m_Ns, bmax);
144  sign_func.get_sign_prms(omega, delta);
145 
146  for(int is = 0; is < m_Ns; ++is){
147  omega[is] = omega[is]/lambda_min;
148  }
149 
150  for(int k = 0; k < m_Ns; ++k){
151  vout.general(m_vl, " %2d %20.14f\n", k, omega[k]);
152  }
153  vout.general(" max deviation from 1 = %20.14f\n",delta);
154 
155  for(int is = 0; is < m_Ns; ++is){
156  m_b[is] = 0.5 * (b * omega[is] + c);
157  m_c[is] = 0.5 * (b * omega[is] - c);
158  }
159 
160 }
161 
163 {
164 #pragma omp barrier
165  int ith = ThreadManager::get_thread_id();
166  if(ith == 0) m_mode = mode;
167  m_foprdw->set_mode(mode);
168 #pragma omp barrier // redundant as the set_mode above has barriers
169 
170 }
171 
172 //============================================================END=====
CommonParameters::Ndim
static int Ndim()
Definition: commonParameters.h:117
Parameters
Class for parameters.
Definition: parameters.h:46
CommonParameters::Nvol
static int Nvol()
Definition: commonParameters.h:109
AFopr_OptimalDomainwall::init
void init(const Parameters &params)
initial setup.
Definition: afopr_OptimalDomainwall-tmpl.h:31
AFopr_OptimalDomainwall::set_mode
void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
Definition: afopr_OptimalDomainwall-tmpl.h:162
AFopr_OptimalDomainwall
Alternative version of the Optimal Domain-wall fermion operator.
Definition: afopr_OptimalDomainwall.h:32
CommonParameters::Nc
static int Nc()
Definition: commonParameters.h:115
Parameters::fetch_int_vector
int fetch_int_vector(const string &key, vector< int > &value) const
Definition: parameters.cpp:429
AFopr_OptimalDomainwall::set_optimalDomainwall
void set_optimalDomainwall(const double b, const double c, const double lambda_min, const double lambda_max)
Definition: afopr_OptimalDomainwall-tmpl.h:133
afopr_OptimalDomainwall.h
AFopr_OptimalDomainwall::set_parameters
void set_parameters(const Parameters &params)
sets parameters by a Parameter object: to be implemented in a subclass.
Definition: afopr_OptimalDomainwall-tmpl.h:57
CommonParameters::Nd
static int Nd()
Definition: commonParameters.h:116
AFopr_OptimalDomainwall::tidyup
void tidyup()
final tidyup.
Definition: afopr_OptimalDomainwall-tmpl.h:50
Bridge::BridgeIO::set_verbose_level
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:195
Parameters::fetch_string
int fetch_string(const string &key, string &value) const
Definition: parameters.cpp:378
Parameters::fetch_double
int fetch_double(const string &key, double &value) const
Definition: parameters.cpp:327
commonParameters.h
Parameters::get_string
string get_string(const string &key) const
Definition: parameters.cpp:221
Bridge::BridgeIO::crucial
void crucial(const char *format,...)
Definition: bridgeIO.cpp:242
communicator.h
ThreadManager::get_thread_id
static int get_thread_id()
returns thread id.
Definition: threadManager.cpp:253
Parameters::fetch_int
int fetch_int(const string &key, int &value) const
Definition: parameters.cpp:346
Bridge::BridgeIO::general
void general(const char *format,...)
Definition: bridgeIO.cpp:262
Bridge::vout
BridgeIO vout
Definition: bridgeIO.cpp:572