00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef SparseGenColLinSOE_h
00027 #define SparseGenColLinSOE_h
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #include <LinearSOE.h>
00041 #include <Vector.h>
00042
00043 class SparseGenColLinSolver;
00044
00045 class SparseGenColLinSOE : public LinearSOE
00046 {
00047 public:
00048 SparseGenColLinSOE(SparseGenColLinSolver &theSolver);
00049 SparseGenColLinSOE(SparseGenColLinSolver &theSolver, int classTag);
00050 SparseGenColLinSOE(int N, int NNZ, int *rowStartA, int *colA,
00051 SparseGenColLinSolver &theSolver);
00052
00053 virtual ~SparseGenColLinSOE();
00054
00055 virtual int getNumEqn(void) const;
00056 virtual int setSize(Graph &theGraph);
00057 virtual int addA(const Matrix &, const ID &, double fact = 1.0);
00058 virtual int addB(const Vector &, const ID &, double fact = 1.0);
00059 virtual int setB(const Vector &, double fact = 1.0);
00060
00061 virtual void zeroA(void);
00062 virtual void zeroB(void);
00063
00064 virtual const Vector &getX(void);
00065 virtual const Vector &getB(void);
00066 virtual double normRHS(void);
00067
00068 virtual void setX(int loc, double value);
00069 virtual void setX(const Vector &x);
00070 virtual int setSparseGenColSolver(SparseGenColLinSolver &newSolver);
00071
00072 virtual int sendSelf(int commitTag, Channel &theChannel);
00073 virtual int recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker);
00074 #ifdef _PARALLEL_PROCESSING
00075 friend class SuperLU;
00076 friend class ThreadedSuperLU;
00077 friend class DistributedSuperLU;
00078 #else
00079 friend class SuperLU;
00080 #endif
00081
00082 protected:
00083 int size;
00084 int nnz;
00085 double *A, *B, *X;
00086 int *rowA, *colStartA;
00087 Vector *vectX;
00088 Vector *vectB;
00089 int Asize, Bsize;
00090 bool factored;
00091
00092 private:
00093
00094 };
00095
00096
00097 #endif
00098