Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

OoqpVector.h

00001 /* OOQP                                                               *
00002  * Authors: E. Michael Gertz, Stephen J. Wright                       *
00003  * (C) 2001 University of Chicago. See Copyright Notification in OOQP */
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 

Generated on Wed Mar 22 13:58:33 2006 for OOQP by doxygen 1.3.5