1 *> \brief \b ZLACON estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vector products.
3 * =========== DOCUMENTATION ===========
5 * Online html documentation available at
6 * http://www.netlib.org/lapack/explore-html/
9 *> Download ZLACON + dependencies
10 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlacon.f">
12 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlacon.f">
14 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlacon.f">
21 * SUBROUTINE ZLACON( N, V, X, EST, KASE )
23 * .. Scalar Arguments ..
25 * DOUBLE PRECISION EST
27 * .. Array Arguments ..
28 * COMPLEX*16 V( N ), X( N )
37 *> ZLACON estimates the 1-norm of a square, complex matrix A.
38 *> Reverse communication is used for evaluating matrix-vector products.
47 *> The order of the matrix. N >= 1.
52 *> V is COMPLEX*16 array, dimension (N)
53 *> On the final return, V = A*W, where EST = norm(V)/norm(W)
54 *> (W is not returned).
59 *> X is COMPLEX*16 array, dimension (N)
60 *> On an intermediate return, X should be overwritten by
62 *> A**H * X, if KASE=2,
63 *> where A**H is the conjugate transpose of A, and ZLACON must be
64 *> re-called with all the other parameters unchanged.
69 *> EST is DOUBLE PRECISION
70 *> On entry with KASE = 1 or 2 and JUMP = 3, EST should be
71 *> unchanged from the previous call to ZLACON.
72 *> On exit, EST is an estimate (a lower bound) for norm(A).
75 *> \param[in,out] KASE
78 *> On the initial call to ZLACON, 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 ZLACON, KASE will again be 0.
87 *> \author Univ. of Tennessee
88 *> \author Univ. of California Berkeley
89 *> \author Univ. of Colorado Denver
92 *> \date September 2012
94 *> \ingroup complex16OTHERauxiliary
96 *> \par Further Details:
97 * =====================
99 *> Originally named CONEST, dated March 16, 1988. \n
100 *> Last modified: April, 1999
102 *> \par Contributors:
105 *> Nick Higham, University of Manchester
110 *> N.J. Higham, "FORTRAN codes for estimating the one-norm of
111 *> a real or complex matrix, with applications to condition estimation",
112 *> ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.
114 * =====================================================================
115 SUBROUTINE ZLACON( N, V, X, EST, KASE )
117 * -- LAPACK auxiliary routine (version 3.4.2) --
118 * -- LAPACK is a software package provided by Univ. of Tennessee, --
119 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
122 * .. Scalar Arguments ..
126 * .. Array Arguments ..
127 COMPLEX*16 V( N ), X( N )
130 * =====================================================================
134 PARAMETER ( ITMAX = 5 )
135 DOUBLE PRECISION ONE, TWO
136 PARAMETER ( ONE = 1.0D0, TWO = 2.0D0 )
137 COMPLEX*16 CZERO, CONE
138 PARAMETER ( CZERO = ( 0.0D0, 0.0D0 ),
139 $ CONE = ( 1.0D0, 0.0D0 ) )
141 * .. Local Scalars ..
142 INTEGER I, ITER, J, JLAST, JUMP
143 DOUBLE PRECISION ABSXI, ALTSGN, ESTOLD, SAFMIN, TEMP
145 * .. External Functions ..
147 DOUBLE PRECISION DLAMCH, DZSUM1
148 EXTERNAL IZMAX1, DLAMCH, DZSUM1
150 * .. External Subroutines ..
153 * .. Intrinsic Functions ..
154 INTRINSIC ABS, DBLE, DCMPLX, DIMAG
156 * .. Save statement ..
159 * .. Executable Statements ..
161 SAFMIN = DLAMCH( 'Safe minimum' )
164 X( I ) = DCMPLX( ONE / DBLE( N ) )
171 GO TO ( 20, 40, 70, 90, 120 )JUMP
173 * ................ ENTRY (JUMP = 1)
174 * FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X.
183 EST = DZSUM1( N, X, 1 )
186 ABSXI = ABS( X( I ) )
187 IF( ABSXI.GT.SAFMIN ) THEN
188 X( I ) = DCMPLX( DBLE( X( I ) ) / ABSXI,
189 $ DIMAG( X( I ) ) / ABSXI )
198 * ................ ENTRY (JUMP = 2)
199 * FIRST ITERATION. X HAS BEEN OVERWRITTEN BY CTRANS(A)*X.
202 J = IZMAX1( N, X, 1 )
205 * MAIN LOOP - ITERATIONS 2,3,...,ITMAX.
216 * ................ ENTRY (JUMP = 3)
217 * X HAS BEEN OVERWRITTEN BY A*X.
220 CALL ZCOPY( N, X, 1, V, 1 )
222 EST = DZSUM1( N, V, 1 )
229 ABSXI = ABS( X( I ) )
230 IF( ABSXI.GT.SAFMIN ) THEN
231 X( I ) = DCMPLX( DBLE( X( I ) ) / ABSXI,
232 $ DIMAG( X( I ) ) / ABSXI )
241 * ................ ENTRY (JUMP = 4)
242 * X HAS BEEN OVERWRITTEN BY CTRANS(A)*X.
246 J = IZMAX1( N, X, 1 )
247 IF( ( ABS( X( JLAST ) ).NE.ABS( X( J ) ) ) .AND.
248 $ ( ITER.LT.ITMAX ) ) THEN
253 * ITERATION COMPLETE. FINAL STAGE.
258 X( I ) = DCMPLX( ALTSGN*( ONE+DBLE( I-1 ) / DBLE( N-1 ) ) )
265 * ................ ENTRY (JUMP = 5)
266 * X HAS BEEN OVERWRITTEN BY A*X.
269 TEMP = TWO*( DZSUM1( N, X, 1 ) / DBLE( 3*N ) )
270 IF( TEMP.GT.EST ) THEN
271 CALL ZCOPY( N, X, 1, V, 1 )