337 lines
11 KiB
Plaintext
337 lines
11 KiB
Plaintext
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 |