1 REAL FUNCTION cqrt14( TRANS, M, N, NRHS, A, LDA, X,
10 INTEGER lda, ldx, lwork, m, n, nrhs
13 COMPLEX a( lda, * ), work( lwork ), x( ldx, * )
67 parameter( zero = 0.0e0, one = 1.0e0 )
71 INTEGER i, info, j, ldwork
80 EXTERNAL lsame, clange, slamch
86 INTRINSIC abs, conjg,
max,
min, real
91 IF( lsame(
trans,
'N' ) )
THEN
94 IF( lwork.LT.( m+nrhs )*( n+2 ) )
THEN
95 CALL
xerbla(
'CQRT14', 10 )
97 ELSE IF( n.LE.0 .OR. nrhs.LE.0 )
THEN
100 ELSE IF( lsame(
trans,
'C' ) )
THEN
103 IF( lwork.LT.( n+nrhs )*( m+2 ) )
THEN
104 CALL
xerbla(
'CQRT14', 10 )
106 ELSE IF( m.LE.0 .OR. nrhs.LE.0 )
THEN
110 CALL
xerbla(
'CQRT14', 1 )
116 CALL clacpy(
'All', m, n, a, lda, work, ldwork )
117 anrm = clange(
'M', m, n, work, ldwork, rwork )
119 $ CALL
clascl(
'G', 0, 0, anrm, one, m, n, work, ldwork, info )
127 CALL clacpy(
'All', m, nrhs, x, ldx, work( n*ldwork+1 ),
129 xnrm = clange(
'M', m, nrhs, work( n*ldwork+1 ), ldwork,
132 $ CALL
clascl(
'G', 0, 0, xnrm, one, m, nrhs,
133 $ work( n*ldwork+1 ), ldwork, info )
134 anrm = clange(
'One-norm', m, n+nrhs, work, ldwork, rwork )
138 CALL cgeqr2( m, n+nrhs, work, ldwork,
139 $ work( ldwork*( n+nrhs )+1 ),
140 $ work( ldwork*( n+nrhs )+
min( m, n+nrhs )+1 ),
147 DO 20 j = n + 1, n + nrhs
148 DO 10 i = n + 1,
min( m, j )
149 err =
max( err, abs( work( i+( j-1 )*m ) ) )
159 work( m+j+( i-1 )*ldwork ) = conjg( x( i, j ) )
163 xnrm = clange(
'M', nrhs, n, work( m+1 ), ldwork, rwork )
165 $ CALL
clascl(
'G', 0, 0, xnrm, one, nrhs, n, work( m+1 ),
170 CALL cgelq2( ldwork, n, work, ldwork, work( ldwork*n+1 ),
171 $ work( ldwork*( n+1 )+1 ), info )
179 err =
max( err, abs( work( i+( j-1 )*ldwork ) ) )
185 cqrt14 = err / (
REAL( MAX( M, N, NRHS ) )*slamch(
'Epsilon' ) )