00001 // File: ~/system_of_eqn/linearSOE/LawSolver/SymArpackSolver.h 00002 // 00003 // Written: Jun Peng 00004 // Created: 2/1999 00005 // Revision: A 00006 // 00007 // Description: This file contains the class definition for 00008 // SymArpackSolver. It solves the SymArpackSOE object by calling 00009 // some "C" functions. The solver used here is generalized sparse 00010 // solver. The user can choose three different ordering schema. 00011 // 00012 // What: "@(#) SymArpackSolver.h, revA" 00013 00014 #ifndef SymArpackSolver_h 00015 #define SymArpackSolver_h 00016 00017 #include <EigenSolver.h> 00018 #include <SymArpackSOE.h> 00019 00020 #include <SymArpackSOE.h> 00021 00023 class SymArpackSolver : public EigenSolver 00024 { 00025 public: 00027 SymArpackSolver(int numE = 0); 00029 virtual ~SymArpackSolver(); 00030 00032 virtual int solve(void); 00034 virtual int solve(int numModes) {return this->solve();}; 00036 virtual int setSize(void); 00037 00039 virtual int setEigenSOE(SymArpackSOE &theSOE); 00040 00042 virtual const Vector &getEigenvector(int mode); 00044 virtual double getEigenvalue(int mode); 00045 00047 int sendSelf(int cTag, Channel &theChannel); 00049 int recvSelf(int cTag, Channel &theChannel, 00050 FEM_ObjectBroker &theBroker); 00051 00052 protected: 00053 00054 private: 00056 SymArpackSOE *theSOE; 00058 bool factored; 00059 00061 int theNev; 00063 double *value; 00065 double *vector; 00067 Vector *eigenV; 00068 00070 void myMv(int n, double *v, double *result); 00072 void myCopy(int n, double *v, double *result); 00074 int getNCV(int n, int nev); 00075 00076 }; 00077 00078 #endif 00079 00080 ÿ