ParGeMSLR
vectorops.hpp
Go to the documentation of this file.
1 #ifndef PARGEMSLR_VECTOROPS_H
2 #define PARGEMSLR_VECTOROPS_H
3 
12 #include <vector>
13 
14 #include "../utils/utils.hpp"
15 #include "vector.hpp"
16 #include "int_vector.hpp"
17 #include "sequential_vector.hpp"
18 #include "parallel_vector.hpp"
19 
20 using namespace std;
21 
22 namespace pargemslr
23 {
24 
31  PrecisionEnum GetVectorPrecision(const VectorVirtualClass<int> &vec);
32 
39  PrecisionEnum GetVectorPrecision(const VectorVirtualClass<long int> &vec);
40 
47  PrecisionEnum GetVectorPrecision(const VectorVirtualClass<float> &vec);
48 
55  PrecisionEnum GetVectorPrecision(const VectorVirtualClass<double> &vec);
56 
63  PrecisionEnum GetVectorPrecision(const VectorVirtualClass<complexs> &vec);
64 
71  PrecisionEnum GetVectorPrecision(const VectorVirtualClass<complexd> &vec);
72 
79  PrecisionEnum GetVectorPPrecision(const VectorVirtualClass<int> *vec);
80 
87  PrecisionEnum GetVectorPPrecision(const VectorVirtualClass<long int> *vec);
88 
95  PrecisionEnum GetVectorPPrecision(const VectorVirtualClass<float> *vec);
96 
103  PrecisionEnum GetVectorPPrecision(const VectorVirtualClass<double> *vec);
104 
111  PrecisionEnum GetVectorPPrecision(const VectorVirtualClass<complexs> *vec);
112 
119  PrecisionEnum GetVectorPPrecision(const VectorVirtualClass<complexd> *vec);
120 
121 #ifdef PARGEMSLR_CUDA
122 
128  int VectorRandDevice( VectorClass<float> &x);
129 
136  int VectorRandDevice( VectorClass<double> &x);
137 
144  int VectorRandDevice( VectorClass<complexs> &x);
145 
152  int VectorRandDevice( VectorClass<complexd> &x);
153 
154 #endif
155 
156 
166  template <typename T>
167  int VectorPDotTemplate( int n, const T *x, const T *y, T &t );
168 
177  int VectorDot( const vector_base_float &x, const vector_base_float &y, float &t);
178 
187  int VectorDot( const vector_base_double &x, const vector_base_double &y, double &t);
188 
197  int VectorDot( const vector_base_complexs &x, const vector_base_complexs &y, complexs &t);
198 
207  int VectorDot( const vector_base_complexd &x, const vector_base_complexd &y, complexd &t);
208 
209 #ifdef PARGEMSLR_CUDA
210 
219  int VectorSdotDevice( const vector_base_float &x, const vector_base_float &y, float &t);
220 
229  int VectorDdotDevice( const vector_base_double &x, const vector_base_double &y, double &t);
230 
239  int VectorCdotDevice( const vector_base_complexs &x, const vector_base_complexs &y, complexs &t);
240 
249  int VectorZdotDevice( const vector_base_complexd &x, const vector_base_complexd &y, complexd &t);
250 
251 #endif
252 
261  template <typename T>
262  int VectorPScaleTemplate( int n, T *x, const T&a);
263 
271  int VectorScale(VectorClass<float> &x, const float &a);
272 
280  int VectorScale(VectorClass<double> &x, const double &a);
281 
289  int VectorScale(VectorClass<complexs> &x, const complexs &a);
290 
298  int VectorScale(VectorClass<complexd> &x, const complexd &a);
299 
300 #ifdef PARGEMSLR_CUDA
301 
309  int VectorSscaleDevice(VectorClass<float> &x, const float &a);
310 
318  int VectorDscaleDevice(VectorClass<double> &x, const double &a);
319 
327  int VectorCscaleDevice(VectorClass<complexs> &x, const complexs &a);
328 
336  int VectorZscaleDevice(VectorClass<complexd> &x, const complexd &a);
337 
338 #endif
339 
349  template <typename T>
350  int VectorPAxpyTemplate( int n, const T &a, const T *x, T *y);
351 
360  int VectorAxpy( const float &a, const VectorClass<float> &x, VectorClass<float> &y);
361 
370  int VectorAxpy( const double &a, const VectorClass<double> &x, VectorClass<double> &y);
371 
380  int VectorAxpy( const complexs &a, const VectorClass<complexs> &x, VectorClass<complexs> &y);
381 
390  int VectorAxpy( const complexd &a, const VectorClass<complexd> &x, VectorClass<complexd> &y);
391 
392 #ifdef PARGEMSLR_CUDA
393 
402  int VectorSaxpyDevice( const float &a, const VectorClass<float> &x, VectorClass<float> &y);
403 
412  int VectorDaxpyDevice( const double &a, const VectorClass<double> &x, VectorClass<double> &y);
413 
422  int VectorCaxpyDevice( const complexs &a, const VectorClass<complexs> &x, VectorClass<complexs> &y);
423 
432  int VectorZaxpyDevice( const complexd &a, const VectorClass<complexd> &x, VectorClass<complexd> &y);
433 
440  int SequentialVectorCreateCusparseDnVec(vector_seq_float &v);
441 
448  int SequentialVectorCreateCusparseDnVec(vector_seq_double &v);
449 
456  int SequentialVectorCreateCusparseDnVec(vector_seq_complexs &v);
457 
464  int SequentialVectorCreateCusparseDnVec(vector_seq_complexd &v);
465 
466 #endif
467 
479  template <typename T>
480  int VectorPBsearchHost(const T *v, const T &val, int s, int e, int &idx, bool ascending);
481 
491  template <typename T>
492  int VectorPlotHost( const VectorVirtualClass<T> &x, int conditiona, int conditionb, int width);
493 
502  int SequentialVectorReadFromFile(SequentialVectorClass<float> &vec, const char *vecfile, int idxin);
503 
512  int SequentialVectorReadFromFile(SequentialVectorClass<double> &vec, const char *vecfile, int idxin);
513 
522  int SequentialVectorReadFromFile(SequentialVectorClass<complexs> &vec, const char *vecfile, int idxin);
523 
532  int SequentialVectorReadFromFile(SequentialVectorClass<complexd> &vec, const char *vecfile, int idxin);
533 
542  template <typename T1, typename T2>
543  int VectorCopy(VectorClass<T1> &vec_in, VectorClass<T2> &vec2_out);
544 
545 }
546 
547 #endif
int_vector.hpp
Integer vector data structure, not a vector_base class.
vector.hpp
The virtual vector classes.
parallel_vector.hpp
Parallel vector data structure.
sequential_vector.hpp
Sequential vector data structure.
pargemslr::PrecisionEnum
PrecisionEnum
The precision enum.
Definition: utils.hpp:453