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)
subroutine caxpy(n, ca, cx, incx, cy, incy)
CAXPY
subroutine ccopy(n, cx, incx, cy, incy)
CCOPY
subroutine cgesvj(joba, jobu, jobv, m, n, a, lda, sva, mv, v, ldv, cwork, lwork, rwork, lrwork, info)
CGESVJ
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 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 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 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 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 csscal(n, sa, cx, incx)
CSSCAL
subroutine cswap(n, cx, incx, cy, incy)
CSWAP