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_Leapfrog.cpp
Go to the documentation of this file.
1
14
#include "
integrator_Leapfrog.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
(
"level"
, 0);
25
param.
Register_double
(
"step_size"
, 0.0);
26
param.
Register_int
(
"number_of_steps"
, 0);
27
28
param.
Register_string
(
"verbose_level"
,
"NULL"
);
29
}
30
31
32
#ifdef USE_PARAMETERS_FACTORY
33
bool
init_param =
ParametersFactory::Register
(
"Integrator.Leapfrog"
, append_entry);
34
#endif
35
}
36
//- end
37
38
//- parameters class
39
Parameters_Integrator_Leapfrog::Parameters_Integrator_Leapfrog
() { append_entry(*
this
); }
40
//- end
41
42
//====================================================================
43
void
Integrator_Leapfrog::set_parameters
(
const
Parameters
& params)
44
{
45
const
string
str_vlevel = params.
get_string
(
"verbose_level"
);
46
47
m_vl
=
vout
.
set_verbose_level
(str_vlevel);
48
49
//- fetch and check input parameters
50
int
level;
51
double
Estep;
52
int
Nstep;
53
54
int
err = 0;
55
err += params.
fetch_int
(
"level"
, level);
56
err += params.
fetch_double
(
"step_size"
, Estep);
57
err += params.
fetch_int
(
"number_of_steps"
, Nstep);
58
59
if
(err) {
60
vout
.
crucial
(
m_vl
,
"Integrator_Leapfrog: fetch error, input parameter not found.\n"
);
61
abort();
62
}
63
64
65
set_parameters
(level, Estep, Nstep);
66
}
67
68
69
//====================================================================
70
void
Integrator_Leapfrog::set_parameters
(
int
level,
double
Estep,
int
Nstep)
71
{
72
//- print input parameters
73
vout
.
general
(
m_vl
,
"Integrator (leapfrog) setup:\n"
);
74
vout
.
general
(
m_vl
,
" Level: %4d\n"
,
m_level
);
75
vout
.
general
(
m_vl
,
" Estep = %10.6f\n"
,
m_Estep
);
76
vout
.
general
(
m_vl
,
" Nstep = %4d\n"
,
m_Nstep
);
77
vout
.
general
(
m_vl
,
" Number of actions: %4d\n"
,
m_action
.size());
78
79
//- range check
80
// NB. level,Estep,Nstep == 0 is allowed.
81
82
//- store values
83
m_Estep
= Estep;
84
m_Nstep
= Nstep;
85
m_level
= level;
86
}
87
88
89
//====================================================================
90
void
Integrator_Leapfrog::evolve
(
Field_G
& iP,
Field_G
& U)
91
{
92
int
Nin = U.
nin
();
93
int
Nvol = U.
nvol
();
94
int
Nex = U.
nex
();
95
int
Nc =
CommonParameters::Nc
();
96
97
double
estep =
m_Estep
;
98
double
esteph = 0.5 * estep;
99
double
estep2;
100
101
Field
force(Nin, Nvol, Nex), force1(Nin, Nvol, Nex);
102
103
104
vout
.
general
(
m_vl
,
"Integration level-%d start.\n"
,
m_level
);
105
106
// Initial half step of update of iP
107
if
(
m_Nstep
> 0) {
108
int
istep = 0;
109
vout
.
general
(
m_vl
,
"istep = %d\n"
, istep);
110
force = 0.0;
111
for
(
int
i = 0; i <
m_action
.size(); ++i) {
112
force1 =
m_action
[i]->force();
113
force += esteph * force1;
114
}
115
iP += (
Field_G
)force;
116
}
117
118
// Molecular dynamics step
119
for
(
int
istep = 1; istep <
m_Nstep
+ 1; istep++) {
120
vout
.
general
(
m_vl
,
"istep = %d\n"
, istep);
121
122
m_integ_next
->
evolve
(iP, U);
123
124
estep2 = estep;
125
if
(istep == m_Nstep) estep2 = esteph;
126
127
force = 0.0;
128
for
(
int
i = 0; i <
m_action
.size(); ++i) {
129
force1 =
m_action
[i]->force();
130
force += estep2 * force1;
131
}
132
iP += (
Field_G
)force;
133
}
// here istep loop ends
134
135
vout
.
general
(
m_vl
,
"Integration level-%d finished.\n"
,
m_level
);
136
}
137
138
139
//====================================================================
140
//============================================================END=====
src
HMC
integrator_Leapfrog.cpp
Generated on Tue Jul 23 2013 10:48:48 for Bridge++ by
1.8.3.1