PSCF v1.4.0
Complex Arithmetic (GPU)

Complex arithmetic functions using the complex type cudaComplex used in GPU code that interfaces with cufft. More...

Functions

cudaReal Pscf::real (cudaComplex const &a)
 Return the real part of a complex number.
cudaReal Pscf::imag (cudaComplex const &a)
 Return the imaginary part of a complex number.
cudaReal Pscf::abs (cudaComplex const &a)
 Return absolute magnitude of a complex number.
cudaReal Pscf::absSq (cudaComplex const &a)
 Return square of absolute magnitude of a complex number.
void Pscf::conj (cudaComplex &z, cudaComplex const &a)
 Compute complex conjugate, z = a^*.
void Pscf::conj (cudaComplex &a)
 In-place complex conjugation of a complex number, a = a^* .
void Pscf::assign (cudaComplex &z, cudaReal const &a, cudaReal const &b)
 Create a complex number from real and imaginary parts, z = a + ib.
void Pscf::assign (cudaComplex &z, cudaReal const &a)
 Assign a real input to a complex variable.
void Pscf::assign (cudaComplex &z, cudaComplex const &a)
 Assign a complex input to a complex variable.
void Pscf::assign (cudaComplex &z, std::complex< cudaReal > const &a)
 Assign a std::complex input to a complex variable.
void Pscf::assign (std::complex< cudaReal > &z, cudaComplex const &a)
 Assign a complex input to a std::complex variable.
void Pscf::add (cudaComplex &z, cudaComplex const &a, cudaComplex const &b)
 Addition of two complex numbers, z = a + b.
void Pscf::add (cudaComplex &z, cudaComplex const &a, cudaReal const &b)
 Addition of a complex and real number, z = a + b.
void Pscf::addEq (cudaComplex &a, cudaComplex const &b)
 In place addition of complex numbers, a += b.
void Pscf::addEq (cudaComplex &a, cudaReal const &b)
 In place addition of a complex and real number, a += b.
void Pscf::sub (cudaComplex &z, cudaComplex const &a, cudaComplex const &b)
 Subtraction of two complex numbers, z = a - b.
void Pscf::sub (cudaComplex &z, cudaComplex const &a, cudaReal const &b)
 Subtraction of a real number from a complex number, z = a - b.
void Pscf::subEq (cudaComplex &a, cudaComplex const &b)
 In place subtraction of two complex numbers, a -= b.
void Pscf::subEq (cudaComplex &a, cudaReal const &b)
 In place subtraction of real number from a complex number, a -= b.
cudaReal Pscf::absSqDiff (cudaComplex const &a, cudaComplex const &b)
 Return square of the absolute magnitude of a complex difference.
void Pscf::mul (cudaComplex &z, cudaComplex const &a, cudaComplex const &b)
 Multiplication of two complex numbers, z = a * b.
void Pscf::mul (cudaComplex &z, cudaComplex const &a, cudaReal const &b)
 Multiplication of complex and real numbers, z = a * b.
void Pscf::mulEq (cudaComplex &a, cudaComplex const &b)
 In place multiplication of two complex number, a *= b.
void Pscf::mulEq (cudaComplex &a, cudaReal const &b)
 In place multiplication of a complex and real number, a *= b.
void Pscf::square (cudaComplex &z, cudaComplex const &a)
 Compute complex square of a complex number, z = a * a.
void Pscf::div (cudaComplex &z, cudaComplex const &a, cudaComplex const &b)
 Division of two complex numbers, z = a / b .
void Pscf::div (cudaComplex &z, cudaComplex const &a, cudaReal const &b)
 Division of a complex number by a real number, z = a / b .
void Pscf::divEq (cudaComplex &a, cudaComplex const &b)
 In place division of two complex number, a /= b.
void Pscf::divEq (cudaComplex &a, cudaReal const &b)
 In place division of a complex number by a real number, a /= b.
void Pscf::inverse (cudaComplex &z, cudaComplex const &a)
 Inversion of a complex number, z = 1 / a .
void Pscf::assignExp (cudaComplex &z, cudaComplex const &a)
 Exponentation of a ffts_complex variable, z = exp(a).
void Pscf::assignLog (cudaComplex &z, cudaComplex const &a)
 Logarithm of a cudaComplex variable, z = log(a).

Detailed Description

Complex arithmetic functions using the complex type cudaComplex used in GPU code that interfaces with cufft.

Function Documentation

◆ real()

cudaReal Pscf::real ( cudaComplex const & a)
inline

Return the real part of a complex number.

Parameters
acomplex argument (input)

