HyPar  1.0
Finite-Difference Hyperbolic-Parabolic PDE Solver on Cartesian Grids
std_vec_ops.h
Go to the documentation of this file.
1 
6 #ifndef _STD_VEC_OPS_H_
7 #define _STD_VEC_OPS_H_
8 
9 #include <math.h>
10 #include <vector>
11 #include <basic.h>
12 
14 namespace StdVecOps {
15 
17  inline
18  long sum( const std::vector<int>& a_iv )
19  {
20  long retval(0);
21  for (int i=0; i<a_iv.size(); i++) retval += a_iv[i];
22  return retval;
23  }
24 
26  inline
27  long product( const std::vector<int>& a_iv )
28  {
29  long retval(1);
30  for (int i=0; i<a_iv.size(); i++) retval *= a_iv[i];
31  return retval;
32  }
33 
35  inline
36  void copyFrom( std::vector<int>& a_iv,
37  const int* const a_iv_carr,
38  int a_n
39  )
40  {
41  a_iv.resize(a_n);
42  for (int i=0; i<a_n; i++) a_iv[i] = a_iv_carr[i];
43  return;
44  }
45 
47  inline
48  void add( std::vector<int>& a_iv,
49  const int a_a )
50  {
51  for (int i=0; i<a_iv.size(); i++) a_iv[i] += a_a;
52  return;
53  }
54 
56  inline
57  void copyFrom( std::vector<double>& a_iv,
58  const double* const a_iv_carr,
59  int a_n
60  )
61  {
62  a_iv.resize(a_n);
63  for (int i=0; i<a_n; i++) a_iv[i] = a_iv_carr[i];
64  return;
65  }
66 
69  inline
70  void createNormalVector(std::vector<double>& a_normal_vec,
71  const int* a_vec,
72  const int a_size )
73  {
74  a_normal_vec = std::vector<double>(a_size, 0.0);
75  double magn = 0.0;
76  for (int i=0; i<a_size; i++) {
77  magn += (double)(a_vec[i]*a_vec[i]);
78  }
79  magn = sqrt(magn);
80  if (magn > _MACHINE_ZERO_) {
81  for (int i=0; i<a_size; i++) {
82  a_normal_vec[i] = a_vec[i] / magn;
83  }
84  }
85  return;
86  }
87 
90  inline
91  void createNormalVector(std::vector<double>& a_normal_vec,
92  const std::vector<int>& a_vec )
93  {
94  createNormalVector( a_normal_vec,
95  a_vec.data(),
96  a_vec.size() );
97  return;
98  }
99 
101  inline
102  double compute2Norm( const std::vector<double>& a_a,
103  const std::vector<double>& a_b )
104  {
105  double retval = 0.0;
106 
107  for (int i = 0; i < std::min(a_a.size(),a_b.size()); i++) {
108  retval += ( (a_a[i]-a_b[i]) * (a_a[i]-a_b[i]) );
109  }
110  retval = sqrt(retval);
111 
112  return retval;
113  }
114 
115 }
116 
117 #endif
#define min(a, b)
Definition: math_ops.h:14
#define _MACHINE_ZERO_
Definition: basic.h:26
long sum(const std::vector< int > &a_iv)
Definition: std_vec_ops.h:18
Some basic definitions and macros.
void createNormalVector(std::vector< double > &a_normal_vec, const int *a_vec, const int a_size)
Definition: std_vec_ops.h:70
double compute2Norm(const std::vector< double > &a_a, const std::vector< double > &a_b)
Definition: std_vec_ops.h:102
void add(std::vector< int > &a_iv, const int a_a)
Definition: std_vec_ops.h:48
long product(const std::vector< int > &a_iv)
Definition: std_vec_ops.h:27
void copyFrom(std::vector< int > &a_iv, const int *const a_iv_carr, int a_n)
Definition: std_vec_ops.h:36