1 /*
2 ARPACK++ v1.2 2/20/2000
3 c++ interface to ARPACK code.
4
5 MODULE ARBSComp.h.
6 Arpack++ class ARluCompStdEig definition
7 (band matrix version).
8
9 ARPACK Authors
10 Richard Lehoucq
11 Danny Sorensen
12 Chao Yang
13 Dept. of Computational & Applied Mathematics
14 Rice University
15 Houston, Texas
16 */
17
18 #ifndef ARBSCOMP_H
19 #define ARBSCOMP_H
20
21 #include <cstddef>
22 #include <string>
23 #include "arch.h"
24 #include "arscomp.h"
25 #include "arbnsmat.h"
26 #include "arrseig.h"
27
28
29 template<class ARFLOAT>
30 class ARluCompStdEig:
31 public virtual ARCompStdEig<ARFLOAT,
32 ARbdNonSymMatrix<arcomplex<ARFLOAT>, ARFLOAT> > {
33
34 public:
35
36 // a) Public functions:
37
38 // a.1) Functions that allow changes in problem parameters.
39
40 virtual void ChangeShift(arcomplex<ARFLOAT> sigmaRp);
41
42 virtual void SetRegularMode();
43
44 virtual void SetShiftInvertMode(arcomplex<ARFLOAT> sigmap);
45
46 // a.2) Constructors and destructor.
47
ARluCompStdEig()48 ARluCompStdEig() { }
49 // Short constructor.
50
51 ARluCompStdEig(int nevp, ARbdNonSymMatrix<arcomplex<ARFLOAT>, ARFLOAT>& A,
52 const std::string& whichp = "LM", int ncvp = 0,
53 ARFLOAT tolp = 0.0, int maxitp = 0,
54 arcomplex<ARFLOAT>* residp = NULL, bool ishiftp = true);
55 // Long constructor (regular mode).
56
57 ARluCompStdEig(int nevp, ARbdNonSymMatrix<arcomplex<ARFLOAT>, ARFLOAT>& A,
58 arcomplex<ARFLOAT> sigma, const std::string& whichp = "LM",
59 int ncvp = 0, ARFLOAT tolp = 0.0, int maxitp = 0,
60 arcomplex<ARFLOAT>* residp = NULL, bool ishiftp = true);
61 // Long constructor (shift and invert mode).
62
ARluCompStdEig(const ARluCompStdEig & other)63 ARluCompStdEig(const ARluCompStdEig& other) { Copy(other); }
64 // Copy constructor.
65
~ARluCompStdEig()66 virtual ~ARluCompStdEig() { }
67 // Destructor.
68
69
70 // b) Operators.
71
72 ARluCompStdEig& operator=(const ARluCompStdEig& other);
73 // Assignment operator.
74
75 }; // class ARluCompStdEig.
76
77
78 // ------------------------------------------------------------------------ //
79 // ARluCompStdEig member functions definition. //
80 // ------------------------------------------------------------------------ //
81
82
83 template<class ARFLOAT>
84 inline void ARluCompStdEig<ARFLOAT>::
ChangeShift(arcomplex<ARFLOAT> sigmaRp)85 ChangeShift(arcomplex<ARFLOAT> sigmaRp)
86 {
87
88 this->objOP->FactorAsI(sigmaRp);
89 ARrcStdEig<ARFLOAT, arcomplex<ARFLOAT> >::ChangeShift(sigmaRp);
90
91 } // ChangeShift.
92
93
94 template<class ARFLOAT>
SetRegularMode()95 inline void ARluCompStdEig<ARFLOAT>::SetRegularMode()
96 {
97
98 ARStdEig<ARFLOAT, arcomplex<ARFLOAT>,
99 ARbdNonSymMatrix<arcomplex<ARFLOAT>,ARFLOAT> >::
100 SetRegularMode(this->objOP,&ARbdNonSymMatrix<arcomplex<ARFLOAT>,ARFLOAT>::MultMv);
101
102 } // SetRegularMode.
103
104
105 template<class ARFLOAT>
106 inline void ARluCompStdEig<ARFLOAT>::
SetShiftInvertMode(arcomplex<ARFLOAT> sigmap)107 SetShiftInvertMode(arcomplex<ARFLOAT> sigmap)
108 {
109
110 ARStdEig<ARFLOAT, arcomplex<ARFLOAT>,
111 ARbdNonSymMatrix<arcomplex<ARFLOAT>,ARFLOAT> >::
112 SetShiftInvertMode(sigmap, this->objOP,
113 &ARbdNonSymMatrix<arcomplex<ARFLOAT>,ARFLOAT>::MultInvv);
114
115 } // SetShiftInvertMode.
116
117
118 template<class ARFLOAT>
119 inline ARluCompStdEig<ARFLOAT>::
ARluCompStdEig(int nevp,ARbdNonSymMatrix<arcomplex<ARFLOAT>,ARFLOAT> & A,const std::string & whichp,int ncvp,ARFLOAT tolp,int maxitp,arcomplex<ARFLOAT> * residp,bool ishiftp)120 ARluCompStdEig(int nevp, ARbdNonSymMatrix<arcomplex<ARFLOAT>, ARFLOAT>& A,
121 const std::string& whichp, int ncvp, ARFLOAT tolp,
122 int maxitp, arcomplex<ARFLOAT>* residp, bool ishiftp)
123
124 {
125
126 this->NoShift();
127 this->DefineParameters(A.ncols(), nevp, &A,
128 &ARbdNonSymMatrix<arcomplex<ARFLOAT>, ARFLOAT>::MultMv,
129 whichp, ncvp, tolp, maxitp, residp, ishiftp);
130
131 } // Long constructor (regular mode).
132
133
134 template<class ARFLOAT>
135 inline ARluCompStdEig<ARFLOAT>::
ARluCompStdEig(int nevp,ARbdNonSymMatrix<arcomplex<ARFLOAT>,ARFLOAT> & A,arcomplex<ARFLOAT> sigmap,const std::string & whichp,int ncvp,ARFLOAT tolp,int maxitp,arcomplex<ARFLOAT> * residp,bool ishiftp)136 ARluCompStdEig(int nevp, ARbdNonSymMatrix<arcomplex<ARFLOAT>, ARFLOAT>& A,
137 arcomplex<ARFLOAT> sigmap, const std::string& whichp, int ncvp,
138 ARFLOAT tolp, int maxitp, arcomplex<ARFLOAT>* residp,
139 bool ishiftp)
140
141 {
142
143 this->DefineParameters(A.ncols(), nevp, &A,
144 &ARbdNonSymMatrix<arcomplex<ARFLOAT>, ARFLOAT>::MultInvv,
145 whichp, ncvp, tolp, maxitp, residp, ishiftp);
146 ChangeShift(sigmap);
147
148 } // Long constructor (shift and invert mode).
149
150
151 template<class ARFLOAT>
152 ARluCompStdEig<ARFLOAT>& ARluCompStdEig<ARFLOAT>::
153 operator=(const ARluCompStdEig<ARFLOAT>& other)
154 {
155
156 if (this != &other) { // Stroustrup suggestion.
157 this->ClearMem();
158 Copy(other);
159 }
160 return *this;
161
162 } // operator=.
163
164
165 #endif // ARBSCOMP_H
166