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
00036
00037
00038 #ifndef ProfileSPDLinSOE_h
00039 #define ProfileSPDLinSOE_h
00040
00041 #include <LinearSOE.h>
00042 #include <Vector.h>
00043 #include <ProfileSPDLinSolver.h>
00044
00246 class ProfileSPDLinSOE : public LinearSOE
00247 {
00248 public:
00250 ProfileSPDLinSOE(ProfileSPDLinSolver &theSolver);
00251
00253 ProfileSPDLinSOE(int N, int *iLoc,
00254 ProfileSPDLinSolver &theSolver);
00255
00257 ~ProfileSPDLinSOE();
00258
00260 int getNumEqn(void) const;
00262 int setSize(Graph &theGraph);
00264 int addA(const Matrix &, const ID &, double fact = 1.0);
00266 int addB(const Vector &, const ID &, double fact = 1.0);
00268 int setB(const Vector &, double fact = 1.0);
00269
00271 void zeroA(void);
00273 void zeroB(void);
00274
00276 void setX(int loc, double value);
00277
00278
00280 const Vector &getX(void);
00282 const Vector &getB(void);
00284 double normRHS(void);
00285
00287 int setProfileSPDSolver(ProfileSPDLinSolver &newSolver);
00288
00290 int sendSelf(int commitTag, Channel &theChannel);
00292 int recvSelf(int commitTag, Channel &theChannel, FEM_ObjectBroker &theBroker);
00293
00295 friend #include <ProfileSPDLinSolver.h>
00296 friend #include <ProfileSPDLinDirectSolver.h>
00297 friend #include <ProfileSPDLinDirectBlockSolver.h>
00298 friend #include <ProfileSPDLinDirectThreadSolver.h>
00299 friend #include <ProfileSPDLinDirectSkypackSolver.h>
00300 friend #include <ProfileSPDLinSubstrSolver.h>
00301 friend #include <ProfileSPDLinSubstrThreadSolver.h>
00302
00303 protected:
00304
00305 private:
00306 int size, profileSize;
00308 double *A, *B, *X;
00310 Vector *vectX;
00312 Vector *vectB;
00314 int *iDiagLoc;
00316 int Asize, Bsize;
00318 bool isAfactored, isAcondensed;
00320 int numInt;
00321 };
00322
00323
00324 #endif
00325
00326
00327