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