5#include <thrust/complex.h>
15template<
class T0,
class T1,
class T2,
class = std::enable_if_t<std::is_
floating_po
int_v<T2> >>
17auto dg_fma( T0 x, T1
y, T2
z)
19 return fma( (T2)x, (T2)
y,
z);
22template<
class T0,
class T1,
class T2>
24std::enable_if_t< std::is_integral_v<T2>,
decltype(T0()*T1()+T2())> dg_fma( T0 x, T1
y, T2
z)
29template<
class T0,
class T,
class = std::enable_if_t<std::is_
floating_po
int_v<T> >>
30std::complex<T> dg_fma( T0 x, std::complex<T>
y, std::complex<T>
z)
33 std::fma( (T)x,
y.real(),
z.real()),
34 std::fma( (T)x,
y.imag(),
z.imag())
37template<
class T0,
class T1,
class T,
class = std::enable_if_t<std::is_
floating_po
int_v<T> >>
38std::complex<T> dg_fma( T0 x, T1
y, std::complex<T>
z)
41 std::fma( (T)x, (T)
y,
z.real()),
45template<
class T0,
class T,
class = std::enable_if_t<std::is_
floating_po
int_v<T> >>
46std::complex<T> dg_fma( std::complex<T> x, T0
y, std::complex<T>
z)
49 fma(
x.real(), (T)
y,
z.real()),
50 fma(
x.imag(), (T)
y,
z.imag())
53template<
class T,
class = std::enable_if_t<std::is_
floating_po
int_v<T> >>
54std::complex<T> dg_fma( std::complex<T> x, std::complex<T>
y, std::complex<T>
z)
56 std::complex<T> out = {
57 std::fma(
x.real(),
y.real(),
z.real()),
58 std::fma(
x.real(),
y.imag(),
z.imag())
61 std::fma( -
x.imag(),
y.imag(), out.real()),
62 std::fma(
x.imag(),
y.real(), out.imag())
66template<
class T0,
class T1,
class T,
class = std::enable_if_t<std::is_
floating_po
int_v<T> >>
68thrust::complex<T> dg_fma( T0 x, T1
y, thrust::complex<T>
z)
71 std::fma( (T)x, (T)
y,
z.real()),
75template<
class T0,
class T,
class = std::enable_if_t<std::is_
floating_po
int_v<T> >>
77thrust::complex<T> dg_fma( T0 x, thrust::complex<T>
y, thrust::complex<T>
z)
80 fma( (T)x,
y.real(),
z.real()),
81 fma( (T)x,
y.imag(),
z.imag())
84template<
class T0,
class T,
class = std::enable_if_t<std::is_
floating_po
int_v<T> >>
86thrust::complex<T> dg_fma( thrust::complex<T> x, T0
y, thrust::complex<T>
z)
89 fma(
x.real(), (T)
y,
z.real()),
90 fma(
x.imag(), (T)
y,
z.imag())
93template<
class T,
class = std::enable_if_t<std::is_
floating_po
int_v<T> >>
95thrust::complex<T> dg_fma( thrust::complex<T> x, thrust::complex<T>
y, thrust::complex<T>
z)
97 thrust::complex<T> out = {
98 fma(
x.real(),
y.real(),
z.real()),
99 fma(
x.real(),
y.imag(),
z.imag())
102 fma( -
x.imag(),
y.imag(), out.real()),
103 fma(
x.imag(),
y.real(), out.imag())
#define DG_DEVICE
Expands to __host__ __device__ if compiled with nvcc else is empty.
Definition dg_doc.h:378
This is the namespace for all functions and classes defined and used by the discontinuous Galerkin li...