QUDA
v0.5.0
A library for QCD on GPUs
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
quda
include
invert_quda.h
Go to the documentation of this file.
1
#ifndef _INVERT_QUDA_H
2
#define _INVERT_QUDA_H
3
4
#include <
quda.h
>
5
#include <
quda_internal.h
>
6
#include <
dirac_quda.h
>
7
#include <
color_spinor_field.h
>
8
9
namespace
quda {
10
11
class
Solver
{
12
13
protected
:
14
QudaInvertParam
&
invParam
;
15
TimeProfile
&
profile
;
16
17
public
:
18
Solver
(
QudaInvertParam
&
invParam
,
TimeProfile
&
profile
) : invParam(invParam), profile(profile) { ; }
19
virtual
~Solver
() { ; }
20
21
virtual
void
operator()
(
cudaColorSpinorField
&
out
,
cudaColorSpinorField
&
in
) = 0;
22
23
// solver factory
24
static
Solver
*
create
(
QudaInvertParam
&
param
,
DiracMatrix
&
mat
,
DiracMatrix
&matSloppy,
25
DiracMatrix
&matPrecon,
TimeProfile
&
profile
);
26
27
bool
convergence
(
const
double
&r2,
const
double
&hq2,
const
double
&r2_tol,
28
const
double
&hq_tol);
29
33
void
PrintStats
(
const
char
*,
int
k,
const
double
&r2,
const
double
&b2,
const
double
&hq2);
34
41
void
PrintSummary
(
const
char
*name,
int
k,
const
double
&r2,
const
double
&b2);
42
43
};
44
45
class
CG
:
public
Solver
{
46
47
private
:
48
const
DiracMatrix
&mat;
49
const
DiracMatrix
&matSloppy;
50
51
public
:
52
CG
(
DiracMatrix
&mat,
DiracMatrix
&matSloppy,
QudaInvertParam
&
invParam
,
TimeProfile
&
profile
);
53
virtual
~CG
();
54
55
void
operator()
(
cudaColorSpinorField
&
out
,
cudaColorSpinorField
&
in
);
56
};
57
58
class
BiCGstab
:
public
Solver
{
59
60
private
:
61
DiracMatrix
&mat;
62
const
DiracMatrix
&matSloppy;
63
const
DiracMatrix
&matPrecon;
64
65
// pointers to fields to avoid multiple creation overhead
66
cudaColorSpinorField
*yp, *rp, *pp, *vp, *tmpp, *tp, *wp, *zp;
67
bool
init;
68
69
public
:
70
BiCGstab
(
DiracMatrix
&mat,
DiracMatrix
&matSloppy,
DiracMatrix
&matPrecon,
71
QudaInvertParam
&
invParam
,
TimeProfile
&
profile
);
72
virtual
~BiCGstab
();
73
74
void
operator()
(
cudaColorSpinorField
&
out
,
cudaColorSpinorField
&
in
);
75
};
76
77
class
GCR
:
public
Solver
{
78
79
private
:
80
const
DiracMatrix
&mat;
81
const
DiracMatrix
&matSloppy;
82
const
DiracMatrix
&matPrecon;
83
84
Solver
*K;
85
QudaInvertParam
Kparam;
// parameters for preconditioner solve
86
87
public
:
88
GCR
(
DiracMatrix
&mat,
DiracMatrix
&matSloppy,
DiracMatrix
&matPrecon,
89
QudaInvertParam
&
invParam
,
TimeProfile
&
profile
);
90
virtual
~GCR
();
91
92
void
operator()
(
cudaColorSpinorField
&
out
,
cudaColorSpinorField
&
in
);
93
};
94
95
class
MR
:
public
Solver
{
96
97
private
:
98
const
DiracMatrix
&mat;
99
cudaColorSpinorField
*rp;
100
cudaColorSpinorField
*Arp;
101
cudaColorSpinorField
*tmpp;
102
bool
init;
103
bool
allocate_r;
104
105
public
:
106
MR
(
DiracMatrix
&mat,
QudaInvertParam
&
invParam
,
TimeProfile
&
profile
);
107
virtual
~MR
();
108
109
void
operator()
(
cudaColorSpinorField
&
out
,
cudaColorSpinorField
&
in
);
110
};
111
112
// multigrid solver
113
class
alphaSA
:
public
Solver
{
114
115
protected
:
116
const
DiracMatrix
&
mat
;
117
118
public
:
119
alphaSA
(
DiracMatrix
&
mat
,
QudaInvertParam
&
invParam
,
TimeProfile
&
profile
);
120
virtual
~alphaSA
() { ; }
121
122
void
operator()
(
cudaColorSpinorField
**
out
,
cudaColorSpinorField
&
in
);
123
};
124
125
class
MultiShiftSolver
{
126
127
protected
:
128
QudaInvertParam
&
invParam
;
129
TimeProfile
&
profile
;
130
131
public
:
132
MultiShiftSolver
(
QudaInvertParam
&
invParam
,
TimeProfile
&
profile
) :
133
invParam(invParam), profile(profile) { ; }
134
virtual
~MultiShiftSolver
() { ; }
135
136
virtual
void
operator()
(
cudaColorSpinorField
**
out
,
cudaColorSpinorField
&
in
) = 0;
137
};
138
139
class
MultiShiftCG
:
public
MultiShiftSolver
{
140
141
protected
:
142
const
DiracMatrix
&
mat
;
143
const
DiracMatrix
&
matSloppy
;
144
145
public
:
146
MultiShiftCG
(
DiracMatrix
&
mat
,
DiracMatrix
&
matSloppy
,
QudaInvertParam
&
invParam
,
TimeProfile
&
profile
);
147
virtual
~MultiShiftCG
();
148
149
void
operator()
(
cudaColorSpinorField
**
out
,
cudaColorSpinorField
&
in
);
150
};
151
159
class
MinResExt
{
160
161
protected
:
162
const
DiracMatrix
&
mat
;
163
TimeProfile
&
profile
;
164
165
public
:
166
MinResExt
(
DiracMatrix
&
mat
,
TimeProfile
&
profile
);
167
virtual
~MinResExt
();
168
177
void
operator()
(
cudaColorSpinorField
&
x
,
cudaColorSpinorField
&b,
cudaColorSpinorField
**p,
178
cudaColorSpinorField
**q,
int
N);
179
};
180
181
}
// namespace quda
182
183
#endif // _INVERT_QUDA_H
Generated on Wed Mar 20 2013 12:52:14 for QUDA by
1.8.2