Definition at line 42 of file cuda/complex.h.

◆ imag()

cudaReal Pscf::imag ( cudaComplex const & a)
inline

Return the imaginary part of a complex number.

Parameters
acomplex argument (input)

Definition at line 53 of file cuda/complex.h.

◆ abs()

cudaReal Pscf::abs ( cudaComplex const & a)
inline

Return absolute magnitude of a complex number.

Parameters
acomplex argument (in)

Definition at line 66 of file cuda/complex.h.

◆ absSq()

cudaReal Pscf::absSq ( cudaComplex const & a)
inline

Return square of absolute magnitude of a complex number.

Parameters
acomplex argument (in)

Definition at line 77 of file cuda/complex.h.

◆ conj() [1/2]

void Pscf::conj ( cudaComplex & z,
cudaComplex const & a )
inline

Compute complex conjugate, z = a^*.

Parameters
zcomplex conjugate of argument (out)
acomplex argument (in)

Definition at line 91 of file cuda/complex.h.

◆ conj() [2/2]

void Pscf::conj ( cudaComplex & a)
inline

In-place complex conjugation of a complex number, a = a^* .

Parameters
aargument (in) and complex conjugate (out)

Definition at line 105 of file cuda/complex.h.

◆ assign() [1/5]

void Pscf::assign ( cudaComplex & z,
cudaReal const & a,
cudaReal const & b )
inline

Create a complex number from real and imaginary parts, z = a + ib.

Parameters
zcomplex (out)
areal part (in)
bimaginary part (in)

Definition at line 123 of file cuda/complex.h.

◆ assign() [2/5]

void Pscf::assign ( cudaComplex & z,
cudaReal const & a )
inline

Assign a real input to a complex variable.

Parameters
zcomplex (out)
areal (in)

Definition at line 138 of file cuda/complex.h.

◆ assign() [3/5]

void Pscf::assign ( cudaComplex & z,
cudaComplex const & a )
inline

Assign a complex input to a complex variable.

Parameters
zcomplex (out)
acomplex (in)

Definition at line 153 of file cuda/complex.h.

◆ assign() [4/5]

void Pscf::assign ( cudaComplex & z,
std::complex< cudaReal > const & a )
inline

Assign a std::complex input to a complex variable.

Parameters
zcomplex (out)
astd::complex (in)

Definition at line 168 of file cuda/complex.h.

◆ assign() [5/5]

void Pscf::assign ( std::complex< cudaReal > & z,
cudaComplex const & a )
inline

Assign a complex input to a std::complex variable.

Parameters
zstd::complex (out)
acomplex (in)

Definition at line 184 of file cuda/complex.h.

◆ add() [1/2]

void Pscf::add ( cudaComplex & z,
cudaComplex const & a,
cudaComplex const & b )
inline

Addition of two complex numbers, z = a + b.

Parameters
zcomplex sum (out)
acomplex summand (in)
bcomplex summand (in)

Definition at line 200 of file cuda/complex.h.

◆ add() [2/2]

void Pscf::add ( cudaComplex & z,
cudaComplex const & a,
cudaReal const & b )
inline

Addition of a complex and real number, z = a + b.

Parameters
zcomplex sum (out)
acomplex summand (in)
breal summand (in)

Definition at line 217 of file cuda/complex.h.

◆ addEq() [1/2]

void Pscf::addEq ( cudaComplex & a,
cudaComplex const & b )
inline

In place addition of complex numbers, a += b.

Parameters
acomplex summand (in) and sum (out)
bcomplex summand (in)

Definition at line 233 of file cuda/complex.h.

◆ addEq() [2/2]

void Pscf::addEq ( cudaComplex & a,
cudaReal const & b )
inline

In place addition of a complex and real number, a += b.

Parameters
acomplex summand (in) and sum (out)
breal summand (in)

Definition at line 248 of file cuda/complex.h.

◆ sub() [1/2]

void Pscf::sub ( cudaComplex & z,
cudaComplex const & a,
cudaComplex const & b )
inline

Subtraction of two complex numbers, z = a - b.

Parameters
zcomplex difference (out)
acomplex 1st argument (in)
bcomplex 2nd argument (in)

Definition at line 265 of file cuda/complex.h.

◆ sub() [2/2]

void Pscf::sub ( cudaComplex & z,
cudaComplex const & a,
cudaReal const & b )
inline

Subtraction of a real number from a complex number, z = a - b.

Parameters
zcomplex difference (out)
acomplex 1st argument (in)
breal 2nd argument (in)

Definition at line 282 of file cuda/complex.h.

