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