95 REAL function
cqrt12( m, n, a, lda, s, work, lwork,
103 INTEGER lda, lwork, m, n
106 REAL rwork( * ), s( * )
107 COMPLEX a( lda, * ), work( lwork )
114 parameter( zero = 0.0e0, one = 1.0e0 )
117 INTEGER i, info, iscl, j, mn
118 REAL anrm, bignum, nrmsvl, smlnum
132 INTRINSIC cmplx, max, min, real
140 IF( lwork.LT.m*n+2*min( m, n )+max( m, n ) )
THEN
141 CALL xerbla(
'CQRT12', 7 )
151 nrmsvl =
snrm2( mn, s, 1 )
155 CALL claset(
'Full', m, n, cmplx( zero ), cmplx( zero ), work, m )
157 DO 10 i = 1, min( j, m )
158 work( ( j-1 )*m+i ) = a( i, j )
165 bignum = one / smlnum
166 CALL slabad( smlnum, bignum )
170 anrm =
clange(
'M', m, n, work, m, dummy )
172 IF( anrm.GT.zero .AND. anrm.LT.smlnum )
THEN
176 CALL clascl(
'G', 0, 0, anrm, smlnum, m, n, work, m, info )
178 ELSE IF( anrm.GT.bignum )
THEN
182 CALL clascl(
'G', 0, 0, anrm, bignum, m, n, work, m, info )
186 IF( anrm.NE.zero )
THEN
190 CALL cgebd2( m, n, work, m, rwork( 1 ), rwork( mn+1 ),
191 $ work( m*n+1 ), work( m*n+mn+1 ),
192 $ work( m*n+2*mn+1 ), info )
193 CALL sbdsqr(
'Upper', mn, 0, 0, 0, rwork( 1 ), rwork( mn+1 ),
194 $ dummy, mn, dummy, 1, dummy, mn, rwork( 2*mn+1 ),
198 IF( anrm.GT.bignum )
THEN
199 CALL slascl(
'G', 0, 0, bignum, anrm, mn, 1, rwork( 1 ),
202 IF( anrm.LT.smlnum )
THEN
203 CALL slascl(
'G', 0, 0, smlnum, anrm, mn, 1, rwork( 1 ),
217 CALL saxpy( mn, -one, s, 1, rwork( 1 ), 1 )
219 $ (
slamch(
'Epsilon' )*real( max( m, n ) ) )
subroutine slabad(SMALL, LARGE)
SLABAD
subroutine slascl(TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO)
SLASCL multiplies a general rectangular matrix by a real scalar defined as cto/cfrom.
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine sbdsqr(UPLO, N, NCVT, NRU, NCC, D, E, VT, LDVT, U, LDU, C, LDC, WORK, INFO)
SBDSQR
real function cqrt12(M, N, A, LDA, S, WORK, LWORK, RWORK)
CQRT12
real function clange(NORM, M, N, A, LDA, WORK)
CLANGE returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value ...
subroutine cgebd2(M, N, A, LDA, D, E, TAUQ, TAUP, WORK, INFO)
CGEBD2 reduces a general matrix to bidiagonal form using an unblocked algorithm.
subroutine claset(UPLO, M, N, ALPHA, BETA, A, LDA)
CLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine clascl(TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO)
CLASCL multiplies a general rectangular matrix by a real scalar defined as cto/cfrom.
real function snrm2(N, X, INCX)
SNRM2
subroutine saxpy(N, SA, SX, INCX, SY, INCY)
SAXPY
real function sasum(N, SX, INCX)
SASUM
real function slamch(CMACH)
SLAMCH