00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef SymArpackSOE_h
00018 #define SymArpackSOE_h
00019
00020 #include <EigenSOE.h>
00021 #include <Vector.h>
00022
00024 extern "C" {
00025 #include <FeStructs.h>
00026 }
00027
00028
00029
00030 #include <SymArpackSolver.h>
00031
00033 class SymArpackSOE : public EigenSOE
00034 {
00035 public:
00037 SymArpackSOE(SymArpackSolver &theSolver, AnalysisModel &theModel,
00038 double shift = 0.0);
00039
00041 virtual ~SymArpackSOE();
00042
00044 virtual int getNumEqn(void) const;
00046 virtual int setSize(Graph &theGraph);
00047
00049 virtual int addA(const Matrix &, const ID &, double fact = 1.0);
00051 virtual int addM(const Matrix &, const ID &, double fact = 1.0);
00052
00054 virtual void zeroA(void);
00056 virtual void zeroM(void);
00057
00059 virtual double getShift(void);
00060
00062 int sendSelf(int commitTag, Channel &theChannel);
00064 int recvSelf(int commitTag, Channel &theChannel,
00065 FEM_ObjectBroker &theBroker);
00066
00068 friend #include <SymArpackSolver.h>
00069
00070
00071 protected:
00072
00073 private:
00074 int size;
00075 int nnz;
00076 int *colA, *rowStartA;
00077
00078 bool factored;
00080 double shift;
00082 AnalysisModel *theModel;
00083
00085 int nblks;
00087 int *xblk, *invp;
00089 double *diag, **penv;
00091 int *rowblks;
00093 OFFDBLK **begblk;
00095 OFFDBLK *first;
00096 };
00097
00098 #endif
00099
00100 ÿ