Mercurial > octave-nkf
comparison libcruft/arpack/src/cngets.f @ 12194:470857149e61
import ARPACK sources to libcruft from Debian package libarpack2 2.1+parpack96.dfsg-3+b1
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 28 Jan 2011 14:04:33 -0500 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
12193:03c7fdee3d36 | 12194:470857149e61 |
---|---|
1 c\BeginDoc | |
2 c | |
3 c\Name: cngets | |
4 c | |
5 c\Description: | |
6 c Given the eigenvalues of the upper Hessenberg matrix H, | |
7 c computes the NP shifts AMU that are zeros of the polynomial of | |
8 c degree NP which filters out components of the unwanted eigenvectors | |
9 c corresponding to the AMU's based on some given criteria. | |
10 c | |
11 c NOTE: call this even in the case of user specified shifts in order | |
12 c to sort the eigenvalues, and error bounds of H for later use. | |
13 c | |
14 c\Usage: | |
15 c call cngets | |
16 c ( ISHIFT, WHICH, KEV, NP, RITZ, BOUNDS ) | |
17 c | |
18 c\Arguments | |
19 c ISHIFT Integer. (INPUT) | |
20 c Method for selecting the implicit shifts at each iteration. | |
21 c ISHIFT = 0: user specified shifts | |
22 c ISHIFT = 1: exact shift with respect to the matrix H. | |
23 c | |
24 c WHICH Character*2. (INPUT) | |
25 c Shift selection criteria. | |
26 c 'LM' -> want the KEV eigenvalues of largest magnitude. | |
27 c 'SM' -> want the KEV eigenvalues of smallest magnitude. | |
28 c 'LR' -> want the KEV eigenvalues of largest REAL part. | |
29 c 'SR' -> want the KEV eigenvalues of smallest REAL part. | |
30 c 'LI' -> want the KEV eigenvalues of largest imaginary part. | |
31 c 'SI' -> want the KEV eigenvalues of smallest imaginary part. | |
32 c | |
33 c KEV Integer. (INPUT) | |
34 c The number of desired eigenvalues. | |
35 c | |
36 c NP Integer. (INPUT) | |
37 c The number of shifts to compute. | |
38 c | |
39 c RITZ Complex array of length KEV+NP. (INPUT/OUTPUT) | |
40 c On INPUT, RITZ contains the the eigenvalues of H. | |
41 c On OUTPUT, RITZ are sorted so that the unwanted | |
42 c eigenvalues are in the first NP locations and the wanted | |
43 c portion is in the last KEV locations. When exact shifts are | |
44 c selected, the unwanted part corresponds to the shifts to | |
45 c be applied. Also, if ISHIFT .eq. 1, the unwanted eigenvalues | |
46 c are further sorted so that the ones with largest Ritz values | |
47 c are first. | |
48 c | |
49 c BOUNDS Complex array of length KEV+NP. (INPUT/OUTPUT) | |
50 c Error bounds corresponding to the ordering in RITZ. | |
51 c | |
52 c | |
53 c | |
54 c\EndDoc | |
55 c | |
56 c----------------------------------------------------------------------- | |
57 c | |
58 c\BeginLib | |
59 c | |
60 c\Local variables: | |
61 c xxxxxx Complex | |
62 c | |
63 c\Routines called: | |
64 c csortc ARPACK sorting routine. | |
65 c ivout ARPACK utility routine that prints integers. | |
66 c arscnd ARPACK utility routine for timing. | |
67 c cvout ARPACK utility routine that prints vectors. | |
68 c | |
69 c\Author | |
70 c Danny Sorensen Phuong Vu | |
71 c Richard Lehoucq CRPC / Rice University | |
72 c Dept. of Computational & Houston, Texas | |
73 c Applied Mathematics | |
74 c Rice University | |
75 c Houston, Texas | |
76 c | |
77 c\SCCS Information: @(#) | |
78 c FILE: ngets.F SID: 2.2 DATE OF SID: 4/20/96 RELEASE: 2 | |
79 c | |
80 c\Remarks | |
81 c 1. This routine does not keep complex conjugate pairs of | |
82 c eigenvalues together. | |
83 c | |
84 c\EndLib | |
85 c | |
86 c----------------------------------------------------------------------- | |
87 c | |
88 subroutine cngets ( ishift, which, kev, np, ritz, bounds) | |
89 c | |
90 c %----------------------------------------------------% | |
91 c | Include files for debugging and timing information | | |
92 c %----------------------------------------------------% | |
93 c | |
94 include 'debug.h' | |
95 include 'stat.h' | |
96 c | |
97 c %------------------% | |
98 c | Scalar Arguments | | |
99 c %------------------% | |
100 c | |
101 character*2 which | |
102 integer ishift, kev, np | |
103 c | |
104 c %-----------------% | |
105 c | Array Arguments | | |
106 c %-----------------% | |
107 c | |
108 Complex | |
109 & bounds(kev+np), ritz(kev+np) | |
110 c | |
111 c %------------% | |
112 c | Parameters | | |
113 c %------------% | |
114 c | |
115 Complex | |
116 & one, zero | |
117 parameter (one = (1.0E+0, 0.0E+0), zero = (0.0E+0, 0.0E+0)) | |
118 c | |
119 c %---------------% | |
120 c | Local Scalars | | |
121 c %---------------% | |
122 c | |
123 integer msglvl | |
124 c | |
125 c %----------------------% | |
126 c | External Subroutines | | |
127 c %----------------------% | |
128 c | |
129 external cvout, csortc, arscnd | |
130 c | |
131 c %-----------------------% | |
132 c | Executable Statements | | |
133 c %-----------------------% | |
134 c | |
135 c %-------------------------------% | |
136 c | Initialize timing statistics | | |
137 c | & message level for debugging | | |
138 c %-------------------------------% | |
139 c | |
140 call arscnd (t0) | |
141 msglvl = mcgets | |
142 c | |
143 call csortc (which, .true., kev+np, ritz, bounds) | |
144 c | |
145 if ( ishift .eq. 1 ) then | |
146 c | |
147 c %-------------------------------------------------------% | |
148 c | Sort the unwanted Ritz values used as shifts so that | | |
149 c | the ones with largest Ritz estimates are first | | |
150 c | This will tend to minimize the effects of the | | |
151 c | forward instability of the iteration when the shifts | | |
152 c | are applied in subroutine cnapps. | | |
153 c | Be careful and use 'SM' since we want to sort BOUNDS! | | |
154 c %-------------------------------------------------------% | |
155 c | |
156 call csortc ( 'SM', .true., np, bounds, ritz ) | |
157 c | |
158 end if | |
159 c | |
160 call arscnd (t1) | |
161 tcgets = tcgets + (t1 - t0) | |
162 c | |
163 if (msglvl .gt. 0) then | |
164 call ivout (logfil, 1, kev, ndigit, '_ngets: KEV is') | |
165 call ivout (logfil, 1, np, ndigit, '_ngets: NP is') | |
166 call cvout (logfil, kev+np, ritz, ndigit, | |
167 & '_ngets: Eigenvalues of current H matrix ') | |
168 call cvout (logfil, kev+np, bounds, ndigit, | |
169 & '_ngets: Ritz estimates of the current KEV+NP Ritz values') | |
170 end if | |
171 c | |
172 return | |
173 c | |
174 c %---------------% | |
175 c | End of cngets | | |
176 c %---------------% | |
177 c | |
178 end |