-
Notifications
You must be signed in to change notification settings - Fork 124
/
PARPACK_CHANGES
337 lines (248 loc) · 11.1 KB
/
PARPACK_CHANGES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
This file describes list of changes done by Chao Yang on parpack.
This fixes many issues in parpack libs.
Theses changes were released under the "ppatch.tar.gz" filename.
---------------------------------------------------------------------
1. 01/27/97:
[s,d]sapps.f: Loop 50 (line 375) has an incorrect upper bound:
replace
do 50 j = 1, min( j+jj, kplusp )
^^^
with
do 50 j = 1, min( i+jj, kplusp )
^^^
[s,d]napps.f: Loop 70 (line 433) has an incorrect upper bound:
replace
do 70 j = 1, min( j+jj, kplusp )
^^^
with
do 70 j = 1, min( i+jj, kplusp )
^^^
[c,z]napps.f: Loop 70 (line 365) has an incorrect upper bound:
replace
do 70 j = 1, min( j+jj, kplusp )
^^^
with
do 70 j = 1, min( i+jj, kplusp )
^^^
Without the change the code will not compile on NEC.
The parallel version of these routine needs to be modified
as well.
2. 03/28/97:
In [s,d]ndrv4.f [s,d]ndrv5.f [s,d]ndrv6.f, the array SELECT
is delecared as
select(maxnev)
It should be changed to
select(maxncv)
3. 03/28/97:
There are two empty files [s,d]naupe.f in the SRC directory.
They are not part of the ARPACK. The user should ignore
them.
4. 03/28/97:
In [s,d]seupd.f, select(ncv) is declared before ncv is declared.
Should move the declaration of select(ncv) after
c %-----------------%
c | Array Arguments |
c %-----------------%
5. 03/28/97:
all banded drivers in EXAMPLES/BAND directory have not been
checked in. Although these are the current version, the SCCS
infomartion do not show the correct version number and dates.
6. 03/28/97:
In [s,d]naupd.f the following check:
else if (mode .lt. 1 .or. mode .gt. 5) then
^^
ierr = -10
should be changed to
else if (mode .lt. 1 .or. mode .gt. 4) then
^^
ierr = -10
In [c,z]naupd.f the following check:
else if (mode .lt. 1 .or. mode .gt. 5) then
^^
ierr = -10
should be changed to
else if (mode .lt. 1 .or. mode .gt. 3) then
^^
ierr = -10
7. 04/02/97:
The mass matrix in the drivers
[s,d]ndrv4.f (NONSYM)
[s,d]nbdr4.f (BAND)
[c,z]ndrv4.f (COMPLEX)
[c,z]nbdr4.f (BAND)
needs to be scaled by 1/6 to match the piecewise
linear finite element discretization of the 1-d
convection-diffusion operator as explained in the
documentation.
8. 04/03/97:
The documentation for the SELECT array in [s,d]seupd.f should
say:
c SELECT Logical array of dimension NCV. (INPUT/WORKSPACE)
^^^^ ^^^^^^^^^^
9. 06/04/98:
p[s,d,c,z]larnv.f The integer argument IDIST is not declared.
10. 06/04/98:
In p[s,d]neupd.f, the declaration of p[s,d]norm2 is missing.
The declaration of [s,d]nrm2 is not necessary since it is not
used.
11. 08/03/98:
In [c,z]nband.f, the documentation:
c call znband
c ( RVEC, HOWMNY, SELECT, D , Z, LDZ, SIGMA, WORKEV, N, AB,
c MB, LDA, FAC, KL, LU, WHICH, BMAT, NEV, TOL, RESID, NCV,
^^^^
c V, LDV, IPARAM, WORKD, WORKL, LWORKL, RWORK, IWORK, INFO )
should read
c call znband
c ( RVEC, HOWMNY, SELECT, D , Z, LDZ, SIGMA, WORKEV, N, AB,
c MB, LDA, FAC, KL, KU, WHICH, BMAT, NEV, TOL, RESID, NCV,
^^^^
c V, LDV, IPARAM, WORKD, WORKL, LWORKL, RWORK, IWORK, INFO )
12. 03/18/99
_getv0.f failed to generate a starting vector after 2 steps of classical
Gram Schmidt correction step. Fixed by increasing the maximum Gram-Schmidt
correction steps to 5.
13. 04/16/99
A print statement (*mout) in p*neupd.f went over the 72nd column.
14. 04/17/99
Modified p*larnv.f and p*getv0.f in PARPACK to fix a bug in
generating a random starting vector in parallel. Now each processor
generates its portion of the starting vector using a different seed.
15. 11/05/99
The do 10 loop in [c,z]neupd.f and p[c,z]neupd.f had incorrect index
to workl(irz). Since the loop count j starts from 0, the reference to
workl(irz) should be expressed by workl(irz+j) instead of workl(irz+j-1).
16. 06/01/2000
Variables 'rnorm' and 'eps23' are missing from the save statement list
in all __naup2 routines (both serial and parallel).
17. 07/20/2000 (all eupd, both serial and parallel)
Changed the code segment used to determine whether
reordering is necessary to move the desired and converged
Ritz values into the leading portion of the Schur form.
The previous versions used the technique to mark Ritz values that
must be put in the leading portion of the Schur form:
1. Determine which eigenvalues returned by dense eigenvalue
calculation routine are desired. This is done in two steps:
a) find a threshold value from the sorted Ritz value array
b) compare all eigenvalues returned directly from dense eigenvalue
calculation routine against this threshold value.
2. For each desired Ritz value, check the Ritz estimate.
Mark the j-th element of the select array if the j-th eigenvalue
satisfies the convergence criteria.
18. 08/08/2000
In _saitr.f and _naitr.f, add a check for NP = 0 at the very beginning of
this routine
19. 09/21/2000
In [c,z]neupd.f, the IF statement:
if (numcnv .lt. nev .and.
^^^
& slapy2( m_real(workl(ibd+jj-1)),
& aimag(workl(ibd+jj-1)) )
& .le. tol*rtemp) then
is changed to
if (numcnv .lt. nconv .and.
^^^^^
& slapy2( m_real(workl(ibd+jj-1)),
& aimag(workl(ibd+jj-1)) )
& .le. tol*rtemp) then
NEV is the number of eigenvalues requested;
NCONV is the number of converged eigenvalues;
NUMCNV counts the number of converged eigenvalues;
The original IF statement will cause NUMCNV to be
inconsistent with NCONV, when fewer than NEV wanted
eigenvalues have converged but there are many converged
but unwanted Ritz values.
20. In [s,d][s,n]eupd.f, the IF statement
if (numcnv .lt. nev .and.
^^^
& workl(ibd+jj-1) .le. tol*temp1) then
is changed to
if (numcnv .lt. nconv .and.
^^^^^
& workl(ibd+jj-1) .le. tol*temp1) then
NEV is the number of eigenvalues requested;
NCONV is the number of converged eigenvalues;
NUMCNV counts the number of converged eigenvalues;
The original IF statement will cause NUMCNV to be
inconsistent with NCONV, when fewer than NEV wanted
eigenvalues have converged but there are many converged
but unwanted Ritz values.
21. 10/16/2000
Line 238 of [s,d]naup2.f went past the 72nd column. This
was caused by the extra space inserted by new Solaris cpp
when ARPACK single and double precision source codes are generate
from the naup2.F code. This line is fixed by wrapping it around
the next line.
22. 10/20/2000
Updated SCCS information for drivers in BAND, SIMPLE.
Fixed miscellaneous minor problems caused by cpp.
23. 04/10/2001
Problems reported in items 19 & 20 above exist in the
parallel codes also. The same changes have been made
in p[s,d,c,n][s,n]eupd.f
24. 04/10/2001 (reported by David Day, SNL)
There was a mistake in the orthogonalization step in
the MPI version of p[c,z]getv0.f. The original code had
call zgemv ('N', n, j-1, -one, v, ldv, workd(n+1), 1,
^^^^^^^^^^
& one, resid, 1)
It has been changed to
call zgemv ('N', n, j-1, -one, v, ldv, workl, 1, one, resid, 1)
^^^^^
Also, p[c,z]vout() was used to print out `rnorm', which
is potential problematic. The following code has been
added to correct that.
cnorm2 = cmplx(rnorm,rzero)
call pcvout (comm, logfil, 1, cnorm2, ndigit,
& '_getv0: B-norm of initial / restarted starting vector')
25. 04/10/2001
In all _aupd.f codes, iparam(2) and/or iparam(4) are used to
define NB or LEVEC. Since NB=1 is the only block size and since
LEVEC is no longer used, the statements
levec = iparam(2)
nb = iparam(4)
have been commented out. NB=1 has been added to avoid potential
confusion.
26. 04/10/2001
In all _seupd codes (both serial and parallel) the call to
_sgets had an extra argument:
call dsgets (ishift, which , nev ,
& np , workl(irz) , workl(bounds),
& workl , workl(np+1))
^^^^^^^^^^^
they have been changed to
call dsgets (ishift, which , nev ,
& np , workl(irz) , workl(bounds),
& workl)
27. 07/21/2002
In pzneupd.f, loop 11, the intrinsic precision conversion
function 'real' should be changed to 'dble'
28. 07/21/2002
modified the comments in [c,z]neupd regarding the size of
NCV. NCV is only required to be at least NEV+1 (instead of
NEV+2) in the complex version. Changed the error testing
from
else if (ncv .le. nev+1 .or. ncv .gt. n) then
ierr = -3
to
else if (ncv .le. nev .or. ncv .gt. n) then
ierr = -3
29. 07/21/2002
modified the comment in [c,z]naupd regarding the size of
NCV. NCV is only required to be at least NEV+1 (instead of
NEV+2) in the complex version.
30. 07/21/2002
In [s,d]sbdr2.f, lworkl is incorrectly set to ncv*ncv+6*ncv.
Changed it to ncv*ncv+8*ncv.
31. 10/24/2003
There was a typo in p[c,z]neupd. The call to '[c,z]ngets' is
replaced by a call to 'p[c,z]ngets' instead.
32. 10/24/2003 fixing lines that go beyond the 72nd column in p[c,z]naup2.f.
33. 10/24/2003 replace 'slamch' with 'pslamch' in p[c,z]napps.f
34. 10/24/2003 removed an extra argument to the p[s,d]sgets() call.
35. 10/24/2003 p[c,z]naup2.f contain some lines that were incorrectly
generated by cpp. These lines have been removed in the new patch.
36. 09/18/2016 p*apps.f and p*aitr.f contain condition to fetch machine epsilon.
When different p*aupd call use communicator with different number of CPU these
conditions cause deadlock. Variables inside conditions are moved to global
to be reset each first iteration