00001
00002
00003
00004
00005 #ifndef OOQPVECTOR_H
00006 #define OOQPVECTOR_H
00007
00008 #include <cstring>
00009 #include <iostream>
00010 #include <fstream>
00011 using namespace std;
00012 #include "IotrRefCount.h"
00013 #include "OoqpVectorHandle.h"
00014
00022 class OoqpVector : public IotrRefCount {
00023 public:
00024 int n;
00026 int length() { return n; }
00027
00028 OoqpVector( int n_ = 0 );
00029 virtual ~OoqpVector();
00030
00032 virtual void setToZero() = 0;
00034 virtual void setToConstant( double c ) = 0;
00041 virtual void randomize( double alpha, double beta, double *ix ) = 0;
00043 virtual void copyFrom( OoqpVector& v ) = 0;
00045 virtual double infnorm() = 0;
00047 virtual double onenorm() = 0;
00048
00050 virtual void componentMult( OoqpVector& v ) = 0;
00052 virtual void componentDiv ( OoqpVector& v ) = 0;
00057 virtual void scalarMult( double num) = 0;
00058
00059 virtual void writeToStream(ostream& out) const = 0;
00068 virtual void writefToStream( ostream& out,
00069 const char format[] ) const = 0;
00070
00072 virtual void scale( double alpha ) = 0;
00073
00075 virtual void axpy ( double alpha, OoqpVector& x ) = 0;
00077 virtual void axzpy ( double alpha, OoqpVector& x, OoqpVector& z ) = 0;
00079 virtual void axdzpy( double alpha, OoqpVector& x, OoqpVector& z ) = 0;
00080
00082 virtual void addConstant( double c ) = 0;
00083
00088 virtual void gondzioProjection( double rmin, double rmax ) = 0;
00089
00092 virtual void min( double& m, int& index ) = 0;
00094 virtual double dotProductWith( OoqpVector& v ) = 0;
00095
00098 virtual double shiftedDotProductWith( double alpha, OoqpVector& mystep,
00099 OoqpVector& yvec,
00100 double beta, OoqpVector& ystep ) = 0;
00102 virtual void negate() = 0;
00103
00105 virtual void invert() = 0;
00106
00108 virtual int allPositive() = 0;
00109
00111 virtual int numberOfNonzeros() = 0;
00112
00114 virtual int matchesNonZeroPattern( OoqpVector& select ) = 0;
00115
00119 virtual void selectNonZeros( OoqpVector& select ) = 0;
00126 virtual void addSomeConstants( double c, OoqpVector& select ) = 0;
00127
00138 virtual void writefSomeToStream( ostream& out,
00139 const char format[],
00140 OoqpVector& select ) const = 0;
00148 virtual void axdzpy( double alpha, OoqpVector& x,
00149 OoqpVector& z, OoqpVector& select ) = 0;
00150
00155 virtual int somePositive( OoqpVector& select ) = 0;
00163 virtual void divideSome( OoqpVector& div, OoqpVector& select ) = 0;
00164
00170 virtual int isKindOf( int kind ) = 0;
00171
00176 virtual double stepbound(OoqpVector & v, double maxStep ) = 0;
00177
00187 virtual double findBlocking(OoqpVector & wstep_vec,
00188 OoqpVector & u_vec,
00189 OoqpVector & ustep_vec,
00190 double maxStep,
00191 double *w_elt,
00192 double *wstep_elt,
00193 double *u_elt,
00194 double *ustep_elt,
00195 int& first_or_second) = 0;
00196
00198 virtual void copyIntoArray( double v[] ) const = 0;
00200 virtual void copyFromArray( double v[] ) = 0;
00202 virtual void copyFromArray( char v[] ) = 0;
00203 };
00204
00205
00206 enum { kSimpleVector = 0, kPetscVector };
00207
00208 #endif
00209