18#ifndef dftefeDeviceDataTypeOverloads_hiph
19#define dftefeDeviceDataTypeOverloads_hiph
22#include <hip/hip_complex.h>
23#include <hip/hip_runtime.h>
30 template <
typename T1,
typename T2>
31 __device__
inline void
34 atomicAdd(addr, value);
37 __forceinline__ __device__ hipDoubleComplex
43 __forceinline__ __device__ hipFloatComplex
52 __forceinline__ __device__
void
58 __forceinline__ __device__
void
64 __forceinline__ __device__
void
65 copyValue(hipDoubleComplex *a,
const hipDoubleComplex b)
70 __forceinline__ __device__
void
71 copyValue(hipFloatComplex *a,
const hipFloatComplex b)
79 __forceinline__ __device__
void
85 __forceinline__ __device__
void
91 __forceinline__ __device__
void
92 copyValue(hipDoubleComplex *a,
const hipFloatComplex b)
94 *a = make_hipDoubleComplex(b.x, b.y);
97 __forceinline__ __device__
void
98 copyValue(hipFloatComplex *a,
const hipDoubleComplex b)
100 *a = make_hipFloatComplex(b.x, b.y);
103 __forceinline__ __device__
void
106 *a = make_hipDoubleComplex(b, 0);
109 __forceinline__ __device__
void
112 *a = make_hipFloatComplex(b, 0);
115 __forceinline__ __device__
void
118 *a = make_hipDoubleComplex(b, 0);
121 __forceinline__ __device__
void
124 *a = make_hipFloatComplex(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
216 conj(
unsigned long int a)
221 __forceinline__ __device__
int
227 __forceinline__ __device__
float
232 __forceinline__ __device__
double
238 __forceinline__ __device__ hipDoubleComplex
244 __forceinline__ __device__ hipFloatComplex
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
273 mult(
double a,
double b)
278 __forceinline__ __device__
float
279 mult(
float a,
float b)
284 __forceinline__ __device__
double
285 mult(
float a,
double b)
290 __forceinline__ __device__
double
291 mult(
double a,
float b)
300 __forceinline__ __device__ hipDoubleComplex
301 mult(hipDoubleComplex a, hipDoubleComplex b)
303 return hipCmul(a, b);
306 __forceinline__ __device__ hipFloatComplex
307 mult(hipFloatComplex a, hipFloatComplex b)
309 return hipCmulf(a, b);
317 __forceinline__ __device__ hipDoubleComplex
318 mult(hipFloatComplex a, hipDoubleComplex b)
320 return hipCmul(make_hipDoubleComplex(a.x, a.y), b);
323 __forceinline__ __device__ hipDoubleComplex
324 mult(hipDoubleComplex a, hipFloatComplex b)
326 return hipCmul(a, make_hipDoubleComplex(b.x, b.y));
333 __forceinline__ __device__ hipDoubleComplex
334 mult(
double a, hipDoubleComplex b)
336 return make_hipDoubleComplex(a * b.x, a * b.y);
339 __forceinline__ __device__ hipDoubleComplex
340 mult(hipDoubleComplex a,
double b)
342 return make_hipDoubleComplex(b * a.x, b * a.y);
345 __forceinline__ __device__ hipFloatComplex
346 mult(
float a, hipFloatComplex b)
348 return make_hipFloatComplex(a * b.x, a * b.y);
351 __forceinline__ __device__ hipFloatComplex
352 mult(hipFloatComplex a,
float b)
354 return make_hipFloatComplex(b * a.x, b * a.y);
357 __forceinline__ __device__ hipDoubleComplex
358 mult(
double a, hipFloatComplex b)
360 return make_hipDoubleComplex(a * b.x, a * b.y);
363 __forceinline__ __device__ hipDoubleComplex
364 mult(hipFloatComplex a,
double b)
366 return make_hipDoubleComplex(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
389 add(
double a,
double b)
394 __forceinline__ __device__
float
395 add(
float a,
float b)
400 __forceinline__ __device__ hipDoubleComplex
401 add(hipDoubleComplex a, hipDoubleComplex b)
403 return hipCadd(a, b);
407 __forceinline__ __device__ hipFloatComplex
408 add(hipFloatComplex a, hipFloatComplex b)
410 return hipCaddf(a, b);
413 __forceinline__ __device__
double
414 add(
double a,
float b)
419 __forceinline__ __device__
double
420 add(
float a,
double b)
425 __forceinline__ __device__ hipDoubleComplex
426 add(hipDoubleComplex a, hipFloatComplex b)
428 return hipCadd(a, make_hipDoubleComplex(b.x, b.y));
432 __forceinline__ __device__ hipDoubleComplex
433 add(hipFloatComplex a, hipDoubleComplex b)
435 return hipCadd(make_hipDoubleComplex(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
458 sub(
double a,
double b)
463 __forceinline__ __device__
float
464 sub(
float a,
float b)
469 __forceinline__ __device__ hipDoubleComplex
470 sub(hipDoubleComplex a, hipDoubleComplex b)
472 return hipCsub(a, b);
475 __forceinline__ __device__ hipFloatComplex
476 sub(hipFloatComplex a, hipFloatComplex b)
478 return hipCsubf(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
500 div(
double a,
double b)
505 __forceinline__ __device__
float
506 div(
float a,
float b)
511 __forceinline__ __device__
double
512 div(
float a,
double b)
514 return (
double)a / b;
517 __forceinline__ __device__
double
518 div(
double a,
float b)
520 return a / (double)b;
523 __forceinline__ __device__ hipDoubleComplex
524 div(hipDoubleComplex a, hipDoubleComplex b)
526 return hipCdiv(a, b);
529 __forceinline__ __device__ hipFloatComplex
530 div(hipFloatComplex a, hipFloatComplex b)
532 return hipCdivf(a, b);
539 __forceinline__ __device__ hipDoubleComplex
540 div(hipFloatComplex a, hipDoubleComplex b)
542 return hipCdiv(make_hipDoubleComplex(a.x, a.y), b);
545 __forceinline__ __device__ hipDoubleComplex
546 div(hipDoubleComplex a, hipFloatComplex b)
548 return hipCdiv(a, make_hipDoubleComplex(b.x, b.y));
555 __forceinline__ __device__ hipDoubleComplex
556 div(
double a, hipDoubleComplex b)
558 return make_hipDoubleComplex(a / b.x, a / b.y);
561 __forceinline__ __device__ hipDoubleComplex
562 div(hipDoubleComplex a,
double b)
564 return make_hipDoubleComplex(b / a.x, b / a.y);
567 __forceinline__ __device__ hipFloatComplex
568 div(
float a, hipFloatComplex b)
570 return make_hipFloatComplex(a / b.x, a / b.y);
573 __forceinline__ __device__ hipFloatComplex
574 div(hipFloatComplex a,
float b)
576 return make_hipFloatComplex(b / a.x, b / a.y);
579 __forceinline__ __device__ hipDoubleComplex
580 div(
double a, hipFloatComplex b)
582 return make_hipDoubleComplex(a / b.x, a / b.y);
585 __forceinline__ __device__ hipDoubleComplex
586 div(hipFloatComplex a,
double b)
588 return make_hipDoubleComplex(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 hipDoubleComplex *
694 return reinterpret_cast<hipDoubleComplex *
>(a);
697 inline const hipDoubleComplex *
700 return reinterpret_cast<const hipDoubleComplex *
>(a);
703 inline hipFloatComplex *
706 return reinterpret_cast<hipFloatComplex *
>(a);
709 inline const hipFloatComplex *
712 return reinterpret_cast<const hipFloatComplex *
>(a);
733 inline unsigned long int
751 inline hipDoubleComplex
754 return make_hipDoubleComplex(a.real(), a.imag());
757 inline hipFloatComplex
760 return make_hipFloatComplex(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