1 /*
2    ARPACK++ v1.2 2/20/2000
3    c++ interface to ARPACK code.
4 
5    MODULE ARSNSym.h.
6    Arpack++ class ARNonSymStdEig definition.
7 
8    ARPACK Authors
9       Richard Lehoucq
10       Danny Sorensen
11       Chao Yang
12       Dept. of Computational & Applied Mathematics
13       Rice University
14       Houston, Texas
15 */
16 
17 #ifndef ARSNSYM_H
18 #define ARSNSYM_H
19 
20 #include <cstddef>
21 #include <string>
22 #include "arch.h"
23 #include "arseig.h"
24 #include "arrsnsym.h"
25 
26 
27 template<class ARFLOAT, class ARFOP>
28 class ARNonSymStdEig:
29   public virtual ARStdEig<ARFLOAT, ARFLOAT, ARFOP>,
30   public virtual ARrcNonSymStdEig<ARFLOAT> {
31 
32  public:
33 
34  // a) Constructors and destructor.
35 
ARNonSymStdEig()36   ARNonSymStdEig() { }
37   // Short constructor.
38 
39   ARNonSymStdEig(int np, int nevp, ARFOP* objOPp,
40                  void (ARFOP::* MultOPxp)(ARFLOAT[], ARFLOAT[]),
41                  const std::string& whichp = "LM", int ncvp = 0, ARFLOAT tolp = 0.0,
42                  int maxitp = 0, ARFLOAT* residp = NULL, bool ishiftp = true);
43   // Long constructor (regular mode).
44 
45   ARNonSymStdEig(int np, int nevp, ARFOP* objOPp,
46                  void (ARFOP::* MultOPxp)(ARFLOAT[], ARFLOAT[]),
47                  ARFLOAT sigma, const std::string& whichp = "LM", int ncvp = 0,
48                  ARFLOAT tolp = 0.0, int maxitp = 0, ARFLOAT* residp = NULL,
49                  bool ishiftp = true);
50   // Long constructor (shift and invert mode).
51 
ARNonSymStdEig(const ARNonSymStdEig & other)52   ARNonSymStdEig(const ARNonSymStdEig& other) { Copy(other); }
53   // Copy constructor.
54 
~ARNonSymStdEig()55   virtual ~ARNonSymStdEig() { }
56   // Destructor.
57 
58  // b) Operators.
59 
60   ARNonSymStdEig& operator=(const ARNonSymStdEig& other);
61   // Assignment operator.
62 
63 }; // class ARNonSymStdEig.
64 
65 
66 // ------------------------------------------------------------------------ //
67 // ARNonSymStdEig member functions definition.                              //
68 // ------------------------------------------------------------------------ //
69 
70 
71 template<class ARFLOAT, class ARFOP>
72 inline ARNonSymStdEig<ARFLOAT, ARFOP>::
ARNonSymStdEig(int np,int nevp,ARFOP * objOPp,void (ARFOP::* MultOPxp)(ARFLOAT[],ARFLOAT[]),const std::string & whichp,int ncvp,ARFLOAT tolp,int maxitp,ARFLOAT * residp,bool ishiftp)73 ARNonSymStdEig(int np, int nevp, ARFOP* objOPp,
74                void (ARFOP::* MultOPxp)(ARFLOAT[], ARFLOAT[]),
75                const std::string& whichp, int ncvp, ARFLOAT tolp, int maxitp,
76                ARFLOAT* residp, bool ishiftp)
77 
78 {
79 
80   this->NoShift();
81   this->DefineParameters(np, nevp, objOPp, MultOPxp, whichp,
82                    ncvp, tolp, maxitp, residp, ishiftp);
83 
84 } // Long constructor (regular mode).
85 
86 
87 template<class ARFLOAT, class ARFOP>
88 inline ARNonSymStdEig<ARFLOAT, ARFOP>::
ARNonSymStdEig(int np,int nevp,ARFOP * objOPp,void (ARFOP::* MultOPxp)(ARFLOAT[],ARFLOAT[]),ARFLOAT sigmap,const std::string & whichp,int ncvp,ARFLOAT tolp,int maxitp,ARFLOAT * residp,bool ishiftp)89 ARNonSymStdEig(int np, int nevp, ARFOP* objOPp,
90                void (ARFOP::* MultOPxp)(ARFLOAT[], ARFLOAT[]),
91                ARFLOAT sigmap, const std::string& whichp, int ncvp, ARFLOAT tolp,
92                int maxitp, ARFLOAT* residp, bool ishiftp)
93 
94 {
95 
96   this->ChangeShift(sigmap);
97   this->DefineParameters(np, nevp, objOPp, MultOPxp, whichp,
98                    ncvp, tolp, maxitp, residp, ishiftp);
99 
100 } // Long constructor (shift and invert mode).
101 
102 
103 template<class ARFLOAT, class ARFOP>
104 ARNonSymStdEig<ARFLOAT, ARFOP>& ARNonSymStdEig<ARFLOAT, ARFOP>::
105 operator=(const ARNonSymStdEig<ARFLOAT, ARFOP>& other)
106 {
107 
108   if (this != &other) { // Stroustrup suggestion.
109     this->ClearMem();
110     Copy(other);
111   }
112   return *this;
113 
114 } // operator=.
115 
116 
117 #endif // ARSNSYM_H
118