Memosa-FVM  0.2
VectorTranspose.h
Go to the documentation of this file.
1 // This file os part of FVM
2 // Copyright (c) 2012 FVM Authors
3 // See LICENSE file for terms.
4 
5 #ifndef _VECTORTRANSPOSE_H_
6 #define _VECTORTRANSPOSE_H_
7 
8 #include "NumType.h"
9 
10 #include "Vector.h"
11 #include "SquareTensor.h"
12 
13 template<class T, int N>
15 {
16 public:
20  typedef T T_NumType;
21  enum {Length = N};
22 
23  static int NumPy_TypeNum;
24 
26  {}
27 
29  _v(x._v)
30  {}
31 
33  _v(v)
34  {}
35 
36  static string getTypeName()
37  {
38  return "VectorTranspose<" + NumTypeTraits<T>::getTypeName() +
39  "," + intAsString(N) +
40  ">";
41  }
42  static int getDimension() {return NumTypeTraits<T>::getDimension()+1;}
43 
44  static void getShape(int *shp) { *shp = N; NumTypeTraits<T>::getShape(shp+1);}
45 
46  static int getDataSize()
47  {
49  }
50 
51  T& operator[](int n) {return _v[n];}
52  const T& operator[](int n) const {return _v[n];}
53 
55  {
56  _v = o;
57  return *this;
58  }
59 
60  VectorTranspose& operator=(const int o)
61  {
62  _v = o;
63  return *this;
64  }
65 
66 
68  {
69  _v = o._v;
70  return *this;
71  }
72 
74  {
75  return VectorTranspose(-_v);
76  }
77 
79  {
80  _v += o._v;
81  return *this;
82  }
83 
85  {
86  _v -= o._v;
87  return *this;
88  }
89 
91  {
92  _v /= s;
93  return *this;
94  }
95 
96  // elementwise operation
98  {
99  _v /= o._v;
100  return *this;
101  }
102 
104  {
105  _v *= s;
106  return *this;
107  }
108 
110  {
111  return dot(_v,o);
112  }
113 
114 
115  // elementwise operation
117  {
118  _v *= o._v;
119  return *this;
120  }
121 
123  {
125  r.zero();
126  for(int i=0;i<N;i++)
127  for(int j=0;j<N;j++)
128  r(i,j)=o[i]*_v[j];
129  return r;
130  }
131 
132  void zero()
133  {
134  _v.zero();
135  }
136 
138  {
139  VectorTranspose z;
140  z.zero();
141  return z;
142  }
143 
144  bool operator<(const double tolerance) const
145  {
146  return _v < tolerance;
147  }
148 
149  void printFromC(ostream &os) const
150  {
151  _v.printFromC(os);
152  os << "^T";
153  }
154 
156  {
158  }
159 
161  const VectorTranspose& v0,
162  const VectorTranspose& v1)
163  {
165  }
166 
167  static void safeDivide(VectorTranspose& x, const VectorTranspose& y)
168  {
170  }
171 
172  static void normalize(VectorTranspose& x, const VectorTranspose& y)
173  {
175  }
176 
177  static void setMax(VectorTranspose& x, const VectorTranspose& y)
178  {
180  }
181 
182  static void reduceSum(T_Scalar& sum, const This_T& x)
183  {
184  Vector<T,N>::reduceSum(sum,x._v);
185  }
186 
187 private:
189 };
190 
191 template<class T, int N>
193 
194 template<class T, int N>
197 {
198  return VectorTranspose<T,N>(a) += b;
199 }
200 
201 template<class T, int N>
204 {
205  return VectorTranspose<T,N>(a) -= b;
206 }
207 
208 template<class T, int N>
211 {
212  return -VectorTranspose<T,N>(a);
213 }
214 
215 template<class T, int N>
217 operator*(const T s, const VectorTranspose<T,N>& a)
218 {
219  return VectorTranspose<T,N>(a) *= s;
220 }
221 
222 template<class T, int N>
224 operator*(const VectorTranspose<T,N>& a, const T s)
225 {
226  return VectorTranspose<T,N>(a) *= s;
227 }
228 
229 template<class T, int N>
230 T
232 {
233  return VectorTranspose<T,N>(a) *= b;
234 }
235 
236 // does elemenwise operation
237 template<class T, int N>
240 {
241  return VectorTranspose<T,N>(a) *= b;
242 }
243 
244 template<class T, int N>
246 operator/(const VectorTranspose<T,N>& a, const T s)
247 {
248  return VectorTranspose<T,N>(a) /= s;
249 }
250 
251 // does elemenwise operation
252 template<class T, int N>
255 {
256  return VectorTranspose<T,N>(a) /= b;
257 }
258 
259 template<class T, int N>
260 inline ostream& operator<<(ostream &os,
261  const VectorTranspose<T,N> &v)
262 {
263  v.printFromC(os);
264  return os;
265 }
266 
267 #endif
T & operator[](int n)
VectorTranspose & operator+=(const VectorTranspose &o)
SquareTensor< T, N > getTensor(const Vector< T, N > &o)
VectorTranspose< T, N > operator*(const T s, const VectorTranspose< T, N > &a)
static int NumPy_TypeNum
static void accumulateOneNorm(VectorTranspose &sum, const VectorTranspose &v)
VectorTranspose(const VectorTranspose &x)
VectorTranspose< T, N > operator+(const VectorTranspose< T, N > &a, const VectorTranspose< T, N > &b)
Definition: Vector.h:19
static void setMax(VectorTranspose &x, const VectorTranspose &y)
VectorTranspose< T, N > This_T
static void normalize(Vector &x, const Vector &y)
Definition: Vector.h:213
VectorTranspose & operator*=(const T s)
VectorTranspose operator-()
static void accumulateOneNorm(Vector &sum, const Vector &v)
Definition: Vector.h:189
VectorTranspose & operator*=(const VectorTranspose &o)
VectorTranspose(const Vector< T, N > &v)
VectorTranspose< T, N > operator/(const VectorTranspose< T, N > &a, const T s)
static int getDimension()
static void accumulateDotProduct(VectorTranspose &sum, const VectorTranspose &v0, const VectorTranspose &v1)
ostream & operator<<(ostream &os, const VectorTranspose< T, N > &v)
VectorTranspose & operator=(const VectorTranspose &o)
void printFromC(ostream &os) const
static void accumulateDotProduct(Vector &sum, const Vector &v0, const Vector &v1)
Definition: Vector.h:195
VectorTranspose & operator-=(const VectorTranspose &o)
NumTypeTraits< T >::T_Scalar T_Scalar
const T & operator[](int n) const
static void reduceSum(T_Scalar &sum, const This_T &x)
VectorTranspose & operator=(const int o)
string intAsString(const int i)
Definition: Vector.h:11
static void normalize(VectorTranspose &x, const VectorTranspose &y)
static void reduceSum(T_Scalar &sum, const This_T &x)
Definition: Vector.h:201
NumTypeTraits< T >::T_BuiltIn T_BuiltIn
VectorTranspose & operator/=(const VectorTranspose &o)
static VectorTranspose getZero()
static void safeDivide(Vector &x, const Vector &y)
Definition: Vector.h:207
static string getTypeName()
T dot(const Vector< T, 3 > &a, const Vector< T, 3 > &b)
Definition: Vector.h:253
bool operator<(const double tolerance) const
static void getShape(int *shp)
static void safeDivide(VectorTranspose &x, const VectorTranspose &y)
static void setMax(Vector &x, const Vector &y)
Definition: Vector.h:221
VectorTranspose & operator=(const T &o)
VectorTranspose< T, N > operator-(const VectorTranspose< T, N > &a, const VectorTranspose< T, N > &b)
static int getDataSize()
VectorTranspose & operator/=(const T s)
Vector< T, N > _v
T operator*=(const Vector< T, N > &o)