00001
00002
00003
00004
00005 #ifndef PETSCVECTOR_H
00006 #define PETSCVECTOR_H
00007
00008 #include <string.h>
00009 #include <iostream.h>
00010 #include "PetscVectorHandle.h"
00011 #include "assert.h"
00012 #include "OoqpVector.h"
00013 #include "petscvec.h"
00014 #include "petsc.h"
00015 #include "petscversion.h"
00016
00017 class PetscVector : public OoqpVector {
00018 protected:
00019 int m;
00020 int preserveVec;
00021 public:
00022 static int instances;
00023 Vec pv;
00024
00025 PetscVector( int n_ );
00026 PetscVector( Vec v );
00027 PetscVector( int m_, int n_ );
00028
00029 virtual ~PetscVector();
00030
00031 virtual int isKindOf( int kind );
00032 virtual void setToZero();
00033 virtual void setToConstant( double c );
00034 virtual void randomize( double alpha, double beta, double *ix );
00035 virtual void copyFrom( OoqpVector& v );
00036 virtual double infnorm();
00037 virtual double onenorm();
00038 virtual void min( double& m, int& index );
00039 virtual double stepbound(OoqpVector & v, double maxStep );
00040 virtual double findBlocking(OoqpVector & wstep_vec,
00041 OoqpVector & u_vec,
00042 OoqpVector & ustep_vec,
00043 double maxStep,
00044 double *w_elt,
00045 double *wstep_elt,
00046 double *u_elt,
00047 double *ustep_elt,
00048 int& first_or_second);
00049
00050 virtual void componentMult( OoqpVector& v );
00051 virtual void componentDiv ( OoqpVector& v );
00052 virtual void writeToStream(ostream& out) const;
00053 virtual void writefToStream( ostream& out,
00054 const char format[] ) const;
00055
00056 virtual void scale( double alpha );
00057
00058 virtual void axpy ( double alpha, OoqpVector& x );
00059 virtual void axzpy ( double alpha, OoqpVector& x, OoqpVector& z );
00060 virtual void axdzpy( double alpha, OoqpVector& x, OoqpVector& z );
00061
00062 virtual void addConstant( double c );
00063 virtual void gondzioProjection( double rmin, double rmax );
00064 virtual double dotProductWith( OoqpVector& v );
00065 virtual double shiftedDotProductWith( double alpha, OoqpVector& mystep,
00066 OoqpVector& yvec,
00067 double beta, OoqpVector& ystep );
00068 virtual void negate();
00069 virtual void invert();
00070 virtual int allPositive();
00071
00072 virtual int matchesNonZeroPattern( OoqpVector& select );
00073 virtual void selectNonZeros( OoqpVector& select );
00074 virtual int numberOfNonzeros();
00075 virtual void addSomeConstants( double c, OoqpVector& select );
00076 virtual void writefSomeToStream( ostream& out,
00077 const char format[],
00078 OoqpVector& select ) const;
00079 virtual void axdzpy( double alpha, OoqpVector& x,
00080 OoqpVector& z, OoqpVector& select );
00081
00082 virtual int somePositive( OoqpVector& select );
00083 virtual void divideSome( OoqpVector& div, OoqpVector& select );
00084 virtual void copyIntoArray( double v[] ) const;
00085 virtual void copyFromArray( double v[] );
00086 virtual void copyFromArray( char v[] );
00087
00088 int getSize() { return n; };
00089 int getLocalSize() { return m; };
00090 };
00091
00092 #endif
00093