00001
00002
00003
00004
00005 #ifndef SIMPLEVECTOR
00006 #define SIMPLEVECTOR
00007
00008 #include "OoqpVector.h"
00009 #include "SimpleVectorHandle.h"
00010
00016 class SimpleVector : public OoqpVector {
00017 protected:
00018 int preserveVec;
00019 double * v;
00020 public:
00021 SimpleVector( int nx );
00022 SimpleVector( double * v, int nx );
00024
00027 double & operator[]( int i ) {
00028 #ifdef RANGECHECKS
00029 assert( i > 0 && i < n );
00030 #endif
00031 return v[i];
00032 }
00033 const double & operator[]( int i ) const
00034 {
00035 #ifdef RANGECHECKS
00036 assert( i > 0 && i < n );
00037 #endif
00038 return v[i];
00039 }
00041 virtual ~SimpleVector();
00042
00043 virtual void copyIntoArray( double v[] ) const;
00044 virtual void copyFromArray( double v[] );
00045 virtual void copyFromArray( char v[] );
00046 virtual void setToZero();
00047 virtual void setToConstant( double c );
00048 virtual void randomize( double alpha, double beta, double *ix );
00049 virtual void copyFrom( OoqpVector& v );
00050 virtual double infnorm();
00051 virtual double onenorm();
00052 virtual void min( double& m, int& index );
00053
00054 virtual void componentMult( OoqpVector& v );
00055 virtual void scalarMult( double num);
00056 virtual void printSolutionToStdErr( OoqpVector& v );
00057 virtual void componentDiv ( OoqpVector& v );
00058 virtual void writeToStream(ostream& out) const;
00059 virtual void writefToStream( ostream& out,
00060 const char format[] ) const;
00061
00062 virtual void scale( double alpha );
00063
00064 virtual void axpy ( double alpha, OoqpVector& x );
00065 virtual void axzpy ( double alpha, OoqpVector& x, OoqpVector& z );
00066 virtual void axdzpy( double alpha, OoqpVector& x, OoqpVector& z );
00067
00068 virtual void addConstant( double c );
00069
00075 virtual void gondzioProjection( double rmin, double rmax );
00076 virtual double dotProductWith( OoqpVector& v );
00077 virtual double shiftedDotProductWith( double alpha, OoqpVector& mystep,
00078 OoqpVector& yvec,
00079 double beta, OoqpVector& ystep );
00080 virtual void negate();
00081 virtual void invert();
00082 virtual int allPositive();
00083 virtual int numberOfNonzeros();
00084
00085 virtual int matchesNonZeroPattern( OoqpVector& select );
00086 virtual void selectNonZeros( OoqpVector& select );
00087 virtual void addSomeConstants( double c, OoqpVector& select );
00088 virtual void writefSomeToStream( ostream& out,
00089 const char format[],
00090 OoqpVector& select ) const;
00091 virtual void axdzpy( double alpha, OoqpVector& x,
00092 OoqpVector& z, OoqpVector& select );
00093
00094 virtual int isKindOf( int kind );
00095
00096 virtual int somePositive( OoqpVector& select );
00097 virtual void divideSome( OoqpVector& div, OoqpVector& select );
00098
00099 virtual double stepbound(OoqpVector & v, double maxStep );
00100 virtual double findBlocking(OoqpVector & wstep_vec,
00101 OoqpVector & u_vec,
00102 OoqpVector & ustep_vec,
00103 double maxStep,
00104 double *w_elt,
00105 double *wstep_elt,
00106 double *u_elt,
00107 double *ustep_elt,
00108 int& first_or_second);
00110 double * elements() { return v; };
00111 };
00112
00113 #endif