Actual source code: taomat_ga.h

      1: //File: taomat_ga.h
      2: /**************************************************************

      4: Author: Limin Zhang, Ph.D.
      5:         Mathematics Department
      6:         Columbia Basin College
      7:         Pasco, WA 99301
      8:         Limin.Zhang@cbc2.org

     10: Mentor: Jarek Naplocha, Ph.D.
     11:         Environmental Molecular Science Laboratory
     12:         Pacific Northwest National Laboratory
     13:         Richland, WA 99352

     15: Date: 7/11/2002

     17: Purpose:
     18:       to design and implement TaoMatrix using
     19:       global arrays.

     21: Revise history:

     23: 8/8/02
     24:         To clean Petsc function calls and marcos.

     26: **************************************************************/

     30: #ifndef TAOGAMAT_H
     31: #define TAOGAMAT_H

     33: typedef int GAMat;

     35: //ga header files
     36: #include "taovec_ga.h" //to define tao/ga vector class
     37: #include "ga.h"        //to define GA lib functions

     39: //tao header files
     40:  #include taolinearsolver.h
     41: #include "tao_solver.h"
     42:  #include taomat.h

     44: class TaoMatGa:public TaoMat
     45: {

     47: protected:

     49:   GAMat pm;
     50:   GAMat pm_pre;

     52: public:

     54:     TaoMatGa (GAMat M);
     55:    ~TaoMatGa ()
     56:   {
     57:     if (this->pm)
     58:       GA_Destroy (this->pm);
     59:   }

     61:   inline GAMat GetMat ()
     62:   {
     63:     return this->pm;
     64:   }

     66: /*The user of this function is responsible to free the memory of "this"
     67: before resplace it with a different vector. i
     68: Otherwise, there is a possible memory leak.
     69: */
     70:   inline int replaceMat (GAMat M)
     71:   {
     72:     this->pm = M;
     73:     return 0;
     74:   }

     76:   int Compatible (TaoVec *, TaoVec *, TaoTruth*);
     77:   int Clone (TaoMat **);
     78:   int CopyFrom (TaoMat *);

     80:   int Fill (TaoScalar);
     81:   int Zero ();
     82:   int GetDimensions (int *, int *);

     84:   int Multiply (TaoVec *, TaoVec *);
     85:   int MultiplyAdd (TaoVec *, TaoVec *, TaoVec *);
     86:   int MultiplyTranspose (TaoVec *, TaoVec *);
     87:   int MultiplyTransposeAdd (TaoVec *, TaoVec *, TaoVec *);

     89:   int SetDiagonal (TaoVec *);
     90:   int AddDiagonal (TaoVec *);
     91:   int GetDiagonal (TaoVec *);
     92:   int ShiftDiagonal (double);

     94:   int View ();

     96:   /* These routines not implemented */
     97:   int RowScale (TaoVec *);
     98:   int ColScale (TaoVec *);

    100:   int Presolve ();
    101:   int Solve (TaoVec *, TaoVec *, TaoTruth *);

    103:   int CreateReducedMatrix (TaoIndexSet *, TaoIndexSet *, TaoMat **);
    104:   int SetReducedMatrix (TaoMat *, TaoIndexSet *, TaoIndexSet *);

    106:   int D_Fischer (TaoVec *, TaoVec *, TaoVec *, TaoVec *,
    107:                  TaoVec *, TaoVec *, TaoVec *, TaoVec *);

    109:   int Norm1 (double *);

    111:   friend class TaoGAApplication;

    113: };

    115: int TaoWrapGaMat (GAMat, TaoMatGa **);

    117: #endif