18#ifndef dftefeDeviceDataTypeOverloads_cuh
19#define dftefeDeviceDataTypeOverloads_cuh
30 template <
typename T1,
typename T2>
31 __device__
inline void
34 atomicAdd(addr, value);
37 __forceinline__ __device__ cuDoubleComplex
43 __forceinline__ __device__ cuFloatComplex
52 __forceinline__ __device__
void
58 __forceinline__ __device__
void
64 __forceinline__ __device__
void
65 copyValue(cuDoubleComplex *a,
const cuDoubleComplex b)
70 __forceinline__ __device__
void
71 copyValue(cuFloatComplex *a,
const cuFloatComplex b)
79 __forceinline__ __device__
void
85 __forceinline__ __device__
void
91 __forceinline__ __device__
void
92 copyValue(cuDoubleComplex *a,
const cuFloatComplex b)
94 *a = make_cuDoubleComplex(b.x, b.y);
97 __forceinline__ __device__
void
98 copyValue(cuFloatComplex *a,
const cuDoubleComplex b)
100 *a = make_cuFloatComplex(b.x, b.y);
103 __forceinline__ __device__
void
106 *a = make_cuDoubleComplex(b, 0);
109 __forceinline__ __device__
void
112 *a = make_cuFloatComplex(b, 0);
115 __forceinline__ __device__
void
118 *a = make_cuDoubleComplex(b, 0);
121 __forceinline__ __device__
void
124 *a = make_cuFloatComplex(b, 0);
129 __forceinline__ __device__
double
135 __forceinline__ __device__
float
141 __forceinline__ __device__
double
147 __forceinline__ __device__
float
155 __forceinline__ __device__
double
161 __forceinline__ __device__
float
167 __forceinline__ __device__
double
173 __forceinline__ __device__
float
181 __forceinline__ __device__
double
187 __forceinline__ __device__
float
193 __forceinline__ __device__
double
199 __forceinline__ __device__
float
209 __forceinline__ __device__
unsigned int
215 __forceinline__ __device__
unsigned long int
221 __forceinline__ __device__
int
227 __forceinline__ __device__
float
232 __forceinline__ __device__
double
238 __forceinline__ __device__ cuDoubleComplex
244 __forceinline__ __device__ cuFloatComplex
254 __forceinline__ __device__
unsigned int
255 mult(
unsigned int a,
unsigned int b)
260 __forceinline__ __device__
unsigned long int
261 mult(
unsigned long int a,
unsigned long int b)
266 __forceinline__ __device__
int
272 __forceinline__ __device__
double
278 __forceinline__ __device__
float
284 __forceinline__ __device__
double
290 __forceinline__ __device__
double
301 __forceinline__ __device__ cuDoubleComplex
302 mult(cuDoubleComplex a, cuDoubleComplex b)
307 __forceinline__ __device__ cuFloatComplex
308 mult(cuFloatComplex a, cuFloatComplex b)
310 return cuCmulf(a, b);
317 __forceinline__ __device__ cuDoubleComplex
318 mult(cuFloatComplex a, cuDoubleComplex b)
320 return cuCmul(make_cuDoubleComplex(a.x, a.y), b);
323 __forceinline__ __device__ cuDoubleComplex
324 mult(cuDoubleComplex a, cuFloatComplex b)
326 return cuCmul(a, make_cuDoubleComplex(b.x, b.y));
333 __forceinline__ __device__ cuDoubleComplex
334 mult(
double a, cuDoubleComplex b)
336 return make_cuDoubleComplex(a * b.x, a * b.y);
339 __forceinline__ __device__ cuDoubleComplex
340 mult(cuDoubleComplex a,
double b)
342 return make_cuDoubleComplex(b * a.x, b * a.y);
345 __forceinline__ __device__ cuFloatComplex
346 mult(
float a, cuFloatComplex b)
348 return make_cuFloatComplex(a * b.x, a * b.y);
351 __forceinline__ __device__ cuFloatComplex
352 mult(cuFloatComplex a,
float b)
354 return make_cuFloatComplex(b * a.x, b * a.y);
357 __forceinline__ __device__ cuDoubleComplex
358 mult(
double a, cuFloatComplex b)
360 return make_cuDoubleComplex(a * b.x, a * b.y);
363 __forceinline__ __device__ cuDoubleComplex
364 mult(cuFloatComplex a,
double b)
366 return make_cuDoubleComplex(b * a.x, b * a.y);
370 __forceinline__ __device__
unsigned int
371 add(
unsigned int a,
unsigned int b)
376 __forceinline__ __device__
unsigned long int
377 add(
unsigned long int a,
unsigned long int b)
382 __forceinline__ __device__
int
388 __forceinline__ __device__
double
394 __forceinline__ __device__
float
400 __forceinline__ __device__ cuDoubleComplex
401 add(cuDoubleComplex a, cuDoubleComplex b)
407 __forceinline__ __device__ cuFloatComplex
408 add(cuFloatComplex a, cuFloatComplex b)
410 return cuCaddf(a, b);
413 __forceinline__ __device__
double
419 __forceinline__ __device__
double
425 __forceinline__ __device__ cuDoubleComplex
426 add(cuDoubleComplex a, cuFloatComplex b)
428 return cuCadd(a, make_cuDoubleComplex(b.x, b.y));
432 __forceinline__ __device__ cuDoubleComplex
433 add(cuFloatComplex a, cuDoubleComplex b)
435 return cuCadd(make_cuDoubleComplex(a.x, a.y), b);
439 __forceinline__ __device__
unsigned int
440 sub(
unsigned int a,
unsigned int b)
445 __forceinline__ __device__
unsigned long int
446 sub(
unsigned long int a,
unsigned long int b)
451 __forceinline__ __device__
int
457 __forceinline__ __device__
double
463 __forceinline__ __device__
float
469 __forceinline__ __device__ cuDoubleComplex
470 sub(cuDoubleComplex a, cuDoubleComplex b)
475 __forceinline__ __device__ cuFloatComplex
476 sub(cuFloatComplex a, cuFloatComplex b)
478 return cuCsubf(a, b);
481 __forceinline__ __device__
unsigned int
482 div(
unsigned int a,
unsigned int b)
487 __forceinline__ __device__
unsigned long int
488 div(
unsigned long int a,
unsigned long int b)
493 __forceinline__ __device__
int
499 __forceinline__ __device__
double
505 __forceinline__ __device__
float
511 __forceinline__ __device__
double
514 return (
double)a / b;
517 __forceinline__ __device__
double
520 return a / (double)b;
523 __forceinline__ __device__ cuDoubleComplex
524 div(cuDoubleComplex a, cuDoubleComplex b)
529 __forceinline__ __device__ cuFloatComplex
530 div(cuFloatComplex a, cuFloatComplex b)
532 return cuCdivf(a, b);
539 __forceinline__ __device__ cuDoubleComplex
540 div(cuFloatComplex a, cuDoubleComplex b)
542 return cuCdiv(make_cuDoubleComplex(a.x, a.y), b);
545 __forceinline__ __device__ cuDoubleComplex
546 div(cuDoubleComplex a, cuFloatComplex b)
548 return cuCdiv(a, make_cuDoubleComplex(b.x, b.y));
555 __forceinline__ __device__ cuDoubleComplex
556 div(
double a, cuDoubleComplex b)
558 return make_cuDoubleComplex(a / b.x, a / b.y);
561 __forceinline__ __device__ cuDoubleComplex
562 div(cuDoubleComplex a,
double b)
564 return make_cuDoubleComplex(b / a.x, b / a.y);
567 __forceinline__ __device__ cuFloatComplex
568 div(
float a, cuFloatComplex b)
570 return make_cuFloatComplex(a / b.x, a / b.y);
573 __forceinline__ __device__ cuFloatComplex
574 div(cuFloatComplex a,
float b)
576 return make_cuFloatComplex(b / a.x, b / a.y);
579 __forceinline__ __device__ cuDoubleComplex
580 div(
double a, cuFloatComplex b)
582 return make_cuDoubleComplex(a / b.x, a / b.y);
585 __forceinline__ __device__ cuDoubleComplex
586 div(cuFloatComplex a,
double b)
588 return make_cuDoubleComplex(b / a.x, b / a.y);
612 inline const long int *
618 inline long long int *
624 inline const long long int *
631 inline unsigned int *
637 inline const unsigned int *
643 inline unsigned long int *
649 inline const unsigned long int *
655 inline unsigned long long int *
661 inline const unsigned long long int *
673 inline const double *
691 inline cuDoubleComplex *
694 return reinterpret_cast<cuDoubleComplex *
>(a);
697 inline const cuDoubleComplex *
700 return reinterpret_cast<const cuDoubleComplex *
>(a);
703 inline cuFloatComplex *
706 return reinterpret_cast<cuFloatComplex *
>(a);
709 inline const cuFloatComplex *
712 return reinterpret_cast<const cuFloatComplex *
>(a);
734 inline unsigned long int
752 inline cuDoubleComplex
755 return make_cuDoubleComplex(a.real(), a.imag());
758 inline cuFloatComplex
761 return make_cuFloatComplex(a.real(), a.imag());
__forceinline__ __device__ void copyValue(double *a, const double b)
Definition: DeviceDataTypeOverloads.cu.h:53
__forceinline__ __device__ unsigned int div(unsigned int a, unsigned int b)
Definition: DeviceDataTypeOverloads.cu.h:482
__forceinline__ __device__ unsigned int mult(unsigned int a, unsigned int b)
Definition: DeviceDataTypeOverloads.cu.h:255
__forceinline__ __device__ double imagPartDevice(double a)
Definition: DeviceDataTypeOverloads.cu.h:156
__forceinline__ __device__ unsigned int sub(unsigned int a, unsigned int b)
Definition: DeviceDataTypeOverloads.cu.h:440
RealType< T >::Type imagPart(const T &x)
Definition: DataTypeOverloads.h:132
__forceinline__ __device__ double realPartDevice(double a)
Definition: DeviceDataTypeOverloads.cu.h:130
__forceinline__ __device__ double abs(double a)
Definition: DeviceDataTypeOverloads.cu.h:182
int * makeDataTypeDeviceCompatible(int *a)
Definition: DeviceDataTypeOverloads.cu.h:595
__forceinline__ __device__ unsigned int conj(unsigned int a)
Definition: DeviceDataTypeOverloads.cu.h:210
__device__ void atomicAddWrapper(T1 *addr, T2 value)
Definition: DeviceDataTypeOverloads.cu.h:32
RealType< T >::Type realPart(const T &x)
Definition: DataTypeOverloads.h:94
__forceinline__ __device__ unsigned int add(unsigned int a, unsigned int b)
Definition: DeviceDataTypeOverloads.cu.h:371
__forceinline__ __device__ cuDoubleComplex makeComplex(double realPart, double imagPart)
Definition: DeviceDataTypeOverloads.cu.h:38
dealii includes
Definition: AtomFieldDataSpherical.cpp:31