Add graph references
This commit is contained in:
+178
@@ -0,0 +1,178 @@
|
||||
/* -- translated by f2c (version 20240504).
|
||||
You must link the resulting object file with libf2c:
|
||||
on Microsoft Windows system, link with libf2c.lib;
|
||||
on Linux or Unix systems, link with .../path/to/libf2c.a -lm
|
||||
or, if you install libf2c.a in a standard place, with -lf2c -lm
|
||||
-- in that order, at the end of the command line, as in
|
||||
cc *.o -lf2c -lm
|
||||
Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
|
||||
|
||||
http://www.netlib.org/f2c/libf2c.zip
|
||||
*/
|
||||
|
||||
#include "f2c.h"
|
||||
|
||||
/* Table of constant values */
|
||||
|
||||
static doublereal c_b3 = .66666666666666663;
|
||||
|
||||
/* -----------------------------------------------------------------------
|
||||
\BeginDoc
|
||||
|
||||
\Name: dnconv
|
||||
|
||||
\Description:
|
||||
Convergence testing for the nonsymmetric Arnoldi eigenvalue routine.
|
||||
|
||||
\Usage:
|
||||
call dnconv
|
||||
( N, RITZR, RITZI, BOUNDS, TOL, NCONV )
|
||||
|
||||
\Arguments
|
||||
N Integer. (INPUT)
|
||||
Number of Ritz values to check for convergence.
|
||||
|
||||
RITZR, Double precision arrays of length N. (INPUT)
|
||||
RITZI Real and imaginary parts of the Ritz values to be checked
|
||||
for convergence.
|
||||
BOUNDS Double precision array of length N. (INPUT)
|
||||
Ritz estimates for the Ritz values in RITZR and RITZI.
|
||||
|
||||
TOL Double precision scalar. (INPUT)
|
||||
Desired backward error for a Ritz value to be considered
|
||||
"converged".
|
||||
|
||||
NCONV Integer scalar. (OUTPUT)
|
||||
Number of "converged" Ritz values.
|
||||
|
||||
\EndDoc
|
||||
|
||||
-----------------------------------------------------------------------
|
||||
|
||||
\BeginLib
|
||||
|
||||
\Local variables:
|
||||
xxxxxx real
|
||||
|
||||
\Routines called:
|
||||
arscnd ARPACK utility routine for timing.
|
||||
dlamch LAPACK routine that determines machine constants.
|
||||
dlapy2 LAPACK routine to compute sqrt(x**2+y**2) carefully.
|
||||
|
||||
\Author
|
||||
Danny Sorensen Phuong Vu
|
||||
Richard Lehoucq CRPC / Rice University
|
||||
Dept. of Computational & Houston, Texas
|
||||
Applied Mathematics
|
||||
Rice University
|
||||
Houston, Texas
|
||||
|
||||
\Revision history:
|
||||
xx/xx/92: Version ' 2.1'
|
||||
|
||||
\SCCS Information: @(#)
|
||||
FILE: nconv.F SID: 2.3 DATE OF SID: 4/20/96 RELEASE: 2
|
||||
|
||||
\Remarks
|
||||
1. xxxx
|
||||
|
||||
\EndLib
|
||||
|
||||
-----------------------------------------------------------------------
|
||||
|
||||
Subroutine */ int igraphdnconv_(integer *n, doublereal *ritzr, doublereal *ritzi,
|
||||
doublereal *bounds, doublereal *tol, integer *nconv)
|
||||
{
|
||||
/* System generated locals */
|
||||
integer i__1;
|
||||
doublereal d__1, d__2;
|
||||
|
||||
/* Builtin functions */
|
||||
double pow_dd(doublereal *, doublereal *);
|
||||
|
||||
/* Local variables */
|
||||
integer i__;
|
||||
real t0, t1;
|
||||
doublereal eps23, temp;
|
||||
extern doublereal igraphdlapy2_(doublereal *, doublereal *), igraphdlamch_(char *);
|
||||
extern /* Subroutine */ int igrapharscnd_(real *);
|
||||
real tnconv=0;
|
||||
|
||||
|
||||
/* %----------------------------------------------------%
|
||||
| Include files for debugging and timing information |
|
||||
%----------------------------------------------------%
|
||||
|
||||
|
||||
%------------------%
|
||||
| Scalar Arguments |
|
||||
%------------------%
|
||||
|
||||
|
||||
%-----------------%
|
||||
| Array Arguments |
|
||||
%-----------------%
|
||||
|
||||
%---------------%
|
||||
| Local Scalars |
|
||||
%---------------%
|
||||
|
||||
|
||||
%--------------------%
|
||||
| External Functions |
|
||||
%--------------------%
|
||||
|
||||
%-----------------------%
|
||||
| Executable Statements |
|
||||
%-----------------------%
|
||||
|
||||
%-------------------------------------------------------------%
|
||||
| Convergence test: unlike in the symmetric code, I am not |
|
||||
| using things like refined error bounds and gap condition |
|
||||
| because I don't know the exact equivalent concept. |
|
||||
| |
|
||||
| Instead the i-th Ritz value is considered "converged" when: |
|
||||
| |
|
||||
| bounds(i) .le. ( TOL * | ritz | ) |
|
||||
| |
|
||||
| for some appropriate choice of norm. |
|
||||
%-------------------------------------------------------------%
|
||||
|
||||
Parameter adjustments */
|
||||
--bounds;
|
||||
--ritzi;
|
||||
--ritzr;
|
||||
|
||||
/* Function Body */
|
||||
igrapharscnd_(&t0);
|
||||
|
||||
/* %---------------------------------%
|
||||
| Get machine dependent constant. |
|
||||
%---------------------------------% */
|
||||
|
||||
eps23 = igraphdlamch_("Epsilon-Machine");
|
||||
eps23 = pow_dd(&eps23, &c_b3);
|
||||
|
||||
*nconv = 0;
|
||||
i__1 = *n;
|
||||
for (i__ = 1; i__ <= i__1; ++i__) {
|
||||
/* Computing MAX */
|
||||
d__1 = eps23, d__2 = igraphdlapy2_(&ritzr[i__], &ritzi[i__]);
|
||||
temp = max(d__1,d__2);
|
||||
if (bounds[i__] <= *tol * temp) {
|
||||
++(*nconv);
|
||||
}
|
||||
/* L20: */
|
||||
}
|
||||
|
||||
igrapharscnd_(&t1);
|
||||
tnconv += t1 - t0;
|
||||
|
||||
return 0;
|
||||
|
||||
/* %---------------%
|
||||
| End of dnconv |
|
||||
%---------------% */
|
||||
|
||||
} /* igraphdnconv_ */
|
||||
|
||||
Reference in New Issue
Block a user