328 SUBROUTINE dbbcsd( JOBU1, JOBU2, JOBV1T, JOBV2T, TRANS, M, P, Q,
329 $ THETA, PHI, U1, LDU1, U2, LDU2, V1T, LDV1T,
330 $ V2T, LDV2T, B11D, B11E, B12D, B12E, B21D, B21E,
331 $ B22D, B22E, WORK, LWORK, INFO )
338 CHARACTER JOBU1, JOBU2, JOBV1T, JOBV2T, TRANS
339 INTEGER INFO, LDU1, LDU2, LDV1T, LDV2T, LWORK, M, P,
342 DOUBLE PRECISION B11D( * ), B11E( * ), ( * ), B12E( * ),
343 $ B21D( * ), ( * ), B22D( * ), B22E( * ),
344 $ PHI( * ), THETA( * ), WORK( * )
345 DOUBLE PRECISION U1( LDU1, * ), U2( LDU2, * ), V1T( , * ),
353 PARAMETER ( MAXITR = 6 )
354 double precision hundred, meighth, one, ten, zero
355 parameter( hundred = 100.0d0, meighth = -0.125d0,
356 $ one = 1.0d0, ten = 10.0d0, zero = 0.0d0 )
357 DOUBLE PRECISION NEGONE
358 parameter( negone = -1.0d0 )
359 DOUBLE PRECISION PIOVER2
360 parameter( piover2 = 1.57079632679489661923132169163975144210d0 )
363 LOGICAL COLMAJOR, LQUERY, , RESTART12,
364 $ RESTART21, RESTART22, WANTU1, WANTU2, WANTV1T,
366 INTEGER I, IMIN, IMAX,
367 $ IU2SN, IV1TCS, IV1TSN, IV2TCS, IV2TSN, J,
368 $ LWORKMIN, LWORKOPT, MAXIT, MINI
369 DOUBLE PRECISION , B12BULGE, B21BULGE, B22BULGE, DUMMY,
370 $ EPS, MU, NU, R, SIGMA11, SIGMA21,
371 $ TEMP, THETAMAX, THETAMIN, THRESH, , TOLMUL,
372 $ unfl, x1, x2, y1, y2
379 DOUBLE PRECISION DLAMCH
381 EXTERNAL LSAME, DLAMCH
384 INTRINSIC abs, atan2, cos,
max,
min, sin, sqrt
391 lquery = lwork .EQ. -1
392 wantu1 = lsame( jobu1,
'Y' )
393 wantu2 = lsame( jobu2,
'Y' )
394 wantv1t = lsame( jobv1t,
'Y' )
395 wantv2t = lsame( jobv2t,
'Y' )
396 colmajor = .NOT. lsame( trans,
'T' )
400 ELSE IF( p .LT. 0 .OR. p .GT. m )
THEN
402 ELSE IF( q .LT. 0 .OR. q .GT. m )
THEN
404 ELSE IF( q .GT. p .OR. q .GT. m-p .OR. q .GT. m-q )
THEN
406 ELSE IF( wantu1 .AND. ldu1 .LT. p )
THEN
408 ELSE IF( wantu2 .AND. ldu2 .LT. m-p )
THEN
410 ELSE IF( wantv1t .AND. ldv1t .LT. q )
THEN
412 ELSE IF( wantv2t .AND. ldv2t .LT. m-q )
THEN
418 IF( info .EQ. 0 .AND. q .EQ. 0 )
THEN
426 IF( info .EQ. 0 )
THEN
435 lworkopt = iv2tsn + q - 1
438 IF( lwork .LT. lworkmin .AND. .NOT. lquery )
THEN
443 IF( info .NE. 0 )
THEN
444 CALL xerbla(
'DBBCSD', -info )
446 ELSE IF( lquery )
THEN
452 eps = dlamch(
'Epsilon' )
453 unfl = dlamch(
'Safe minimum' )
454 tolmul =
max( ten,
min( hundred, eps**meighth ) )
456 thresh =
max( tol, maxitr*q*q*unfl )
461 IF( theta(i) .LT. thresh )
THEN
463 ELSE IF( theta(i) .GT. piover2-thresh )
THEN
468 IF( phi(i) .LT. thresh )
THEN
470 ELSE IF( phi(i) .GT. piover2-thresh )
THEN
478 DO WHILE( imax .GT. 1 )
479 IF( phi(imax-1) .NE. zero )
THEN
485 IF ( imin .GT. 1 )
THEN
486 DO WHILE( phi(imin-1) .NE. zero )
488 IF ( imin .LE. 1 )
EXIT
499 DO WHILE( imax .GT. 1 )
503 b11d(imin) = cos( theta(imin) )
504 b21d(imin) = -sin( theta(imin) )
505 DO i = imin, imax - 1
506 b11e(i) = -sin( theta(i) ) * sin( phi(i) )
507 b11d(i+1) = cos( theta(i+1) ) * cos( phi(i) )
509 b12e(i) = cos( theta(i+1) ) * sin( phi(i) )
510 b21e(i) = -cos( theta(i) ) * sin( phi(i) )
511 b21d(i+1) = -sin( theta(i+1) ) * cos( phi(i) )
512 b22d(i) = cos( theta(i) ) * cos( phi(i) )
513 b22e(i) = -sin( theta(i+1) ) * sin( phi(i) )
515 b12d(imax) = sin( theta(imax) )
516 b22d(imax) = cos( theta(imax) )
520 IF( iter .GT. maxit )
THEN
523 IF( phi(i) .NE. zero )
529 iter = iter + imax - imin
533 thetamax = theta(imin)
534 thetamin = theta(imin)
536 IF( theta(i) > thetamax )
537 $ thetamax = theta(i)
538 IF( theta(i) < thetamin )
539 $ thetamin = theta(i)
542 IF( thetamax .GT. piover2 - thresh )
THEN
550 ELSE IF( thetamin .LT. thresh )
THEN
562 CALL dlas2( b11d(imax-1), b11e(imax-1), b11d(imax), sigma11,
564 CALL dlas2( b21d(imax-1), b21e(imax-1), b21d(imax), sigma21,
567 IF( sigma11 .LE. sigma21 )
THEN
569 nu = sqrt( one - mu**2 )
570 IF( mu .LT. thresh )
THEN
576 mu = sqrt( 1.0 - nu**2 )
577 IF( nu .LT. thresh )
THEN
586 IF( mu .LE. nu )
THEN
587 CALL dlartgs( b11d(imin), b11e(imin), mu,
588 $ work(iv1tcs+imin-1), work(iv1tsn+imin-1) )
590 CALL dlartgs( b21d(imin), b21e(imin), nu,
591 $ work(iv1tcs+imin-1), work(iv1tsn+imin-1) )
594 temp = work(iv1tcs+imin-1)*b11d(imin) +
595 $ work(iv1tsn+imin-1)*b11e(imin)
596 b11e(imin) = work(iv1tcs+imin-1)*b11e(imin) -
597 $ work(iv1tsn+imin-1)*b11d(imin)
599 b11bulge = work(iv1tsn+imin-1)*b11d(imin+1)
600 b11d(imin+1) = work(iv1tcs+imin-1)*b11d(imin+1)
601 temp = work(iv1tcs+imin-1)*b21d(imin) +
602 $ work(iv1tsn+imin-1)*b21e(imin)
603 b21e(imin) = work(iv1tcs+imin-1)*b21e(imin) -
604 $ work(iv1tsn+imin-1)*b21d(imin)
606 b21bulge = work(iv1tsn+imin-1)*b21d(imin+1)
607 b21d(imin+1) = work(iv1tcs+imin-1)*b21d(imin+1)
611 theta( imin ) = atan2( sqrt( b21d(imin)**2+b21bulge**2 ),
612 $ sqrt( b11d(imin)**2+b11bulge**2 ) )
616 IF( b11d(imin)**2+b11bulge**2 .GT. thresh**2 )
THEN
617 CALL dlartgp( b11bulge, b11d(imin), work(iu1sn+imin-1),
618 $ work(iu1cs+imin-1), r )
619 ELSE IF( mu .LE. nu )
THEN
620 CALL dlartgs( b11e( imin ), b11d( imin + 1 ), mu,
621 $ work(iu1cs+imin-1), work(iu1sn+imin-1) )
623 CALL dlartgs( b12d( imin ), b12e( imin ), nu,
624 $ work(iu1cs+imin-1), work(iu1sn+imin-1) )
626 IF( b21d(imin)**2+b21bulge**2 .GT. thresh**2 )
THEN
627 CALL dlartgp( b21bulge, b21d(imin
629 ELSE IF( nu .LT. mu )
THEN
630 CALL dlartgs( b21e( imin ), b21d( imin + 1 ), nu,
631 $ work(iu2cs+imin-1), work(iu2sn+imin-1) )
633 CALL dlartgs( b22d(imin), b22e(imin), mu,
634 $ work(iu2cs+imin-1), work(iu2sn+imin-1) )
636 work(iu2cs+imin-1) = -work(iu2cs+imin-1)
637 work(iu2sn+imin-1) = -work(iu2sn+imin-1)
639 temp = work(iu1cs+imin-1)*b11e(imin) +
641 b11d(imin+1) = work(iu1cs+imin-1)*b11d(imin+1) -
642 $ work(iu1sn+imin-1)*b11e(imin)
644 IF( imax .GT. imin+1 )
THEN
645 b11bulge = work(iu1sn+imin-1)*b11e(imin+1)
646 b11e(imin+1) = work(iu1cs+imin-1)*b11e(imin+1)
648 temp = work(iu1cs+imin-1)*b12d(imin) +
649 $ work(iu1sn+imin-1)*b12e(imin)
651 $ work(iu1sn+imin-1)*b12d(imin)
653 b12bulge = work(iu1sn+imin-1)*b12d(imin+1)
654 b12d(imin+1) = work(iu1cs+imin
655 temp = work(iu2cs+imin-1)*b21e(imin) +
656 $ work(iu2sn+imin-1)*b21d(imin+1)
657 b21d(imin+1) = work(iu2cs+imin-1)*b21d(imin+1) -
658 $ work(iu2sn+imin-1)*b21e(imin)
660 IF( imax .GT. imin+1 )
THEN
661 b21bulge = work(iu2sn+imin-1)*b21e(imin+1)
662 b21e(imin+1) = work(iu2cs+imin-1)*b21e(imin+1)
664 temp = work(iu2cs+imin-1)*b22d(imin) +
665 $ work(iu2sn+imin-1)*b22e(imin)
667 $ work(iu2sn+imin-1)*b22d(imin)
669 b22bulge = work(iu2sn+imin-1)*b22d(imin+1)
670 b22d(imin+1) = work(iu2cs+imin-1)*b22d(imin+1)
676 DO i = imin+1, imax-1
680 x1 = sin(theta(i-1))*b11e(i-1) + cos(theta(i-1))*b21e(i-1)
681 x2 = sin(theta(i-1))*b11bulge + cos(theta(i-1))*b21bulge
682 y1 = sin(theta(i-1))*b12d(i-1) + cos(theta(i-1))*b22d(i-1)
683 y2 = sin(theta(i-1))*b12bulge + cos(theta(i-1))*b22bulge
685 phi(i-1) = atan2( sqrt(x1**2+x2**2), sqrt(y1**2+y2**2) )
690 restart11 = b11e(i-1)**2 + b11bulge**2 .LE. thresh**2
691 restart21 = b21e(i-1)**2 + b21bulge**2 .LE. thresh**2
692 restart12 = b12d(i-1)**2 + b12bulge**2 .LE. thresh**2
693 restart22 = b22d(i-1)**2 + b22bulge**
699 IF( .NOT. restart11 .AND. .NOT. restart21 )
THEN
700 CALL dlartgp( x2, x1, work(iv1tsn+i-1), work(iv1tcs+i-1),
702 ELSE IF( .NOT. restart11 .AND. restart21 )
THEN
703 CALL dlartgp( b11bulge, b11e(i-1), work(iv1tsn+i-1),
704 $ work(iv1tcs+i-1), r )
705 ELSE IF( restart11 .AND. .NOT. restart21 )
THEN
706 CALL dlartgp( b21bulge, b21e(i-1), work(iv1tsn+i-1),
707 $ work(iv1tcs+i-1), r )
708 ELSE IF( mu .LE. nu )
THEN
709 CALL dlartgs( b11d(i), b11e(i), mu, work(iv1tcs+i-1),
712 CALL dlartgs( b21d(i), b21e(i), nu, work(iv1tcs+i-1),
715 work(iv1tcs+i-1) = -work(iv1tcs+i-1)
716 work(iv1tsn+i-1) = -work(iv1tsn+i-1)
717 IF( .NOT. restart12 .AND. .NOT. restart22 )
THEN
718 CALL dlartgp( y2, y1, work(iv2tsn+i-1-1),
719 $ work(iv2tcs+i-1-1), r )
720 ELSE IF( .NOT. restart12 .AND. restart22 )
THEN
721 CALL dlartgp( b12bulge, b12d(i-1), work(iv2tsn+i-1-1),
722 $ work(iv2tcs+i-1-1), r )
723 ELSE IF( restart12 .AND. .NOT. restart22
THEN
724 CALL dlartgp( b22bulge, b22d(i-1), work(iv2tsn+i-1-1),
725 $ work(iv2tcs+i-1-1), r )
726 ELSE IF( nu .LT. mu )
THEN
728 $ work(iv2tsn+i-1-1) )
730 CALL dlartgs( b22e(i-1), b22d(i), mu, work(iv2tcs+i-1-1),
734 temp = work(iv1tcs+i-1)*b11d(i) + work(iv1tsn+i-1)*b11e(i)
735 b11e(i) = work(iv1tcs+i-1)*b11e(i) -
736 $ work(iv1tsn+i-1)*b11d(i)
738 b11bulge = work(iv1tsn+i-1)*b11d(i+1)
740 temp = work(iv1tcs+i-1)*b21d(i) + work(iv1tsn+i-1)*b21e(i)
741 b21e(i) = work(iv1tcs+i-1)*b21e(i) -
742 $ work(iv1tsn+i-1)*b21d(i)
744 b21bulge = work(iv1tsn+i-1)*b21d(i+1)
745 b21d(i+1) = work(iv1tcs+i-1)*b21d(i+1)
746 temp = work(iv2tcs+i-1-1)*b12e(i-1) +
747 $ work(iv2tsn+i-1-1)*b12d(i)
748 b12d(i) = work(iv2tcs+i-1-1)*b12d(i) -
749 $ work(iv2tsn+i-1-1)*b12e(i-1)
751 b12bulge = work(iv2tsn+i-1-1)*b12e(i)
752 b12e(i) = work(iv2tcs+i-1-1)*b12e(i)
753 temp = work(iv2tcs+i-
754 $ work(iv2tsn+i-1-1)*b22d(i)
755 b22d(i) = work(iv2tcs+i-1-1)*b22d(i) -
756 $ work(iv2tsn+i-1-1)*b22e(i-1)
758 b22bulge = work(iv2tsn+i-1-1)*b22e(i)
759 b22e(i) = work(iv2tcs+i-1-1)*b22e(i)
763 x1 = cos(phi(i-1))*b11d(i) + sin(phi(i-1))*b12e(i-1)
764 x2 = cos(phi(i-1))*b11bulge + sin(phi(i-1))*b12bulge
765 y1 = cos(phi(i-1))*b21d(i) + sin(phi(i-1))*b22e(i-1)
766 y2 = cos(phi(i-1))*b21bulge + sin(phi(i-1))*b22bulge
773 restart11 = b11d(i)**2 + b11bulge**2 .LE. thresh**2
774 restart12 = b12e(i-1)**2 + b12bulge**2 .LE. thresh**2
775 restart21 = b21d(i)**2 + b21bulge
776 restart22 = b22e(i-1)**2 + b22bulge**2 .LE. thresh**2
782 IF( .NOT. restart11 .AND. .NOT. restart12 )
THEN
783 CALL dlartgp( x2, x1, work(iu1sn+i-1), work(iu1cs+i-1),
785 ELSE IF( .NOT. restart11 .AND. restart12 )
THEN
786 CALL dlartgp( b11bulge, b11d(i), work(iu1sn+i-1),
787 $ work(iu1cs+i-1), r )
788 ELSE IF( restart11 .AND. .NOT. restart12 )
THEN
789 CALL dlartgp( b12bulge, b12e(i-1), work(iu1sn+i-1),
790 $ work(iu1cs+i-1), r )
791 ELSE IF( mu .LE. nu )
THEN
792 CALL dlartgs( b11e(i), b11d(i+1), mu, work(iu1cs+i-1),
795 CALL dlartgs( b12d(i), b12e(i), nu, work(iu1cs+i-1),
798 IF( .NOT. restart21 .AND. .NOT. restart22 )
THEN
799 CALL dlartgp( y2, y1, work(iu2sn+i-1), work(iu2cs+i-1),
801 ELSE IF( .NOT. restart21 .AND. restart22 )
THEN
802 CALL dlartgp( b21bulge, b21d(i), work(iu2sn+i-1),
803 $ work(iu2cs+i-1), r )
804 ELSE IF( restart21 .AND. .NOT. restart22 )
THEN
805 CALL dlartgp( b22bulge, b22e(i-1), work(iu2sn+i-1),
806 $ work(iu2cs+i-1), r )
807 ELSE IF( nu .LT. mu )
THEN
808 CALL dlartgs( b21e(i), b21e(i+1), nu, work(iu2cs+i-1),
811 CALL dlartgs( b22d(i), b22e(i), mu, work(iu2cs+i-1),
814 work(iu2cs+i-1) = -work(iu2cs+i-1)
815 work(iu2sn+i-1) = -work(iu2sn+i-1)
817 temp = work(iu1cs+i-1)*b11e(i) + work(iu1sn+i-1)*b11d(i+1)
818 b11d(i+1) = work(iu1cs+i-1)*b11d(i+1) -
819 $ work(iu1sn+i-1)*b11e(i)
821 IF( i .LT. imax - 1 )
THEN
822 b11bulge = work(iu1sn+i-1)*b11e(i+1)
823 b11e(i+1) = work(iu1cs+i-1)*b11e(i+1)
825 temp = work(iu2cs+i-1)*b21e(i) + work(iu2sn+i-1)*b21d(i+1)
826 b21d(i+1) = work(iu2cs+i-1)*b21d(i+1) -
827 $ work(iu2sn+i-1)*b21e(i)
829 IF( i .LT. imax - 1 )
THEN
830 b21bulge = work(iu2sn+i-1)*b21e(i+1)
831 b21e(i+1) = work(iu2cs+i-1)*b21e(i+1)
833 temp = work(iu1cs+i-1)*b12d(i) + work(iu1sn+i-1)*b12e(i)
834 b12e(i) = work(iu1cs+i-1)*b12e(i) - work(iu1sn+i-1)*b12d(i)
836 b12bulge = work(iu1sn+i-1)*b12d(i+1)
837 b12d(i+1) = work(iu1cs+i-1)*b12d(i+1)
838 temp = work(iu2cs+i-1)*b22d(i) + work(iu2sn+i-1)*b22e(i)
839 b22e(i) = work(iu2cs+i-1)*b22e(i) - work(iu2sn+i-1)*b22d(i)
841 b22bulge = work(iu2sn+i-1)*b22d(i+1)
842 b22d(i+1) = work(iu2cs+i-1)*b22d(i+1)
848 x1 = sin(theta(imax-1))*b11e(imax-1) +
849 $ cos(theta(imax-1))*b21e(imax-1)
850 y1 = sin(theta(imax-1))*b12d(imax-1) +
851 $ cos(theta(imax-1))*b22d(imax-1)
852 y2 = sin(theta(imax-1))*b12bulge + cos(theta(imax-1))*b22bulge
854 phi(imax-1) = atan2( abs(x1), sqrt(y1**2+y2**2) )
858 restart12 = b12d(imax-1)**2 + b12bulge**2 .LE. thresh**2
859 restart22 = b22d(imax-1)**2 + b22bulge**2 .LE. thresh**2
861 IF( .NOT. restart12 .AND. .NOT. restart22 )
THEN
862 CALL dlartgp( y2, y1, work(iv2tsn+imax-1-1),
863 $ work(iv2tcs+imax-1-1), r )
864 ELSE IF( .NOT. restart12 .AND. restart22 )
THEN
865 CALL dlartgp( b12bulge, b12d(imax-1), work(iv2tsn+imax-1-1),
866 $ work(iv2tcs+imax-1-1), r )
867 ELSE IF( restart12 .AND. .NOT. restart22 )
THEN
868 CALL dlartgp( b22bulge, b22d(imax-1), work(iv2tsn+imax-1-1),
869 $ work(iv2tcs+imax-1-1), r )
870 ELSE IF( nu .LT. mu )
THEN
871 CALL dlartgs( b12e(imax-1), b12d(imax), nu,
872 $ work(iv2tcs+imax-1-1), work(iv2tsn+imax-1-1) )
874 CALL dlartgs( b22e(imax-1), b22d(imax), mu,
875 $ work(iv2tcs+imax-1-1), work(iv2tsn+imax-1-1) )
878 temp = work(iv2tcs+imax-1-1)*b12e(imax-1) +
879 $ work(iv2tsn+imax-1-1)*b12d(imax)
880 b12d(imax) = work(iv2tcs+imax-1-1)*b12d(imax) -
881 $ work(iv2tsn+imax-1-1)*b12e(imax-1)
883 temp = work(iv2tcs+imax-1-1)*b22e(imax-1) +
884 $ work(iv2tsn+imax-1-1)*b22d(imax)
885 b22d(imax) = work(iv2tcs+imax-1-1)*b22d(imax) -
886 $ work(iv2tsn+imax-1-1)*b22e(imax-1)
893 CALL dlasr(
'R',
'V',
'F', p, imax-imin+1,
894 $ work(iu1cs+imin-1), work(iu1sn+imin-1),
897 CALL dlasr(
'L', 'v
', 'f
', IMAX-IMIN+1, P,
898 $ WORK(IU1CS+IMIN-1), WORK(IU1SN+IMIN-1),
904 CALL DLASR( 'r
', 'v
', 'f
', M-P, IMAX-IMIN+1,
905 $ WORK(IU2CS+IMIN-1), WORK(IU2SN+IMIN-1),
908 CALL DLASR( 'l
', 'v
', 'f
', IMAX-IMIN+1, M-P,
909 $ WORK(IU2CS+IMIN-1), WORK(IU2SN+IMIN-1),
915 CALL DLASR( 'l
', 'v
', 'f
', IMAX-IMIN+1, Q,
916 $ WORK(IV1TCS+IMIN-1), WORK(IV1TSN+IMIN-1),
917 $ V1T(IMIN,1), LDV1T )
919 CALL DLASR( 'r
', 'v
', 'f
', Q, IMAX-IMIN+1,
920 $ WORK(IV1TCS+IMIN-1), WORK(IV1TSN+IMIN-1),
921 $ V1T(1,IMIN), LDV1T )
926 CALL DLASR( 'l
', 'v
', 'f
', IMAX-IMIN+1, M-Q,
927 $ WORK(IV2TCS+IMIN-1), WORK(IV2TSN+IMIN-1),
928 $ V2T(IMIN,1), LDV2T )
930 CALL DLASR( 'r
', 'v
', 'f
', M-Q, IMAX-IMIN+1,
931 $ WORK(IV2TCS+IMIN-1), WORK(IV2TSN+IMIN-1),
932 $ V2T(1,IMIN), LDV2T )
938.GT.
IF( B11E(IMAX-1)+B21E(IMAX-1) 0 ) THEN
939 B11D(IMAX) = -B11D(IMAX)
940 B21D(IMAX) = -B21D(IMAX)
943 CALL DSCAL( Q, NEGONE, V1T(IMAX,1), LDV1T )
945 CALL DSCAL( Q, NEGONE, V1T(1,IMAX), 1 )
952 X1 = COS(PHI(IMAX-1))*B11D(IMAX) +
953 $ SIN(PHI(IMAX-1))*B12E(IMAX-1)
954 Y1 = COS(PHI(IMAX-1))*B21D(IMAX) +
955 $ SIN(PHI(IMAX-1))*B22E(IMAX-1)
957 THETA(IMAX) = ATAN2( ABS(Y1), ABS(X1) )
962.LT.
IF( B11D(IMAX)+B12E(IMAX-1) 0 ) THEN
963 B12D(IMAX) = -B12D(IMAX)
966 CALL DSCAL( P, NEGONE, U1(1,IMAX), 1 )
968 CALL DSCAL( P, NEGONE, U1(IMAX,1), LDU1 )
972.GT.
IF( B21D(IMAX)+B22E(IMAX-1) 0 ) THEN
973 B22D(IMAX) = -B22D(IMAX)
976 CALL DSCAL( M-P, NEGONE, U2(1,IMAX), 1 )
978 CALL DSCAL( M-P, NEGONE, U2(IMAX,1), LDU2 )
985.LT.
IF( B12D(IMAX)+B22D(IMAX) 0 ) THEN
988 CALL DSCAL( M-Q, NEGONE, V2T(IMAX,1), LDV2T )
990 CALL DSCAL( M-Q, NEGONE, V2T(1,IMAX), 1 )
998.LT.
IF( THETA(I) THRESH ) THEN
1000.GT.
ELSE IF( THETA(I) PIOVER2-THRESH ) THEN
1005.LT.
IF( PHI(I) THRESH ) THEN
1007.GT.
ELSE IF( PHI(I) PIOVER2-THRESH ) THEN
1014.GT.
IF (IMAX 1) THEN
1015.EQ.
DO WHILE( PHI(IMAX-1) ZERO )
1017.LE.
IF (IMAX 1) EXIT
1020.GT.
IF( IMIN IMAX - 1 )
1022.GT.
IF (IMIN 1) THEN
1023.NE.
DO WHILE (PHI(IMIN-1) ZERO)
1025.LE.
IF (IMIN 1) EXIT
1040.LT.
IF( THETA(J) THETAMIN ) THEN
1046.NE.
IF( MINI I ) THEN
1047 THETA(MINI) = THETA(I)
1051 $ CALL DSWAP( P, U1(1,I), 1, U1(1,MINI), 1 )
1053 $ CALL DSWAP( M-P, U2(1,I), 1, U2(1,MINI), 1 )
1055 $ CALL DSWAP( Q, V1T(I,1), LDV1T, V1T(MINI,1), LDV1T )
1057 $ CALL DSWAP( M-Q, V2T(I,1), LDV2T, V2T(MINI,1),
1061 $ CALL DSWAP( P, U1(I,1), LDU1, U1(MINI,1), LDU1 )
1063 $ CALL DSWAP( M-P, U2(I,1), LDU2, U2(MINI,1), LDU2 )
1065 $ CALL DSWAP( Q, V1T(1,I), 1, V1T(1,MINI), 1 )
1067 $ CALL DSWAP( M-Q, V2T(1,I), 1, V2T(1,MINI), 1 )