Changeset b1d8ab5 for molecuilder/src/gslvector.cpp
- Timestamp:
- Mar 1, 2010, 8:28:00 PM (15 years ago)
- Children:
- c0c33f
- Parents:
- 850e50
- git-author:
- Frederik Heber <heber@…> (03/01/10 20:24:45)
- git-committer:
- Frederik Heber <heber@…> (03/01/10 20:28:00)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
molecuilder/src/gslvector.cpp
r850e50 rb1d8ab5 6 6 */ 7 7 8 #include <cassert> 9 #include <cmath> 10 8 11 #include "gslvector.hpp" 12 #include "defs.hpp" 9 13 10 14 /** Constructor of class GSLVector. … … 27 31 }; 28 32 33 /** Copy constructor of class GSLVector. 34 * Allocates GSL structures and copies components from \a *src. 35 * \param *src source vector 36 */ 37 GSLVector::GSLVector(const GSLVector & src) : dimension(src.dimension) 38 { 39 vector = gsl_vector_alloc(dimension); 40 gsl_vector_memcpy (vector, src.vector); 41 }; 42 29 43 /** Destructor of class GSLVector. 30 44 * Frees GSL structures … … 33 47 { 34 48 gsl_vector_free(vector); 35 dimension = 0;36 49 }; 37 50 … … 52 65 * \return m-th element of vector 53 66 */ 54 double GSLVector::Get(size_t m) 67 double GSLVector::Get(size_t m) const 55 68 { 56 69 return gsl_vector_get (vector, m); … … 72 85 * \return pointer to \a m-th element 73 86 */ 74 double *GSLVector::Pointer(size_t m) 87 double *GSLVector::Pointer(size_t m) const 75 88 { 76 89 return gsl_vector_ptr (vector, m); … … 82 95 * \return const pointer to \a m-th element 83 96 */ 84 const double *GSLVector::const_Pointer(size_t m) 97 const double *GSLVector::const_Pointer(size_t m) const 85 98 { 86 99 return gsl_vector_const_ptr (vector, m); 100 }; 101 102 /** Returns the dimension of the vector. 103 * \return dimension of vector 104 */ 105 #ifdef HAVE_INLINE 106 inline 107 #endif 108 size_t GSLVector::GetDimension() const 109 { 110 return dimension; 87 111 }; 88 112 … … 128 152 return gsl_vector_reverse (vector); 129 153 }; 154 155 156 /* ========================== Operators =============================== */ 157 /** Compares GSLVector \a to GSLVector \a b component-wise. 158 * \param a base GSLVector 159 * \param b GSLVector components to add 160 * \return a == b 161 */ 162 bool operator==(const GSLVector& a, const GSLVector& b) 163 { 164 bool status = true; 165 assert(a.GetDimension() == b.GetDimension() && "Dimenions of GSLVectors to compare differ"); 166 for (size_t i=0;i<a.GetDimension();i++) 167 status = status && (fabs(a.Get(i) - b.Get(i)) < MYEPSILON); 168 return status; 169 }; 170 171 /** Sums GSLVector \a to this lhs component-wise. 172 * \param a base GSLVector 173 * \param b GSLVector components to add 174 * \return lhs + a 175 */ 176 const GSLVector& operator+=(GSLVector& a, const GSLVector& b) 177 { 178 assert(a.GetDimension() == b.GetDimension() && "Dimenions of GSLVectors to compare differ"); 179 for (size_t i=0;i<a.GetDimension();i++) 180 a.Set(i,a.Get(i)+b.Get(i)); 181 return a; 182 }; 183 184 /** Subtracts GSLVector \a from this lhs component-wise. 185 * \param a base GSLVector 186 * \param b GSLVector components to add 187 * \return lhs - a 188 */ 189 const GSLVector& operator-=(GSLVector& a, const GSLVector& b) 190 { 191 assert(a.GetDimension() == b.GetDimension() && "Dimenions of GSLVectors to compare differ"); 192 for (size_t i=0;i<a.GetDimension();i++) 193 a.Set(i,a.Get(i)-b.Get(i)); 194 return a; 195 }; 196 197 /** factor each component of \a a times a double \a m. 198 * \param a base GSLVector 199 * \param m factor 200 * \return lhs.Get(i) * m 201 */ 202 const GSLVector& operator*=(GSLVector& a, const double m) 203 { 204 for (size_t i=0;i<a.GetDimension();i++) 205 a.Set(i,a.Get(i)*m); 206 return a; 207 }; 208 209 /** Sums two GSLVectors \a and \b component-wise. 210 * \param a first GSLVector 211 * \param b second GSLVector 212 * \return a + b 213 */ 214 GSLVector const operator+(const GSLVector& a, const GSLVector& b) 215 { 216 GSLVector x(a); 217 for (size_t i=0;i<a.GetDimension();i++) 218 x.Set(i,a.Get(i)+b.Get(i)); 219 return x; 220 }; 221 222 /** Subtracts GSLVector \a from \b component-wise. 223 * \param a first GSLVector 224 * \param b second GSLVector 225 * \return a - b 226 */ 227 GSLVector const operator-(const GSLVector& a, const GSLVector& b) 228 { 229 assert(a.GetDimension() == b.GetDimension() && "Dimenions of GSLVectors to compare differ"); 230 GSLVector x(a); 231 for (size_t i=0;i<a.GetDimension();i++) 232 x.Set(i,a.Get(i)-b.Get(i)); 233 return x; 234 }; 235 236 /** Factors given GSLVector \a a times \a m. 237 * \param a GSLVector 238 * \param m factor 239 * \return m * a 240 */ 241 GSLVector const operator*(const GSLVector& a, const double m) 242 { 243 GSLVector x(a); 244 for (size_t i=0;i<a.GetDimension();i++) 245 x.Set(i,a.Get(i)*m); 246 return x; 247 }; 248 249 /** Factors given GSLVector \a a times \a m. 250 * \param m factor 251 * \param a GSLVector 252 * \return m * a 253 */ 254 GSLVector const operator*(const double m, const GSLVector& a ) 255 { 256 GSLVector x(a); 257 for (size_t i=0;i<a.GetDimension();i++) 258 x.Set(i,a.Get(i)*m); 259 return x; 260 }; 261 262 ostream& operator<<(ostream& ost, const GSLVector& m) 263 { 264 ost << "("; 265 for (size_t i=0;i<m.GetDimension();i++) { 266 ost << m.Get(i); 267 if (i != 2) 268 ost << ","; 269 } 270 ost << ")"; 271 return ost; 272 }; 273 274 /* ====================== Checking State ============================ */ 275 /** Checks whether vector has all components zero. 276 * @return true - vector is zero, false - vector is not 277 */ 278 bool GSLVector::IsZero() const 279 { 280 return (fabs(Get(0))+fabs(Get(1))+fabs(Get(2)) < MYEPSILON); 281 }; 282 283 /** Checks whether vector has length of 1. 284 * @return true - vector is normalized, false - vector is not 285 */ 286 bool GSLVector::IsOne() const 287 { 288 double NormValue = 0.; 289 for (size_t i=dimension;--i;) 290 NormValue += Get(i)*Get(i); 291 return (fabs(NormValue - 1.) < MYEPSILON); 292 }; 293
Note:
See TracChangeset
for help on using the changeset viewer.