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 BandSPDLinSOE_h
00027 #define BandSPDLinSOE_h
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #include <LinearSOE.h>
00044 #include <Vector.h>
00045
00046 class BandSPDLinSolver;
00047
00048
00049
00050 class BandSPDLinSOE : public LinearSOE
00051 {
00052 public:
00053 BandSPDLinSOE(BandSPDLinSolver &theSolver);
00054 BandSPDLinSOE(BandSPDLinSolver &theSolver, int classTag);
00055 BandSPDLinSOE(int N, int bandwidth, BandSPDLinSolver &theSolver);
00056
00057 virtual ~BandSPDLinSOE();
00058
00059 virtual int getNumEqn(void) const;
00060 virtual int setSize(Graph &theGraph);
00061
00062 virtual int addA(const Matrix &, const ID &, double fact = 1.0);
00063 virtual int addB(const Vector &, const ID &, double fact = 1.0);
00064 virtual int setB(const Vector &, double fact = 1.0);
00065
00066 virtual void zeroA(void);
00067 virtual void zeroB(void);
00068
00069 virtual const Vector &getX(void);
00070 virtual const Vector &getB(void);
00071 virtual double normRHS(void);
00072
00073 virtual void setX(int loc, double value);
00074 virtual void setX(const Vector &x);
00075 virtual int setBandSPDSolver(BandSPDLinSolver &newSolver);
00076
00077 virtual int sendSelf(int commitTag, Channel &theChannel);
00078 virtual int recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker);
00079
00080 friend class BandSPDLinSolver;
00081 friend class BandSPDLinLapackSolver;
00082 friend class BandSPDLinThreadSolver;
00083
00084 protected:
00085 int size, half_band;
00086 double *A, *B, *X;
00087 Vector *vectX;
00088 Vector *vectB;
00089 int Asize, Bsize;
00090 int aFactored;
00091 bool factored;
00092
00093 private:
00094 };
00095
00096
00097 #endif
00098