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
action_F_Rational.cpp
Go to the documentation of this file.
1
14
#include "
action_F_Rational.h
"
15
16
#ifdef USE_PARAMETERS_FACTORY
17
#include "
parameters_factory.h
"
18
#endif
19
20
//- parameter entries
21
namespace
{
22
void
append_entry(
Parameters
& param)
23
{
24
param.
Register_int
(
"Np"
, 0);
25
param.
Register_int
(
"n_exp"
, 0);
26
param.
Register_int
(
"d_exp"
, 0);
27
param.
Register_double
(
"x_min"
, 0.0);
28
param.
Register_double
(
"x_max"
, 0.0);
29
param.
Register_int
(
"Niter"
, 0);
30
param.
Register_double
(
"Stop_cond"
, 0.0);
31
32
param.
Register_string
(
"verbose_level"
,
"NULL"
);
33
}
34
35
36
#ifdef USE_PARAMETERS_FACTORY
37
bool
init_param =
ParametersFactory::Register
(
"Action.F_Rational"
, append_entry);
38
#endif
39
}
40
//- end
41
42
//- parameters class
43
Parameters_Action_F_Rational::Parameters_Action_F_Rational
() { append_entry(*
this
); }
44
//- end
45
46
//====================================================================
47
void
Action_F_Rational::set_parameters
(
const
Parameters
& params)
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
int
Np, n_exp, d_exp;
55
double
x_min, x_max;
56
int
Niter;
57
double
Stop_cond;
58
59
int
err = 0;
60
err += params.
fetch_int
(
"Np"
, Np);
61
err += params.
fetch_int
(
"n_exp"
, n_exp);
62
err += params.
fetch_int
(
"d_exp"
, d_exp);
63
err += params.
fetch_double
(
"x_min"
, x_min);
64
err += params.
fetch_double
(
"x_max"
, x_max);
65
err += params.
fetch_int
(
"Niter"
, Niter);
66
err += params.
fetch_double
(
"Stop_cond"
, Stop_cond);
67
68
if
(err) {
69
vout
.
crucial
(
m_vl
,
"Action_F_Rational: fetch error, input parameter not found.\n"
);
70
abort();
71
}
72
73
74
set_parameters
(Np, n_exp, d_exp, x_min, x_max, Niter, Stop_cond);
75
}
76
77
78
//====================================================================
79
void
Action_F_Rational::set_parameters
(
int
Np,
int
n_exp,
int
d_exp,
80
double
x_min,
double
x_max,
81
int
Niter,
double
Stop_cond)
82
{
83
//- print input parameters
84
vout
.
general
(
m_vl
,
"Action_F_Rational:\n"
);
85
vout
.
general
(
m_vl
,
" Np = %4d\n"
, Np);
86
vout
.
general
(
m_vl
,
" n_exp = %4d\n"
, n_exp);
87
vout
.
general
(
m_vl
,
" d_exp = %4d\n"
, d_exp);
88
vout
.
general
(
m_vl
,
" x_min = %8.4f\n"
, x_min);
89
vout
.
general
(
m_vl
,
" x_max = %8.4f\n"
, x_max);
90
vout
.
general
(
m_vl
,
" Niter = %6d\n"
, Niter);
91
vout
.
general
(
m_vl
,
" Stop_cond = %8.2e\n"
, Stop_cond);
92
93
//- range check
94
int
err = 0;
95
err +=
ParameterCheck::non_zero
(Np);
96
err +=
ParameterCheck::non_zero
(n_exp);
97
err +=
ParameterCheck::non_zero
(d_exp);
98
// NB. x_min,x_max == 0 is allowed.
99
err +=
ParameterCheck::non_negative
(Niter);
100
err +=
ParameterCheck::square_non_zero
(Stop_cond);
101
102
if
(err) {
103
vout
.
crucial
(
m_vl
,
"Action_F_Rational: parameter range check failed.\n"
);
104
abort();
105
}
106
107
//- store values
108
m_Np
= Np;
109
m_n_exp
= n_exp;
110
m_d_exp
= d_exp;
111
m_x_min
= x_min;
112
m_x_max
= x_max;
113
m_Niter
= Niter;
114
m_Stop_cond
= Stop_cond;
115
116
//- post-process
117
setup
();
118
}
119
120
121
//====================================================================
122
void
Action_F_Rational::setup
()
123
{
124
int
Nc =
CommonParameters::Nc
();
125
int
Nvol =
CommonParameters::Nvol
();
126
int
Ndim =
CommonParameters::Ndim
();
127
int
NinG = 2 * Nc * Nc;
128
129
m_force
.
reset
(NinG, Nvol, Ndim);
130
131
// rational operator for Langevin step.
132
m_fopr_langev
=
new
Fopr_Rational
(
m_fopr
);
133
int
d_exp2 = 2 *
m_d_exp
;
134
m_fopr_langev
->
set_parameters
(
m_Np
,
m_n_exp
, d_exp2,
135
m_x_min
,
m_x_max
,
m_Niter
,
m_Stop_cond
);
136
137
// rational operator for Hamiltonian calculation.
138
m_fopr_H
=
new
Fopr_Rational
(
m_fopr
);
139
int
n_expm = -
m_n_exp
;
140
m_fopr_H
->
set_parameters
(
m_Np
, n_expm,
m_d_exp
,
141
m_x_min
,
m_x_max
,
m_Niter
,
m_Stop_cond
);
142
143
// force of rational operator
144
m_force_rational
=
new
Force_F_Rational
(
m_fopr
,
m_fopr_force
);
145
m_force_rational
->
set_parameters
(
m_Np
, n_expm,
m_d_exp
,
146
m_x_min
,
m_x_max
,
m_Niter
,
m_Stop_cond
);
147
148
// link variable update flag
149
m_status_linkv
= 0;
150
}
151
152
153
//====================================================================
154
void
Action_F_Rational::tidyup
()
155
{
156
delete
m_force_rational
;
157
delete
m_fopr_H
;
158
delete
m_fopr_langev
;
159
}
160
161
162
//====================================================================
163
double
Action_F_Rational::langevin
(
RandomNumbers
*rand)
164
{
165
int
NinF =
m_fopr
->
field_nin
();
166
int
NvolF =
m_fopr
->
field_nvol
();
167
int
NexF =
m_fopr
->
field_nex
();
168
int
size_psf = NinF * NvolF * NexF *
CommonParameters::NPE
();
169
170
m_psf
.
reset
(NinF, NvolF, NexF);
171
172
vout
.
general
(
m_vl
,
" Action_F_Rational: %s\n"
,
m_label
.c_str());
173
174
Field
xi(NinF, NvolF, NexF);
175
rand->
gauss_lex_global
(xi);
176
177
m_fopr_langev
->
set_config
(
m_U
);
178
m_psf
=
m_fopr_langev
->
mult
(xi);
179
180
double
xi2 = xi.
norm
();
181
double
H_psf = xi2 * xi2;
182
183
vout
.
general
(
m_vl
,
" H_Frational = %18.8f\n"
, H_psf);
184
vout
.
general
(
m_vl
,
" H_F/dof = %18.8f\n"
, H_psf / size_psf);
185
186
return
H_psf;
187
}
188
189
190
//====================================================================
191
double
Action_F_Rational::calcH
()
192
{
193
int
NinF =
m_fopr
->
field_nin
();
194
int
NvolF =
m_fopr
->
field_nvol
();
195
int
NexF =
m_fopr
->
field_nex
();
196
int
size_psf = NinF * NvolF * NexF *
CommonParameters::NPE
();
197
198
Field
v1(NinF, NvolF, NexF);
199
200
vout
.
general
(
m_vl
,
" Action_F_Rational: %s\n"
,
m_label
.c_str());
201
202
m_fopr_H
->
set_config
(
m_U
);
203
v1 =
m_fopr_H
->
mult
(
m_psf
);
204
205
double
H_psf = v1 *
m_psf
;
206
207
vout
.
general
(
m_vl
,
" H_Frational = %18.8f\n"
, H_psf);
208
vout
.
general
(
m_vl
,
" H_F/dof = %18.8f\n"
, H_psf / size_psf);
209
210
return
H_psf;
211
}
212
213
214
//====================================================================
215
const
Field
Action_F_Rational::force
()
216
{
217
if
(
m_status_linkv
== 0) {
218
int
Nvol =
m_U
->
nvol
();
219
int
Nex =
m_U
->
nex
();
220
221
Field_G
force
(Nvol, Nex), force1(Nvol, Nex);
222
223
vout
.
general
(
m_vl
,
" Action_F_Rational: %s\n"
,
m_label
.c_str());
224
225
m_force_rational
->
set_config
(
m_U
);
226
force
=
m_force_rational
->
force_core
(
m_psf
);
227
228
m_force
= (
Field
)
force
;
229
++
m_status_linkv
;
230
231
double
Fave, Fmax, Fdev;
232
m_force
.
stat
(Fave, Fmax, Fdev);
233
vout
.
general
(
m_vl
,
" Frational_ave = %12.6f Frational_max = %12.6f Frational_dev = %12.6f\n"
,
234
Fave, Fmax, Fdev);
235
236
return
m_force
;
237
}
else
{
238
vout
.
general
(
m_vl
,
" Frational returns previous force.\n"
);
239
return
m_force
;
240
}
241
}
242
243
244
//====================================================================
245
//============================================================END=====
src
Action
action_F_Rational.cpp
Generated on Tue Jul 23 2013 10:48:47 for Bridge++ by
1.8.3.1