349 SUBROUTINE cgesvj( 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 A( lda, * ), V( ldv, * ), CWORK( lwork )
363 REAL RWORK( lrwork ), SVA( n )
370 parameter( zero = 0.0e0, half = 0.5e0, one = 1.0e0)
372 parameter( czero = (0.0e0, 0.0e0), cone = (1.0e0, 0.0e0) )
374 parameter( nsweep = 30 )
378 REAL 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,
REAL, SIGN, SQRT
397 EXTERNAL cdotc, scnrm2
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(
'CGESVJ', -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(
REAL( M ) )
488 epsln = slamch(
'Epsilon' )
489 rooteps = sqrt( epsln )
490 sfmin = slamch(
'SafeMinimum' )
491 rootsfmin = sqrt( sfmin )
492 small = sfmin / epsln
495 rootbig = one / rootsfmin
497 bigtheta = one / rooteps
500 roottol = sqrt( tol )
502 IF(
REAL( m )*EPSLN.GE.ONE ) then
504 CALL xerbla(
'CGESVJ', -info )
512 CALL claset(
'A', mvl, n, czero, cone, v, ldv )
513 ELSE IF( applv )
THEN 516 rsvec = rsvec .OR. applv
527 skl = one / sqrt(
REAL( m )*
REAL( N ) )
536 CALL classq( m-p+1, a( p, p ), 1, aapp, aaqq )
537 IF( aapp.GT.big )
THEN 539 CALL xerbla(
'CGESVJ', -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 classq( p, a( 1, p ), 1, aapp, aaqq )
562 IF( aapp.GT.big )
THEN 564 CALL xerbla(
'CGESVJ', -info )
568 IF( ( aapp.LT.( big / aaqq ) ) .AND. noscale )
THEN 572 sva( p ) = aapp*( aaqq*skl )
576 sva( q ) = sva( q )*skl
586 CALL classq( m, a( 1, p ), 1, aapp, aaqq )
587 IF( aapp.GT.big )
THEN 589 CALL xerbla(
'CGESVJ', -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 claset(
'G', m, n, czero, cone, a, lda )
637 IF( lsvec )
CALL clascl(
'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 /
REAL( 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(
REAL( 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(
REAL( N ) )*aapp ) )
680 IF( temp1.NE.one )
THEN 681 CALL slascl(
'G', 0, 0, one, temp1, n, 1, sva, n, ierr )
684 IF( skl.NE.one )
THEN 685 CALL clascl( 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 cgsvj0( 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 cgsvj0( 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 cgsvj1( 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 cgsvj0( 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 cgsvj0( jobv, m, n4, a, lda, cwork, sva, mvl, v, ldv,
774 $ epsln, sfmin, tol, 1, cwork( n+1 ), lwork-n,
777 CALL cgsvj1( 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 cgsvj0( jobv, n4, n4, a, lda, cwork, sva, mvl, v, ldv,
786 $ epsln, sfmin, tol, 2, cwork( n+1 ), lwork-n,
789 CALL cgsvj0( 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 cgsvj1( jobv, n2, n2, n4, a, lda, cwork, sva, mvl, v,
795 $ ldv, epsln, sfmin, tol, 1, cwork( n+1 ),
798 CALL cgsvj0( 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 = isamax( n-p+1, sva( p ), 1 ) + p - 1
839 CALL cswap( m, a( 1, p ), 1, a( 1, q ), 1 )
840 IF( rsvec )
CALL cswap( mvl, v( 1, p ), 1,
864 IF( ( sva( p ).LT.rootbig ) .AND.
865 $ ( sva( p ).GT.rootsfmin ) )
THEN 866 sva( p ) = scnrm2( m, a( 1, p ), 1 )
870 CALL classq( 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 = ( cdotc( m, a( 1, p ), 1,
893 $ a( 1, q ), 1 ) / aaqq ) / aapp
895 CALL ccopy( m, a( 1, p ), 1,
897 CALL clascl(
'G', 0, 0, aapp, one,
898 $ m, 1, cwork(n+1), lda, ierr )
899 aapq = cdotc( 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 = ( cdotc( m, a( 1, p ), 1,
906 $ a( 1, q ), 1 ) / aapp ) / aaqq
908 CALL ccopy( m, a( 1, q ), 1,
910 CALL clascl(
'G', 0, 0, aaqq,
912 $ cwork(n+1), lda, ierr )
913 aapq = cdotc( m, a(1, p ), 1,
914 $ cwork(n+1), 1 ) / aapp
920 mxaapq = max( mxaapq, -aapq1 )
924 IF( abs( aapq1 ).GT.tol )
THEN 925 ompq = aapq / abs(aapq)
940 theta = -half*abs( aqoap-apoaq )/aapq1
942 IF( abs( theta ).GT.bigtheta )
THEN 947 CALL crot( m, a(1,p), 1, a(1,q), 1,
948 $ cs, conjg(ompq)*t )
950 CALL crot( mvl, v(1,p), 1,
951 $ v(1,q), 1, cs, conjg(ompq)*t )
954 sva( q ) = aaqq*sqrt( max( zero,
955 $ one+t*apoaq*aapq1 ) )
956 aapp = aapp*sqrt( max( zero,
957 $ one-t*aqoap*aapq1 ) )
958 mxsinj = max( mxsinj, abs( t ) )
964 thsign = -sign( one, aapq1 )
965 t = one / ( theta+thsign*
966 $ sqrt( one+theta*theta ) )
967 cs = sqrt( one / ( one+t*t ) )
970 mxsinj = max( mxsinj, abs( sn ) )
971 sva( q ) = aaqq*sqrt( max( zero,
972 $ one+t*apoaq*aapq1 ) )
973 aapp = aapp*sqrt( max( zero,
974 $ one-t*aqoap*aapq1 ) )
976 CALL crot( m, a(1,p), 1, a(1,q), 1,
977 $ cs, conjg(ompq)*sn )
979 CALL crot( mvl, v(1,p), 1,
980 $ v(1,q), 1, cs, conjg(ompq)*sn )
983 cwork(p) = -cwork(q) * ompq
987 CALL ccopy( m, a( 1, p ), 1,
989 CALL clascl(
'G', 0, 0, aapp, one, m,
990 $ 1, cwork(n+1), lda,
992 CALL clascl(
'G', 0, 0, aaqq, one, m,
993 $ 1, a( 1, q ), lda, ierr )
994 CALL caxpy( m, -aapq, cwork(n+1), 1,
996 CALL clascl(
'G', 0, 0, one, aaqq, m,
997 $ 1, a( 1, q ), lda, ierr )
998 sva( q ) = aaqq*sqrt( max( zero,
999 $ one-aapq1*aapq1 ) )
1000 mxsinj = max( mxsinj, sfmin )
1007 IF( ( sva( q ) / aaqq )**2.LE.rooteps )
1009 IF( ( aaqq.LT.rootbig ) .AND.
1010 $ ( aaqq.GT.rootsfmin ) )
THEN 1011 sva( q ) = scnrm2( m, a( 1, q ), 1 )
1015 CALL classq( m, a( 1, q ), 1, t,
1017 sva( q ) = t*sqrt( aaqq )
1020 IF( ( aapp / aapp0 ).LE.rooteps )
THEN 1021 IF( ( aapp.LT.rootbig ) .AND.
1022 $ ( aapp.GT.rootsfmin ) )
THEN 1023 aapp = scnrm2( m, a( 1, p ), 1 )
1027 CALL classq( m, a( 1, p ), 1, t,
1029 aapp = t*sqrt( aapp )
1036 IF( ir1.EQ.0 )notrot = notrot + 1
1038 pskipped = pskipped + 1
1042 IF( ir1.EQ.0 )notrot = notrot + 1
1043 pskipped = pskipped + 1
1046 IF( ( i.LE.swband ) .AND.
1047 $ ( pskipped.GT.rowskip ) )
THEN 1048 IF( ir1.EQ.0 )aapp = -aapp
1063 IF( ( ir1.EQ.0 ) .AND. ( aapp.EQ.zero ) )
1064 $ notrot = notrot + min( igl+kbl-1, n ) - p
1075 igl = ( ibr-1 )*kbl + 1
1077 DO 2010 jbc = ibr + 1, nbl
1079 jgl = ( jbc-1 )*kbl + 1
1084 DO 2100 p = igl, min( igl+kbl-1, n )
1087 IF( aapp.GT.zero )
THEN 1091 DO 2200 q = jgl, min( jgl+kbl-1, n )
1094 IF( aaqq.GT.zero )
THEN 1101 IF( aaqq.GE.one )
THEN 1102 IF( aapp.GE.aaqq )
THEN 1103 rotok = ( small*aapp ).LE.aaqq
1105 rotok = ( small*aaqq ).LE.aapp
1107 IF( aapp.LT.( big / aaqq ) )
THEN 1108 aapq = ( cdotc( m, a( 1, p ), 1,
1109 $ a( 1, q ), 1 ) / aaqq ) / aapp
1111 CALL ccopy( m, a( 1, p ), 1,
1113 CALL clascl(
'G', 0, 0, aapp,
1115 $ cwork(n+1), lda, ierr )
1116 aapq = cdotc( m, cwork(n+1), 1,
1117 $ a( 1, q ), 1 ) / aaqq
1120 IF( aapp.GE.aaqq )
THEN 1121 rotok = aapp.LE.( aaqq / small )
1123 rotok = aaqq.LE.( aapp / small )
1125 IF( aapp.GT.( small / aaqq ) )
THEN 1126 aapq = ( cdotc( m, a( 1, p ), 1,
1127 $ a( 1, q ), 1 ) / max(aaqq,aapp) )
1130 CALL ccopy( m, a( 1, q ), 1,
1132 CALL clascl(
'G', 0, 0, aaqq,
1134 $ cwork(n+1), lda, ierr )
1135 aapq = cdotc( m, a( 1, p ), 1,
1136 $ cwork(n+1), 1 ) / aapp
1142 mxaapq = max( mxaapq, -aapq1 )
1146 IF( abs( aapq1 ).GT.tol )
THEN 1147 ompq = aapq / abs(aapq)
1157 theta = -half*abs( aqoap-apoaq )/ aapq1
1158 IF( aaqq.GT.aapp0 )theta = -theta
1160 IF( abs( theta ).GT.bigtheta )
THEN 1163 CALL crot( m, a(1,p), 1, a(1,q), 1,
1164 $ cs, conjg(ompq)*t )
1166 CALL crot( mvl, v(1,p), 1,
1167 $ v(1,q), 1, cs, conjg(ompq)*t )
1169 sva( q ) = aaqq*sqrt( max( zero,
1170 $ one+t*apoaq*aapq1 ) )
1171 aapp = aapp*sqrt( max( zero,
1172 $ one-t*aqoap*aapq1 ) )
1173 mxsinj = max( mxsinj, abs( t ) )
1178 thsign = -sign( one, aapq1 )
1179 IF( aaqq.GT.aapp0 )thsign = -thsign
1180 t = one / ( theta+thsign*
1181 $ sqrt( one+theta*theta ) )
1182 cs = sqrt( one / ( one+t*t ) )
1184 mxsinj = max( mxsinj, abs( sn ) )
1185 sva( q ) = aaqq*sqrt( max( zero,
1186 $ one+t*apoaq*aapq1 ) )
1187 aapp = aapp*sqrt( max( zero,
1188 $ one-t*aqoap*aapq1 ) )
1190 CALL crot( m, a(1,p), 1, a(1,q), 1,
1191 $ cs, conjg(ompq)*sn )
1193 CALL crot( mvl, v(1,p), 1,
1194 $ v(1,q), 1, cs, conjg(ompq)*sn )
1197 cwork(p) = -cwork(q) * ompq
1201 IF( aapp.GT.aaqq )
THEN 1202 CALL ccopy( m, a( 1, p ), 1,
1204 CALL clascl(
'G', 0, 0, aapp, one,
1205 $ m, 1, cwork(n+1),lda,
1207 CALL clascl(
'G', 0, 0, aaqq, one,
1208 $ m, 1, a( 1, q ), lda,
1210 CALL caxpy( m, -aapq, cwork(n+1),
1212 CALL clascl(
'G', 0, 0, one, aaqq,
1213 $ m, 1, a( 1, q ), lda,
1215 sva( q ) = aaqq*sqrt( max( zero,
1216 $ one-aapq1*aapq1 ) )
1217 mxsinj = max( mxsinj, sfmin )
1219 CALL ccopy( m, a( 1, q ), 1,
1221 CALL clascl(
'G', 0, 0, aaqq, one,
1222 $ m, 1, cwork(n+1),lda,
1224 CALL clascl(
'G', 0, 0, aapp, one,
1225 $ m, 1, a( 1, p ), lda,
1227 CALL caxpy( m, -conjg(aapq),
1228 $ cwork(n+1), 1, a( 1, p ), 1 )
1229 CALL clascl(
'G', 0, 0, one, aapp,
1230 $ m, 1, a( 1, p ), lda,
1232 sva( p ) = aapp*sqrt( max( zero,
1233 $ one-aapq1*aapq1 ) )
1234 mxsinj = max( mxsinj, sfmin )
1241 IF( ( sva( q ) / aaqq )**2.LE.rooteps )
1243 IF( ( aaqq.LT.rootbig ) .AND.
1244 $ ( aaqq.GT.rootsfmin ) )
THEN 1245 sva( q ) = scnrm2( m, a( 1, q ), 1)
1249 CALL classq( m, a( 1, q ), 1, t,
1251 sva( q ) = t*sqrt( aaqq )
1254 IF( ( aapp / aapp0 )**2.LE.rooteps )
THEN 1255 IF( ( aapp.LT.rootbig ) .AND.
1256 $ ( aapp.GT.rootsfmin ) )
THEN 1257 aapp = scnrm2( m, a( 1, p ), 1 )
1261 CALL classq( m, a( 1, p ), 1, t,
1263 aapp = t*sqrt( aapp )
1271 pskipped = pskipped + 1
1276 pskipped = pskipped + 1
1280 IF( ( i.LE.swband ) .AND. ( ijblsk.GE.blskip ) )
1286 IF( ( i.LE.swband ) .AND.
1287 $ ( pskipped.GT.rowskip ) )
THEN 1301 IF( aapp.EQ.zero )notrot = notrot +
1302 $ min( jgl+kbl-1, n ) - jgl + 1
1303 IF( aapp.LT.zero )notrot = 0
1313 DO 2012 p = igl, min( igl+kbl-1, n )
1314 sva( p ) = abs( sva( p ) )
1321 IF( ( sva( n ).LT.rootbig ) .AND. ( sva( n ).GT.rootsfmin ) )
1323 sva( n ) = scnrm2( m, a( 1, n ), 1 )
1327 CALL classq( m, a( 1, n ), 1, t, aapp )
1328 sva( n ) = t*sqrt( aapp )
1333 IF( ( i.LT.swband ) .AND. ( ( mxaapq.LE.roottol ) .OR.
1334 $ ( iswrot.LE.n ) ) )swband = i
1336 IF( ( i.GT.swband+1 ) .AND. ( mxaapq.LT.sqrt(
REAL( N ) )*
1337 $ tol ) .AND. (
REAL( n )*MXAAPQ*MXSINJ.LT.TOL ) ) then
1341 IF( notrot.GE.emptsw )
GO TO 1994
1363 DO 5991 p = 1, n - 1
1364 q = isamax( n-p+1, sva( p ), 1 ) + p - 1
1369 CALL cswap( m, a( 1, p ), 1, a( 1, q ), 1 )
1370 IF( rsvec )
CALL cswap( mvl, v( 1, p ), 1, v( 1, q ), 1 )
1372 IF( sva( p ).NE.zero )
THEN 1374 IF( sva( p )*skl.GT.sfmin )n2 = n2 + 1
1377 IF( sva( n ).NE.zero )
THEN 1379 IF( sva( n )*skl.GT.sfmin )n2 = n2 + 1
1384 IF( lsvec .OR. uctol )
THEN 1387 CALL clascl(
'G',0,0, sva(p), one, m, 1, a(1,p), m, ierr )
1395 temp1 = one / scnrm2( mvl, v( 1, p ), 1 )
1396 CALL csscal( mvl, temp1, v( 1, p ), 1 )
1401 IF( ( ( skl.GT.one ) .AND. ( sva( 1 ).LT.( big / skl ) ) )
1402 $ .OR. ( ( skl.LT.one ) .AND. ( sva( max( n2, 1 ) ) .GT.
1403 $ ( sfmin / skl ) ) ) )
THEN 1405 sva( p ) = skl*sva( p )
1415 rwork( 2 ) =
REAL( n4 )
1418 rwork( 3 ) =
REAL( n2 )
1423 rwork( 4 ) =
REAL( i )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine csscal(N, SA, CX, INCX)
CSSCAL
subroutine cgesvj(JOBA, JOBU, JOBV, M, N, A, LDA, SVA, MV, V, LDV, CWORK, LWORK, RWORK, LRWORK, INFO)
CGESVJ
subroutine ccopy(N, CX, INCX, CY, INCY)
CCOPY
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 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 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 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 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 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 cswap(N, CX, INCX, CY, INCY)
CSWAP
subroutine caxpy(N, CA, CX, INCX, CY, INCY)
CAXPY