1 #ifndef PARGEMSLR_VECTOROPS_H
2 #define PARGEMSLR_VECTOROPS_H
14 #include "../utils/utils.hpp"
31 PrecisionEnum GetVectorPrecision(
const VectorVirtualClass<int> &vec);
39 PrecisionEnum GetVectorPrecision(
const VectorVirtualClass<long int> &vec);
47 PrecisionEnum GetVectorPrecision(
const VectorVirtualClass<float> &vec);
55 PrecisionEnum GetVectorPrecision(
const VectorVirtualClass<double> &vec);
63 PrecisionEnum GetVectorPrecision(
const VectorVirtualClass<complexs> &vec);
71 PrecisionEnum GetVectorPrecision(
const VectorVirtualClass<complexd> &vec);
79 PrecisionEnum GetVectorPPrecision(
const VectorVirtualClass<int> *vec);
87 PrecisionEnum GetVectorPPrecision(
const VectorVirtualClass<long int> *vec);
95 PrecisionEnum GetVectorPPrecision(
const VectorVirtualClass<float> *vec);
103 PrecisionEnum GetVectorPPrecision(
const VectorVirtualClass<double> *vec);
111 PrecisionEnum GetVectorPPrecision(
const VectorVirtualClass<complexs> *vec);
119 PrecisionEnum GetVectorPPrecision(
const VectorVirtualClass<complexd> *vec);
121 #ifdef PARGEMSLR_CUDA
128 int VectorRandDevice( VectorClass<float> &x);
136 int VectorRandDevice( VectorClass<double> &x);
144 int VectorRandDevice( VectorClass<complexs> &x);
152 int VectorRandDevice( VectorClass<complexd> &x);
166 template <
typename T>
167 int VectorPDotTemplate(
int n,
const T *x,
const T *y, T &t );
177 int VectorDot(
const vector_base_float &x,
const vector_base_float &y,
float &t);
187 int VectorDot(
const vector_base_double &x,
const vector_base_double &y,
double &t);
197 int VectorDot(
const vector_base_complexs &x,
const vector_base_complexs &y, complexs &t);
207 int VectorDot(
const vector_base_complexd &x,
const vector_base_complexd &y, complexd &t);
209 #ifdef PARGEMSLR_CUDA
219 int VectorSdotDevice(
const vector_base_float &x,
const vector_base_float &y,
float &t);
229 int VectorDdotDevice(
const vector_base_double &x,
const vector_base_double &y,
double &t);
239 int VectorCdotDevice(
const vector_base_complexs &x,
const vector_base_complexs &y, complexs &t);
249 int VectorZdotDevice(
const vector_base_complexd &x,
const vector_base_complexd &y, complexd &t);
261 template <
typename T>
262 int VectorPScaleTemplate(
int n, T *x,
const T&a);
271 int VectorScale(VectorClass<float> &x,
const float &a);
280 int VectorScale(VectorClass<double> &x,
const double &a);
289 int VectorScale(VectorClass<complexs> &x,
const complexs &a);
298 int VectorScale(VectorClass<complexd> &x,
const complexd &a);
300 #ifdef PARGEMSLR_CUDA
309 int VectorSscaleDevice(VectorClass<float> &x,
const float &a);
318 int VectorDscaleDevice(VectorClass<double> &x,
const double &a);
327 int VectorCscaleDevice(VectorClass<complexs> &x,
const complexs &a);
336 int VectorZscaleDevice(VectorClass<complexd> &x,
const complexd &a);
349 template <
typename T>
350 int VectorPAxpyTemplate(
int n,
const T &a,
const T *x, T *y);
360 int VectorAxpy(
const float &a,
const VectorClass<float> &x, VectorClass<float> &y);
370 int VectorAxpy(
const double &a,
const VectorClass<double> &x, VectorClass<double> &y);
380 int VectorAxpy(
const complexs &a,
const VectorClass<complexs> &x, VectorClass<complexs> &y);
390 int VectorAxpy(
const complexd &a,
const VectorClass<complexd> &x, VectorClass<complexd> &y);
392 #ifdef PARGEMSLR_CUDA
402 int VectorSaxpyDevice(
const float &a,
const VectorClass<float> &x, VectorClass<float> &y);
412 int VectorDaxpyDevice(
const double &a,
const VectorClass<double> &x, VectorClass<double> &y);
422 int VectorCaxpyDevice(
const complexs &a,
const VectorClass<complexs> &x, VectorClass<complexs> &y);
432 int VectorZaxpyDevice(
const complexd &a,
const VectorClass<complexd> &x, VectorClass<complexd> &y);
440 int SequentialVectorCreateCusparseDnVec(vector_seq_float &v);
448 int SequentialVectorCreateCusparseDnVec(vector_seq_double &v);
456 int SequentialVectorCreateCusparseDnVec(vector_seq_complexs &v);
464 int SequentialVectorCreateCusparseDnVec(vector_seq_complexd &v);
479 template <
typename T>
480 int VectorPBsearchHost(
const T *v,
const T &val,
int s,
int e,
int &idx,
bool ascending);
491 template <
typename T>
492 int VectorPlotHost(
const VectorVirtualClass<T> &x,
int conditiona,
int conditionb,
int width);
502 int SequentialVectorReadFromFile(SequentialVectorClass<float> &vec,
const char *vecfile,
int idxin);
512 int SequentialVectorReadFromFile(SequentialVectorClass<double> &vec,
const char *vecfile,
int idxin);
522 int SequentialVectorReadFromFile(SequentialVectorClass<complexs> &vec,
const char *vecfile,
int idxin);
532 int SequentialVectorReadFromFile(SequentialVectorClass<complexd> &vec,
const char *vecfile,
int idxin);
542 template <
typename T1,
typename T2>
543 int VectorCopy(VectorClass<T1> &vec_in, VectorClass<T2> &vec2_out);