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