Actual source code: taovec.h

  1: #ifndef TAOVECTOR_H
  2: #define TAOVECTOR_H


  5: #include "tao_basictypes.h"


  8: /** 
  9:     An abstract class representing the implementation of a TAO Vector. 
 10: */
 11: class TaoIndexSet;

 13: class TaoVec {

 15: protected:
 16: 
 17: public:

 19:   virtual ~TaoVec(void){};
 20: 
 21:   void* VecObject;

 23:   virtual int Clone(TaoVec**);
 24:   int CloneVecs(int, TaoVec***);
 25:   int DestroyVecs(int, TaoVec**);

 27:   virtual int Compatible(TaoVec*, TaoTruth*);

 29:   /** Set all elements of this Tao Vector to zero. */
 30:   virtual int SetToZero();
 31:   /** Set all elements of this Tao Vector to the constant value c */
 32:   virtual int SetToConstant( double );

 34:   /** Copy the elements of one vector to another */
 35:   virtual int CopyFrom( TaoVec* );

 37:   virtual int ScaleCopyFrom( double, TaoVec* );

 39:   /** Return the norm of this Tao Vector. */
 40:   virtual int NormInfinity( double* );
 41:   virtual int Norm1( double* );
 42:   virtual int Norm2( double* );
 43:   virtual int Norm2squared( double* );

 45:   /** Multiply the components of this Tao Vector by the components of v. */
 46:   virtual int PointwiseMultiply( TaoVec* , TaoVec* );

 48:   /** Divide the components of this Tao Vector by the components of v. */
 49:   virtual int PointwiseDivide( TaoVec* , TaoVec* );

 51:   /** Set the elements of one vector to the mi of corresponding elements of two compatible vectors */
 52:   virtual int PointwiseMaximum( TaoVec* , TaoVec*);

 54:   virtual int PointwiseMinimum( TaoVec* , TaoVec*);

 56:   virtual int Median( TaoVec* , TaoVec* , TaoVec* );

 58:   /** Calculate the Billups composition form of the Fischer function given
 59:       x, f, l, u.  The smoothed version takes the smoothing parameter for each
 60:       component as an additional argument.
 61:   */
 62:   virtual int  Fischer(TaoVec *, TaoVec *, TaoVec *, TaoVec *);
 63:   virtual int SFischer(TaoVec *, TaoVec *, TaoVec *, TaoVec *, double);

 65:   /** Scale each element of this Tao Vector by the constant alpha */
 66:   virtual int Scale( double );

 68:   /** this += alpha * x */
 69:   virtual int Axpy  ( double , TaoVec* );

 71:   /** this = alpha * this + x */
 72:   virtual int Aypx  ( double , TaoVec* );

 74:   virtual int Axpby  ( double , TaoVec*, double  );

 76:   /** this = alpha * x + beta *y */
 77:   virtual int Waxpby( double , TaoVec*, double , TaoVec* );

 79:   /** Take the absolute value of the elements */
 80:   virtual int AbsoluteValue( );

 82:   /** Take the minimum of the absolute value of the elements */
 83:   virtual int MinElement(double *);

 85:   /** Add c to the elements of this Tao Vector */
 86:   virtual int AddConstant( double );

 88:   /** Return the dot product of this Tao Vector with v */
 89:   virtual int Dot( TaoVec* , double *);

 91:   /** Negate all the elements of this Tao Vector. */
 92:   virtual int Negate();

 94:   /** Invert (1/x) the elements of this Tao Vector. */
 95:   virtual int Reciprocal();

 97:   /* Replace each element with a -1, 0, or 1, depending on its sign.  */
 98:   virtual int Sign();

100:   /** Get the dimension of the vector space */
101:   virtual int GetDimension( int* );

103:   /* View */
104:   virtual int View();

106:   /* stepMax */
107:   //  virtual int StepMax2( TaoVec* , TaoVec*, TaoVec*, double* );

109:   virtual int StepMax( TaoVec* , double* );
110:   virtual int StepBoundInfo(TaoVec* ,TaoVec*,TaoVec*,double*,double*,double*);
111:   virtual int BoundGradientProjection(TaoVec*,TaoVec*,TaoVec*, TaoVec*);

113:   /* Functionality for working in a reduced space */
114:   virtual int SetReducedVec(TaoVec*, TaoIndexSet*);

116:   virtual int ReducedCopyFromFull(TaoVec*, TaoIndexSet*);
117:   virtual int ReducedXPY(TaoVec *, TaoIndexSet*);

119:   virtual int CreateIndexSet(TaoIndexSet**);

121:   virtual int GetArray(TaoScalar **, int*);
122:   virtual int RestoreArray(TaoScalar **, int*);
123: };

125: #endif