1*> \brief \b ZLATRZ factors an upper trapezoidal matrix by means of unitary transformations. 2* 3* =========== DOCUMENTATION =========== 4* 5* Online html documentation available at 6* http://www.netlib.org/lapack/explore-html/ 7* 8*> \htmlonly 9*> Download ZLATRZ + dependencies 10*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlatrz.f"> 11*> [TGZ]</a> 12*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlatrz.f"> 13*> [ZIP]</a> 14*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlatrz.f"> 15*> [TXT]</a> 16*> \endhtmlonly 17* 18* Definition: 19* =========== 20* 21* SUBROUTINE ZLATRZ( M, N, L, A, LDA, TAU, WORK ) 22* 23* .. Scalar Arguments .. 24* INTEGER L, LDA, M, N 25* .. 26* .. Array Arguments .. 27* COMPLEX*16 A( LDA, * ), TAU( * ), WORK( * ) 28* .. 29* 30* 31*> \par Purpose: 32* ============= 33*> 34*> \verbatim 35*> 36*> ZLATRZ factors the M-by-(M+L) complex upper trapezoidal matrix 37*> [ A1 A2 ] = [ A(1:M,1:M) A(1:M,N-L+1:N) ] as ( R 0 ) * Z by means 38*> of unitary transformations, where Z is an (M+L)-by-(M+L) unitary 39*> matrix and, R and A1 are M-by-M upper triangular matrices. 40*> \endverbatim 41* 42* Arguments: 43* ========== 44* 45*> \param[in] M 46*> \verbatim 47*> M is INTEGER 48*> The number of rows of the matrix A. M >= 0. 49*> \endverbatim 50*> 51*> \param[in] N 52*> \verbatim 53*> N is INTEGER 54*> The number of columns of the matrix A. N >= 0. 55*> \endverbatim 56*> 57*> \param[in] L 58*> \verbatim 59*> L is INTEGER 60*> The number of columns of the matrix A containing the 61*> meaningful part of the Householder vectors. N-M >= L >= 0. 62*> \endverbatim 63*> 64*> \param[in,out] A 65*> \verbatim 66*> A is COMPLEX*16 array, dimension (LDA,N) 67*> On entry, the leading M-by-N upper trapezoidal part of the 68*> array A must contain the matrix to be factorized. 69*> On exit, the leading M-by-M upper triangular part of A 70*> contains the upper triangular matrix R, and elements N-L+1 to 71*> N of the first M rows of A, with the array TAU, represent the 72*> unitary matrix Z as a product of M elementary reflectors. 73*> \endverbatim 74*> 75*> \param[in] LDA 76*> \verbatim 77*> LDA is INTEGER 78*> The leading dimension of the array A. LDA >= max(1,M). 79*> \endverbatim 80*> 81*> \param[out] TAU 82*> \verbatim 83*> TAU is COMPLEX*16 array, dimension (M) 84*> The scalar factors of the elementary reflectors. 85*> \endverbatim 86*> 87*> \param[out] WORK 88*> \verbatim 89*> WORK is COMPLEX*16 array, dimension (M) 90*> \endverbatim 91* 92* Authors: 93* ======== 94* 95*> \author Univ. of Tennessee 96*> \author Univ. of California Berkeley 97*> \author Univ. of Colorado Denver 98*> \author NAG Ltd. 99* 100*> \ingroup complex16OTHERcomputational 101* 102*> \par Contributors: 103* ================== 104*> 105*> A. Petitet, Computer Science Dept., Univ. of Tenn., Knoxville, USA 106* 107*> \par Further Details: 108* ===================== 109*> 110*> \verbatim 111*> 112*> The factorization is obtained by Householder's method. The kth 113*> transformation matrix, Z( k ), which is used to introduce zeros into 114*> the ( m - k + 1 )th row of A, is given in the form 115*> 116*> Z( k ) = ( I 0 ), 117*> ( 0 T( k ) ) 118*> 119*> where 120*> 121*> T( k ) = I - tau*u( k )*u( k )**H, u( k ) = ( 1 ), 122*> ( 0 ) 123*> ( z( k ) ) 124*> 125*> tau is a scalar and z( k ) is an l element vector. tau and z( k ) 126*> are chosen to annihilate the elements of the kth row of A2. 127*> 128*> The scalar tau is returned in the kth element of TAU and the vector 129*> u( k ) in the kth row of A2, such that the elements of z( k ) are 130*> in a( k, l + 1 ), ..., a( k, n ). The elements of R are returned in 131*> the upper triangular part of A1. 132*> 133*> Z is given by 134*> 135*> Z = Z( 1 ) * Z( 2 ) * ... * Z( m ). 136*> \endverbatim 137*> 138* ===================================================================== 139 SUBROUTINE ZLATRZ( M, N, L, A, LDA, TAU, WORK ) 140* 141* -- LAPACK computational routine -- 142* -- LAPACK is a software package provided by Univ. of Tennessee, -- 143* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 144* 145* .. Scalar Arguments .. 146 INTEGER L, LDA, M, N 147* .. 148* .. Array Arguments .. 149 COMPLEX*16 A( LDA, * ), TAU( * ), WORK( * ) 150* .. 151* 152* ===================================================================== 153* 154* .. Parameters .. 155 COMPLEX*16 ZERO 156 PARAMETER ( ZERO = ( 0.0D+0, 0.0D+0 ) ) 157* .. 158* .. Local Scalars .. 159 INTEGER I 160 COMPLEX*16 ALPHA 161* .. 162* .. External Subroutines .. 163 EXTERNAL ZLACGV, ZLARFG, ZLARZ 164* .. 165* .. Intrinsic Functions .. 166 INTRINSIC DCONJG 167* .. 168* .. Executable Statements .. 169* 170* Quick return if possible 171* 172 IF( M.EQ.0 ) THEN 173 RETURN 174 ELSE IF( M.EQ.N ) THEN 175 DO 10 I = 1, N 176 TAU( I ) = ZERO 177 10 CONTINUE 178 RETURN 179 END IF 180* 181 DO 20 I = M, 1, -1 182* 183* Generate elementary reflector H(i) to annihilate 184* [ A(i,i) A(i,n-l+1:n) ] 185* 186 CALL ZLACGV( L, A( I, N-L+1 ), LDA ) 187 ALPHA = DCONJG( A( I, I ) ) 188 CALL ZLARFG( L+1, ALPHA, A( I, N-L+1 ), LDA, TAU( I ) ) 189 TAU( I ) = DCONJG( TAU( I ) ) 190* 191* Apply H(i) to A(1:i-1,i:n) from the right 192* 193 CALL ZLARZ( 'Right', I-1, N-I+1, L, A( I, N-L+1 ), LDA, 194 $ DCONJG( TAU( I ) ), A( 1, I ), LDA, WORK ) 195 A( I, I ) = DCONJG( ALPHA ) 196* 197 20 CONTINUE 198* 199 RETURN 200* 201* End of ZLATRZ 202* 203 END 204