139 lines
3.4 KiB
FortranFixed
139 lines
3.4 KiB
FortranFixed
|
c-----------------------------------------------------------------------
|
||
|
c\BeginDoc
|
||
|
c
|
||
|
c\Name: dsconv
|
||
|
c
|
||
|
c\Description:
|
||
|
c Convergence testing for the symmetric Arnoldi eigenvalue routine.
|
||
|
c
|
||
|
c\Usage:
|
||
|
c call dsconv
|
||
|
c ( N, RITZ, BOUNDS, TOL, NCONV )
|
||
|
c
|
||
|
c\Arguments
|
||
|
c N Integer. (INPUT)
|
||
|
c Number of Ritz values to check for convergence.
|
||
|
c
|
||
|
c RITZ Double precision array of length N. (INPUT)
|
||
|
c The Ritz values to be checked for convergence.
|
||
|
c
|
||
|
c BOUNDS Double precision array of length N. (INPUT)
|
||
|
c Ritz estimates associated with the Ritz values in RITZ.
|
||
|
c
|
||
|
c TOL Double precision scalar. (INPUT)
|
||
|
c Desired relative accuracy for a Ritz value to be considered
|
||
|
c "converged".
|
||
|
c
|
||
|
c NCONV Integer scalar. (OUTPUT)
|
||
|
c Number of "converged" Ritz values.
|
||
|
c
|
||
|
c\EndDoc
|
||
|
c
|
||
|
c-----------------------------------------------------------------------
|
||
|
c
|
||
|
c\BeginLib
|
||
|
c
|
||
|
c\Routines called:
|
||
|
c second ARPACK utility routine for timing.
|
||
|
c dlamch LAPACK routine that determines machine constants.
|
||
|
c
|
||
|
c\Author
|
||
|
c Danny Sorensen Phuong Vu
|
||
|
c Richard Lehoucq CRPC / Rice University
|
||
|
c Dept. of Computational & Houston, Texas
|
||
|
c Applied Mathematics
|
||
|
c Rice University
|
||
|
c Houston, Texas
|
||
|
c
|
||
|
c\SCCS Information: @(#)
|
||
|
c FILE: sconv.F SID: 2.4 DATE OF SID: 4/19/96 RELEASE: 2
|
||
|
c
|
||
|
c\Remarks
|
||
|
c 1. Starting with version 2.4, this routine no longer uses the
|
||
|
c Parlett strategy using the gap conditions.
|
||
|
c
|
||
|
c\EndLib
|
||
|
c
|
||
|
c-----------------------------------------------------------------------
|
||
|
c
|
||
|
subroutine dsconv (n, ritz, bounds, tol, nconv)
|
||
|
c
|
||
|
c %----------------------------------------------------%
|
||
|
c | Include files for debugging and timing information |
|
||
|
c %----------------------------------------------------%
|
||
|
c
|
||
|
include 'debug.h'
|
||
|
include 'stat.h'
|
||
|
c
|
||
|
c %------------------%
|
||
|
c | Scalar Arguments |
|
||
|
c %------------------%
|
||
|
c
|
||
|
integer n, nconv
|
||
|
Double precision
|
||
|
& tol
|
||
|
c
|
||
|
c %-----------------%
|
||
|
c | Array Arguments |
|
||
|
c %-----------------%
|
||
|
c
|
||
|
Double precision
|
||
|
& ritz(n), bounds(n)
|
||
|
c
|
||
|
c %---------------%
|
||
|
c | Local Scalars |
|
||
|
c %---------------%
|
||
|
c
|
||
|
integer i
|
||
|
Double precision
|
||
|
& temp, eps23
|
||
|
c
|
||
|
c %-------------------%
|
||
|
c | External routines |
|
||
|
c %-------------------%
|
||
|
c
|
||
|
Double precision
|
||
|
& dlamch
|
||
|
external dlamch
|
||
|
|
||
|
c %---------------------%
|
||
|
c | Intrinsic Functions |
|
||
|
c %---------------------%
|
||
|
c
|
||
|
intrinsic abs
|
||
|
c
|
||
|
c %-----------------------%
|
||
|
c | Executable Statements |
|
||
|
c %-----------------------%
|
||
|
c
|
||
|
call second (t0)
|
||
|
c
|
||
|
eps23 = dlamch('Epsilon-Machine')
|
||
|
eps23 = eps23**(2.0D+0 / 3.0D+0)
|
||
|
c
|
||
|
nconv = 0
|
||
|
do 10 i = 1, n
|
||
|
c
|
||
|
c %-----------------------------------------------------%
|
||
|
c | The i-th Ritz value is considered "converged" |
|
||
|
c | when: bounds(i) .le. TOL*max(eps23, abs(ritz(i))) |
|
||
|
c %-----------------------------------------------------%
|
||
|
c
|
||
|
temp = max( eps23, abs(ritz(i)) )
|
||
|
if ( bounds(i) .le. tol*temp ) then
|
||
|
nconv = nconv + 1
|
||
|
end if
|
||
|
c
|
||
|
10 continue
|
||
|
c
|
||
|
call second (t1)
|
||
|
tsconv = tsconv + (t1 - t0)
|
||
|
c
|
||
|
return
|
||
|
c
|
||
|
c %---------------%
|
||
|
c | End of dsconv |
|
||
|
c %---------------%
|
||
|
c
|
||
|
end
|