341 SUBROUTINE claqp2rk( M, N, NRHS, IOFFSET, KMAX, ABSTOL, RELTOL,
342 $ KP1, MAXC2NRM, A, LDA, K, MAXC2NRMK,
343 $ RELMAXC2NRMK, JPIV, TAU, VN1, VN2, WORK,
352 INTEGER INFO, IOFFSET, KP1, K, KMAX, LDA, M, N, NRHS
353 REAL ABSTOL, MAXC2NRM, MAXC2NRMK, RELMAXC2NRMK,
358 REAL VN1( * ), VN2( * )
359 COMPLEX A( LDA, * ), TAU( * ), WORK( * )
366 PARAMETER ( ZERO = 0.0e+0, one = 1.0e+0 )
368 parameter( czero = ( 0.0e+0, 0.0e+0 ),
369 $ cone = ( 1.0e+0, 0.0e+0 ) )
372 INTEGER I, ITEMP, J, JMAXC2NRM, KK, KP, MINMNFACT,
374 REAL HUGEVAL, TAUNAN, TEMP, TEMP2, TOL3Z
381 INTRINSIC abs, real, conjg, imag, max, min, sqrt
387 EXTERNAL sisnan, slamch, isamax, scnrm2
403 minmnfact = min( m-ioffset, n )
404 minmnupdt = min( m-ioffset, n+nrhs )
405 kmax = min( kmax, minmnfact )
406 tol3z = sqrt( slamch(
'Epsilon' ) )
407 hugeval = slamch(
'Overflow' )
435 kp = ( kk-1 ) + isamax( n-kk+1, vn1( kk ), 1 )
442 maxc2nrmk = vn1( kp )
454 IF( sisnan( maxc2nrmk ) )
THEN
464 relmaxc2nrmk = maxc2nrmk
481 IF( maxc2nrmk.EQ.zero )
THEN
513 IF( info.EQ.0 .AND. maxc2nrmk.GT.hugeval )
THEN
514 info = n + kk - 1 + kp
529 relmaxc2nrmk = maxc2nrmk / maxc2nrm
531 IF( maxc2nrmk.LE.abstol .OR. relmaxc2nrmk.LE.reltol )
THEN
570 CALL cswap( m, a( 1, kp ), 1, a( 1, kk ), 1 )
571 vn1( kp ) = vn1( kk )
572 vn2( kp ) = vn2( kk )
574 jpiv( kp ) = jpiv( kk )
584 CALL clarfg( m-i+1, a( i, kk ), a( i+1, kk ), 1,
600 IF( sisnan( real( tau(kk) ) ) )
THEN
601 taunan = real( tau(kk) )
602 ELSE IF( sisnan( imag( tau(kk) ) ) )
THEN
603 taunan = imag( tau(kk) )
608 IF( sisnan( taunan ) )
THEN
615 relmaxc2nrmk = taunan
635 IF( kk.LT.minmnupdt )
THEN
638 CALL clarf(
'Left', m-i+1, n+nrhs-kk, a( i, kk ), 1,
639 $ conjg( tau( kk ) ), a( i, kk+1 ), lda,
644 IF( kk.LT.minmnfact )
THEN
651 IF( vn1( j ).NE.zero )
THEN
656 temp = one - ( abs( a( i, j ) ) / vn1( j ) )**2
657 temp = max( temp, zero )
658 temp2 = temp*( vn1( j ) / vn2( j ) )**2
659 IF( temp2 .LE. tol3z )
THEN
666 vn1( j ) = scnrm2( m-i, a( i+1, j ), 1 )
676 vn1( j ) = vn1( j )*sqrt( temp )
698 IF( k.LT.minmnfact )
THEN
700 jmaxc2nrm = k + isamax( n-k, vn1( k+1 ), 1 )
701 maxc2nrmk = vn1( jmaxc2nrm )
706 relmaxc2nrmk = maxc2nrmk / maxc2nrm
718 DO j = k + 1, minmnfact
subroutine claqp2rk(m, n, nrhs, ioffset, kmax, abstol, reltol, kp1, maxc2nrm, a, lda, k, maxc2nrmk, relmaxc2nrmk, jpiv, tau, vn1, vn2, work, info)
CLAQP2RK computes truncated QR factorization with column pivoting of a complex matrix block using Lev...
subroutine clarf(side, m, n, v, incv, tau, c, ldc, work)
CLARF applies an elementary reflector to a general rectangular matrix.
subroutine clarfg(n, alpha, x, incx, tau)
CLARFG generates an elementary reflector (Householder matrix).
subroutine cswap(n, cx, incx, cy, incy)
CSWAP