Path: blob/devel/ElmerGUI/netgen/libsrc/linalg/vector.hpp
3206 views
#ifndef FILE_VECTOR1#define FILE_VECTOR23/* *************************************************************************/4/* File: vector.hh */5/* Author: Joachim Schoeberl */6/* Date: 01. Oct. 94 */7/* *************************************************************************/8910class FlatVector11{12protected:13int s;14double *data;15public:16FlatVector () { ; }17FlatVector (int as, double * adata)18{ s = as; data = adata; }1920int Size () const21{ return s; }2223FlatVector & operator= (const FlatVector & v)24{ memcpy (data, v.data, s*sizeof(double)); return *this; }2526FlatVector & operator= (double scal)27{28for (int i = 0; i < s; i++) data[i] = scal;29return *this;30}3132double & operator[] (int i) { return data[i]; }33const double & operator[] (int i) const { return data[i]; }34double & operator() (int i) { return data[i]; }35const double & operator() (int i) const { return data[i]; }3637double & Elem (int i) { return data[i-1]; }38const double & Get (int i) const { return data[i-1]; }39void Set (int i, double val) { data[i-1] = val; }4041FlatVector & operator*= (double scal)42{43for (int i = 0; i < s; i++) data[i] *= scal;44return *this;45}4647FlatVector & Add (double scal, const FlatVector & v2)48{49for (int i = 0; i < s; i++)50data[i] += scal * v2[i];51return *this;52}5354FlatVector & Set (double scal, const FlatVector & v2)55{56for (int i = 0; i < s; i++)57data[i] = scal * v2[i];58return *this;59}6061FlatVector & Set2 (double scal1, const FlatVector & v1,62double scal2, const FlatVector & v2)63{64for (int i = 0; i < s; i++)65data[i] = scal1 * v1[i] + scal2 * v2[i];66return *this;67}6869double L2Norm() const70{71double sum = 0;72for (int i = 0; i < s; i++)73sum += data[i] * data[i];74return sqrt (sum);75}7677friend double operator* (const FlatVector & v1, const FlatVector & v2);78};79808182class Vector : public FlatVector83{8485public:86Vector ()87{ s = 0; data = 0; }88Vector (int as)89{ s = as; data = new double[s]; }90~Vector ()91{ delete [] data; }9293Vector & operator= (const FlatVector & v)94{ memcpy (data, &v.Get(1), s*sizeof(double)); return *this; }9596Vector & operator= (double scal)97{98for (int i = 0; i < s; i++) data[i] = scal;99return *this;100}101102void SetSize (int as)103{104if (s != as)105{106s = as;107delete [] data;108data = new double [s];109}110}111112};113114115inline double operator* (const FlatVector & v1, const FlatVector & v2)116{117double sum = 0;118for (int i = 0; i < v1.s; i++)119sum += v1.data[i] * v2.data[i];120return sum;121}122123124125126inline ostream & operator<< (ostream & ost, const FlatVector & v)127{128for (int i = 0; i < v.Size(); i++)129ost << " " << setw(7) << v[i];130return ost;131}132133134135#endif136137138139140