351 SUBROUTINE cgesvj( 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 A( lda, * ), V( ldv, * ), CWORK( lwork )
366 REAL RWORK( lrwork ), SVA( n )
373 parameter( zero = 0.0e0, half = 0.5e0, one = 1.0e0)
375 parameter( czero = (0.0e0, 0.0e0), cone = (1.0e0, 0.0e0) )
377 parameter( nsweep = 30 )
381 REAL 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,
REAL, SIGN, SQRT
400 EXTERNAL cdotc, scnrm2
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(
'CGESVJ', -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(
REAL( M ) )
491 epsln = slamch(
'Epsilon' )
492 rooteps = sqrt( epsln )
493 sfmin = slamch(
'SafeMinimum' )
494 rootsfmin = sqrt( sfmin )
495 small = sfmin / epsln
498 rootbig = one / rootsfmin
500 bigtheta = one / rooteps
503 roottol = sqrt( tol )
505 IF(
REAL( m )*EPSLN.GE.ONE ) then
507 CALL xerbla(
'CGESVJ', -info )
515 CALL claset(
'A', mvl, n, czero, cone, v, ldv )
516 ELSE IF( applv )
THEN 519 rsvec = rsvec .OR. applv
530 skl = one / sqrt(
REAL( m )*
REAL( N ) )
539 CALL classq( m-p+1, a( p, p ), 1, aapp, aaqq )
540 IF( aapp.GT.big )
THEN 542 CALL xerbla(
'CGESVJ', -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 classq( p, a( 1, p ), 1, aapp, aaqq )
565 IF( aapp.GT.big )
THEN 567 CALL xerbla(
'CGESVJ', -info )
571 IF( ( aapp.LT.( big / aaqq ) ) .AND. noscale )
THEN 575 sva( p ) = aapp*( aaqq*skl )
579 sva( q ) = sva( q )*skl
589 CALL classq( m, a( 1, p ), 1, aapp, aaqq )
590 IF( aapp.GT.big )
THEN 592 CALL xerbla(
'CGESVJ', -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 claset(
'G', m, n, czero, cone, a, lda )
640 IF( lsvec )
CALL clascl(
'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 /
REAL( 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(
REAL( 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(
REAL( N ) )*aapp ) )
683 IF( temp1.NE.one )
THEN 684 CALL slascl(
'G', 0, 0, one, temp1, n, 1, sva, n, ierr )
687 IF( skl.NE.one )
THEN 688 CALL clascl( 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 cgsvj0( 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 cgsvj0( 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 cgsvj1( 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 cgsvj0( 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 cgsvj0( jobv, m, n4, a, lda, cwork, sva, mvl, v, ldv,
777 $ epsln, sfmin, tol, 1, cwork( n+1 ), lwork-n,
780 CALL cgsvj1( 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 cgsvj0( jobv, n4, n4, a, lda, cwork, sva, mvl, v, ldv,
789 $ epsln, sfmin, tol, 2, cwork( n+1 ), lwork-n,
792 CALL cgsvj0( 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 cgsvj1( jobv, n2, n2, n4, a, lda, cwork, sva, mvl, v,
798 $ ldv, epsln, sfmin, tol, 1, cwork( n+1 ),
801 CALL cgsvj0( 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 = isamax( n-p+1, sva( p ), 1 ) + p - 1
842 CALL cswap( m, a( 1, p ), 1, a( 1, q ), 1 )
843 IF( rsvec )
CALL cswap( mvl, v( 1, p ), 1,
867 IF( ( sva( p ).LT.rootbig ) .AND.
868 $ ( sva( p ).GT.rootsfmin ) )
THEN 869 sva( p ) = scnrm2( m, a( 1, p ), 1 )
873 CALL classq( 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 = ( cdotc( m, a( 1, p ), 1,
896 $ a( 1, q ), 1 ) / aaqq ) / aapp
898 CALL ccopy( m, a( 1, p ), 1,
900 CALL clascl(
'G', 0, 0, aapp, one,
901 $ m, 1, cwork(n+1), lda, ierr )
902 aapq = cdotc( 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 = ( cdotc( m, a( 1, p ), 1,
909 $ a( 1, q ), 1 ) / aapp ) / aaqq
911 CALL ccopy( m, a( 1, q ), 1,
913 CALL clascl(
'G', 0, 0, aaqq,
915 $ cwork(n+1), lda, ierr )
916 aapq = cdotc( m, a(1, p ), 1,
917 $ cwork(n+1), 1 ) / aapp
923 mxaapq = max( mxaapq, -aapq1 )
927 IF( abs( aapq1 ).GT.tol )
THEN 928 ompq = aapq / abs(aapq)
943 theta = -half*abs( aqoap-apoaq )/aapq1
945 IF( abs( theta ).GT.bigtheta )
THEN 950 CALL crot( m, a(1,p), 1, a(1,q), 1,
951 $ cs, conjg(ompq)*t )
953 CALL crot( mvl, v(1,p), 1,
954 $ v(1,q), 1, cs, conjg(ompq)*t )
957 sva( q ) = aaqq*sqrt( max( zero,
958 $ one+t*apoaq*aapq1 ) )
959 aapp = aapp*sqrt( max( zero,
960 $ one-t*aqoap*aapq1 ) )
961 mxsinj = max( mxsinj, abs( t ) )
967 thsign = -sign( one, aapq1 )
968 t = one / ( theta+thsign*
969 $ sqrt( one+theta*theta ) )
970 cs = sqrt( one / ( one+t*t ) )
973 mxsinj = max( mxsinj, abs( sn ) )
974 sva( q ) = aaqq*sqrt( max( zero,
975 $ one+t*apoaq*aapq1 ) )
976 aapp = aapp*sqrt( max( zero,
977 $ one-t*aqoap*aapq1 ) )
979 CALL crot( m, a(1,p), 1, a(1,q), 1,
980 $ cs, conjg(ompq)*sn )
982 CALL crot( mvl, v(1,p), 1,
983 $ v(1,q), 1, cs, conjg(ompq)*sn )
986 cwork(p) = -cwork(q) * ompq
990 CALL ccopy( m, a( 1, p ), 1,
992 CALL clascl(
'G', 0, 0, aapp, one, m,
993 $ 1, cwork(n+1), lda,
995 CALL clascl(
'G', 0, 0, aaqq, one, m,
996 $ 1, a( 1, q ), lda, ierr )
997 CALL caxpy( m, -aapq, cwork(n+1), 1,
999 CALL clascl(
'G', 0, 0, one, aaqq, m,
1000 $ 1, a( 1, q ), lda, ierr )
1001 sva( q ) = aaqq*sqrt( max( zero,
1002 $ one-aapq1*aapq1 ) )
1003 mxsinj = max( mxsinj, sfmin )
1010 IF( ( sva( q ) / aaqq )**2.LE.rooteps )
1012 IF( ( aaqq.LT.rootbig ) .AND.
1013 $ ( aaqq.GT.rootsfmin ) )
THEN 1014 sva( q ) = scnrm2( m, a( 1, q ), 1 )
1018 CALL classq( m, a( 1, q ), 1, t,
1020 sva( q ) = t*sqrt( aaqq )
1023 IF( ( aapp / aapp0 ).LE.rooteps )
THEN 1024 IF( ( aapp.LT.rootbig ) .AND.
1025 $ ( aapp.GT.rootsfmin ) )
THEN 1026 aapp = scnrm2( m, a( 1, p ), 1 )
1030 CALL classq( m, a( 1, p ), 1, t,
1032 aapp = t*sqrt( aapp )
1039 IF( ir1.EQ.0 )notrot = notrot + 1
1041 pskipped = pskipped + 1
1045 IF( ir1.EQ.0 )notrot = notrot + 1
1046 pskipped = pskipped + 1
1049 IF( ( i.LE.swband ) .AND.
1050 $ ( pskipped.GT.rowskip ) )
THEN 1051 IF( ir1.EQ.0 )aapp = -aapp
1066 IF( ( ir1.EQ.0 ) .AND. ( aapp.EQ.zero ) )
1067 $ notrot = notrot + min( igl+kbl-1, n ) - p
1078 igl = ( ibr-1 )*kbl + 1
1080 DO 2010 jbc = ibr + 1, nbl
1082 jgl = ( jbc-1 )*kbl + 1
1087 DO 2100 p = igl, min( igl+kbl-1, n )
1090 IF( aapp.GT.zero )
THEN 1094 DO 2200 q = jgl, min( jgl+kbl-1, n )
1097 IF( aaqq.GT.zero )
THEN 1104 IF( aaqq.GE.one )
THEN 1105 IF( aapp.GE.aaqq )
THEN 1106 rotok = ( small*aapp ).LE.aaqq
1108 rotok = ( small*aaqq ).LE.aapp
1110 IF( aapp.LT.( big / aaqq ) )
THEN 1111 aapq = ( cdotc( m, a( 1, p ), 1,
1112 $ a( 1, q ), 1 ) / aaqq ) / aapp
1114 CALL ccopy( m, a( 1, p ), 1,
1116 CALL clascl(
'G', 0, 0, aapp,
1118 $ cwork(n+1), lda, ierr )
1119 aapq = cdotc( m, cwork(n+1), 1,
1120 $ a( 1, q ), 1 ) / aaqq
1123 IF( aapp.GE.aaqq )
THEN 1124 rotok = aapp.LE.( aaqq / small )
1126 rotok = aaqq.LE.( aapp / small )
1128 IF( aapp.GT.( small / aaqq ) )
THEN 1129 aapq = ( cdotc( m, a( 1, p ), 1,
1130 $ a( 1, q ), 1 ) / max(aaqq,aapp) )
1133 CALL ccopy( m, a( 1, q ), 1,
1135 CALL clascl(
'G', 0, 0, aaqq,
1137 $ cwork(n+1), lda, ierr )
1138 aapq = cdotc( m, a( 1, p ), 1,
1139 $ cwork(n+1), 1 ) / aapp
1145 mxaapq = max( mxaapq, -aapq1 )
1149 IF( abs( aapq1 ).GT.tol )
THEN 1150 ompq = aapq / abs(aapq)
1160 theta = -half*abs( aqoap-apoaq )/ aapq1
1161 IF( aaqq.GT.aapp0 )theta = -theta
1163 IF( abs( theta ).GT.bigtheta )
THEN 1166 CALL crot( m, a(1,p), 1, a(1,q), 1,
1167 $ cs, conjg(ompq)*t )
1169 CALL crot( mvl, v(1,p), 1,
1170 $ v(1,q), 1, cs, conjg(ompq)*t )
1172 sva( q ) = aaqq*sqrt( max( zero,
1173 $ one+t*apoaq*aapq1 ) )
1174 aapp = aapp*sqrt( max( zero,
1175 $ one-t*aqoap*aapq1 ) )
1176 mxsinj = max( mxsinj, abs( t ) )
1181 thsign = -sign( one, aapq1 )
1182 IF( aaqq.GT.aapp0 )thsign = -thsign
1183 t = one / ( theta+thsign*
1184 $ sqrt( one+theta*theta ) )
1185 cs = sqrt( one / ( one+t*t ) )
1187 mxsinj = max( mxsinj, abs( sn ) )
1188 sva( q ) = aaqq*sqrt( max( zero,
1189 $ one+t*apoaq*aapq1 ) )
1190 aapp = aapp*sqrt( max( zero,
1191 $ one-t*aqoap*aapq1 ) )
1193 CALL crot( m, a(1,p), 1, a(1,q), 1,
1194 $ cs, conjg(ompq)*sn )
1196 CALL crot( mvl, v(1,p), 1,
1197 $ v(1,q), 1, cs, conjg(ompq)*sn )
1200 cwork(p) = -cwork(q) * ompq
1204 IF( aapp.GT.aaqq )
THEN 1205 CALL ccopy( m, a( 1, p ), 1,
1207 CALL clascl(
'G', 0, 0, aapp, one,
1208 $ m, 1, cwork(n+1),lda,
1210 CALL clascl(
'G', 0, 0, aaqq, one,
1211 $ m, 1, a( 1, q ), lda,
1213 CALL caxpy( m, -aapq, cwork(n+1),
1215 CALL clascl(
'G', 0, 0, one, aaqq,
1216 $ m, 1, a( 1, q ), lda,
1218 sva( q ) = aaqq*sqrt( max( zero,
1219 $ one-aapq1*aapq1 ) )
1220 mxsinj = max( mxsinj, sfmin )
1222 CALL ccopy( m, a( 1, q ), 1,
1224 CALL clascl(
'G', 0, 0, aaqq, one,
1225 $ m, 1, cwork(n+1),lda,
1227 CALL clascl(
'G', 0, 0, aapp, one,
1228 $ m, 1, a( 1, p ), lda,
1230 CALL caxpy( m, -conjg(aapq),
1231 $ cwork(n+1), 1, a( 1, p ), 1 )
1232 CALL clascl(
'G', 0, 0, one, aapp,
1233 $ m, 1, a( 1, p ), lda,
1235 sva( p ) = aapp*sqrt( max( zero,
1236 $ one-aapq1*aapq1 ) )
1237 mxsinj = max( mxsinj, sfmin )
1244 IF( ( sva( q ) / aaqq )**2.LE.rooteps )
1246 IF( ( aaqq.LT.rootbig ) .AND.
1247 $ ( aaqq.GT.rootsfmin ) )
THEN 1248 sva( q ) = scnrm2( m, a( 1, q ), 1)
1252 CALL classq( m, a( 1, q ), 1, t,
1254 sva( q ) = t*sqrt( aaqq )
1257 IF( ( aapp / aapp0 )**2.LE.rooteps )
THEN 1258 IF( ( aapp.LT.rootbig ) .AND.
1259 $ ( aapp.GT.rootsfmin ) )
THEN 1260 aapp = scnrm2( m, a( 1, p ), 1 )
1264 CALL classq( m, a( 1, p ), 1, t,
1266 aapp = t*sqrt( aapp )
1274 pskipped = pskipped + 1
1279 pskipped = pskipped + 1
1283 IF( ( i.LE.swband ) .AND. ( ijblsk.GE.blskip ) )
1289 IF( ( i.LE.swband ) .AND.
1290 $ ( pskipped.GT.rowskip ) )
THEN 1304 IF( aapp.EQ.zero )notrot = notrot +
1305 $ min( jgl+kbl-1, n ) - jgl + 1
1306 IF( aapp.LT.zero )notrot = 0
1316 DO 2012 p = igl, min( igl+kbl-1, n )
1317 sva( p ) = abs( sva( p ) )
1324 IF( ( sva( n ).LT.rootbig ) .AND. ( sva( n ).GT.rootsfmin ) )
1326 sva( n ) = scnrm2( m, a( 1, n ), 1 )
1330 CALL classq( m, a( 1, n ), 1, t, aapp )
1331 sva( n ) = t*sqrt( aapp )
1336 IF( ( i.LT.swband ) .AND. ( ( mxaapq.LE.roottol ) .OR.
1337 $ ( iswrot.LE.n ) ) )swband = i
1339 IF( ( i.GT.swband+1 ) .AND. ( mxaapq.LT.sqrt(
REAL( N ) )*
1340 $ tol ) .AND. (
REAL( n )*MXAAPQ*MXSINJ.LT.TOL ) ) then
1344 IF( notrot.GE.emptsw )
GO TO 1994
1366 DO 5991 p = 1, n - 1
1367 q = isamax( n-p+1, sva( p ), 1 ) + p - 1
1372 CALL cswap( m, a( 1, p ), 1, a( 1, q ), 1 )
1373 IF( rsvec )
CALL cswap( mvl, v( 1, p ), 1, v( 1, q ), 1 )
1375 IF( sva( p ).NE.zero )
THEN 1377 IF( sva( p )*skl.GT.sfmin )n2 = n2 + 1
1380 IF( sva( n ).NE.zero )
THEN 1382 IF( sva( n )*skl.GT.sfmin )n2 = n2 + 1
1387 IF( lsvec .OR. uctol )
THEN 1390 CALL clascl(
'G',0,0, sva(p), one, m, 1, a(1,p), m, ierr )
1398 temp1 = one / scnrm2( mvl, v( 1, p ), 1 )
1399 CALL csscal( mvl, temp1, v( 1, p ), 1 )
1404 IF( ( ( skl.GT.one ) .AND. ( sva( 1 ).LT.( big / skl ) ) )
1405 $ .OR. ( ( skl.LT.one ) .AND. ( sva( max( n2, 1 ) ) .GT.
1406 $ ( sfmin / skl ) ) ) )
THEN 1408 sva( p ) = skl*sva( p )
1418 rwork( 2 ) =
REAL( n4 )
1421 rwork( 3 ) =
REAL( n2 )
1426 rwork( 4 ) =
REAL( i )
subroutine cgsvj0(JOBV, M, N, A, LDA, D, SVA, MV, V, LDV, EPS, SFMIN, TOL, NSWEEP, WORK, LWORK, INFO)
CGSVJ0 pre-processor for the routine cgesvj.
subroutine classq(N, X, INCX, SCALE, SUMSQ)
CLASSQ updates a sum of squares represented in scaled form.
subroutine crot(N, CX, INCX, CY, INCY, C, S)
CROT applies a plane rotation with real cosine and complex sine to a pair of complex vectors...
subroutine cgesvj(JOBA, JOBU, JOBV, M, N, A, LDA, SVA, MV, V, LDV, CWORK, LWORK, RWORK, LRWORK, INFO)
CGESVJ
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.
subroutine xerbla(SRNAME, INFO)
XERBLA
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 ccopy(N, CX, INCX, CY, INCY)
CCOPY
subroutine cswap(N, CX, INCX, CY, INCY)
CSWAP
subroutine cgsvj1(JOBV, M, N, N1, A, LDA, D, SVA, MV, V, LDV, EPS, SFMIN, TOL, NSWEEP, WORK, LWORK, INFO)
CGSVJ1 pre-processor for the routine cgesvj, applies Jacobi rotations targeting only particular pivot...
subroutine caxpy(N, CA, CX, INCX, CY, INCY)
CAXPY
subroutine csscal(N, SA, CX, INCX)
CSSCAL