349 SUBROUTINE zgesvj( JOBA, JOBU, JOBV, M, N, A, LDA, SVA, MV, V,
350 $ LDV, CWORK, LWORK, RWORK, LRWORK, INFO )
358 INTEGER INFO, LDA, LDV, LWORK, LRWORK, M, MV, N
359 CHARACTER*1 JOBA, JOBU, JOBV
362 COMPLEX*16 A( LDA, * ), V( LDV, * ), CWORK( LWORK )
363 DOUBLE PRECISION RWORK( LRWORK ), SVA( N )
369 DOUBLE PRECISION ZERO, HALF, ONE
370 parameter( zero = 0.0d0, half = 0.5d0, one = 1.0d0)
371 COMPLEX*16 CZERO, CONE
372 parameter( czero = (0.0d0, 0.0d0), cone = (1.0d0, 0.0d0) )
374 parameter( nsweep = 30 )
377 COMPLEX*16 AAPQ, OMPQ
378 DOUBLE PRECISION AAPP, AAPP0, AAPQ1, AAQQ, APOAQ, AQOAP, BIG,
379 $ bigtheta, cs, ctol, epsln, mxaapq,
380 $ mxsinj, rootbig, rooteps, rootsfmin, roottol,
381 $ skl, sfmin, small, sn, t, temp1, theta, thsign, tol
382 INTEGER BLSKIP, EMPTSW, i, ibr, IERR, igl, IJBLSK, ir1,
383 $ iswrot, jbc, jgl, kbl, lkahead, mvl, n2, n34,
384 $ n4, nbl, notrot, p, pskipped, q, rowskip, swband
385 LOGICAL APPLV, GOSCALE, LOWER, LQUERY, LSVEC, NOSCALE, ROTOK,
386 $ rsvec, uctol, upper
390 INTRINSIC abs, max, min, conjg, dble, sign, sqrt
395 DOUBLE PRECISION DZNRM2
397 EXTERNAL zdotc, dznrm2
401 DOUBLE PRECISION DLAMCH
418 lsvec = lsame( jobu,
'U' ) .OR. lsame( jobu,
'F' )
419 uctol = lsame( jobu,
'C' )
420 rsvec = lsame( jobv,
'V' ) .OR. lsame( jobv,
'J' )
421 applv = lsame( jobv,
'A' )
422 upper = lsame( joba,
'U' )
423 lower = lsame( joba,
'L' )
425 lquery = ( lwork .EQ. -1 ) .OR. ( lrwork .EQ. -1 )
426 IF( .NOT.( upper .OR. lower .OR. lsame( joba,
'G' ) ) )
THEN
428 ELSE IF( .NOT.( lsvec .OR. uctol .OR. lsame( jobu,
'N' ) ) )
THEN
430 ELSE IF( .NOT.( rsvec .OR. applv .OR. lsame( jobv,
'N' ) ) )
THEN
432 ELSE IF( m.LT.0 )
THEN
434 ELSE IF( ( n.LT.0 ) .OR. ( n.GT.m ) )
THEN
436 ELSE IF( lda.LT.m )
THEN
438 ELSE IF( mv.LT.0 )
THEN
440 ELSE IF( ( rsvec .AND. ( ldv.LT.n ) ) .OR.
441 $ ( applv .AND. ( ldv.LT.mv ) ) )
THEN
443 ELSE IF( uctol .AND. ( rwork( 1 ).LE.one ) )
THEN
445 ELSE IF( ( lwork.LT.( m+n ) ) .AND. ( .NOT.lquery ) )
THEN
447 ELSE IF( ( lrwork.LT.max( n, 6 ) ) .AND. ( .NOT.lquery ) )
THEN
455 CALL xerbla(
'ZGESVJ', -info )
457 ELSE IF ( lquery )
THEN
459 rwork(1) = max( n, 6 )
465 IF( ( m.EQ.0 ) .OR. ( n.EQ.0 ) )
RETURN
479 IF( lsvec .OR. rsvec .OR. applv )
THEN
480 ctol = sqrt( dble( m ) )
488 epsln = dlamch(
'Epsilon' )
489 rooteps = sqrt( epsln )
490 sfmin = dlamch(
'SafeMinimum' )
491 rootsfmin = sqrt( sfmin )
492 small = sfmin / epsln
493 big = dlamch(
'Overflow' )
495 rootbig = one / rootsfmin
497 bigtheta = one / rooteps
500 roottol = sqrt( tol )
502 IF( dble( m )*epsln.GE.one )
THEN
504 CALL xerbla(
'ZGESVJ', -info )
512 CALL zlaset(
'A', mvl, n, czero, cone, v, ldv )
513 ELSE IF( applv )
THEN
516 rsvec = rsvec .OR. applv
527 skl = one / sqrt( dble( m )*dble( n ) )
536 CALL zlassq( m-p+1, a( p, p ), 1, aapp, aaqq )
537 IF( aapp.GT.big )
THEN
539 CALL xerbla(
'ZGESVJ', -info )
543 IF( ( aapp.LT.( big / aaqq ) ) .AND. noscale )
THEN
547 sva( p ) = aapp*( aaqq*skl )
551 sva( q ) = sva( q )*skl
556 ELSE IF( upper )
THEN
561 CALL zlassq( p, a( 1, p ), 1, aapp, aaqq )
562 IF( aapp.GT.big )
THEN
564 CALL xerbla(
'ZGESVJ', -info )
568 IF( ( aapp.LT.( big / aaqq ) ) .AND. noscale )
THEN
572 sva( p ) = aapp*( aaqq*skl )
576 sva( q ) = sva( q )*skl
586 CALL zlassq( m, a( 1, p ), 1, aapp, aaqq )
587 IF( aapp.GT.big )
THEN
589 CALL xerbla(
'ZGESVJ', -info )
593 IF( ( aapp.LT.( big / aaqq ) ) .AND. noscale )
THEN
597 sva( p ) = aapp*( aaqq*skl )
601 sva( q ) = sva( q )*skl
608 IF( noscale )skl = one
617 IF( sva( p ).NE.zero )aaqq = min( aaqq, sva( p ) )
618 aapp = max( aapp, sva( p ) )
623 IF( aapp.EQ.zero )
THEN
624 IF( lsvec )
CALL zlaset(
'G', m, n, czero, cone, a, lda )
637 IF( lsvec )
CALL zlascl(
'G', 0, 0, sva( 1 ), skl, m, 1,
638 $ a( 1, 1 ), lda, ierr )
639 rwork( 1 ) = one / skl
640 IF( sva( 1 ).GE.sfmin )
THEN
655 sn = sqrt( sfmin / epsln )
656 temp1 = sqrt( big / dble( n ) )
657 IF( ( aapp.LE.sn ) .OR. ( aaqq.GE.temp1 ) .OR.
658 $ ( ( sn.LE.aaqq ) .AND. ( aapp.LE.temp1 ) ) )
THEN
659 temp1 = min( big, temp1 / aapp )
662 ELSE IF( ( aaqq.LE.sn ) .AND. ( aapp.LE.temp1 ) )
THEN
663 temp1 = min( sn / aaqq, big / (aapp*sqrt( dble(n)) ) )
666 ELSE IF( ( aaqq.GE.sn ) .AND. ( aapp.GE.temp1 ) )
THEN
667 temp1 = max( sn / aaqq, temp1 / aapp )
670 ELSE IF( ( aaqq.LE.sn ) .AND. ( aapp.GE.temp1 ) )
THEN
671 temp1 = min( sn / aaqq, big / ( sqrt( dble( n ) )*aapp ) )
680 IF( temp1.NE.one )
THEN
681 CALL dlascl(
'G', 0, 0, one, temp1, n, 1, sva, n, ierr )
684 IF( skl.NE.one )
THEN
685 CALL zlascl( joba, 0, 0, one, skl, m, n, a, lda, ierr )
691 emptsw = ( n*( n-1 ) ) / 2
715 IF( ( nbl*kbl ).NE.n )nbl = nbl + 1
720 rowskip = min( 5, kbl )
731 IF( ( lower .OR. upper ) .AND. ( n.GT.max( 64, 4*kbl ) ) )
THEN
753 CALL zgsvj0( jobv, m-n34, n-n34, a( n34+1, n34+1 ), lda,
754 $ cwork( n34+1 ), sva( n34+1 ), mvl,
755 $ v( n34*q+1, n34+1 ), ldv, epsln, sfmin, tol,
756 $ 2, cwork( n+1 ), lwork-n, ierr )
758 CALL zgsvj0( jobv, m-n2, n34-n2, a( n2+1, n2+1 ), lda,
759 $ cwork( n2+1 ), sva( n2+1 ), mvl,
760 $ v( n2*q+1, n2+1 ), ldv, epsln, sfmin, tol, 2,
761 $ cwork( n+1 ), lwork-n, ierr )
763 CALL zgsvj1( jobv, m-n2, n-n2, n4, a( n2+1, n2+1 ), lda,
764 $ cwork( n2+1 ), sva( n2+1 ), mvl,
765 $ v( n2*q+1, n2+1 ), ldv, epsln, sfmin, tol, 1,
766 $ cwork( n+1 ), lwork-n, ierr )
768 CALL zgsvj0( jobv, m-n4, n2-n4, a( n4+1, n4+1 ), lda,
769 $ cwork( n4+1 ), sva( n4+1 ), mvl,
770 $ v( n4*q+1, n4+1 ), ldv, epsln, sfmin, tol, 1,
771 $ cwork( n+1 ), lwork-n, ierr )
773 CALL zgsvj0( jobv, m, n4, a, lda, cwork, sva, mvl, v, ldv,
774 $ epsln, sfmin, tol, 1, cwork( n+1 ), lwork-n,
777 CALL zgsvj1( jobv, m, n2, n4, a, lda, cwork, sva, mvl, v,
778 $ ldv, epsln, sfmin, tol, 1, cwork( n+1 ),
782 ELSE IF( upper )
THEN
785 CALL zgsvj0( jobv, n4, n4, a, lda, cwork, sva, mvl, v, ldv,
786 $ epsln, sfmin, tol, 2, cwork( n+1 ), lwork-n,
789 CALL zgsvj0( jobv, n2, n4, a( 1, n4+1 ), lda, cwork( n4+1 ),
790 $ sva( n4+1 ), mvl, v( n4*q+1, n4+1 ), ldv,
791 $ epsln, sfmin, tol, 1, cwork( n+1 ), lwork-n,
794 CALL zgsvj1( jobv, n2, n2, n4, a, lda, cwork, sva, mvl, v,
795 $ ldv, epsln, sfmin, tol, 1, cwork( n+1 ),
798 CALL zgsvj0( jobv, n2+n4, n4, a( 1, n2+1 ), lda,
799 $ cwork( n2+1 ), sva( n2+1 ), mvl,
800 $ v( n2*q+1, n2+1 ), ldv, epsln, sfmin, tol, 1,
801 $ cwork( n+1 ), lwork-n, ierr )
809 DO 1993 i = 1, nsweep
827 igl = ( ibr-1 )*kbl + 1
829 DO 1002 ir1 = 0, min( lkahead, nbl-ibr )
833 DO 2001 p = igl, min( igl+kbl-1, n-1 )
837 q = idamax( n-p+1, sva( p ), 1 ) + p - 1
839 CALL zswap( m, a( 1, p ), 1, a( 1, q ), 1 )
840 IF( rsvec )
CALL zswap( mvl, v( 1, p ), 1,
864 IF( ( sva( p ).LT.rootbig ) .AND.
865 $ ( sva( p ).GT.rootsfmin ) )
THEN
866 sva( p ) = dznrm2( m, a( 1, p ), 1 )
870 CALL zlassq( m, a( 1, p ), 1, temp1, aapp )
871 sva( p ) = temp1*sqrt( aapp )
878 IF( aapp.GT.zero )
THEN
882 DO 2002 q = p + 1, min( igl+kbl-1, n )
886 IF( aaqq.GT.zero )
THEN
889 IF( aaqq.GE.one )
THEN
890 rotok = ( small*aapp ).LE.aaqq
891 IF( aapp.LT.( big / aaqq ) )
THEN
892 aapq = ( zdotc( m, a( 1, p ), 1,
893 $ a( 1, q ), 1 ) / aaqq ) / aapp
895 CALL zcopy( m, a( 1, p ), 1,
897 CALL zlascl(
'G', 0, 0, aapp, one,
898 $ m, 1, cwork(n+1), lda, ierr )
899 aapq = zdotc( m, cwork(n+1), 1,
900 $ a( 1, q ), 1 ) / aaqq
903 rotok = aapp.LE.( aaqq / small )
904 IF( aapp.GT.( small / aaqq ) )
THEN
905 aapq = ( zdotc( m, a( 1, p ), 1,
906 $ a( 1, q ), 1 ) / aapp ) / aaqq
908 CALL zcopy( m, a( 1, q ), 1,
910 CALL zlascl(
'G', 0, 0, aaqq,
912 $ cwork(n+1), lda, ierr )
913 aapq = zdotc( m, a(1, p ), 1,
914 $ cwork(n+1), 1 ) / aapp
921 mxaapq = max( mxaapq, -aapq1 )
925 IF( abs( aapq1 ).GT.tol )
THEN
926 ompq = aapq / abs(aapq)
941 theta = -half*abs( aqoap-apoaq )/aapq1
943 IF( abs( theta ).GT.bigtheta )
THEN
948 CALL zrot( m, a(1,p), 1, a(1,q), 1,
949 $ cs, conjg(ompq)*t )
951 CALL zrot( mvl, v(1,p), 1,
952 $ v(1,q), 1, cs, conjg(ompq)*t )
955 sva( q ) = aaqq*sqrt( max( zero,
956 $ one+t*apoaq*aapq1 ) )
957 aapp = aapp*sqrt( max( zero,
958 $ one-t*aqoap*aapq1 ) )
959 mxsinj = max( mxsinj, abs( t ) )
965 thsign = -sign( one, aapq1 )
966 t = one / ( theta+thsign*
967 $ sqrt( one+theta*theta ) )
968 cs = sqrt( one / ( one+t*t ) )
971 mxsinj = max( mxsinj, abs( sn ) )
972 sva( q ) = aaqq*sqrt( max( zero,
973 $ one+t*apoaq*aapq1 ) )
974 aapp = aapp*sqrt( max( zero,
975 $ one-t*aqoap*aapq1 ) )
977 CALL zrot( m, a(1,p), 1, a(1,q), 1,
978 $ cs, conjg(ompq)*sn )
980 CALL zrot( mvl, v(1,p), 1,
981 $ v(1,q), 1, cs, conjg(ompq)*sn )
984 cwork(p) = -cwork(q) * ompq
988 CALL zcopy( m, a( 1, p ), 1,
990 CALL zlascl(
'G', 0, 0, aapp, one, m,
991 $ 1, cwork(n+1), lda,
993 CALL zlascl(
'G', 0, 0, aaqq, one, m,
994 $ 1, a( 1, q ), lda, ierr )
995 CALL zaxpy( m, -aapq, cwork(n+1), 1,
997 CALL zlascl(
'G', 0, 0, one, aaqq, m,
998 $ 1, a( 1, q ), lda, ierr )
999 sva( q ) = aaqq*sqrt( max( zero,
1000 $ one-aapq1*aapq1 ) )
1001 mxsinj = max( mxsinj, sfmin )
1008 IF( ( sva( q ) / aaqq )**2.LE.rooteps )
1010 IF( ( aaqq.LT.rootbig ) .AND.
1011 $ ( aaqq.GT.rootsfmin ) )
THEN
1012 sva( q ) = dznrm2( m, a( 1, q ), 1 )
1016 CALL zlassq( m, a( 1, q ), 1, t,
1018 sva( q ) = t*sqrt( aaqq )
1021 IF( ( aapp / aapp0 ).LE.rooteps )
THEN
1022 IF( ( aapp.LT.rootbig ) .AND.
1023 $ ( aapp.GT.rootsfmin ) )
THEN
1024 aapp = dznrm2( m, a( 1, p ), 1 )
1028 CALL zlassq( m, a( 1, p ), 1, t,
1030 aapp = t*sqrt( aapp )
1037 IF( ir1.EQ.0 )notrot = notrot + 1
1039 pskipped = pskipped + 1
1043 IF( ir1.EQ.0 )notrot = notrot + 1
1044 pskipped = pskipped + 1
1047 IF( ( i.LE.swband ) .AND.
1048 $ ( pskipped.GT.rowskip ) )
THEN
1049 IF( ir1.EQ.0 )aapp = -aapp
1064 IF( ( ir1.EQ.0 ) .AND. ( aapp.EQ.zero ) )
1065 $ notrot = notrot + min( igl+kbl-1, n ) - p
1076 igl = ( ibr-1 )*kbl + 1
1078 DO 2010 jbc = ibr + 1, nbl
1080 jgl = ( jbc-1 )*kbl + 1
1085 DO 2100 p = igl, min( igl+kbl-1, n )
1088 IF( aapp.GT.zero )
THEN
1092 DO 2200 q = jgl, min( jgl+kbl-1, n )
1095 IF( aaqq.GT.zero )
THEN
1102 IF( aaqq.GE.one )
THEN
1103 IF( aapp.GE.aaqq )
THEN
1104 rotok = ( small*aapp ).LE.aaqq
1106 rotok = ( small*aaqq ).LE.aapp
1108 IF( aapp.LT.( big / aaqq ) )
THEN
1109 aapq = ( zdotc( m, a( 1, p ), 1,
1110 $ a( 1, q ), 1 ) / aaqq ) / aapp
1112 CALL zcopy( m, a( 1, p ), 1,
1114 CALL zlascl(
'G', 0, 0, aapp,
1116 $ cwork(n+1), lda, ierr )
1117 aapq = zdotc( m, cwork(n+1), 1,
1118 $ a( 1, q ), 1 ) / aaqq
1121 IF( aapp.GE.aaqq )
THEN
1122 rotok = aapp.LE.( aaqq / small )
1124 rotok = aaqq.LE.( aapp / small )
1126 IF( aapp.GT.( small / aaqq ) )
THEN
1127 aapq = ( zdotc( m, a( 1, p ), 1,
1128 $ a( 1, q ), 1 ) / max(aaqq,aapp) )
1131 CALL zcopy( m, a( 1, q ), 1,
1133 CALL zlascl(
'G', 0, 0, aaqq,
1135 $ cwork(n+1), lda, ierr )
1136 aapq = zdotc( m, a( 1, p ), 1,
1137 $ cwork(n+1), 1 ) / aapp
1144 mxaapq = max( mxaapq, -aapq1 )
1148 IF( abs( aapq1 ).GT.tol )
THEN
1149 ompq = aapq / abs(aapq)
1159 theta = -half*abs( aqoap-apoaq )/ aapq1
1160 IF( aaqq.GT.aapp0 )theta = -theta
1162 IF( abs( theta ).GT.bigtheta )
THEN
1165 CALL zrot( m, a(1,p), 1, a(1,q), 1,
1166 $ cs, conjg(ompq)*t )
1168 CALL zrot( mvl, v(1,p), 1,
1169 $ v(1,q), 1, cs, conjg(ompq)*t )
1171 sva( q ) = aaqq*sqrt( max( zero,
1172 $ one+t*apoaq*aapq1 ) )
1173 aapp = aapp*sqrt( max( zero,
1174 $ one-t*aqoap*aapq1 ) )
1175 mxsinj = max( mxsinj, abs( t ) )
1180 thsign = -sign( one, aapq1 )
1181 IF( aaqq.GT.aapp0 )thsign = -thsign
1182 t = one / ( theta+thsign*
1183 $ sqrt( one+theta*theta ) )
1184 cs = sqrt( one / ( one+t*t ) )
1186 mxsinj = max( mxsinj, abs( sn ) )
1187 sva( q ) = aaqq*sqrt( max( zero,
1188 $ one+t*apoaq*aapq1 ) )
1189 aapp = aapp*sqrt( max( zero,
1190 $ one-t*aqoap*aapq1 ) )
1192 CALL zrot( m, a(1,p), 1, a(1,q), 1,
1193 $ cs, conjg(ompq)*sn )
1195 CALL zrot( mvl, v(1,p), 1,
1196 $ v(1,q), 1, cs, conjg(ompq)*sn )
1199 cwork(p) = -cwork(q) * ompq
1203 IF( aapp.GT.aaqq )
THEN
1204 CALL zcopy( m, a( 1, p ), 1,
1206 CALL zlascl(
'G', 0, 0, aapp, one,
1207 $ m, 1, cwork(n+1),lda,
1209 CALL zlascl(
'G', 0, 0, aaqq, one,
1210 $ m, 1, a( 1, q ), lda,
1212 CALL zaxpy( m, -aapq, cwork(n+1),
1214 CALL zlascl(
'G', 0, 0, one, aaqq,
1215 $ m, 1, a( 1, q ), lda,
1217 sva( q ) = aaqq*sqrt( max( zero,
1218 $ one-aapq1*aapq1 ) )
1219 mxsinj = max( mxsinj, sfmin )
1221 CALL zcopy( m, a( 1, q ), 1,
1223 CALL zlascl(
'G', 0, 0, aaqq, one,
1224 $ m, 1, cwork(n+1),lda,
1226 CALL zlascl(
'G', 0, 0, aapp, one,
1227 $ m, 1, a( 1, p ), lda,
1229 CALL zaxpy( m, -conjg(aapq),
1230 $ cwork(n+1), 1, a( 1, p ), 1 )
1231 CALL zlascl(
'G', 0, 0, one, aapp,
1232 $ m, 1, a( 1, p ), lda,
1234 sva( p ) = aapp*sqrt( max( zero,
1235 $ one-aapq1*aapq1 ) )
1236 mxsinj = max( mxsinj, sfmin )
1243 IF( ( sva( q ) / aaqq )**2.LE.rooteps )
1245 IF( ( aaqq.LT.rootbig ) .AND.
1246 $ ( aaqq.GT.rootsfmin ) )
THEN
1247 sva( q ) = dznrm2( m, a( 1, q ), 1)
1251 CALL zlassq( m, a( 1, q ), 1, t,
1253 sva( q ) = t*sqrt( aaqq )
1256 IF( ( aapp / aapp0 )**2.LE.rooteps )
THEN
1257 IF( ( aapp.LT.rootbig ) .AND.
1258 $ ( aapp.GT.rootsfmin ) )
THEN
1259 aapp = dznrm2( m, a( 1, p ), 1 )
1263 CALL zlassq( m, a( 1, p ), 1, t,
1265 aapp = t*sqrt( aapp )
1273 pskipped = pskipped + 1
1278 pskipped = pskipped + 1
1282 IF( ( i.LE.swband ) .AND. ( ijblsk.GE.blskip ) )
1288 IF( ( i.LE.swband ) .AND.
1289 $ ( pskipped.GT.rowskip ) )
THEN
1303 IF( aapp.EQ.zero )notrot = notrot +
1304 $ min( jgl+kbl-1, n ) - jgl + 1
1305 IF( aapp.LT.zero )notrot = 0
1315 DO 2012 p = igl, min( igl+kbl-1, n )
1316 sva( p ) = abs( sva( p ) )
1323 IF( ( sva( n ).LT.rootbig ) .AND. ( sva( n ).GT.rootsfmin ) )
1325 sva( n ) = dznrm2( m, a( 1, n ), 1 )
1329 CALL zlassq( m, a( 1, n ), 1, t, aapp )
1330 sva( n ) = t*sqrt( aapp )
1335 IF( ( i.LT.swband ) .AND. ( ( mxaapq.LE.roottol ) .OR.
1336 $ ( iswrot.LE.n ) ) )swband = i
1338 IF( ( i.GT.swband+1 ) .AND. ( mxaapq.LT.sqrt( dble( n ) )*
1339 $ tol ) .AND. ( dble( n )*mxaapq*mxsinj.LT.tol ) )
THEN
1343 IF( notrot.GE.emptsw )
GO TO 1994
1365 DO 5991 p = 1, n - 1
1366 q = idamax( n-p+1, sva( p ), 1 ) + p - 1
1371 CALL zswap( m, a( 1, p ), 1, a( 1, q ), 1 )
1372 IF( rsvec )
CALL zswap( mvl, v( 1, p ), 1, v( 1, q ), 1 )
1374 IF( sva( p ).NE.zero )
THEN
1376 IF( sva( p )*skl.GT.sfmin )n2 = n2 + 1
1379 IF( sva( n ).NE.zero )
THEN
1381 IF( sva( n )*skl.GT.sfmin )n2 = n2 + 1
1386 IF( lsvec .OR. uctol )
THEN
1389 CALL zlascl(
'G',0,0, sva(p), one, m, 1, a(1,p), m, ierr )
1397 temp1 = one / dznrm2( mvl, v( 1, p ), 1 )
1398 CALL zdscal( mvl, temp1, v( 1, p ), 1 )
1403 IF( ( ( skl.GT.one ) .AND. ( sva( 1 ).LT.( big / skl ) ) )
1404 $ .OR. ( ( skl.LT.one ) .AND. ( sva( max( n2, 1 ) ) .GT.
1405 $ ( sfmin / skl ) ) ) )
THEN
1407 sva( p ) = skl*sva( p )
1417 rwork( 2 ) = dble( n4 )
1420 rwork( 3 ) = dble( n2 )
1425 rwork( 4 ) = dble( i )
subroutine xerbla(srname, info)
subroutine zaxpy(n, za, zx, incx, zy, incy)
ZAXPY
subroutine zcopy(n, zx, incx, zy, incy)
ZCOPY
subroutine zgesvj(joba, jobu, jobv, m, n, a, lda, sva, mv, v, ldv, cwork, lwork, rwork, lrwork, info)
ZGESVJ
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 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 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 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 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 zlassq(n, x, incx, scale, sumsq)
ZLASSQ updates a sum of squares represented in scaled form.
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 zdscal(n, da, zx, incx)
ZDSCAL
subroutine zswap(n, zx, incx, zy, incy)
ZSWAP