00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef _EIG_H
00016 #define _EIG_H
00017
00018
00019
00020 #define TOL_EIG 1.0e-06
00021
00022
00023
00024
00025
00026 typedef enum _eigentype
00027 {
00028 NONE_EIG,
00029 JACOBI,
00030 HQR,
00031 SUBSPACE
00032 } eEigenType;
00033
00034
00035
00036
00037
00038 class cEigenProblem
00039 {
00040 protected:
00041 static int _iFirstMode;
00042 static int _iLastMode;
00043 eEigenType _eType;
00044
00045 public:
00046 cEigenProblem( void );
00047 virtual ~cEigenProblem( void );
00048 virtual void EigenValue ( int, int *, double **, double **,
00049 double *, double ** ) { };
00050 static cEigenProblem *Read ( void );
00051 static void Free ( void ) { };
00052 int GetEigenType ( void ) { return( (int)_eType ); }
00053
00054 protected:
00055 virtual void QR ( int, double **, double * ) { };
00056 void ComputeStandBase ( int, int *, double **, double **,
00057 double **, int * );
00058 void MountHhMatrix ( int, double, double *, double *, double ** );
00059 void MountJacobiMatrix( int, int, int, double **, double [2][2] );
00060 void MountTotalMatrix ( int, int *, double **, double ** );
00061 void NormalizeSort ( int, int, int, double *, double ** );
00062 int QRStop ( int, double ** );
00063
00064 private:
00065 static cEigenProblem *ProcessEigenProblemAlgorithm( void );
00066 static void ProcessCurves ( void );
00067 static void ReadModes ( void );
00068
00069 };
00070
00071 #endif