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
dirac_quda.h
Go to the documentation of this file.
1
#ifndef _DIRAC_QUDA_H
2
#define _DIRAC_QUDA_H
3
4
#include <
quda_internal.h
>
5
#include <
color_spinor_field.h
>
6
#include <
gauge_field.h
>
7
#include <
clover_field.h
>
8
#include <
dslash_quda.h
>
9
10
#include <
face_quda.h
>
11
#include <
blas_quda.h
>
12
13
#include <typeinfo>
14
15
namespace
quda {
16
17
// Params for Dirac operator
18
class
DiracParam
{
19
20
public
:
21
QudaDiracType
type
;
22
double
kappa
;
23
double
mass
;
24
double
m5
;
// used by domain wall only
25
int
Ls
;
26
MatPCType
matpcType
;
27
DagType
dagger
;
28
cudaGaugeField
*
gauge
;
29
cudaGaugeField
*
fatGauge
;
// used by staggered only
30
cudaGaugeField
*
longGauge
;
// used by staggered only
31
cudaCloverField
*
clover
;
32
33
double
mu
;
// used by twisted mass only
34
double
epsilon
;
//2nd tm parameter (used by twisted mass only)
35
36
cudaColorSpinorField
*
tmp1
;
37
cudaColorSpinorField
*
tmp2
;
// used by Wilson-like kernels only
38
39
QudaVerbosity
verbose
;
40
41
int
commDim
[
QUDA_MAX_DIM
];
// whether to do comms or not
42
43
DiracParam
()
44
:
type
(
QUDA_INVALID_DIRAC
),
kappa
(0.0),
m5
(0.0),
matpcType
(
QUDA_MATPC_INVALID
),
45
dagger
(
QUDA_DAG_INVALID
),
gauge
(0),
clover
(0),
mu
(0.0),
epsilon
(0.0),
46
tmp1
(0),
tmp2
(0),
verbose
(
QUDA_SILENT
)
47
{
48
49
}
50
51
void
print
() {
52
printfQuda
(
"Printing DslashParam\n"
);
53
printfQuda
(
"type = %d\n"
,
type
);
54
printfQuda
(
"kappa = %g\n"
,
kappa
);
55
printfQuda
(
"mass = %g\n"
,
mass
);
56
printfQuda
(
"m5 = %g\n"
,
m5
);
57
printfQuda
(
"Ls = %d\n"
,
Ls
);
58
printfQuda
(
"matpcType = %d\n"
,
matpcType
);
59
printfQuda
(
"dagger = %d\n"
,
dagger
);
60
printfQuda
(
"mu = %g\n"
,
mu
);
61
printfQuda
(
"epsilon = %g\n"
,
epsilon
);
62
for
(
int
i=0; i<
QUDA_MAX_DIM
; i++)
printfQuda
(
"commDim[%d] = %d\n"
, i,
commDim
[i]);
63
}
64
};
65
66
void
setDiracParam
(DiracParam &diracParam,
QudaInvertParam
*
inv_param
,
bool
pc);
67
void
setDiracSloppyParam
(DiracParam &diracParam,
QudaInvertParam
*
inv_param
,
bool
pc);
68
69
// forward declarations
70
class
DiracMatrix;
71
class
DiracM;
72
class
DiracMdagM;
73
class
DiracMdag;
74
75
// Abstract base class
76
class
Dirac
{
77
78
friend
class
DiracMatrix
;
79
friend
class
DiracM
;
80
friend
class
DiracMdagM
;
81
friend
class
DiracMdag
;
82
83
protected
:
84
cudaGaugeField
&
gauge
;
85
double
kappa
;
86
double
mass
;
87
MatPCType
matpcType
;
88
mutable
DagType
dagger
;
// mutable to simplify implementation of Mdag
89
mutable
unsigned
long
long
flops
;
90
mutable
cudaColorSpinorField
*
tmp1
;
// temporary hack
91
mutable
cudaColorSpinorField
*
tmp2
;
// temporary hack
92
93
bool
newTmp
(
cudaColorSpinorField
**,
const
cudaColorSpinorField
&)
const
;
94
void
deleteTmp
(
cudaColorSpinorField
**,
const
bool
&reset)
const
;
95
96
QudaTune
tune
;
97
QudaVerbosity
verbose
;
98
99
int
commDim
[
QUDA_MAX_DIM
];
// whether do comms or not
100
101
public
:
102
Dirac
(
const
DiracParam
&
param
);
103
Dirac
(
const
Dirac
&
dirac
);
104
virtual
~Dirac
();
105
Dirac
&
operator=
(
const
Dirac
&
dirac
);
106
107
virtual
void
checkParitySpinor
(
const
cudaColorSpinorField
&,
const
cudaColorSpinorField
&)
const
;
108
virtual
void
checkFullSpinor
(
const
cudaColorSpinorField
&,
const
cudaColorSpinorField
&)
const
;
109
void
checkSpinorAlias
(
const
cudaColorSpinorField
&,
const
cudaColorSpinorField
&)
const
;
110
111
virtual
void
Dslash
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
112
const
QudaParity
parity
)
const
= 0;
113
virtual
void
DslashXpay
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
114
const
QudaParity
parity
,
const
cudaColorSpinorField
&
x
,
115
const
double
&k)
const
= 0;
116
virtual
void
M
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
= 0;
117
virtual
void
MdagM
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
= 0;
118
void
Mdag
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
;
119
120
// required methods to use e-o preconditioning for solving full system
121
virtual
void
prepare
(
cudaColorSpinorField
* &src,
cudaColorSpinorField
* &sol,
122
cudaColorSpinorField
&
x
,
cudaColorSpinorField
&b,
123
const
QudaSolutionType
)
const
= 0;
124
virtual
void
reconstruct
(
cudaColorSpinorField
&
x
,
const
cudaColorSpinorField
&b,
125
const
QudaSolutionType
)
const
= 0;
126
void
setMass
(
double
mass
){ this->mass =
mass
;}
127
// Dirac operator factory
128
static
Dirac
*
create
(
const
DiracParam
&
param
);
129
130
unsigned
long
long
Flops
()
const
{
unsigned
long
long
rtn =
flops
;
flops
= 0;
return
rtn; }
131
QudaVerbosity
Verbose
()
const
{
return
verbose
; }
132
};
133
134
// Full Wilson
135
class
DiracWilson
:
public
Dirac
{
136
137
protected
:
138
FaceBuffer
face
;
// multi-gpu communication buffers
139
140
public
:
141
DiracWilson
(
const
DiracParam
&
param
);
142
DiracWilson
(
const
DiracWilson
&
dirac
);
143
DiracWilson
(
const
DiracParam
&
param
,
const
int
nDims);
//to correctly adjust face for DW and non-deg twisted mass
144
145
virtual
~DiracWilson
();
146
DiracWilson
&
operator=
(
const
DiracWilson
&
dirac
);
147
148
virtual
void
Dslash
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
149
const
QudaParity
parity
)
const
;
150
virtual
void
DslashXpay
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
151
const
QudaParity
parity
,
const
cudaColorSpinorField
&
x
,
const
double
&k)
const
;
152
virtual
void
M
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
;
153
virtual
void
MdagM
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
;
154
155
virtual
void
prepare
(
cudaColorSpinorField
* &src,
cudaColorSpinorField
* &sol,
156
cudaColorSpinorField
&
x
,
cudaColorSpinorField
&b,
157
const
QudaSolutionType
)
const
;
158
virtual
void
reconstruct
(
cudaColorSpinorField
&
x
,
const
cudaColorSpinorField
&b,
159
const
QudaSolutionType
)
const
;
160
};
161
162
// Even-odd preconditioned Wilson
163
class
DiracWilsonPC
:
public
DiracWilson
{
164
165
private
:
166
167
public
:
168
DiracWilsonPC
(
const
DiracParam
&
param
);
169
DiracWilsonPC
(
const
DiracWilsonPC
&
dirac
);
170
virtual
~DiracWilsonPC
();
171
DiracWilsonPC
&
operator=
(
const
DiracWilsonPC
&dirac);
172
173
void
M
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
;
174
void
MdagM
(
cudaColorSpinorField
&out,
const
cudaColorSpinorField
&in)
const
;
175
176
void
prepare
(
cudaColorSpinorField
* &src,
cudaColorSpinorField
* &sol,
177
cudaColorSpinorField
&
x
,
cudaColorSpinorField
&b,
178
const
QudaSolutionType
)
const
;
179
void
reconstruct
(
cudaColorSpinorField
&x,
const
cudaColorSpinorField
&b,
180
const
QudaSolutionType
)
const
;
181
};
182
183
// Full clover
184
class
DiracClover
:
public
DiracWilson
{
185
186
protected
:
187
cudaCloverField
&
clover
;
188
void
checkParitySpinor
(
const
cudaColorSpinorField
&,
const
cudaColorSpinorField
&)
const
;
189
190
public
:
191
DiracClover
(
const
DiracParam
&
param
);
192
DiracClover
(
const
DiracClover
&
dirac
);
193
virtual
~DiracClover
();
194
DiracClover
&
operator=
(
const
DiracClover
&
dirac
);
195
196
void
Clover
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
const
QudaParity
parity
)
const
;
197
virtual
void
DslashXpay
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
const
QudaParity
parity
,
198
const
cudaColorSpinorField
&
x
,
const
double
&k)
const
;
199
virtual
void
M
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
;
200
virtual
void
MdagM
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
;
201
202
virtual
void
prepare
(
cudaColorSpinorField
* &src,
cudaColorSpinorField
* &sol,
203
cudaColorSpinorField
&
x
,
cudaColorSpinorField
&b,
204
const
QudaSolutionType
)
const
;
205
virtual
void
reconstruct
(
cudaColorSpinorField
&
x
,
const
cudaColorSpinorField
&b,
206
const
QudaSolutionType
)
const
;
207
};
208
209
// Even-odd preconditioned clover
210
class
DiracCloverPC
:
public
DiracClover
{
211
212
public
:
213
DiracCloverPC
(
const
DiracParam
&
param
);
214
DiracCloverPC
(
const
DiracCloverPC
&
dirac
);
215
virtual
~DiracCloverPC
();
216
DiracCloverPC
&
operator=
(
const
DiracCloverPC
&dirac);
217
218
void
CloverInv
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
const
QudaParity
parity
)
const
;
219
void
Dslash
(
cudaColorSpinorField
&out,
const
cudaColorSpinorField
&in,
220
const
QudaParity
parity)
const
;
221
void
DslashXpay
(
cudaColorSpinorField
&out,
const
cudaColorSpinorField
&in,
222
const
QudaParity
parity,
const
cudaColorSpinorField
&
x
,
const
double
&k)
const
;
223
224
void
M
(
cudaColorSpinorField
&out,
const
cudaColorSpinorField
&in)
const
;
225
void
MdagM
(
cudaColorSpinorField
&out,
const
cudaColorSpinorField
&in)
const
;
226
227
void
prepare
(
cudaColorSpinorField
* &src,
cudaColorSpinorField
* &sol,
228
cudaColorSpinorField
&x,
cudaColorSpinorField
&b,
229
const
QudaSolutionType
)
const
;
230
void
reconstruct
(
cudaColorSpinorField
&x,
const
cudaColorSpinorField
&b,
231
const
QudaSolutionType
)
const
;
232
};
233
234
235
236
// Full domain wall
237
class
DiracDomainWall
:
public
DiracWilson
{
238
239
protected
:
240
double
m5
;
241
double
kappa5
;
242
243
public
:
244
DiracDomainWall
(
const
DiracParam
&
param
);
245
DiracDomainWall
(
const
DiracDomainWall
&
dirac
);
246
virtual
~DiracDomainWall
();
247
DiracDomainWall
&
operator=
(
const
DiracDomainWall
&
dirac
);
248
249
void
Dslash
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
250
const
QudaParity
parity
)
const
;
251
void
DslashXpay
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
252
const
QudaParity
parity
,
const
cudaColorSpinorField
&
x
,
const
double
&k)
const
;
253
254
virtual
void
M
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
;
255
virtual
void
MdagM
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
;
256
257
virtual
void
prepare
(
cudaColorSpinorField
* &src,
cudaColorSpinorField
* &sol,
258
cudaColorSpinorField
&
x
,
cudaColorSpinorField
&b,
259
const
QudaSolutionType
)
const
;
260
virtual
void
reconstruct
(
cudaColorSpinorField
&
x
,
const
cudaColorSpinorField
&b,
261
const
QudaSolutionType
)
const
;
262
};
263
264
// 5d Even-odd preconditioned domain wall
265
class
DiracDomainWallPC
:
public
DiracDomainWall
{
266
267
private
:
268
269
public
:
270
DiracDomainWallPC
(
const
DiracParam
&
param
);
271
DiracDomainWallPC
(
const
DiracDomainWallPC
&
dirac
);
272
virtual
~DiracDomainWallPC
();
273
DiracDomainWallPC
&
operator=
(
const
DiracDomainWallPC
&dirac);
274
275
void
M
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
;
276
void
MdagM
(
cudaColorSpinorField
&out,
const
cudaColorSpinorField
&in)
const
;
277
278
void
prepare
(
cudaColorSpinorField
* &src,
cudaColorSpinorField
* &sol,
279
cudaColorSpinorField
&
x
,
cudaColorSpinorField
&b,
280
const
QudaSolutionType
)
const
;
281
void
reconstruct
(
cudaColorSpinorField
&x,
const
cudaColorSpinorField
&b,
282
const
QudaSolutionType
)
const
;
283
};
284
285
// Full twisted mass
286
class
DiracTwistedMass
:
public
DiracWilson
{
287
288
protected
:
289
double
mu
;
290
double
epsilon
;
291
void
twistedApply
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
292
const
QudaTwistGamma5Type
twistType)
const
;
293
294
static
int
initTMFlag
;
295
296
public
:
297
DiracTwistedMass
(
const
DiracTwistedMass
&
dirac
);
298
DiracTwistedMass
(
const
DiracParam
&
param
,
const
int
nDim);
299
virtual
~DiracTwistedMass
();
300
DiracTwistedMass
&
operator=
(
const
DiracTwistedMass
&
dirac
);
301
302
void
Twist
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
;
303
304
virtual
void
M
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
;
305
virtual
void
MdagM
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
;
306
307
virtual
void
prepare
(
cudaColorSpinorField
* &src,
cudaColorSpinorField
* &sol,
308
cudaColorSpinorField
&
x
,
cudaColorSpinorField
&b,
309
const
QudaSolutionType
)
const
;
310
virtual
void
reconstruct
(
cudaColorSpinorField
&
x
,
const
cudaColorSpinorField
&b,
311
const
QudaSolutionType
)
const
;
312
};
313
314
// Even-odd preconditioned twisted mass
315
class
DiracTwistedMassPC
:
public
DiracTwistedMass
{
316
317
public
:
318
DiracTwistedMassPC
(
const
DiracTwistedMassPC
&
dirac
);
319
DiracTwistedMassPC
(
const
DiracParam
&
param
,
const
int
nDim);
320
321
virtual
~DiracTwistedMassPC
();
322
DiracTwistedMassPC
&
operator=
(
const
DiracTwistedMassPC
&dirac);
323
324
void
TwistInv
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
;
325
326
virtual
void
Dslash
(
cudaColorSpinorField
&out,
const
cudaColorSpinorField
&in,
327
const
QudaParity
parity
)
const
;
328
virtual
void
DslashXpay
(
cudaColorSpinorField
&out,
const
cudaColorSpinorField
&in,
329
const
QudaParity
parity,
const
cudaColorSpinorField
&
x
,
const
double
&k)
const
;
330
void
M
(
cudaColorSpinorField
&out,
const
cudaColorSpinorField
&in)
const
;
331
void
MdagM
(
cudaColorSpinorField
&out,
const
cudaColorSpinorField
&in)
const
;
332
333
void
prepare
(
cudaColorSpinorField
* &src,
cudaColorSpinorField
* &sol,
334
cudaColorSpinorField
&x,
cudaColorSpinorField
&b,
335
const
QudaSolutionType
)
const
;
336
void
reconstruct
(
cudaColorSpinorField
&x,
const
cudaColorSpinorField
&b,
337
const
QudaSolutionType
)
const
;
338
};
339
340
// Full staggered
341
class
DiracStaggered
:
public
Dirac
{
342
343
protected
:
344
cudaGaugeField
&
fatGauge
;
345
cudaGaugeField
&
longGauge
;
346
FaceBuffer
face
;
// multi-gpu communication buffers
347
348
public
:
349
DiracStaggered
(
const
DiracParam
&
param
);
350
DiracStaggered
(
const
DiracStaggered
&
dirac
);
351
virtual
~DiracStaggered
();
352
DiracStaggered
&
operator=
(
const
DiracStaggered
&
dirac
);
353
354
virtual
void
checkParitySpinor
(
const
cudaColorSpinorField
&,
const
cudaColorSpinorField
&)
const
;
355
356
virtual
void
Dslash
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
357
const
QudaParity
parity
)
const
;
358
virtual
void
DslashXpay
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
359
const
QudaParity
parity
,
const
cudaColorSpinorField
&
x
,
const
double
&k)
const
;
360
virtual
void
M
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
;
361
virtual
void
MdagM
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
;
362
363
virtual
void
prepare
(
cudaColorSpinorField
* &src,
cudaColorSpinorField
* &sol,
364
cudaColorSpinorField
&
x
,
cudaColorSpinorField
&b,
365
const
QudaSolutionType
)
const
;
366
virtual
void
reconstruct
(
cudaColorSpinorField
&
x
,
const
cudaColorSpinorField
&b,
367
const
QudaSolutionType
)
const
;
368
};
369
370
// Even-odd preconditioned staggered
371
class
DiracStaggeredPC
:
public
DiracStaggered
{
372
373
protected
:
374
375
public
:
376
DiracStaggeredPC
(
const
DiracParam
&
param
);
377
DiracStaggeredPC
(
const
DiracStaggeredPC
&
dirac
);
378
virtual
~DiracStaggeredPC
();
379
DiracStaggeredPC
&
operator=
(
const
DiracStaggeredPC
&dirac);
380
381
virtual
void
M
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
;
382
virtual
void
MdagM
(
cudaColorSpinorField
&out,
const
cudaColorSpinorField
&in)
const
;
383
384
virtual
void
prepare
(
cudaColorSpinorField
* &src,
cudaColorSpinorField
* &sol,
385
cudaColorSpinorField
&
x
,
cudaColorSpinorField
&b,
386
const
QudaSolutionType
)
const
;
387
virtual
void
reconstruct
(
cudaColorSpinorField
&x,
const
cudaColorSpinorField
&b,
388
const
QudaSolutionType
)
const
;
389
};
390
391
// Functor base class for applying a given Dirac matrix (M, MdagM, etc.)
392
class
DiracMatrix
{
393
394
protected
:
395
const
Dirac
*
dirac
;
396
397
public
:
398
DiracMatrix
(
const
Dirac
&d) :
dirac
(&d) { }
399
DiracMatrix
(
const
Dirac
*d) :
dirac
(d) { }
400
virtual
~DiracMatrix
() = 0;
401
402
virtual
void
operator()
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
= 0;
403
virtual
void
operator()
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
404
cudaColorSpinorField
&
tmp
)
const
= 0;
405
virtual
void
operator()
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
406
cudaColorSpinorField
&Tmp1,
cudaColorSpinorField
&Tmp2)
const
= 0;
407
408
unsigned
long
long
flops
()
const
{
return
dirac
->
Flops
(); }
409
410
std::string
Type
()
const
{
return
typeid
(*dirac).name(); }
411
};
412
413
inline
DiracMatrix::~DiracMatrix
()
414
{
415
416
}
417
418
class
DiracM
:
public
DiracMatrix
{
419
420
public
:
421
DiracM
(
const
Dirac
&d) :
DiracMatrix
(d) { }
422
DiracM
(
const
Dirac
*d) :
DiracMatrix
(d) { }
423
424
void
operator()
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
425
{
426
dirac
->
M
(out, in);
427
}
428
429
void
operator()
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
cudaColorSpinorField
&
tmp
)
const
430
{
431
dirac
->
tmp1
= &
tmp
;
432
dirac
->
M
(out, in);
433
dirac
->
tmp1
= NULL;
434
}
435
436
void
operator()
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
437
cudaColorSpinorField
&Tmp1,
cudaColorSpinorField
&Tmp2)
const
438
{
439
dirac
->
tmp1
= &Tmp1;
440
dirac
->
tmp2
= &Tmp2;
441
dirac
->
M
(out, in);
442
dirac
->
tmp2
= NULL;
443
dirac
->
tmp1
= NULL;
444
}
445
};
446
447
class
DiracMdagM
:
public
DiracMatrix
{
448
449
public
:
450
DiracMdagM
(
const
Dirac
&d) :
DiracMatrix
(d),
shift
(0.0) { }
451
DiracMdagM
(
const
Dirac
*d) :
DiracMatrix
(d),
shift
(0.0) { }
452
454
double
shift
;
455
456
void
operator()
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
457
{
458
dirac
->
MdagM
(out, in);
459
if
(
shift
!= 0.0)
axpyCuda
(
shift
, const_cast<cudaColorSpinorField&>(in), out);
460
}
461
462
void
operator()
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
cudaColorSpinorField
&
tmp
)
const
463
{
464
dirac
->
tmp1
= &
tmp
;
465
dirac
->
MdagM
(out, in);
466
if
(
shift
!= 0.0)
axpyCuda
(
shift
, const_cast<cudaColorSpinorField&>(in), out);
467
dirac
->
tmp1
= NULL;
468
}
469
470
void
operator()
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
471
cudaColorSpinorField
&Tmp1,
cudaColorSpinorField
&Tmp2)
const
472
{
473
dirac
->
tmp1
= &Tmp1;
474
dirac
->
tmp2
= &Tmp2;
475
dirac
->
MdagM
(out, in);
476
if
(
shift
!= 0.0)
axpyCuda
(
shift
, const_cast<cudaColorSpinorField&>(in), out);
477
dirac
->
tmp2
= NULL;
478
dirac
->
tmp1
= NULL;
479
}
480
};
481
482
class
DiracMdag
:
public
DiracMatrix
{
483
484
public
:
485
DiracMdag
(
const
Dirac
&d) :
DiracMatrix
(d) { }
486
DiracMdag
(
const
Dirac
*d) :
DiracMatrix
(d) { }
487
488
void
operator()
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
)
const
489
{
490
dirac
->
Mdag
(out, in);
491
}
492
493
void
operator()
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
cudaColorSpinorField
&
tmp
)
const
494
{
495
dirac
->
tmp1
= &
tmp
;
496
dirac
->
Mdag
(out, in);
497
dirac
->
tmp1
= NULL;
498
}
499
500
void
operator()
(
cudaColorSpinorField
&
out
,
const
cudaColorSpinorField
&
in
,
501
cudaColorSpinorField
&Tmp1,
cudaColorSpinorField
&Tmp2)
const
502
{
503
dirac
->
tmp1
= &Tmp1;
504
dirac
->
tmp2
= &Tmp2;
505
dirac
->
Mdag
(out, in);
506
dirac
->
tmp2
= NULL;
507
dirac
->
tmp1
= NULL;
508
}
509
};
510
511
}
// namespace quda
512
513
#endif // _DIRAC_QUDA_H
Generated on Wed Mar 20 2013 12:52:14 for QUDA by
1.8.2