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
integrator_UpdateU.cpp
Go to the documentation of this file.
1
14
#include "
integrator_UpdateU.h
"
15
16
#ifdef USE_PARAMETERS_FACTORY
17
#include "
parameters_factory.h
"
18
#endif
19
20
//- parameter entry
21
namespace
{
22
void
append_entry(
Parameters
& param)
23
{
24
param.
Register_double
(
"step_size"
, 0.0);
25
param.
Register_int
(
"order_of_exp_iP"
, 0);
26
27
param.
Register_string
(
"verbose_level"
,
"NULL"
);
28
}
29
30
31
#ifdef USE_PARAMETERS_FACTORY
32
bool
init_param =
ParametersFactory::Register
(
"Integrator.UpdateU"
, append_entry);
33
#endif
34
}
35
//- end
36
37
//- parameters class
38
Parameters_Integrator_UpdateU::Parameters_Integrator_UpdateU
() { append_entry(*
this
); }
39
//- end
40
41
//====================================================================
42
void
Integrator_UpdateU::set_parameters
(
const
Parameters
& params)
43
{
44
const
string
str_vlevel = params.
get_string
(
"verbose_level"
);
45
46
m_vl
=
vout
.
set_verbose_level
(str_vlevel);
47
48
//- fetch and check input parameters
49
double
Estep;
50
int
Nprec;
51
52
int
err = 0;
53
err += params.
fetch_double
(
"step_size"
, Estep);
54
err += params.
fetch_int
(
"order_of_exp_iP"
, Nprec);
55
56
if
(err) {
57
vout
.
crucial
(
m_vl
,
"Integrator_UpdateU: fetch error, input parameter not found.\n"
);
58
abort();
59
}
60
61
62
set_parameters
(Estep, Nprec);
63
}
64
65
66
//====================================================================
67
void
Integrator_UpdateU::set_parameters
(
double
Estep,
int
Nprec)
68
{
69
//- print input parameters
70
vout
.
general
(
m_vl
,
"Integrator (updateU) setup:\n"
);
71
vout
.
general
(
m_vl
,
" Estep = %10.6f\n"
,
m_Estep
);
72
vout
.
general
(
m_vl
,
" Nprec = %d\n"
,
m_Nprec
);
73
74
//- range check
75
int
err = 0;
76
// NB. Estep == 0 is allowed.
77
err +=
ParameterCheck::non_zero
(Nprec);
78
79
if
(err) {
80
vout
.
crucial
(
m_vl
,
"Integrator_UpdateU: parameter range check failed.\n"
);
81
abort();
82
}
83
84
//- store values
85
m_Estep
= Estep;
86
m_Nprec
= Nprec;
87
}
88
89
90
//====================================================================
91
void
Integrator_UpdateU::evolve
(
Field_G
& iP,
Field_G
& U)
92
{
93
int
Nvol = U.
nvol
();
94
int
Nex = U.
nex
();
95
int
Nc =
CommonParameters::Nc
();
96
97
Mat_SU_N
u0(Nc), u1(Nc), u2(Nc);
98
Mat_SU_N
h1(Nc);
99
100
for
(
int
ex = 0; ex < Nex; ++ex) {
101
for
(
int
site = 0; site < Nvol; ++site) {
102
u0 = U.
mat
(site, ex);
103
u1 = U.
mat
(site, ex);
104
h1 = iP.
mat
(site, ex);
105
106
for
(
int
iprec = 0; iprec <
m_Nprec
; ++iprec) {
107
double
exf =
m_Estep
/ (m_Nprec - iprec);
108
u2 = h1 * u1;
109
u2 *= exf;
110
u1 = u2;
111
u1 += u0;
112
}
113
114
u1.
reunit
();
115
U.
set_mat
(site, ex, u1);
116
}
117
}
118
119
for
(
int
i = 0; i <
m_action
.size(); ++i) {
120
m_action
[i]->notify_linkv();
121
}
122
123
for
(
int
i = 0; i <
m_director
.size(); ++i) {
124
m_director
[i]->notify_linkv();
125
}
126
}
127
128
129
//====================================================================
130
//============================================================END=====
src
HMC
integrator_UpdateU.cpp
Generated on Tue Jul 23 2013 10:48:48 for Bridge++ by
1.8.3.1