00001 #ifndef SUNDANCEVECTOR_H
00002 #define SUNDANCEVECTOR_H
00003
00004 #include "TSFDefs.h"
00005 #include "TSFVectorType.h"
00006 #include "TSFVectorBase.h"
00007 #include "TSFVector.h"
00008 #include "AbstractFunctionSpace.h"
00009 #include <string>
00010
00011 namespace Sundance
00012 {
00013 using namespace TSF;
00014
00015 using std::string;
00016
00017
00018
00019 class SundanceVector : public TSFVectorBase
00020 {
00021 public:
00022 SundanceVector(const Expr& expr);
00023
00024
00025 virtual void negate() {vectorRep().negate();}
00026
00027
00028 virtual void add(const TSFVector& other) ;
00029
00030
00031 virtual void subtract(const TSFVector& other);
00032
00033
00034 virtual void daxpy(const TSFVector& other, const TSFReal& a);
00035
00036
00037 virtual void eMult(const TSFVector& other);
00038
00039
00040 virtual void scalarMult(const TSFReal& scalar) {vectorRep().scalarMult(scalar);}
00041
00042
00043 virtual TSFReal dot(const TSFVector& other) const ;
00044
00045
00046 virtual TSFReal norm2Squared() const {return vectorRep().norm2();}
00047
00048
00049 virtual TSFReal norm2() const {return vectorRep().norm2();}
00050
00051
00052 virtual TSFReal norm1() const {return vectorRep().norm1();}
00053
00054
00055 virtual TSFReal normInf() const {return vectorRep().normInf();}
00056
00057
00058 virtual void zero() {vectorRep().zero();}
00059
00060
00061 virtual TSFReal sumElements() const {return vectorRep().sumElements();}
00062
00063
00064
00065
00066
00067 virtual TSFVectorBase* deepCopy() const ;
00068
00069
00070 virtual void print(ostream& os) const ;
00071
00072
00073 virtual string toString() const ;
00074
00075
00076
00077 virtual void synchronizeGhostValues() const
00078 {getVectorRep().synchronizeGhostValues();}
00079
00080
00081 virtual void invalidateGhostValues() {getVectorRep().invalidateGhostValues();}
00082
00083
00084 private:
00085 const TSFVector& getVectorRep() const ;
00086
00087 TSFVector& getVectorRep() ;
00088
00089 Expr expr_;
00090 }