LAPACK  3.10.0
LAPACK: Linear Algebra PACKage
clacon.f
Go to the documentation of this file.
1 *> \brief \b CLACON estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vector products.
2 *
3 * =========== DOCUMENTATION ===========
4 *
5 * Online html documentation available at
6 * http://www.netlib.org/lapack/explore-html/
7 *
8 *> \htmlonly
9 *> Download CLACON + dependencies
10 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/clacon.f">
11 *> [TGZ]</a>
12 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/clacon.f">
13 *> [ZIP]</a>
14 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/clacon.f">
15 *> [TXT]</a>
16 *> \endhtmlonly
17 *
18 * Definition:
19 * ===========
20 *
21 * SUBROUTINE CLACON( N, V, X, EST, KASE )
22 *
23 * .. Scalar Arguments ..
24 * INTEGER KASE, N
25 * REAL EST
26 * ..
27 * .. Array Arguments ..
28 * COMPLEX V( N ), X( N )
29 * ..
30 *
31 *
32 *> \par Purpose:
33 * =============
34 *>
35 *> \verbatim
36 *>
37 *> CLACON estimates the 1-norm of a square, complex matrix A.
38 *> Reverse communication is used for evaluating matrix-vector products.
39 *> \endverbatim
40 *
41 * Arguments:
42 * ==========
43 *
44 *> \param[in] N
45 *> \verbatim
46 *> N is INTEGER
47 *> The order of the matrix. N >= 1.
48 *> \endverbatim
49 *>
50 *> \param[out] V
51 *> \verbatim
52 *> V is COMPLEX array, dimension (N)
53 *> On the final return, V = A*W, where EST = norm(V)/norm(W)
54 *> (W is not returned).
55 *> \endverbatim
56 *>
57 *> \param[in,out] X
58 *> \verbatim
59 *> X is COMPLEX array, dimension (N)
60 *> On an intermediate return, X should be overwritten by
61 *> A * X, if KASE=1,
62 *> A**H * X, if KASE=2,
63 *> where A**H is the conjugate transpose of A, and CLACON must be
64 *> re-called with all the other parameters unchanged.
65 *> \endverbatim
66 *>
67 *> \param[in,out] EST
68 *> \verbatim
69 *> EST is REAL
70 *> On entry with KASE = 1 or 2 and JUMP = 3, EST should be
71 *> unchanged from the previous call to CLACON.
72 *> On exit, EST is an estimate (a lower bound) for norm(A).
73 *> \endverbatim
74 *>
75 *> \param[in,out] KASE
76 *> \verbatim
77 *> KASE is INTEGER
78 *> On the initial call to CLACON, KASE should be 0.
79 *> On an intermediate return, KASE will be 1 or 2, indicating
80 *> whether X should be overwritten by A * X or A**H * X.
81 *> On the final return from CLACON, KASE will again be 0.
82 *> \endverbatim
83 *
84 * Authors:
85 * ========
86 *
87 *> \author Univ. of Tennessee
88 *> \author Univ. of California Berkeley
89 *> \author Univ. of Colorado Denver
90 *> \author NAG Ltd.
91 *
92 *> \ingroup complexOTHERauxiliary
93 *
94 *> \par Further Details:
95 * =====================
96 *>
97 *> Originally named CONEST, dated March 16, 1988. \n
98 *> Last modified: April, 1999
99 *
100 *> \par Contributors:
101 * ==================
102 *>
103 *> Nick Higham, University of Manchester
104 *
105 *> \par References:
106 * ================
107 *>
108 *> N.J. Higham, "FORTRAN codes for estimating the one-norm of
109 *> a real or complex matrix, with applications to condition estimation",
110 *> ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.
111 *>
112 * =====================================================================
113  SUBROUTINE clacon( N, V, X, EST, KASE )
114 *
115 * -- LAPACK auxiliary routine --
116 * -- LAPACK is a software package provided by Univ. of Tennessee, --
117 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
118 *
119 * .. Scalar Arguments ..
120  INTEGER KASE, N
121  REAL EST
122 * ..
123 * .. Array Arguments ..
124  COMPLEX V( N ), X( N )
125 * ..
126 *
127 * =====================================================================
128 *
129 * .. Parameters ..
130  INTEGER ITMAX
131  parameter( itmax = 5 )
132  REAL ONE, TWO
133  parameter( one = 1.0e0, two = 2.0e0 )
134  COMPLEX CZERO, CONE
135  parameter( czero = ( 0.0e0, 0.0e0 ),
136  $ cone = ( 1.0e0, 0.0e0 ) )
137 * ..
138 * .. Local Scalars ..
139  INTEGER I, ITER, J, JLAST, JUMP
140  REAL ABSXI, ALTSGN, ESTOLD, SAFMIN, TEMP
141 * ..
142 * .. External Functions ..
143  INTEGER ICMAX1
144  REAL SCSUM1, SLAMCH
145  EXTERNAL icmax1, scsum1, slamch
146 * ..
147 * .. External Subroutines ..
148  EXTERNAL ccopy
149 * ..
150 * .. Intrinsic Functions ..
151  INTRINSIC abs, aimag, cmplx, real
152 * ..
153 * .. Save statement ..
154  SAVE
155 * ..
156 * .. Executable Statements ..
157 *
158  safmin = slamch( 'Safe minimum' )
159  IF( kase.EQ.0 ) THEN
160  DO 10 i = 1, n
161  x( i ) = cmplx( one / real( n ) )
162  10 CONTINUE
163  kase = 1
164  jump = 1
165  RETURN
166  END IF
167 *
168  GO TO ( 20, 40, 70, 90, 120 )jump
169 *
170 * ................ ENTRY (JUMP = 1)
171 * FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X.
172 *
173  20 CONTINUE
174  IF( n.EQ.1 ) THEN
175  v( 1 ) = x( 1 )
176  est = abs( v( 1 ) )
177 * ... QUIT
178  GO TO 130
179  END IF
180  est = scsum1( n, x, 1 )
181 *
182  DO 30 i = 1, n
183  absxi = abs( x( i ) )
184  IF( absxi.GT.safmin ) THEN
185  x( i ) = cmplx( real( x( i ) ) / absxi,
186  $ aimag( x( i ) ) / absxi )
187  ELSE
188  x( i ) = cone
189  END IF
190  30 CONTINUE
191  kase = 2
192  jump = 2
193  RETURN
194 *
195 * ................ ENTRY (JUMP = 2)
196 * FIRST ITERATION. X HAS BEEN OVERWRITTEN BY CTRANS(A)*X.
197 *
198  40 CONTINUE
199  j = icmax1( n, x, 1 )
200  iter = 2
201 *
202 * MAIN LOOP - ITERATIONS 2,3,...,ITMAX.
203 *
204  50 CONTINUE
205  DO 60 i = 1, n
206  x( i ) = czero
207  60 CONTINUE
208  x( j ) = cone
209  kase = 1
210  jump = 3
211  RETURN
212 *
213 * ................ ENTRY (JUMP = 3)
214 * X HAS BEEN OVERWRITTEN BY A*X.
215 *
216  70 CONTINUE
217  CALL ccopy( n, x, 1, v, 1 )
218  estold = est
219  est = scsum1( n, v, 1 )
220 *
221 * TEST FOR CYCLING.
222  IF( est.LE.estold )
223  $ GO TO 100
224 *
225  DO 80 i = 1, n
226  absxi = abs( x( i ) )
227  IF( absxi.GT.safmin ) THEN
228  x( i ) = cmplx( real( x( i ) ) / absxi,
229  $ aimag( x( i ) ) / absxi )
230  ELSE
231  x( i ) = cone
232  END IF
233  80 CONTINUE
234  kase = 2
235  jump = 4
236  RETURN
237 *
238 * ................ ENTRY (JUMP = 4)
239 * X HAS BEEN OVERWRITTEN BY CTRANS(A)*X.
240 *
241  90 CONTINUE
242  jlast = j
243  j = icmax1( n, x, 1 )
244  IF( ( abs( x( jlast ) ).NE.abs( x( j ) ) ) .AND.
245  $ ( iter.LT.itmax ) ) THEN
246  iter = iter + 1
247  GO TO 50
248  END IF
249 *
250 * ITERATION COMPLETE. FINAL STAGE.
251 *
252  100 CONTINUE
253  altsgn = one
254  DO 110 i = 1, n
255  x( i ) = cmplx( altsgn*( one+real( i-1 ) / real( n-1 ) ) )
256  altsgn = -altsgn
257  110 CONTINUE
258  kase = 1
259  jump = 5
260  RETURN
261 *
262 * ................ ENTRY (JUMP = 5)
263 * X HAS BEEN OVERWRITTEN BY A*X.
264 *
265  120 CONTINUE
266  temp = two*( scsum1( n, x, 1 ) / real( 3*n ) )
267  IF( temp.GT.est ) THEN
268  CALL ccopy( n, x, 1, v, 1 )
269  est = temp
270  END IF
271 *
272  130 CONTINUE
273  kase = 0
274  RETURN
275 *
276 * End of CLACON
277 *
278  END
subroutine ccopy(N, CX, INCX, CY, INCY)
CCOPY
Definition: ccopy.f:81
subroutine clacon(N, V, X, EST, KASE)
CLACON estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vec...
Definition: clacon.f:114