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