00001
00002
00003
00004
00005 #ifndef OOQPVECTOR_H
00006 #define OOQPVECTOR_H
00007
00008 #include <string.h>
00009 #include <iostream.h>
00010 #include "IotrRefCount.h"
00011
00012
00020 class OoqpVector : public IotrRefCount {
00021 public:
00022 int n;
00024 int length() { return n; }
00025
00026 OoqpVector( int n_ = 0 );
00027 virtual ~OoqpVector();
00028
00030 virtual void setToZero() = 0;
00032 virtual void setToConstant( double c ) = 0;
00039 virtual void randomize( double alpha, double beta, double *ix ) = 0;
00041 virtual void copyFrom( OoqpVector& v ) = 0;
00043 virtual double infnorm() = 0;
00045 virtual double onenorm() = 0;
00046
00048 virtual void componentMult( OoqpVector& v ) = 0;
00050 virtual void componentDiv ( OoqpVector& v ) = 0;
00055 virtual void scalarMult( double num) = 0;
00056
00057 virtual void writeToStream(ostream& out) const = 0;
00066 virtual void writefToStream( ostream& out,
00067 const char format[] ) const = 0;
00068
00070 virtual void scale( double alpha ) = 0;
00071
00073 virtual void axpy ( double alpha, OoqpVector& x ) = 0;
00075 virtual void axzpy ( double alpha, OoqpVector& x, OoqpVector& z ) = 0;
00077 virtual void axdzpy( double alpha, OoqpVector& x, OoqpVector& z ) = 0;
00078
00080 virtual void addConstant( double c ) = 0;
00081
00086 virtual void gondzioProjection( double rmin, double rmax ) = 0;
00087
00090 virtual void min( double& m, int& index ) = 0;
00092 virtual double dotProductWith( OoqpVector& v ) = 0;
00093
00096 virtual double shiftedDotProductWith( double alpha, OoqpVector& mystep,
00097 OoqpVector& yvec,
00098 double beta, OoqpVector& ystep ) = 0;
00100 virtual void negate() = 0;
00101
00103 virtual void invert() = 0;
00104
00106 virtual int allPositive() = 0;
00107
00109 virtual int numberOfNonzeros() = 0;
00110
00112 virtual int matchesNonZeroPattern( OoqpVector& select ) = 0;
00113
00117 virtual void selectNonZeros( OoqpVector& select ) = 0;
00124 virtual void addSomeConstants( double c, OoqpVector& select ) = 0;
00125
00136 virtual void writefSomeToStream( ostream& out,
00137 const char format[],
00138 OoqpVector& select ) const = 0;
00146 virtual void axdzpy( double alpha, OoqpVector& x,
00147 OoqpVector& z, OoqpVector& select ) = 0;
00148
00153 virtual int somePositive( OoqpVector& select ) = 0;
00161 virtual void divideSome( OoqpVector& div, OoqpVector& select ) = 0;
00162
00168 virtual int isKindOf( int kind ) = 0;
00169
00174 virtual double stepbound(OoqpVector & v, double maxStep ) = 0;
00175
00185 virtual double findBlocking(OoqpVector & wstep_vec,
00186 OoqpVector & u_vec,
00187 OoqpVector & ustep_vec,
00188 double maxStep,
00189 double *w_elt,
00190 double *wstep_elt,
00191 double *u_elt,
00192 double *ustep_elt,
00193 int& first_or_second) = 0;
00194
00196 virtual void copyIntoArray( double v[] ) const = 0;
00198 virtual void copyFromArray( double v[] ) = 0;
00200 virtual void copyFromArray( char v[] ) = 0;
00201 };
00202
00203
00204 enum { kSimpleVector = 0, kPetscVector };
00205
00206 #endif
00207