351 SUBROUTINE zgesvj( JOBA, JOBU, JOBV, M, N, A, LDA, SVA, MV, V,
352 $ LDV, CWORK, LWORK, RWORK, LRWORK, INFO )
361 INTEGER INFO, LDA, LDV, LWORK, LRWORK, M, MV, N
362 CHARACTER*1 JOBA, JOBU, JOBV
365 COMPLEX*16 A( lda, * ), V( ldv, * ), CWORK( lwork )
366 DOUBLE PRECISION RWORK( lrwork ), SVA( n )
372 DOUBLE PRECISION ZERO, HALF, ONE
373 parameter( zero = 0.0d0, half = 0.5d0, one = 1.0d0)
374 COMPLEX*16 CZERO, CONE
375 parameter( czero = (0.0d0, 0.0d0), cone = (1.0d0, 0.0d0) )
377 parameter( nsweep = 30 )
380 COMPLEX*16 AAPQ, OMPQ
381 DOUBLE PRECISION AAPP, AAPP0, AAPQ1, AAQQ, APOAQ, AQOAP, BIG,
382 $ bigtheta, cs, ctol, epsln, mxaapq,
383 $ mxsinj, rootbig, rooteps, rootsfmin, roottol,
384 $ skl, sfmin, small, sn, t, temp1, theta, thsign, tol
385 INTEGER BLSKIP, EMPTSW, i, ibr, IERR, igl, IJBLSK, ir1,
386 $ iswrot, jbc, jgl, kbl, lkahead, mvl, n2, n34,
387 $ n4, nbl, notrot, p, pskipped, q, rowskip, swband
388 LOGICAL APPLV, GOSCALE, LOWER, LQUERY, LSVEC, NOSCALE, ROTOK,
389 $ rsvec, uctol, upper
393 INTRINSIC abs, max, min, conjg, dble, sign, sqrt
398 DOUBLE PRECISION DZNRM2
400 EXTERNAL zdotc, dznrm2
404 DOUBLE PRECISION DLAMCH
421 lsvec = lsame( jobu,
'U' ) .OR. lsame( jobu,
'F' )
422 uctol = lsame( jobu,
'C' )
423 rsvec = lsame( jobv,
'V' ) .OR. lsame( jobv,
'J' )
424 applv = lsame( jobv,
'A' )
425 upper = lsame( joba,
'U' )
426 lower = lsame( joba,
'L' )
428 lquery = ( lwork .EQ. -1 ) .OR. ( lrwork .EQ. -1 )
429 IF( .NOT.( upper .OR. lower .OR. lsame( joba,
'G' ) ) )
THEN 431 ELSE IF( .NOT.( lsvec .OR. uctol .OR. lsame( jobu,
'N' ) ) )
THEN 433 ELSE IF( .NOT.( rsvec .OR. applv .OR. lsame( jobv,
'N' ) ) )
THEN 435 ELSE IF( m.LT.0 )
THEN 437 ELSE IF( ( n.LT.0 ) .OR. ( n.GT.m ) )
THEN 439 ELSE IF( lda.LT.m )
THEN 441 ELSE IF( mv.LT.0 )
THEN 443 ELSE IF( ( rsvec .AND. ( ldv.LT.n ) ) .OR.
444 $ ( applv .AND. ( ldv.LT.mv ) ) )
THEN 446 ELSE IF( uctol .AND. ( rwork( 1 ).LE.one ) )
THEN 448 ELSE IF( ( lwork.LT.( m+n ) ) .AND. ( .NOT.lquery ) )
THEN 450 ELSE IF( ( lrwork.LT.max( n, 6 ) ) .AND. ( .NOT.lquery ) )
THEN 458 CALL xerbla(
'ZGESVJ', -info )
460 ELSE IF ( lquery )
THEN 462 rwork(1) = max( n, 6 )
468 IF( ( m.EQ.0 ) .OR. ( n.EQ.0 ) )
RETURN 482 IF( lsvec .OR. rsvec .OR. applv )
THEN 483 ctol = sqrt( dble( m ) )
491 epsln = dlamch(
'Epsilon' )
492 rooteps = sqrt( epsln )
493 sfmin = dlamch(
'SafeMinimum' )
494 rootsfmin = sqrt( sfmin )
495 small = sfmin / epsln
496 big = dlamch(
'Overflow' )
498 rootbig = one / rootsfmin
500 bigtheta = one / rooteps
503 roottol = sqrt( tol )
505 IF( dble( m )*epsln.GE.one )
THEN 507 CALL xerbla(
'ZGESVJ', -info )
515 CALL zlaset(
'A', mvl, n, czero, cone, v, ldv )
516 ELSE IF( applv )
THEN 519 rsvec = rsvec .OR. applv
530 skl = one / sqrt( dble( m )*dble( n ) )
539 CALL zlassq( m-p+1, a( p, p ), 1, aapp, aaqq )
540 IF( aapp.GT.big )
THEN 542 CALL xerbla(
'ZGESVJ', -info )
546 IF( ( aapp.LT.( big / aaqq ) ) .AND. noscale )
THEN 550 sva( p ) = aapp*( aaqq*skl )
554 sva( q ) = sva( q )*skl
559 ELSE IF( upper )
THEN 564 CALL zlassq( p, a( 1, p ), 1, aapp, aaqq )
565 IF( aapp.GT.big )
THEN 567 CALL xerbla(
'ZGESVJ', -info )
571 IF( ( aapp.LT.( big / aaqq ) ) .AND. noscale )
THEN 575 sva( p ) = aapp*( aaqq*skl )
579 sva( q ) = sva( q )*skl
589 CALL zlassq( m, a( 1, p ), 1, aapp, aaqq )
590 IF( aapp.GT.big )
THEN 592 CALL xerbla(
'ZGESVJ', -info )
596 IF( ( aapp.LT.( big / aaqq ) ) .AND. noscale )
THEN 600 sva( p ) = aapp*( aaqq*skl )
604 sva( q ) = sva( q )*skl
611 IF( noscale )skl = one
620 IF( sva( p ).NE.zero )aaqq = min( aaqq, sva( p ) )
621 aapp = max( aapp, sva( p ) )
626 IF( aapp.EQ.zero )
THEN 627 IF( lsvec )
CALL zlaset(
'G', m, n, czero, cone, a, lda )
640 IF( lsvec )
CALL zlascl(
'G', 0, 0, sva( 1 ), skl, m, 1,
641 $ a( 1, 1 ), lda, ierr )
642 rwork( 1 ) = one / skl
643 IF( sva( 1 ).GE.sfmin )
THEN 658 sn = sqrt( sfmin / epsln )
659 temp1 = sqrt( big / dble( n ) )
660 IF( ( aapp.LE.sn ) .OR. ( aaqq.GE.temp1 ) .OR.
661 $ ( ( sn.LE.aaqq ) .AND. ( aapp.LE.temp1 ) ) )
THEN 662 temp1 = min( big, temp1 / aapp )
665 ELSE IF( ( aaqq.LE.sn ) .AND. ( aapp.LE.temp1 ) )
THEN 666 temp1 = min( sn / aaqq, big / (aapp*sqrt( dble(n)) ) )
669 ELSE IF( ( aaqq.GE.sn ) .AND. ( aapp.GE.temp1 ) )
THEN 670 temp1 = max( sn / aaqq, temp1 / aapp )
673 ELSE IF( ( aaqq.LE.sn ) .AND. ( aapp.GE.temp1 ) )
THEN 674 temp1 = min( sn / aaqq, big / ( sqrt( dble( n ) )*aapp ) )
683 IF( temp1.NE.one )
THEN 684 CALL dlascl(
'G', 0, 0, one, temp1, n, 1, sva, n, ierr )
687 IF( skl.NE.one )
THEN 688 CALL zlascl( joba, 0, 0, one, skl, m, n, a, lda, ierr )
694 emptsw = ( n*( n-1 ) ) / 2
718 IF( ( nbl*kbl ).NE.n )nbl = nbl + 1
723 rowskip = min( 5, kbl )
734 IF( ( lower .OR. upper ) .AND. ( n.GT.max( 64, 4*kbl ) ) )
THEN 756 CALL zgsvj0( jobv, m-n34, n-n34, a( n34+1, n34+1 ), lda,
757 $ cwork( n34+1 ), sva( n34+1 ), mvl,
758 $ v( n34*q+1, n34+1 ), ldv, epsln, sfmin, tol,
759 $ 2, cwork( n+1 ), lwork-n, ierr )
761 CALL zgsvj0( jobv, m-n2, n34-n2, a( n2+1, n2+1 ), lda,
762 $ cwork( n2+1 ), sva( n2+1 ), mvl,
763 $ v( n2*q+1, n2+1 ), ldv, epsln, sfmin, tol, 2,
764 $ cwork( n+1 ), lwork-n, ierr )
766 CALL zgsvj1( jobv, m-n2, n-n2, n4, a( n2+1, n2+1 ), lda,
767 $ cwork( n2+1 ), sva( n2+1 ), mvl,
768 $ v( n2*q+1, n2+1 ), ldv, epsln, sfmin, tol, 1,
769 $ cwork( n+1 ), lwork-n, ierr )
771 CALL zgsvj0( jobv, m-n4, n2-n4, a( n4+1, n4+1 ), lda,
772 $ cwork( n4+1 ), sva( n4+1 ), mvl,
773 $ v( n4*q+1, n4+1 ), ldv, epsln, sfmin, tol, 1,
774 $ cwork( n+1 ), lwork-n, ierr )
776 CALL zgsvj0( jobv, m, n4, a, lda, cwork, sva, mvl, v, ldv,
777 $ epsln, sfmin, tol, 1, cwork( n+1 ), lwork-n,
780 CALL zgsvj1( jobv, m, n2, n4, a, lda, cwork, sva, mvl, v,
781 $ ldv, epsln, sfmin, tol, 1, cwork( n+1 ),
785 ELSE IF( upper )
THEN 788 CALL zgsvj0( jobv, n4, n4, a, lda, cwork, sva, mvl, v, ldv,
789 $ epsln, sfmin, tol, 2, cwork( n+1 ), lwork-n,
792 CALL zgsvj0( jobv, n2, n4, a( 1, n4+1 ), lda, cwork( n4+1 ),
793 $ sva( n4+1 ), mvl, v( n4*q+1, n4+1 ), ldv,
794 $ epsln, sfmin, tol, 1, cwork( n+1 ), lwork-n,
797 CALL zgsvj1( jobv, n2, n2, n4, a, lda, cwork, sva, mvl, v,
798 $ ldv, epsln, sfmin, tol, 1, cwork( n+1 ),
801 CALL zgsvj0( jobv, n2+n4, n4, a( 1, n2+1 ), lda,
802 $ cwork( n2+1 ), sva( n2+1 ), mvl,
803 $ v( n2*q+1, n2+1 ), ldv, epsln, sfmin, tol, 1,
804 $ cwork( n+1 ), lwork-n, ierr )
812 DO 1993 i = 1, nsweep
830 igl = ( ibr-1 )*kbl + 1
832 DO 1002 ir1 = 0, min( lkahead, nbl-ibr )
836 DO 2001 p = igl, min( igl+kbl-1, n-1 )
840 q = idamax( n-p+1, sva( p ), 1 ) + p - 1
842 CALL zswap( m, a( 1, p ), 1, a( 1, q ), 1 )
843 IF( rsvec )
CALL zswap( mvl, v( 1, p ), 1,
867 IF( ( sva( p ).LT.rootbig ) .AND.
868 $ ( sva( p ).GT.rootsfmin ) )
THEN 869 sva( p ) = dznrm2( m, a( 1, p ), 1 )
873 CALL zlassq( m, a( 1, p ), 1, temp1, aapp )
874 sva( p ) = temp1*sqrt( aapp )
881 IF( aapp.GT.zero )
THEN 885 DO 2002 q = p + 1, min( igl+kbl-1, n )
889 IF( aaqq.GT.zero )
THEN 892 IF( aaqq.GE.one )
THEN 893 rotok = ( small*aapp ).LE.aaqq
894 IF( aapp.LT.( big / aaqq ) )
THEN 895 aapq = ( zdotc( m, a( 1, p ), 1,
896 $ a( 1, q ), 1 ) / aaqq ) / aapp
898 CALL zcopy( m, a( 1, p ), 1,
900 CALL zlascl(
'G', 0, 0, aapp, one,
901 $ m, 1, cwork(n+1), lda, ierr )
902 aapq = zdotc( m, cwork(n+1), 1,
903 $ a( 1, q ), 1 ) / aaqq
906 rotok = aapp.LE.( aaqq / small )
907 IF( aapp.GT.( small / aaqq ) )
THEN 908 aapq = ( zdotc( m, a( 1, p ), 1,
909 $ a( 1, q ), 1 ) / aapp ) / aaqq
911 CALL zcopy( m, a( 1, q ), 1,
913 CALL zlascl(
'G', 0, 0, aaqq,
915 $ cwork(n+1), lda, ierr )
916 aapq = zdotc( m, a(1, p ), 1,
917 $ cwork(n+1), 1 ) / aapp
924 mxaapq = max( mxaapq, -aapq1 )
928 IF( abs( aapq1 ).GT.tol )
THEN 929 ompq = aapq / abs(aapq)
944 theta = -half*abs( aqoap-apoaq )/aapq1
946 IF( abs( theta ).GT.bigtheta )
THEN 951 CALL zrot( m, a(1,p), 1, a(1,q), 1,
952 $ cs, conjg(ompq)*t )
954 CALL zrot( mvl, v(1,p), 1,
955 $ v(1,q), 1, cs, conjg(ompq)*t )
958 sva( q ) = aaqq*sqrt( max( zero,
959 $ one+t*apoaq*aapq1 ) )
960 aapp = aapp*sqrt( max( zero,
961 $ one-t*aqoap*aapq1 ) )
962 mxsinj = max( mxsinj, abs( t ) )
968 thsign = -sign( one, aapq1 )
969 t = one / ( theta+thsign*
970 $ sqrt( one+theta*theta ) )
971 cs = sqrt( one / ( one+t*t ) )
974 mxsinj = max( mxsinj, abs( sn ) )
975 sva( q ) = aaqq*sqrt( max( zero,
976 $ one+t*apoaq*aapq1 ) )
977 aapp = aapp*sqrt( max( zero,
978 $ one-t*aqoap*aapq1 ) )
980 CALL zrot( m, a(1,p), 1, a(1,q), 1,
981 $ cs, conjg(ompq)*sn )
983 CALL zrot( mvl, v(1,p), 1,
984 $ v(1,q), 1, cs, conjg(ompq)*sn )
987 cwork(p) = -cwork(q) * ompq
991 CALL zcopy( m, a( 1, p ), 1,
993 CALL zlascl(
'G', 0, 0, aapp, one, m,
994 $ 1, cwork(n+1), lda,
996 CALL zlascl(
'G', 0, 0, aaqq, one, m,
997 $ 1, a( 1, q ), lda, ierr )
998 CALL zaxpy( m, -aapq, cwork(n+1), 1,
1000 CALL zlascl(
'G', 0, 0, one, aaqq, m,
1001 $ 1, a( 1, q ), lda, ierr )
1002 sva( q ) = aaqq*sqrt( max( zero,
1003 $ one-aapq1*aapq1 ) )
1004 mxsinj = max( mxsinj, sfmin )
1011 IF( ( sva( q ) / aaqq )**2.LE.rooteps )
1013 IF( ( aaqq.LT.rootbig ) .AND.
1014 $ ( aaqq.GT.rootsfmin ) )
THEN 1015 sva( q ) = dznrm2( m, a( 1, q ), 1 )
1019 CALL zlassq( m, a( 1, q ), 1, t,
1021 sva( q ) = t*sqrt( aaqq )
1024 IF( ( aapp / aapp0 ).LE.rooteps )
THEN 1025 IF( ( aapp.LT.rootbig ) .AND.
1026 $ ( aapp.GT.rootsfmin ) )
THEN 1027 aapp = dznrm2( m, a( 1, p ), 1 )
1031 CALL zlassq( m, a( 1, p ), 1, t,
1033 aapp = t*sqrt( aapp )
1040 IF( ir1.EQ.0 )notrot = notrot + 1
1042 pskipped = pskipped + 1
1046 IF( ir1.EQ.0 )notrot = notrot + 1
1047 pskipped = pskipped + 1
1050 IF( ( i.LE.swband ) .AND.
1051 $ ( pskipped.GT.rowskip ) )
THEN 1052 IF( ir1.EQ.0 )aapp = -aapp
1067 IF( ( ir1.EQ.0 ) .AND. ( aapp.EQ.zero ) )
1068 $ notrot = notrot + min( igl+kbl-1, n ) - p
1079 igl = ( ibr-1 )*kbl + 1
1081 DO 2010 jbc = ibr + 1, nbl
1083 jgl = ( jbc-1 )*kbl + 1
1088 DO 2100 p = igl, min( igl+kbl-1, n )
1091 IF( aapp.GT.zero )
THEN 1095 DO 2200 q = jgl, min( jgl+kbl-1, n )
1098 IF( aaqq.GT.zero )
THEN 1105 IF( aaqq.GE.one )
THEN 1106 IF( aapp.GE.aaqq )
THEN 1107 rotok = ( small*aapp ).LE.aaqq
1109 rotok = ( small*aaqq ).LE.aapp
1111 IF( aapp.LT.( big / aaqq ) )
THEN 1112 aapq = ( zdotc( m, a( 1, p ), 1,
1113 $ a( 1, q ), 1 ) / aaqq ) / aapp
1115 CALL zcopy( m, a( 1, p ), 1,
1117 CALL zlascl(
'G', 0, 0, aapp,
1119 $ cwork(n+1), lda, ierr )
1120 aapq = zdotc( m, cwork(n+1), 1,
1121 $ a( 1, q ), 1 ) / aaqq
1124 IF( aapp.GE.aaqq )
THEN 1125 rotok = aapp.LE.( aaqq / small )
1127 rotok = aaqq.LE.( aapp / small )
1129 IF( aapp.GT.( small / aaqq ) )
THEN 1130 aapq = ( zdotc( m, a( 1, p ), 1,
1131 $ a( 1, q ), 1 ) / max(aaqq,aapp) )
1134 CALL zcopy( m, a( 1, q ), 1,
1136 CALL zlascl(
'G', 0, 0, aaqq,
1138 $ cwork(n+1), lda, ierr )
1139 aapq = zdotc( m, a( 1, p ), 1,
1140 $ cwork(n+1), 1 ) / aapp
1147 mxaapq = max( mxaapq, -aapq1 )
1151 IF( abs( aapq1 ).GT.tol )
THEN 1152 ompq = aapq / abs(aapq)
1162 theta = -half*abs( aqoap-apoaq )/ aapq1
1163 IF( aaqq.GT.aapp0 )theta = -theta
1165 IF( abs( theta ).GT.bigtheta )
THEN 1168 CALL zrot( m, a(1,p), 1, a(1,q), 1,
1169 $ cs, conjg(ompq)*t )
1171 CALL zrot( mvl, v(1,p), 1,
1172 $ v(1,q), 1, cs, conjg(ompq)*t )
1174 sva( q ) = aaqq*sqrt( max( zero,
1175 $ one+t*apoaq*aapq1 ) )
1176 aapp = aapp*sqrt( max( zero,
1177 $ one-t*aqoap*aapq1 ) )
1178 mxsinj = max( mxsinj, abs( t ) )
1183 thsign = -sign( one, aapq1 )
1184 IF( aaqq.GT.aapp0 )thsign = -thsign
1185 t = one / ( theta+thsign*
1186 $ sqrt( one+theta*theta ) )
1187 cs = sqrt( one / ( one+t*t ) )
1189 mxsinj = max( mxsinj, abs( sn ) )
1190 sva( q ) = aaqq*sqrt( max( zero,
1191 $ one+t*apoaq*aapq1 ) )
1192 aapp = aapp*sqrt( max( zero,
1193 $ one-t*aqoap*aapq1 ) )
1195 CALL zrot( m, a(1,p), 1, a(1,q), 1,
1196 $ cs, conjg(ompq)*sn )
1198 CALL zrot( mvl, v(1,p), 1,
1199 $ v(1,q), 1, cs, conjg(ompq)*sn )
1202 cwork(p) = -cwork(q) * ompq
1206 IF( aapp.GT.aaqq )
THEN 1207 CALL zcopy( m, a( 1, p ), 1,
1209 CALL zlascl(
'G', 0, 0, aapp, one,
1210 $ m, 1, cwork(n+1),lda,
1212 CALL zlascl(
'G', 0, 0, aaqq, one,
1213 $ m, 1, a( 1, q ), lda,
1215 CALL zaxpy( m, -aapq, cwork(n+1),
1217 CALL zlascl(
'G', 0, 0, one, aaqq,
1218 $ m, 1, a( 1, q ), lda,
1220 sva( q ) = aaqq*sqrt( max( zero,
1221 $ one-aapq1*aapq1 ) )
1222 mxsinj = max( mxsinj, sfmin )
1224 CALL zcopy( m, a( 1, q ), 1,
1226 CALL zlascl(
'G', 0, 0, aaqq, one,
1227 $ m, 1, cwork(n+1),lda,
1229 CALL zlascl(
'G', 0, 0, aapp, one,
1230 $ m, 1, a( 1, p ), lda,
1232 CALL zaxpy( m, -conjg(aapq),
1233 $ cwork(n+1), 1, a( 1, p ), 1 )
1234 CALL zlascl(
'G', 0, 0, one, aapp,
1235 $ m, 1, a( 1, p ), lda,
1237 sva( p ) = aapp*sqrt( max( zero,
1238 $ one-aapq1*aapq1 ) )
1239 mxsinj = max( mxsinj, sfmin )
1246 IF( ( sva( q ) / aaqq )**2.LE.rooteps )
1248 IF( ( aaqq.LT.rootbig ) .AND.
1249 $ ( aaqq.GT.rootsfmin ) )
THEN 1250 sva( q ) = dznrm2( m, a( 1, q ), 1)
1254 CALL zlassq( m, a( 1, q ), 1, t,
1256 sva( q ) = t*sqrt( aaqq )
1259 IF( ( aapp / aapp0 )**2.LE.rooteps )
THEN 1260 IF( ( aapp.LT.rootbig ) .AND.
1261 $ ( aapp.GT.rootsfmin ) )
THEN 1262 aapp = dznrm2( m, a( 1, p ), 1 )
1266 CALL zlassq( m, a( 1, p ), 1, t,
1268 aapp = t*sqrt( aapp )
1276 pskipped = pskipped + 1
1281 pskipped = pskipped + 1
1285 IF( ( i.LE.swband ) .AND. ( ijblsk.GE.blskip ) )
1291 IF( ( i.LE.swband ) .AND.
1292 $ ( pskipped.GT.rowskip ) )
THEN 1306 IF( aapp.EQ.zero )notrot = notrot +
1307 $ min( jgl+kbl-1, n ) - jgl + 1
1308 IF( aapp.LT.zero )notrot = 0
1318 DO 2012 p = igl, min( igl+kbl-1, n )
1319 sva( p ) = abs( sva( p ) )
1326 IF( ( sva( n ).LT.rootbig ) .AND. ( sva( n ).GT.rootsfmin ) )
1328 sva( n ) = dznrm2( m, a( 1, n ), 1 )
1332 CALL zlassq( m, a( 1, n ), 1, t, aapp )
1333 sva( n ) = t*sqrt( aapp )
1338 IF( ( i.LT.swband ) .AND. ( ( mxaapq.LE.roottol ) .OR.
1339 $ ( iswrot.LE.n ) ) )swband = i
1341 IF( ( i.GT.swband+1 ) .AND. ( mxaapq.LT.sqrt( dble( n ) )*
1342 $ tol ) .AND. ( dble( n )*mxaapq*mxsinj.LT.tol ) )
THEN 1346 IF( notrot.GE.emptsw )
GO TO 1994
1368 DO 5991 p = 1, n - 1
1369 q = idamax( n-p+1, sva( p ), 1 ) + p - 1
1374 CALL zswap( m, a( 1, p ), 1, a( 1, q ), 1 )
1375 IF( rsvec )
CALL zswap( mvl, v( 1, p ), 1, v( 1, q ), 1 )
1377 IF( sva( p ).NE.zero )
THEN 1379 IF( sva( p )*skl.GT.sfmin )n2 = n2 + 1
1382 IF( sva( n ).NE.zero )
THEN 1384 IF( sva( n )*skl.GT.sfmin )n2 = n2 + 1
1389 IF( lsvec .OR. uctol )
THEN 1392 CALL zlascl(
'G',0,0, sva(p), one, m, 1, a(1,p), m, ierr )
1400 temp1 = one / dznrm2( mvl, v( 1, p ), 1 )
1401 CALL zdscal( mvl, temp1, v( 1, p ), 1 )
1406 IF( ( ( skl.GT.one ) .AND. ( sva( 1 ).LT.( big / skl ) ) )
1407 $ .OR. ( ( skl.LT.one ) .AND. ( sva( max( n2, 1 ) ) .GT.
1408 $ ( sfmin / skl ) ) ) )
THEN 1410 sva( p ) = skl*sva( p )
1420 rwork( 2 ) = dble( n4 )
1423 rwork( 3 ) = dble( n2 )
1428 rwork( 4 ) = dble( i )
subroutine zcopy(N, ZX, INCX, ZY, INCY)
ZCOPY
subroutine dlascl(TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO)
DLASCL multiplies a general rectangular matrix by a real scalar defined as cto/cfrom.
subroutine zgsvj1(JOBV, M, N, N1, A, LDA, D, SVA, MV, V, LDV, EPS, SFMIN, TOL, NSWEEP, WORK, LWORK, INFO)
ZGSVJ1 pre-processor for the routine zgesvj, applies Jacobi rotations targeting only particular pivot...
subroutine zswap(N, ZX, INCX, ZY, INCY)
ZSWAP
subroutine zlascl(TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO)
ZLASCL multiplies a general rectangular matrix by a real scalar defined as cto/cfrom.
subroutine zrot(N, CX, INCX, CY, INCY, C, S)
ZROT applies a plane rotation with real cosine and complex sine to a pair of complex vectors...
subroutine zgesvj(JOBA, JOBU, JOBV, M, N, A, LDA, SVA, MV, V, LDV, CWORK, LWORK, RWORK, LRWORK, INFO)
ZGESVJ
subroutine zlassq(N, X, INCX, SCALE, SUMSQ)
ZLASSQ updates a sum of squares represented in scaled form.
subroutine zgsvj0(JOBV, M, N, A, LDA, D, SVA, MV, V, LDV, EPS, SFMIN, TOL, NSWEEP, WORK, LWORK, INFO)
ZGSVJ0 pre-processor for the routine zgesvj.
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zlaset(UPLO, M, N, ALPHA, BETA, A, LDA)
ZLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values...
subroutine zdscal(N, DA, ZX, INCX)
ZDSCAL
subroutine zaxpy(N, ZA, ZX, INCX, ZY, INCY)
ZAXPY