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
solver_CGNR.cpp
Go to the documentation of this file.
1
15
#include "
solver_CGNR.h
"
16
using
Bridge::vout
;
17
18
#ifdef USE_PARAMETERS_FACTORY
19
#include "
parameters_factory.h
"
20
#endif
21
22
#ifdef USE_FACTORY
23
namespace
{
24
Solver
*create_object(
Fopr
*fopr)
25
{
26
return
new
Solver_CGNR
(fopr);
27
}
28
29
30
bool
init = Solver::Factory::Register(
"CGNR"
, create_object);
31
}
32
#endif
33
34
//- parameter entries
35
namespace
{
36
void
append_entry(
Parameters
& param)
37
{
38
param.
Register_int
(
"maximum_number_of_iteration"
, 0);
39
param.
Register_double
(
"convergence_criterion_squared"
, 0.0);
40
41
param.
Register_string
(
"verbose_level"
,
"NULL"
);
42
}
43
44
45
#ifdef USE_PARAMETERS_FACTORY
46
bool
init_param =
ParametersFactory::Register
(
"Solver.CGNR"
, append_entry);
47
#endif
48
}
49
//- end
50
51
//- parameters class
52
Parameters_Solver_CGNR::Parameters_Solver_CGNR
() { append_entry(*
this
); }
53
//- end
54
55
//====================================================================
56
void
Solver_CGNR::set_parameters
(
const
Parameters
& params)
57
{
58
return
this->
Solver_CG::set_parameters
(params);
59
}
60
61
62
//====================================================================
63
void
Solver_CGNR::solve
(
Field
& xq,
const
Field
& b,
int
& Nconv,
double
& diff)
64
{
65
vout
.
detailed
(
m_vl
,
" CGNR solver starts\n"
);
66
67
Fopr
*fopr = this->
Solver_CG::get_fopr
();
68
69
string
prev_mode = fopr->
get_mode
();
70
71
if
(prev_mode ==
"DdagD"
) {
72
this->
Solver_CG::solve
(xq, b, Nconv, diff);
// fallback to CG solver
73
return
;
74
}
75
76
if
(!((prev_mode ==
"D"
) || (prev_mode ==
"Ddag"
))) {
77
vout
.
crucial
(
m_vl
,
"Solver_CGNR: unsupported mode for fopr: %s."
, prev_mode.c_str());
78
abort();
79
}
80
81
Field
b2(b);
82
fopr->
mult_dag
(b2, b);
83
84
if
(prev_mode ==
"D"
) {
85
fopr->
set_mode
(
"DdagD"
);
86
}
else
if
(prev_mode ==
"Ddag"
) {
87
fopr->
set_mode
(
"DDdag"
);
88
}
89
90
this->
Solver_CG::solve
(xq, b2, Nconv, diff);
91
92
fopr->
set_mode
(prev_mode);
93
}
94
95
96
//====================================================================
97
//============================================================END=====
src
Solver
solver_CGNR.cpp
Generated on Tue Jul 23 2013 10:48:49 for Bridge++ by
1.8.3.1