Bridge++
Ver. 1.1.x
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
fopr_Overlap.cpp
Go to the documentation of this file.
1
14
#include "
fopr_Overlap.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_double
(
"quark_mass"
, 0.0);
27
param.
Register_double
(
"domain_wall_height"
, 0.0);
28
param.
Register_int
(
"number_of_poles"
, 0);
29
param.
Register_double
(
"lower_bound"
, 0.0);
30
param.
Register_double
(
"upper_bound"
, 0.0);
31
param.
Register_int
(
"maximum_number_of_iteration"
, 0);
32
param.
Register_double
(
"convergence_criterion_squared"
, 0.0);
33
param.
Register_int_vector
(
"boundary_condition"
, std::valarray<int>());
34
35
param.
Register_string
(
"verbose_level"
,
"NULL"
);
36
}
37
38
39
#ifdef USE_PARAMETERS_FACTORY
40
bool
init_param =
ParametersFactory::Register
(
"Fopr.Overlap"
, append_entry);
41
#endif
42
}
43
//- end
44
45
//- parameters class
46
Parameters_Fopr_Overlap::Parameters_Fopr_Overlap
() { append_entry(*
this
); }
47
//- end
48
49
//====================================================================
50
void
Fopr_Overlap::set_parameters
(
const
Parameters
& params)
51
{
52
const
string
str_vlevel = params.
get_string
(
"verbose_level"
);
53
54
m_vl
=
vout
.
set_verbose_level
(str_vlevel);
55
56
//- fetch and check input parameters
57
double
mq, M0;
58
int
Np;
59
double
x_min, x_max;
60
int
Niter;
61
double
Stop_cond;
62
valarray<int> bc;
63
64
int
err = 0;
65
err += params.
fetch_double
(
"quark_mass"
, mq);
66
err += params.
fetch_double
(
"domain_wall_height"
, M0);
67
err += params.
fetch_int
(
"number_of_poles"
, Np);
68
err += params.
fetch_double
(
"lower_bound"
, x_min);
69
err += params.
fetch_double
(
"upper_bound"
, x_max);
70
err += params.
fetch_int
(
"maximum_number_of_iteration"
, Niter);
71
err += params.
fetch_double
(
"convergence_criterion_squared"
, Stop_cond);
72
err += params.
fetch_int_vector
(
"boundary_condition"
, bc);
73
74
if
(err) {
75
vout
.
crucial
(
m_vl
,
"Fopr_Overlap: fetch error, input parameter not found.\n"
);
76
abort();
77
}
78
79
80
set_parameters
(mq, M0, Np, x_min, x_max, Niter, Stop_cond, bc);
81
}
82
83
84
//====================================================================
85
void
Fopr_Overlap::set_parameters
(
const
double
mq,
const
double
M0,
const
int
Np,
86
const
double
x_min,
const
double
x_max,
87
const
int
Niter,
const
double
Stop_cond,
88
const
std::valarray<int> bc)
89
{
90
int
Ndim =
CommonParameters::Ndim
();
91
92
//- print input parameters
93
vout
.
general
(
m_vl
,
"Fopr_Overlap paramters:\n"
);
94
vout
.
general
(
m_vl
,
" mq = %10.6f\n"
, mq);
95
vout
.
general
(
m_vl
,
" M0 = %10.6f\n"
, M0);
96
vout
.
general
(
m_vl
,
" Np = %4d\n"
, Np);
97
vout
.
general
(
m_vl
,
" x_min = %12.8f\n"
, x_min);
98
vout
.
general
(
m_vl
,
" x_max = %12.6f\n"
, x_max);
99
vout
.
general
(
m_vl
,
" Niter = %6d\n"
, Niter);
100
vout
.
general
(
m_vl
,
" Stop_cond = %12.4e\n"
, Stop_cond);
101
for
(
int
mu = 0; mu < Ndim; ++mu) {
102
vout
.
general
(
m_vl
,
" boundary[%d] = %2d\n"
, mu, bc[mu]);
103
}
104
105
//- range check
106
int
err = 0;
107
err +=
ParameterCheck::non_zero
(mq);
108
err +=
ParameterCheck::non_zero
(M0);
109
err +=
ParameterCheck::non_zero
(Np);
110
// NB. x_min,x_max == 0 is allowed.
111
err +=
ParameterCheck::non_zero
(Niter);
112
err +=
ParameterCheck::square_non_zero
(Stop_cond);
113
114
if
(err) {
115
vout
.
crucial
(
m_vl
,
"Fopr_Overlap: parameter range check failed.\n"
);
116
abort();
117
}
118
119
assert(bc.size() == Ndim);
120
121
//- store values
122
m_mq
= mq;
123
m_M0
= M0;
124
125
m_Np
= Np;
126
m_x_min
= x_min;
127
m_x_max
= x_max;
128
129
m_Niter
= Niter;
130
m_Stop_cond
= Stop_cond;
131
132
m_boundary
.resize(Ndim);
133
for
(
int
mu = 0; mu < Ndim; ++mu) {
134
m_boundary
[mu] = bc[mu];
135
}
136
137
//- propagate parameters
138
m_sign
->
set_parameters
(
m_Np
,
m_x_min
,
m_x_max
,
m_Niter
,
m_Stop_cond
);
139
}
140
141
142
//====================================================================
143
void
Fopr_Overlap::set_lowmodes
(
int
Nsbt, valarray<double> *ev, valarray<Field> *vk)
144
{
145
m_Nsbt
= Nsbt;
146
m_ev
= ev;
147
m_vk
= vk;
148
149
m_sign
->
set_lowmodes
(
m_Nsbt
,
m_ev
,
m_vk
);
150
}
151
152
153
//====================================================================
154
void
Fopr_Overlap::DdagD
(
Field
& v,
const
Field
& b)
155
{
156
Field
w(b.
nin
(), b.
nvol
(), b.
nex
());
157
158
H
(w, b);
159
H
(v, w);
160
}
161
162
163
//====================================================================
164
void
Fopr_Overlap::H
(
Field
& v,
const
Field
& b)
165
{
166
Field
w(b.
nin
(), b.
nvol
(), b.
nex
());
167
168
D
(w, b);
169
m_fopr_w
->
mult_gm5
(v, w);
170
}
171
172
173
//====================================================================
174
void
Fopr_Overlap::Ddag
(
Field
& v,
const
Field
& b)
175
{
176
Field
w(b.
nin
(), b.
nvol
(), b.
nex
());
177
178
m_fopr_w
->
mult_gm5
(w, b);
179
H
(v, w);
180
}
181
182
183
//====================================================================
184
void
Fopr_Overlap::D
(
Field
& v,
const
Field
& b)
185
{
186
assert(b.
nin
() ==
m_fopr_w
->
field_nin
());
187
assert(b.
nvol
() ==
m_fopr_w
->
field_nvol
());
188
assert(b.
nex
() ==
m_fopr_w
->
field_nex
());
189
190
assert(v.
nin
() ==
m_fopr_w
->
field_nin
());
191
assert(v.
nvol
() ==
m_fopr_w
->
field_nvol
());
192
assert(v.
nex
() ==
m_fopr_w
->
field_nex
());
193
194
double
f1 =
m_M0
+ 0.5 *
m_mq
;
195
double
f2 =
m_M0
- 0.5 *
m_mq
;
196
197
Field
w(b.
nin
(), b.
nvol
(), b.
nex
());
198
199
m_sign
->
mult
(w, b);
200
m_fopr_w
->
mult_gm5
(v, w);
201
202
v *= f2;
203
v += f1 * b;
204
}
205
206
207
//====================================================================
208
//============================================================END=====
src
Fopr
fopr_Overlap.cpp
Generated on Tue Jul 23 2013 10:48:48 for Bridge++ by
1.8.3.1