annotate libcruft/lapack/dlacn2.f @ 7034:68db500cb558

[project @ 2007-10-16 18:54:19 by jwe]
author jwe
date Tue, 16 Oct 2007 18:54:23 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7034
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
1 SUBROUTINE DLACN2( N, V, X, ISGN, EST, KASE, ISAVE )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
2 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
3 * -- LAPACK auxiliary routine (version 3.1) --
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
4 * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
5 * November 2006
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
6 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
7 * .. Scalar Arguments ..
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
8 INTEGER KASE, N
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
9 DOUBLE PRECISION EST
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
10 * ..
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
11 * .. Array Arguments ..
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
12 INTEGER ISGN( * ), ISAVE( 3 )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
13 DOUBLE PRECISION V( * ), X( * )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
14 * ..
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
15 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
16 * Purpose
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
17 * =======
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
18 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
19 * DLACN2 estimates the 1-norm of a square, real matrix A.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
20 * Reverse communication is used for evaluating matrix-vector products.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
21 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
22 * Arguments
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
23 * =========
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
24 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
25 * N (input) INTEGER
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
26 * The order of the matrix. N >= 1.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
27 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
28 * V (workspace) DOUBLE PRECISION array, dimension (N)
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
29 * On the final return, V = A*W, where EST = norm(V)/norm(W)
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
30 * (W is not returned).
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
31 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
32 * X (input/output) DOUBLE PRECISION array, dimension (N)
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
33 * On an intermediate return, X should be overwritten by
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
34 * A * X, if KASE=1,
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
35 * A' * X, if KASE=2,
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
36 * and DLACN2 must be re-called with all the other parameters
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
37 * unchanged.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
38 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
39 * ISGN (workspace) INTEGER array, dimension (N)
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
40 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
41 * EST (input/output) DOUBLE PRECISION
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
42 * On entry with KASE = 1 or 2 and ISAVE(1) = 3, EST should be
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
43 * unchanged from the previous call to DLACN2.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
44 * On exit, EST is an estimate (a lower bound) for norm(A).
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
45 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
46 * KASE (input/output) INTEGER
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
47 * On the initial call to DLACN2, KASE should be 0.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
48 * On an intermediate return, KASE will be 1 or 2, indicating
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
49 * whether X should be overwritten by A * X or A' * X.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
50 * On the final return from DLACN2, KASE will again be 0.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
51 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
52 * ISAVE (input/output) INTEGER array, dimension (3)
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
53 * ISAVE is used to save variables between calls to DLACN2
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
54 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
55 * Further Details
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
56 * ======= =======
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
57 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
58 * Contributed by Nick Higham, University of Manchester.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
59 * Originally named SONEST, dated March 16, 1988.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
60 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
61 * Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
62 * a real or complex matrix, with applications to condition estimation",
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
63 * ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
64 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
65 * This is a thread safe version of DLACON, which uses the array ISAVE
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
66 * in place of a SAVE statement, as follows:
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
67 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
68 * DLACON DLACN2
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
69 * JUMP ISAVE(1)
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
70 * J ISAVE(2)
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
71 * ITER ISAVE(3)
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
72 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
73 * =====================================================================
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
74 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
75 * .. Parameters ..
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
76 INTEGER ITMAX
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
77 PARAMETER ( ITMAX = 5 )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
78 DOUBLE PRECISION ZERO, ONE, TWO
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
79 PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0, TWO = 2.0D+0 )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
80 * ..
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
81 * .. Local Scalars ..
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
82 INTEGER I, JLAST
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
83 DOUBLE PRECISION ALTSGN, ESTOLD, TEMP
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
84 * ..
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
85 * .. External Functions ..
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
86 INTEGER IDAMAX
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
87 DOUBLE PRECISION DASUM
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
88 EXTERNAL IDAMAX, DASUM
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
89 * ..
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
90 * .. External Subroutines ..
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
91 EXTERNAL DCOPY
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
92 * ..
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
93 * .. Intrinsic Functions ..
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
94 INTRINSIC ABS, DBLE, NINT, SIGN
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
95 * ..
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
96 * .. Executable Statements ..
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
97 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
98 IF( KASE.EQ.0 ) THEN
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
99 DO 10 I = 1, N
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
100 X( I ) = ONE / DBLE( N )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
101 10 CONTINUE
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
102 KASE = 1
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
103 ISAVE( 1 ) = 1
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
104 RETURN
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
105 END IF
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
106 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
107 GO TO ( 20, 40, 70, 110, 140 )ISAVE( 1 )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
108 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
109 * ................ ENTRY (ISAVE( 1 ) = 1)
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
110 * FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
111 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
112 20 CONTINUE
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
113 IF( N.EQ.1 ) THEN
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
114 V( 1 ) = X( 1 )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
115 EST = ABS( V( 1 ) )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
116 * ... QUIT
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
117 GO TO 150
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
118 END IF
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
119 EST = DASUM( N, X, 1 )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
120 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
121 DO 30 I = 1, N
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
122 X( I ) = SIGN( ONE, X( I ) )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
123 ISGN( I ) = NINT( X( I ) )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
124 30 CONTINUE
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
125 KASE = 2
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
126 ISAVE( 1 ) = 2
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
127 RETURN
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
128 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
129 * ................ ENTRY (ISAVE( 1 ) = 2)
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
130 * FIRST ITERATION. X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
131 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
132 40 CONTINUE
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
133 ISAVE( 2 ) = IDAMAX( N, X, 1 )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
134 ISAVE( 3 ) = 2
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
135 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
136 * MAIN LOOP - ITERATIONS 2,3,...,ITMAX.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
137 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
138 50 CONTINUE
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
139 DO 60 I = 1, N
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
140 X( I ) = ZERO
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
141 60 CONTINUE
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
142 X( ISAVE( 2 ) ) = ONE
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
143 KASE = 1
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
144 ISAVE( 1 ) = 3
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
145 RETURN
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
146 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
147 * ................ ENTRY (ISAVE( 1 ) = 3)
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
148 * X HAS BEEN OVERWRITTEN BY A*X.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
149 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
150 70 CONTINUE
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
151 CALL DCOPY( N, X, 1, V, 1 )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
152 ESTOLD = EST
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
153 EST = DASUM( N, V, 1 )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
154 DO 80 I = 1, N
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
155 IF( NINT( SIGN( ONE, X( I ) ) ).NE.ISGN( I ) )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
156 $ GO TO 90
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
157 80 CONTINUE
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
158 * REPEATED SIGN VECTOR DETECTED, HENCE ALGORITHM HAS CONVERGED.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
159 GO TO 120
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
160 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
161 90 CONTINUE
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
162 * TEST FOR CYCLING.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
163 IF( EST.LE.ESTOLD )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
164 $ GO TO 120
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
165 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
166 DO 100 I = 1, N
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
167 X( I ) = SIGN( ONE, X( I ) )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
168 ISGN( I ) = NINT( X( I ) )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
169 100 CONTINUE
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
170 KASE = 2
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
171 ISAVE( 1 ) = 4
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
172 RETURN
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
173 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
174 * ................ ENTRY (ISAVE( 1 ) = 4)
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
175 * X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
176 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
177 110 CONTINUE
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
178 JLAST = ISAVE( 2 )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
179 ISAVE( 2 ) = IDAMAX( N, X, 1 )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
180 IF( ( X( JLAST ).NE.ABS( X( ISAVE( 2 ) ) ) ) .AND.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
181 $ ( ISAVE( 3 ).LT.ITMAX ) ) THEN
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
182 ISAVE( 3 ) = ISAVE( 3 ) + 1
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
183 GO TO 50
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
184 END IF
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
185 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
186 * ITERATION COMPLETE. FINAL STAGE.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
187 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
188 120 CONTINUE
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
189 ALTSGN = ONE
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
190 DO 130 I = 1, N
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
191 X( I ) = ALTSGN*( ONE+DBLE( I-1 ) / DBLE( N-1 ) )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
192 ALTSGN = -ALTSGN
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
193 130 CONTINUE
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
194 KASE = 1
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
195 ISAVE( 1 ) = 5
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
196 RETURN
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
197 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
198 * ................ ENTRY (ISAVE( 1 ) = 5)
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
199 * X HAS BEEN OVERWRITTEN BY A*X.
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
200 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
201 140 CONTINUE
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
202 TEMP = TWO*( DASUM( N, X, 1 ) / DBLE( 3*N ) )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
203 IF( TEMP.GT.EST ) THEN
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
204 CALL DCOPY( N, X, 1, V, 1 )
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
205 EST = TEMP
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
206 END IF
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
207 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
208 150 CONTINUE
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
209 KASE = 0
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
210 RETURN
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
211 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
212 * End of DLACN2
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
213 *
68db500cb558 [project @ 2007-10-16 18:54:19 by jwe]
jwe
parents:
diff changeset
214 END