1#ifndef PSCF_CUDA_VEC_OP_MISC_H
2#define PSCF_CUDA_VEC_OP_MISC_H
11#include <pscf/cuda/cudaTypes.h>
12#include <pscf/cuda/DeviceArray.h>
13#include <util/containers/DArray.h>
83 void addVcVc(DeviceArray<cudaReal>& a,
84 DeviceArray<cudaReal>
const & b1,
cudaReal const c1,
85 DeviceArray<cudaReal>
const & b2,
cudaReal const c2);
97 void addVcS(DeviceArray<cudaReal>& a,
98 DeviceArray<cudaReal>
const & b,
cudaReal const c,
110 void addEqVc(DeviceArray<cudaReal>& a,
111 DeviceArray<cudaReal>
const & b,
128 DeviceArray<cudaReal>
const & b1,
cudaReal const c1,
129 DeviceArray<cudaReal>
const & b2,
cudaReal const c2,
130 DeviceArray<cudaReal>
const & b3,
cudaReal const c3);
144 void addVcVcS(DeviceArray<cudaReal>& a,
145 DeviceArray<cudaReal>
const & b1,
cudaReal const c1,
146 DeviceArray<cudaReal>
const & b2,
cudaReal const c2,
158 void divEqVc(DeviceArray<cudaComplex>& a,
159 DeviceArray<cudaReal>
const & b,
171 void expVc(DeviceArray<cudaReal>& a,
172 DeviceArray<cudaReal>
const & b,
187 void eqVPair(DeviceArray<cudaReal>& a1,
188 DeviceArray<cudaReal>& a2,
189 DeviceArray<cudaReal>
const & s);
202 void mulVVPair(DeviceArray<cudaReal>& a1, DeviceArray<cudaReal>& a2,
203 DeviceArray<cudaReal>
const & b1,
204 DeviceArray<cudaReal>
const & b2,
205 DeviceArray<cudaReal>
const & s);
217 DeviceArray<cudaReal>& a2,
218 DeviceArray<cudaReal>
const & s);
234 void addVMany(DeviceArray<cudaReal>& a,
235 DArray<DeviceArray<cudaReal> >
const & vecs);
254 void addVMany(DeviceArray<cudaReal>& a,
255 DArray<DeviceArray<cudaReal>
const *>
const & vecs);
269 void mulVMany(DeviceArray<cudaReal>& a,
270 DArray<DeviceArray<cudaReal> >
const & vecs);
289 void mulVMany(DeviceArray<cudaReal>& a,
290 DArray<DeviceArray<cudaReal>
const *>
const & vecs);
302 void sqSqAbsV(DeviceArray<cudaReal>& a,
303 DeviceArray<cudaComplex>
const & b);
Dynamically allocatable contiguous array template.
void sqSqAbsV(Array< double > &a, Array< fftw_complex > const &b)
Fourth power of absolute magnitude, a[i] = |b[i]|^4 (complex).
void expVc(Array< double > &a, Array< double > const &b, const double c)
Exponentiation a scaled vector, a[i] = exp(b[i]*c) (real).
void divEqVc(Array< fftw_complex > &a, Array< double > const &b, double c)
Vector division in-place w/ coeff., a[i] /= (b[i] * c).
void addEqVc(Array< double > &a, Array< double > const &b, const double c)
Add scaled vector in-place, a[i] += b[i]*c (real).
void mulVVPair(Array< double > &a1, Array< double > &a2, Array< double > const &b1, Array< double > const &b2, Array< double > const &c)
Vector multiplication in pairs, ax[i] = bx[i] * s[i], x=1,2.
void eqVPair(Array< double > &a1, Array< double > &a2, Array< double > const &b)
Vector assignment in pairs, ax[i] = b[i], x = 1, 2.
void addVMany(DeviceArray< cudaReal > &a, DArray< DeviceArray< cudaReal > > const &vecs)
Add an arbitrary number of vectors pointwise (real).
void mulVMany(DeviceArray< cudaReal > &a, DArray< DeviceArray< cudaReal > > const &vecs)
Multiply an undefined number of vectors pointwise (real).
void mulEqVPair(Array< double > &a1, Array< double > &a2, Array< double > const &b)
In-place vector multiplication in pairs, ax[i] *= b[i], x=1,2.
Vector operations on GPU or CPU.
void addVcVcS(Array< double > &a, Array< double > const &b1, const double c1, Array< double > const &b2, const double c2, const double s)
Add scaled vectors + scalar, a[i] = b1[i]*c1 + b2[2]*c2 + s (real).
void addVcS(Array< double > &a, Array< double > const &b, const double c, const double s)
Add a scaled vector and a scalar, a[i] = b[i]*c + s (real).
void addVcVc(Array< double > &a, Array< double > const &b1, const double c1, Array< double > const &b2, const double c2)
Add two scaled vectors, a[i] = b1[i]*c1 + b2[2]*c2 (real).
void addVcVcVc(Array< double > &a, Array< double > const &b1, const double c1, Array< double > const &b2, const double c2, Array< double > const &b3, const double c3)
Add scaled vectors, a[i] = b1[i]*c1 + b2[i]*c2 + b3[i]*c3 (real).
PSCF package top-level namespace.
cufftDoubleReal cudaReal
Real number type used in CPU code that uses FFTW.