342 SUBROUTINE zgesvj( JOBA, JOBU, JOBV, M, N, A, LDA, SVA, MV, V,
343 $ ldv, cwork, lwork, rwork, lrwork, info )
352 INTEGER INFO, LDA, LDV, LWORK, LRWORK, M, MV, N
353 CHARACTER*1 JOBA, JOBU, JOBV
356 COMPLEX*16 A( lda, * ), V( ldv, * ), CWORK( lwork )
357 DOUBLE PRECISION RWORK( lrwork ), SVA( n )
363 DOUBLE PRECISION ZERO, HALF, ONE
364 parameter( zero = 0.0d0, half = 0.5d0, one = 1.0d0)
365 COMPLEX*16 CZERO, CONE
366 parameter( czero = (0.0d0, 0.0d0), cone = (1.0d0, 0.0d0) )
368 parameter( nsweep = 30 )
371 COMPLEX*16 AAPQ, OMPQ
372 DOUBLE PRECISION AAPP, AAPP0, AAPQ1, AAQQ, APOAQ, AQOAP, BIG,
373 $ bigtheta, cs, ctol, epsln, large, mxaapq,
374 $ mxsinj, rootbig, rooteps, rootsfmin, roottol,
375 $ skl, sfmin, small, sn, t, temp1, theta, thsign, tol
376 INTEGER BLSKIP, EMPTSW, i, ibr, IERR, igl, IJBLSK, ir1,
377 $ iswrot, jbc, jgl, kbl, lkahead, mvl, n2, n34,
378 $ n4, nbl, notrot, p, pskipped, q, rowskip, swband
379 LOGICAL APPLV, GOSCALE, LOWER, LSVEC, NOSCALE, ROTOK,
380 $ rsvec, uctol, upper
384 INTRINSIC abs, dmax1, dmin1, dconjg, dble, min0, max0,
390 DOUBLE PRECISION DZNRM2
392 EXTERNAL zdotc, dznrm2
396 DOUBLE PRECISION DLAMCH
413 lsvec = lsame( jobu,
'U' )
414 uctol = lsame( jobu,
'C' )
415 rsvec = lsame( jobv,
'V' )
416 applv = lsame( jobv,
'A' )
417 upper = lsame( joba,
'U' )
418 lower = lsame( joba,
'L' )
420 IF( .NOT.( upper .OR. lower .OR. lsame( joba,
'G' ) ) )
THEN
422 ELSE IF( .NOT.( lsvec .OR. uctol .OR. lsame( jobu,
'N' ) ) )
THEN
424 ELSE IF( .NOT.( rsvec .OR. applv .OR. lsame( jobv,
'N' ) ) )
THEN
426 ELSE IF( m.LT.0 )
THEN
428 ELSE IF( ( n.LT.0 ) .OR. ( n.GT.m ) )
THEN
430 ELSE IF( lda.LT.m )
THEN
432 ELSE IF( mv.LT.0 )
THEN
434 ELSE IF( ( rsvec .AND. ( ldv.LT.n ) ) .OR.
435 $ ( applv .AND. ( ldv.LT.mv ) ) )
THEN
437 ELSE IF( uctol .AND. ( rwork( 1 ).LE.one ) )
THEN
439 ELSE IF( lwork.LT.( m+n ) )
THEN
441 ELSE IF( lrwork.LT.max0( n, 6 ) )
THEN
449 CALL xerbla(
'ZGESVJ', -info )
455 IF( ( m.EQ.0 ) .OR. ( n.EQ.0 ) )
RETURN
469 IF( lsvec .OR. rsvec .OR. applv )
THEN
470 ctol = dsqrt( dble( m ) )
478 epsln = dlamch(
'Epsilon' )
479 rooteps = dsqrt( epsln )
480 sfmin = dlamch(
'SafeMinimum' )
481 rootsfmin = dsqrt( sfmin )
482 small = sfmin / epsln
483 big = dlamch(
'Overflow' )
485 rootbig = one / rootsfmin
486 large = big / dsqrt( dble( m*n ) )
487 bigtheta = one / rooteps
490 roottol = dsqrt( tol )
492 IF( dble( m )*epsln.GE.one )
THEN
494 CALL xerbla(
'ZGESVJ', -info )
502 CALL zlaset(
'A', mvl, n, czero, cone, v, ldv )
503 ELSE IF( applv )
THEN
506 rsvec = rsvec .OR. applv
517 skl = one / dsqrt( dble( m )*dble( n ) )
526 CALL zlassq( m-p+1, a( p, p ), 1, aapp, aaqq )
527 IF( aapp.GT.big )
THEN
529 CALL xerbla(
'ZGESVJ', -info )
533 IF( ( aapp.LT.( big / aaqq ) ) .AND. noscale )
THEN
537 sva( p ) = aapp*( aaqq*skl )
541 sva( q ) = sva( q )*skl
546 ELSE IF( upper )
THEN
551 CALL zlassq( p, a( 1, p ), 1, aapp, aaqq )
552 IF( aapp.GT.big )
THEN
554 CALL xerbla(
'ZGESVJ', -info )
558 IF( ( aapp.LT.( big / aaqq ) ) .AND. noscale )
THEN
562 sva( p ) = aapp*( aaqq*skl )
566 sva( q ) = sva( q )*skl
576 CALL zlassq( m, a( 1, p ), 1, aapp, aaqq )
577 IF( aapp.GT.big )
THEN
579 CALL xerbla(
'ZGESVJ', -info )
583 IF( ( aapp.LT.( big / aaqq ) ) .AND. noscale )
THEN
587 sva( p ) = aapp*( aaqq*skl )
591 sva( q ) = sva( q )*skl
598 IF( noscale )skl = one
607 IF( sva( p ).NE.zero )aaqq = dmin1( aaqq, sva( p ) )
608 aapp = dmax1( aapp, sva( p ) )
613 IF( aapp.EQ.zero )
THEN
614 IF( lsvec )
CALL zlaset(
'G', m, n, czero, cone, a, lda )
627 IF( lsvec )
CALL zlascl(
'G', 0, 0, sva( 1 ), skl, m, 1,
628 $ a( 1, 1 ), lda, ierr )
629 rwork( 1 ) = one / skl
630 IF( sva( 1 ).GE.sfmin )
THEN
645 sn = dsqrt( sfmin / epsln )
646 temp1 = dsqrt( big / dble( n ) )
647 IF( ( aapp.LE.sn ) .OR. ( aaqq.GE.temp1 ) .OR.
648 $ ( ( sn.LE.aaqq ) .AND. ( aapp.LE.temp1 ) ) )
THEN
649 temp1 = dmin1( big, temp1 / aapp )
652 ELSE IF( ( aaqq.LE.sn ) .AND. ( aapp.LE.temp1 ) )
THEN
653 temp1 = dmin1( sn / aaqq, big / (aapp*dsqrt( dble(n)) ) )
656 ELSE IF( ( aaqq.GE.sn ) .AND. ( aapp.GE.temp1 ) )
THEN
657 temp1 = dmax1( sn / aaqq, temp1 / aapp )
660 ELSE IF( ( aaqq.LE.sn ) .AND. ( aapp.GE.temp1 ) )
THEN
661 temp1 = dmin1( sn / aaqq, big / ( dsqrt( dble( n ) )*aapp ) )
670 IF( temp1.NE.one )
THEN
671 CALL dlascl(
'G', 0, 0, one, temp1, n, 1, sva, n, ierr )
674 IF( skl.NE.one )
THEN
675 CALL zlascl( joba, 0, 0, one, skl, m, n, a, lda, ierr )
681 emptsw = ( n*( n-1 ) ) / 2
705 IF( ( nbl*kbl ).NE.n )nbl = nbl + 1
710 rowskip = min0( 5, kbl )
721 IF( ( lower .OR. upper ) .AND. ( n.GT.max0( 64, 4*kbl ) ) )
THEN
743 CALL zgsvj0( jobv, m-n34, n-n34, a( n34+1, n34+1 ), lda,
744 $ cwork( n34+1 ), sva( n34+1 ), mvl,
745 $ v( n34*q+1, n34+1 ), ldv, epsln, sfmin, tol,
746 $ 2, cwork( n+1 ), lwork-n, ierr )
748 CALL zgsvj0( jobv, m-n2, n34-n2, a( n2+1, n2+1 ), lda,
749 $ cwork( n2+1 ), sva( n2+1 ), mvl,
750 $ v( n2*q+1, n2+1 ), ldv, epsln, sfmin, tol, 2,
751 $ cwork( n+1 ), lwork-n, ierr )
753 CALL zgsvj1( jobv, m-n2, n-n2, n4, a( n2+1, n2+1 ), lda,
754 $ cwork( n2+1 ), sva( n2+1 ), mvl,
755 $ v( n2*q+1, n2+1 ), ldv, epsln, sfmin, tol, 1,
756 $ cwork( n+1 ), lwork-n, ierr )
758 CALL zgsvj0( jobv, m-n4, n2-n4, a( n4+1, n4+1 ), lda,
759 $ cwork( n4+1 ), sva( n4+1 ), mvl,
760 $ v( n4*q+1, n4+1 ), ldv, epsln, sfmin, tol, 1,
761 $ cwork( n+1 ), lwork-n, ierr )
763 CALL zgsvj0( jobv, m, n4, a, lda, cwork, sva, mvl, v, ldv,
764 $ epsln, sfmin, tol, 1, cwork( n+1 ), lwork-n,
767 CALL zgsvj1( jobv, m, n2, n4, a, lda, cwork, sva, mvl, v,
768 $ ldv, epsln, sfmin, tol, 1, cwork( n+1 ),
772 ELSE IF( upper )
THEN
775 CALL zgsvj0( jobv, n4, n4, a, lda, cwork, sva, mvl, v, ldv,
776 $ epsln, sfmin, tol, 2, cwork( n+1 ), lwork-n,
779 CALL zgsvj0( jobv, n2, n4, a( 1, n4+1 ), lda, cwork( n4+1 ),
780 $ sva( n4+1 ), mvl, v( n4*q+1, n4+1 ), ldv,
781 $ epsln, sfmin, tol, 1, cwork( n+1 ), lwork-n,
784 CALL zgsvj1( jobv, n2, n2, n4, a, lda, cwork, sva, mvl, v,
785 $ ldv, epsln, sfmin, tol, 1, cwork( n+1 ),
788 CALL zgsvj0( jobv, n2+n4, n4, a( 1, n2+1 ), lda,
789 $ cwork( n2+1 ), sva( n2+1 ), mvl,
790 $ v( n2*q+1, n2+1 ), ldv, epsln, sfmin, tol, 1,
791 $ cwork( n+1 ), lwork-n, ierr )
799 DO 1993 i = 1, nsweep
817 igl = ( ibr-1 )*kbl + 1
819 DO 1002 ir1 = 0, min0( lkahead, nbl-ibr )
823 DO 2001 p = igl, min0( igl+kbl-1, n-1 )
827 q = idamax( n-p+1, sva( p ), 1 ) + p - 1
829 CALL zswap( m, a( 1, p ), 1, a( 1, q ), 1 )
830 IF( rsvec )
CALL zswap( mvl, v( 1, p ), 1,
854 IF( ( sva( p ).LT.rootbig ) .AND.
855 $ ( sva( p ).GT.rootsfmin ) )
THEN
856 sva( p ) = dznrm2( m, a( 1, p ), 1 )
860 CALL zlassq( m, a( 1, p ), 1, temp1, aapp )
861 sva( p ) = temp1*dsqrt( aapp )
868 IF( aapp.GT.zero )
THEN
872 DO 2002 q = p + 1, min0( igl+kbl-1, n )
876 IF( aaqq.GT.zero )
THEN
879 IF( aaqq.GE.one )
THEN
880 rotok = ( small*aapp ).LE.aaqq
881 IF( aapp.LT.( big / aaqq ) )
THEN
882 aapq = ( zdotc( m, a( 1, p ), 1,
883 $ a( 1, q ), 1 ) / aaqq ) / aapp
885 CALL zcopy( m, a( 1, p ), 1,
887 CALL zlascl(
'G', 0, 0, aapp, one,
888 $ m, 1, cwork(n+1), lda, ierr )
889 aapq = zdotc( m, cwork(n+1), 1,
890 $ a( 1, q ), 1 ) / aaqq
893 rotok = aapp.LE.( aaqq / small )
894 IF( aapp.GT.( small / aaqq ) )
THEN
895 aapq = ( zdotc( m, a( 1, p ), 1,
896 $ a( 1, q ), 1 ) / aaqq ) / aapp
898 CALL zcopy( m, a( 1, q ), 1,
900 CALL zlascl(
'G', 0, 0, aaqq,
902 $ cwork(n+1), lda, ierr )
903 aapq = zdotc( m, a(1, p ), 1,
904 $ cwork(n+1), 1 ) / aapp
910 mxaapq = dmax1( mxaapq, -aapq1 )
914 IF( abs( aapq1 ).GT.tol )
THEN
927 ompq = aapq / abs(aapq)
930 theta = -half*abs( aqoap-apoaq )/aapq1
932 IF( abs( theta ).GT.bigtheta )
THEN
937 CALL zrot( m, a(1,p), 1, a(1,q), 1,
938 $ cs, dconjg(ompq)*t )
940 CALL zrot( mvl, v(1,p), 1,
941 $ v(1,q), 1, cs, dconjg(ompq)*t )
944 sva( q ) = aaqq*dsqrt( dmax1( zero,
945 $ one+t*apoaq*aapq1 ) )
946 aapp = aapp*dsqrt( dmax1( zero,
947 $ one-t*aqoap*aapq1 ) )
948 mxsinj = dmax1( mxsinj, abs( t ) )
954 thsign = -dsign( one, aapq1 )
955 t = one / ( theta+thsign*
956 $ dsqrt( one+theta*theta ) )
957 cs = dsqrt( one / ( one+t*t ) )
960 mxsinj = dmax1( mxsinj, abs( sn ) )
961 sva( q ) = aaqq*dsqrt( dmax1( zero,
962 $ one+t*apoaq*aapq1 ) )
963 aapp = aapp*dsqrt( dmax1( zero,
964 $ one-t*aqoap*aapq1 ) )
966 CALL zrot( m, a(1,p), 1, a(1,q), 1,
967 $ cs, dconjg(ompq)*sn )
969 CALL zrot( mvl, v(1,p), 1,
970 $ v(1,q), 1, cs, dconjg(ompq)*sn )
973 cwork(p) = -cwork(q) * ompq
977 CALL zcopy( m, a( 1, p ), 1,
979 CALL zlascl(
'G', 0, 0, aapp, one, m,
980 $ 1, cwork(n+1), lda,
982 CALL zlascl(
'G', 0, 0, aaqq, one, m,
983 $ 1, a( 1, q ), lda, ierr )
984 CALL zaxpy( m, -aapq, cwork(n+1), 1,
986 CALL zlascl(
'G', 0, 0, one, aaqq, m,
987 $ 1, a( 1, q ), lda, ierr )
988 sva( q ) = aaqq*dsqrt( dmax1( zero,
989 $ one-aapq1*aapq1 ) )
990 mxsinj = dmax1( mxsinj, sfmin )
997 IF( ( sva( q ) / aaqq )**2.LE.rooteps )
999 IF( ( aaqq.LT.rootbig ) .AND.
1000 $ ( aaqq.GT.rootsfmin ) )
THEN
1001 sva( q ) = dznrm2( m, a( 1, q ), 1 )
1005 CALL zlassq( m, a( 1, q ), 1, t,
1007 sva( q ) = t*dsqrt( aaqq )
1010 IF( ( aapp / aapp0 ).LE.rooteps )
THEN
1011 IF( ( aapp.LT.rootbig ) .AND.
1012 $ ( aapp.GT.rootsfmin ) )
THEN
1013 aapp = dznrm2( m, a( 1, p ), 1 )
1017 CALL zlassq( m, a( 1, p ), 1, t,
1019 aapp = t*dsqrt( aapp )
1026 IF( ir1.EQ.0 )notrot = notrot + 1
1028 pskipped = pskipped + 1
1032 IF( ir1.EQ.0 )notrot = notrot + 1
1033 pskipped = pskipped + 1
1036 IF( ( i.LE.swband ) .AND.
1037 $ ( pskipped.GT.rowskip ) )
THEN
1038 IF( ir1.EQ.0 )aapp = -aapp
1053 IF( ( ir1.EQ.0 ) .AND. ( aapp.EQ.zero ) )
1054 $ notrot = notrot + min0( igl+kbl-1, n ) - p
1065 igl = ( ibr-1 )*kbl + 1
1067 DO 2010 jbc = ibr + 1, nbl
1069 jgl = ( jbc-1 )*kbl + 1
1074 DO 2100 p = igl, min0( igl+kbl-1, n )
1077 IF( aapp.GT.zero )
THEN
1081 DO 2200 q = jgl, min0( jgl+kbl-1, n )
1084 IF( aaqq.GT.zero )
THEN
1091 IF( aaqq.GE.one )
THEN
1092 IF( aapp.GE.aaqq )
THEN
1093 rotok = ( small*aapp ).LE.aaqq
1095 rotok = ( small*aaqq ).LE.aapp
1097 IF( aapp.LT.( big / aaqq ) )
THEN
1098 aapq = ( zdotc( m, a( 1, p ), 1,
1099 $ a( 1, q ), 1 ) / aaqq ) / aapp
1101 CALL zcopy( m, a( 1, p ), 1,
1103 CALL zlascl(
'G', 0, 0, aapp,
1105 $ cwork(n+1), lda, ierr )
1106 aapq = zdotc( m, cwork(n+1), 1,
1107 $ a( 1, q ), 1 ) / aaqq
1110 IF( aapp.GE.aaqq )
THEN
1111 rotok = aapp.LE.( aaqq / small )
1113 rotok = aaqq.LE.( aapp / small )
1115 IF( aapp.GT.( small / aaqq ) )
THEN
1116 aapq = ( zdotc( m, a( 1, p ), 1,
1117 $ a( 1, q ), 1 ) / aaqq ) / aapp
1119 CALL zcopy( m, a( 1, q ), 1,
1121 CALL zlascl(
'G', 0, 0, aaqq,
1123 $ cwork(n+1), lda, ierr )
1124 aapq = zdotc( m, a( 1, p ), 1,
1125 $ cwork(n+1), 1 ) / aapp
1131 mxaapq = dmax1( mxaapq, -aapq1 )
1135 IF( abs( aapq1 ).GT.tol )
THEN
1143 ompq = aapq / abs(aapq)
1146 theta = -half*abs( aqoap-apoaq )/ aapq1
1147 IF( aaqq.GT.aapp0 )theta = -theta
1149 IF( abs( theta ).GT.bigtheta )
THEN
1152 CALL zrot( m, a(1,p), 1, a(1,q), 1,
1153 $ cs, dconjg(ompq)*t )
1155 CALL zrot( mvl, v(1,p), 1,
1156 $ v(1,q), 1, cs, dconjg(ompq)*t )
1158 sva( q ) = aaqq*dsqrt( dmax1( zero,
1159 $ one+t*apoaq*aapq1 ) )
1160 aapp = aapp*dsqrt( dmax1( zero,
1161 $ one-t*aqoap*aapq1 ) )
1162 mxsinj = dmax1( mxsinj, abs( t ) )
1167 thsign = -dsign( one, aapq1 )
1168 IF( aaqq.GT.aapp0 )thsign = -thsign
1169 t = one / ( theta+thsign*
1170 $ dsqrt( one+theta*theta ) )
1171 cs = dsqrt( one / ( one+t*t ) )
1173 mxsinj = dmax1( mxsinj, abs( sn ) )
1174 sva( q ) = aaqq*dsqrt( dmax1( zero,
1175 $ one+t*apoaq*aapq1 ) )
1176 aapp = aapp*dsqrt( dmax1( zero,
1177 $ one-t*aqoap*aapq1 ) )
1179 CALL zrot( m, a(1,p), 1, a(1,q), 1,
1180 $ cs, dconjg(ompq)*sn )
1182 CALL zrot( mvl, v(1,p), 1,
1183 $ v(1,q), 1, cs, dconjg(ompq)*sn )
1186 cwork(p) = -cwork(q) * ompq
1190 IF( aapp.GT.aaqq )
THEN
1191 CALL zcopy( m, a( 1, p ), 1,
1193 CALL zlascl(
'G', 0, 0, aapp, one,
1194 $ m, 1, cwork(n+1),lda,
1196 CALL zlascl(
'G', 0, 0, aaqq, one,
1197 $ m, 1, a( 1, q ), lda,
1199 CALL zaxpy( m, -aapq, cwork(n+1),
1201 CALL zlascl(
'G', 0, 0, one, aaqq,
1202 $ m, 1, a( 1, q ), lda,
1204 sva( q ) = aaqq*dsqrt( dmax1( zero,
1205 $ one-aapq1*aapq1 ) )
1206 mxsinj = dmax1( mxsinj, sfmin )
1208 CALL zcopy( m, a( 1, q ), 1,
1210 CALL zlascl(
'G', 0, 0, aaqq, one,
1211 $ m, 1, cwork(n+1),lda,
1213 CALL zlascl(
'G', 0, 0, aapp, one,
1214 $ m, 1, a( 1, p ), lda,
1216 CALL zaxpy( m, -dconjg(aapq),
1217 $ cwork(n+1), 1, a( 1, p ), 1 )
1218 CALL zlascl(
'G', 0, 0, one, aapp,
1219 $ m, 1, a( 1, p ), lda,
1221 sva( p ) = aapp*dsqrt( dmax1( zero,
1222 $ one-aapq1*aapq1 ) )
1223 mxsinj = dmax1( mxsinj, sfmin )
1230 IF( ( sva( q ) / aaqq )**2.LE.rooteps )
1232 IF( ( aaqq.LT.rootbig ) .AND.
1233 $ ( aaqq.GT.rootsfmin ) )
THEN
1234 sva( q ) = dznrm2( m, a( 1, q ), 1)
1238 CALL zlassq( m, a( 1, q ), 1, t,
1240 sva( q ) = t*dsqrt( aaqq )
1243 IF( ( aapp / aapp0 )**2.LE.rooteps )
THEN
1244 IF( ( aapp.LT.rootbig ) .AND.
1245 $ ( aapp.GT.rootsfmin ) )
THEN
1246 aapp = dznrm2( m, a( 1, p ), 1 )
1250 CALL zlassq( m, a( 1, p ), 1, t,
1252 aapp = t*dsqrt( aapp )
1260 pskipped = pskipped + 1
1265 pskipped = pskipped + 1
1269 IF( ( i.LE.swband ) .AND. ( ijblsk.GE.blskip ) )
1275 IF( ( i.LE.swband ) .AND.
1276 $ ( pskipped.GT.rowskip ) )
THEN
1290 IF( aapp.EQ.zero )notrot = notrot +
1291 $ min0( jgl+kbl-1, n ) - jgl + 1
1292 IF( aapp.LT.zero )notrot = 0
1302 DO 2012 p = igl, min0( igl+kbl-1, n )
1303 sva( p ) = abs( sva( p ) )
1310 IF( ( sva( n ).LT.rootbig ) .AND. ( sva( n ).GT.rootsfmin ) )
1312 sva( n ) = dznrm2( m, a( 1, n ), 1 )
1316 CALL zlassq( m, a( 1, n ), 1, t, aapp )
1317 sva( n ) = t*dsqrt( aapp )
1322 IF( ( i.LT.swband ) .AND. ( ( mxaapq.LE.roottol ) .OR.
1323 $ ( iswrot.LE.n ) ) )swband = i
1325 IF( ( i.GT.swband+1 ) .AND. ( mxaapq.LT.dsqrt( dble( n ) )*
1326 $ tol ) .AND. ( dble( n )*mxaapq*mxsinj.LT.tol ) )
THEN
1330 IF( notrot.GE.emptsw )
GO TO 1994
1352 DO 5991 p = 1, n - 1
1353 q = idamax( n-p+1, sva( p ), 1 ) + p - 1
1358 CALL zswap( m, a( 1, p ), 1, a( 1, q ), 1 )
1359 IF( rsvec )
CALL zswap( mvl, v( 1, p ), 1, v( 1, q ), 1 )
1361 IF( sva( p ).NE.zero )
THEN
1363 IF( sva( p )*skl.GT.sfmin )n2 = n2 + 1
1366 IF( sva( n ).NE.zero )
THEN
1368 IF( sva( n )*skl.GT.sfmin )n2 = n2 + 1
1373 IF( lsvec .OR. uctol )
THEN
1375 CALL zdscal( m, one / sva( p ), a( 1, p ), 1 )
1383 temp1 = one / dznrm2( mvl, v( 1, p ), 1 )
1384 CALL zdscal( mvl, temp1, v( 1, p ), 1 )
1389 IF( ( ( skl.GT.one ) .AND. ( sva( 1 ).LT.( big / skl ) ) )
1390 $ .OR. ( ( skl.LT.one ) .AND. ( sva( max( n2, 1 ) ) .GT.
1391 $ ( sfmin / skl ) ) ) )
THEN
1393 sva( p ) = skl*sva( p )
1403 rwork( 2 ) = dble( n4 )
1406 rwork( 3 ) = dble( n2 )
1411 rwork( 4 ) = dble( i )
subroutine zcopy(N, ZX, INCX, ZY, INCY)
ZCOPY
subroutine zswap(N, ZX, INCX, ZY, INCY)
ZSWAP
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 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 xerbla(SRNAME, INFO)
XERBLA
subroutine zlassq(N, X, INCX, SCALE, SUMSQ)
ZLASSQ updates a sum of squares represented in scaled form.
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 zdscal(N, DA, ZX, INCX)
ZDSCAL
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 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 zaxpy(N, ZA, ZX, INCX, ZY, INCY)
ZAXPY