annotate libcruft/lapack/dlasq3.f @ 6021:60f9ced8ab53 ss-2-9-9

[project @ 2006-10-02 20:02:20 by jwe]
author jwe
date Mon, 02 Oct 2006 20:02:21 +0000
parents 562c1b1fa5f4
children 68db500cb558
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
1 SUBROUTINE DLASQ3( I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX, NFAIL,
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
2 $ ITER, NDIV, IEEE )
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
3 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
4 * -- LAPACK auxiliary routine (version 3.0) --
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
5 * Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
6 * Courant Institute, Argonne National Lab, and Rice University
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
7 * May 17, 2000
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
8 *
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
9 * .. Scalar Arguments ..
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
10 LOGICAL IEEE
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
11 INTEGER I0, ITER, N0, NDIV, NFAIL, PP
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
12 DOUBLE PRECISION DESIG, DMIN, QMAX, SIGMA
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
13 * ..
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
14 * .. Array Arguments ..
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
15 DOUBLE PRECISION Z( * )
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
16 * ..
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
17 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
18 * Purpose
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
19 * =======
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
20 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
21 * DLASQ3 checks for deflation, computes a shift (TAU) and calls dqds.
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
22 * In case of failure it changes shifts, and tries again until output
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
23 * is positive.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
24 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
25 * Arguments
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
26 * =========
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
27 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
28 * I0 (input) INTEGER
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
29 * First index.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
30 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
31 * N0 (input) INTEGER
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
32 * Last index.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
33 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
34 * Z (input) DOUBLE PRECISION array, dimension ( 4*N )
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
35 * Z holds the qd array.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
36 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
37 * PP (input) INTEGER
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
38 * PP=0 for ping, PP=1 for pong.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
39 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
40 * DMIN (output) DOUBLE PRECISION
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
41 * Minimum value of d.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
42 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
43 * SIGMA (output) DOUBLE PRECISION
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
44 * Sum of shifts used in current segment.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
45 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
46 * DESIG (input/output) DOUBLE PRECISION
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
47 * Lower order part of SIGMA
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
48 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
49 * QMAX (input) DOUBLE PRECISION
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
50 * Maximum value of q.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
51 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
52 * NFAIL (output) INTEGER
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
53 * Number of times shift was too big.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
54 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
55 * ITER (output) INTEGER
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
56 * Number of iterations.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
57 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
58 * NDIV (output) INTEGER
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
59 * Number of divisions.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
60 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
61 * TTYPE (output) INTEGER
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
62 * Shift type.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
63 *
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
64 * IEEE (input) LOGICAL
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
65 * Flag for IEEE or non IEEE arithmetic (passed to DLASQ5).
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
66 *
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
67 * =====================================================================
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
68 *
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
69 * .. Parameters ..
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
70 DOUBLE PRECISION CBIAS
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
71 PARAMETER ( CBIAS = 1.50D0 )
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
72 DOUBLE PRECISION ZERO, QURTR, HALF, ONE, TWO, HUNDRD
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
73 PARAMETER ( ZERO = 0.0D0, QURTR = 0.250D0, HALF = 0.5D0,
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
74 $ ONE = 1.0D0, TWO = 2.0D0, HUNDRD = 100.0D0 )
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
75 * ..
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
76 * .. Local Scalars ..
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
77 INTEGER IPN4, J4, N0IN, NN, TTYPE
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
78 DOUBLE PRECISION DMIN1, DMIN2, DN, DN1, DN2, EPS, S, SAFMIN, T,
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
79 $ TAU, TEMP, TOL, TOL2
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
80 * ..
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
81 * .. External Subroutines ..
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
82 EXTERNAL DLASQ4, DLASQ5, DLASQ6
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
83 * ..
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
84 * .. External Function ..
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
85 DOUBLE PRECISION DLAMCH
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
86 EXTERNAL DLAMCH
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
87 * ..
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
88 * .. Intrinsic Functions ..
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
89 INTRINSIC ABS, MIN, SQRT
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
90 * ..
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
91 * .. Save statement ..
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
92 SAVE TTYPE
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
93 SAVE DMIN1, DMIN2, DN, DN1, DN2, TAU
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
94 * ..
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
95 * .. Data statement ..
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
96 DATA TTYPE / 0 /
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
97 DATA DMIN1 / ZERO /, DMIN2 / ZERO /, DN / ZERO /,
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
98 $ DN1 / ZERO /, DN2 / ZERO /, TAU / ZERO /
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
99 * ..
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
100 * .. Executable Statements ..
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
101 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
102 N0IN = N0
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
103 EPS = DLAMCH( 'Precision' )
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
104 SAFMIN = DLAMCH( 'Safe minimum' )
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
105 TOL = EPS*HUNDRD
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
106 TOL2 = TOL**2
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
107 *
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
108 * Check for deflation.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
109 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
110 10 CONTINUE
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
111 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
112 IF( N0.LT.I0 )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
113 $ RETURN
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
114 IF( N0.EQ.I0 )
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
115 $ GO TO 20
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
116 NN = 4*N0 + PP
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
117 IF( N0.EQ.( I0+1 ) )
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
118 $ GO TO 40
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
119 *
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
120 * Check whether E(N0-1) is negligible, 1 eigenvalue.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
121 *
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
122 IF( Z( NN-5 ).GT.TOL2*( SIGMA+Z( NN-3 ) ) .AND.
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
123 $ Z( NN-2*PP-4 ).GT.TOL2*Z( NN-7 ) )
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
124 $ GO TO 30
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
125 *
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
126 20 CONTINUE
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
127 *
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
128 Z( 4*N0-3 ) = Z( 4*N0+PP-3 ) + SIGMA
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
129 N0 = N0 - 1
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
130 GO TO 10
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
131 *
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
132 * Check whether E(N0-2) is negligible, 2 eigenvalues.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
133 *
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
134 30 CONTINUE
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
135 *
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
136 IF( Z( NN-9 ).GT.TOL2*SIGMA .AND.
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
137 $ Z( NN-2*PP-8 ).GT.TOL2*Z( NN-11 ) )
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
138 $ GO TO 50
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
139 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
140 40 CONTINUE
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
141 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
142 IF( Z( NN-3 ).GT.Z( NN-7 ) ) THEN
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
143 S = Z( NN-3 )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
144 Z( NN-3 ) = Z( NN-7 )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
145 Z( NN-7 ) = S
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
146 END IF
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
147 IF( Z( NN-5 ).GT.Z( NN-3 )*TOL2 ) THEN
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
148 T = HALF*( ( Z( NN-7 )-Z( NN-3 ) )+Z( NN-5 ) )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
149 S = Z( NN-3 )*( Z( NN-5 ) / T )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
150 IF( S.LE.T ) THEN
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
151 S = Z( NN-3 )*( Z( NN-5 ) /
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
152 $ ( T*( ONE+SQRT( ONE+S / T ) ) ) )
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
153 ELSE
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
154 S = Z( NN-3 )*( Z( NN-5 ) / ( T+SQRT( T )*SQRT( T+S ) ) )
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
155 END IF
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
156 T = Z( NN-7 ) + ( S+Z( NN-5 ) )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
157 Z( NN-3 ) = Z( NN-3 )*( Z( NN-7 ) / T )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
158 Z( NN-7 ) = T
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
159 END IF
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
160 Z( 4*N0-7 ) = Z( NN-7 ) + SIGMA
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
161 Z( 4*N0-3 ) = Z( NN-3 ) + SIGMA
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
162 N0 = N0 - 2
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
163 GO TO 10
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
164 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
165 50 CONTINUE
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
166 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
167 * Reverse the qd-array, if warranted.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
168 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
169 IF( DMIN.LE.ZERO .OR. N0.LT.N0IN ) THEN
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
170 IF( CBIAS*Z( 4*I0+PP-3 ).LT.Z( 4*N0+PP-3 ) ) THEN
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
171 IPN4 = 4*( I0+N0 )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
172 DO 60 J4 = 4*I0, 2*( I0+N0-1 ), 4
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
173 TEMP = Z( J4-3 )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
174 Z( J4-3 ) = Z( IPN4-J4-3 )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
175 Z( IPN4-J4-3 ) = TEMP
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
176 TEMP = Z( J4-2 )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
177 Z( J4-2 ) = Z( IPN4-J4-2 )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
178 Z( IPN4-J4-2 ) = TEMP
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
179 TEMP = Z( J4-1 )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
180 Z( J4-1 ) = Z( IPN4-J4-5 )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
181 Z( IPN4-J4-5 ) = TEMP
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
182 TEMP = Z( J4 )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
183 Z( J4 ) = Z( IPN4-J4-4 )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
184 Z( IPN4-J4-4 ) = TEMP
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
185 60 CONTINUE
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
186 IF( N0-I0.LE.4 ) THEN
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
187 Z( 4*N0+PP-1 ) = Z( 4*I0+PP-1 )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
188 Z( 4*N0-PP ) = Z( 4*I0-PP )
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
189 END IF
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
190 DMIN2 = MIN( DMIN2, Z( 4*N0+PP-1 ) )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
191 Z( 4*N0+PP-1 ) = MIN( Z( 4*N0+PP-1 ), Z( 4*I0+PP-1 ),
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
192 $ Z( 4*I0+PP+3 ) )
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
193 Z( 4*N0-PP ) = MIN( Z( 4*N0-PP ), Z( 4*I0-PP ),
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
194 $ Z( 4*I0-PP+4 ) )
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
195 QMAX = MAX( QMAX, Z( 4*I0+PP-3 ), Z( 4*I0+PP+1 ) )
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
196 DMIN = -ZERO
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
197 END IF
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
198 END IF
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
199 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
200 70 CONTINUE
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
201 *
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
202 IF( DMIN.LT.ZERO .OR. SAFMIN*QMAX.LT.MIN( Z( 4*N0+PP-1 ),
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
203 $ Z( 4*N0+PP-9 ), DMIN2+Z( 4*N0-PP ) ) ) THEN
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
204 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
205 * Choose a shift.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
206 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
207 CALL DLASQ4( I0, N0, Z, PP, N0IN, DMIN, DMIN1, DMIN2, DN, DN1,
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
208 $ DN2, TAU, TTYPE )
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
209 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
210 * Call dqds until DMIN > 0.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
211 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
212 80 CONTINUE
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
213 *
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
214 CALL DLASQ5( I0, N0, Z, PP, TAU, DMIN, DMIN1, DMIN2, DN,
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
215 $ DN1, DN2, IEEE )
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
216 *
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
217 NDIV = NDIV + ( N0-I0+2 )
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
218 ITER = ITER + 1
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
219 *
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
220 * Check status.
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
221 *
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
222 IF( DMIN.GE.ZERO .AND. DMIN1.GT.ZERO ) THEN
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
223 *
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
224 * Success.
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
225 *
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
226 GO TO 100
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
227 *
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
228 ELSE IF( DMIN.LT.ZERO .AND. DMIN1.GT.ZERO .AND.
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
229 $ Z( 4*( N0-1 )-PP ).LT.TOL*( SIGMA+DN1 ) .AND.
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
230 $ ABS( DN ).LT.TOL*SIGMA ) THEN
3595
fa5817b05b0f [project @ 2000-02-10 09:20:48 by jwe]
jwe
parents: 3333
diff changeset
231 *
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
232 * Convergence hidden by negative DN.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
233 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
234 Z( 4*( N0-1 )-PP+2 ) = ZERO
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
235 DMIN = ZERO
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
236 GO TO 100
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
237 ELSE IF( DMIN.LT.ZERO ) THEN
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
238 *
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
239 * TAU too big. Select new TAU and try again.
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
240 *
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
241 NFAIL = NFAIL + 1
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
242 IF( TTYPE.LT.-22 ) THEN
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
243 *
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
244 * Failed twice. Play it safe.
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
245 *
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
246 TAU = ZERO
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
247 ELSE IF( DMIN1.GT.ZERO ) THEN
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
248 *
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
249 * Late failure. Gives excellent shift.
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
250 *
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
251 TAU = ( TAU+DMIN )*( ONE-TWO*EPS )
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
252 TTYPE = TTYPE - 11
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
253 ELSE
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
254 *
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
255 * Early failure. Divide by 4.
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
256 *
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
257 TAU = QURTR*TAU
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
258 TTYPE = TTYPE - 12
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
259 END IF
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
260 GO TO 80
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
261 ELSE IF( DMIN.NE.DMIN ) THEN
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
262 *
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
263 * NaN.
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
264 *
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
265 TAU = ZERO
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
266 GO TO 80
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
267 ELSE
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
268 *
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
269 * Possible underflow. Play it safe.
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
270 *
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
271 GO TO 90
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
272 END IF
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
273 END IF
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
274 *
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
275 * Risk of underflow.
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
276 *
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
277 90 CONTINUE
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
278 CALL DLASQ6( I0, N0, Z, PP, DMIN, DMIN1, DMIN2, DN, DN1, DN2 )
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
279 NDIV = NDIV + ( N0-I0+2 )
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
280 ITER = ITER + 1
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
281 TAU = ZERO
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
282 *
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
283 100 CONTINUE
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
284 IF( TAU.LT.SIGMA ) THEN
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
285 DESIG = DESIG + TAU
3848
562c1b1fa5f4 [project @ 2001-08-13 17:26:42 by jwe]
jwe
parents: 3596
diff changeset
286 T = SIGMA + DESIG
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
287 DESIG = DESIG - ( T-SIGMA )
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
288 ELSE
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
289 T = SIGMA + TAU
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
290 DESIG = SIGMA - ( T-TAU ) + DESIG
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
291 END IF
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
292 SIGMA = T
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
293 *
3333
15cddaacbc2d [project @ 1999-11-03 19:53:59 by jwe]
jwe
parents: 2329
diff changeset
294 RETURN
2329
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
295 *
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
296 * End of DLASQ3
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
297 *
30c606bec7a8 [project @ 1996-07-19 01:29:05 by jwe]
jwe
parents:
diff changeset
298 END