◆ subEq() [1/2]

void Pscf::subEq ( cudaComplex & a,
cudaComplex const & b )
inline

In place subtraction of two complex numbers, a -= b.

Parameters
acomplex argument (in) and difference (out)
bcomplex argument (in)

Definition at line 298 of file cuda/complex.h.

◆ subEq() [2/2]

void Pscf::subEq ( cudaComplex & a,
cudaReal const & b )
inline

In place subtraction of real number from a complex number, a -= b.

Parameters
acomplex argument (in) and difference (out)
breal argument (in)

Definition at line 313 of file cuda/complex.h.

◆ absSqDiff()

cudaReal Pscf::absSqDiff ( cudaComplex const & a,
cudaComplex const & b )
inline

Return square of the absolute magnitude of a complex difference.

This function returns |a-b|^2 for complex a and b.

Parameters
acomplex 1st argument (in)
bcomplex 2nd argument (in)

Definition at line 329 of file cuda/complex.h.

References absSq(), and sub().

◆ mul() [1/2]

void Pscf::mul ( cudaComplex & z,
cudaComplex const & a,
cudaComplex const & b )
inline

Multiplication of two complex numbers, z = a * b.

Parameters
zcomplex product (out)
acomplex factor (in)
bcomplex factor (in)

Definition at line 349 of file cuda/complex.h.

◆ mul() [2/2]

void Pscf::mul ( cudaComplex & z,
cudaComplex const & a,
cudaReal const & b )
inline

Multiplication of complex and real numbers, z = a * b.

Parameters
zcomplex product (out)
acomplex factor (in)
breal factor (in)

Definition at line 366 of file cuda/complex.h.

◆ mulEq() [1/2]

void Pscf::mulEq ( cudaComplex & a,
cudaComplex const & b )
inline

In place multiplication of two complex number, a *= b.

Parameters
acomplex factor (in) and product (out)
bcomplex factor (in)

Definition at line 382 of file cuda/complex.h.

◆ mulEq() [2/2]

void Pscf::mulEq ( cudaComplex & a,
cudaReal const & b )
inline

In place multiplication of a complex and real number, a *= b.

Parameters
acomplex factor (in) and product (out)
breal factor (in)

Definition at line 399 of file cuda/complex.h.

◆ square()

void Pscf::square ( cudaComplex & z,
cudaComplex const & a )
inline

Compute complex square of a complex number, z = a * a.

Parameters
zcomplex product (out)
acomplex factor (in)

Definition at line 414 of file cuda/complex.h.

◆ div() [1/2]

void Pscf::div ( cudaComplex & z,
cudaComplex const & a,
cudaComplex const & b )
inline

Division of two complex numbers, z = a / b .

Parameters
zcomplex ratio (out)
acomplex numerator (in)
bcomplex denominator (in)

Definition at line 432 of file cuda/complex.h.

◆ div() [2/2]

void Pscf::div ( cudaComplex & z,
cudaComplex const & a,
cudaReal const & b )
inline

Division of a complex number by a real number, z = a / b .

Parameters
zcomplex ratio (out)
acomplex numerator (in)
breal denominator (in)

Definition at line 450 of file cuda/complex.h.

◆ divEq() [1/2]

void Pscf::divEq ( cudaComplex & a,
cudaComplex const & b )
inline

In place division of two complex number, a /= b.

Parameters
acomplex numerator (in) and ratio (out)
bcomplex denominator (in)

Definition at line 466 of file cuda/complex.h.

◆ divEq() [2/2]

void Pscf::divEq ( cudaComplex & a,
cudaReal const & b )
inline

In place division of a complex number by a real number, a /= b.

Parameters
acomplex numerator (in) and ratio (out)
breal denominator (in)

Definition at line 483 of file cuda/complex.h.

◆ inverse()

void Pscf::inverse ( cudaComplex & z,
cudaComplex const & a )
inline

Inversion of a complex number, z = 1 / a .

Parameters
zinverse (out)
aargument (in)

Definition at line 500 of file cuda/complex.h.

◆ assignExp()

void Pscf::assignExp ( cudaComplex & z,
cudaComplex const & a )
inline

Exponentation of a ffts_complex variable, z = exp(a).

Parameters
zexponent (out)
aargument (in)

Definition at line 519 of file cuda/complex.h.

◆ assignLog()

void Pscf::assignLog ( cudaComplex & z,
cudaComplex const & a )
inline

Logarithm of a cudaComplex variable, z = log(a).

Parameters
zlogarithm (out)
aargument (in)

Definition at line 538 of file cuda/complex.h.