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
00023 extern "C" {
00024 #include <FeStructs.h>
00025 }
00026
00027
00028
00029 class SymArpackSolver;
00030
00031 class SymArpackSOE : public EigenSOE
00032 {
00033 public:
00034 SymArpackSOE(SymArpackSolver &theSolver, AnalysisModel &theModel,
00035 double shift = 0.0);
00036
00037 virtual ~SymArpackSOE();
00038
00039 virtual int getNumEqn(void) const;
00040 virtual int setSize(Graph &theGraph);
00041
00042 virtual int addA(const Matrix &, const ID &, double fact = 1.0);
00043 virtual int addM(const Matrix &, const ID &, double fact = 1.0);
00044
00045 virtual void zeroA(void);
00046 virtual void zeroM(void);
00047
00048 virtual double getShift(void);
00049
00050 int sendSelf(int commitTag, Channel &theChannel);
00051 int recvSelf(int commitTag, Channel &theChannel,
00052 FEM_ObjectBroker &theBroker);
00053
00054 friend class SymArpackSolver;
00055
00056
00057 protected:
00058
00059 private:
00060 int size;
00061 int nnz;
00062 int *colA, *rowStartA;
00063
00064 bool factored;
00065 double shift;
00066 AnalysisModel *theModel;
00067
00068 int nblks;
00069 int *xblk, *invp;
00070 double *diag, **penv;
00071 int *rowblks;
00072 OFFDBLK **begblk;
00073 OFFDBLK *first;
00074 };
00075
00076 #endif
00077