328 SUBROUTINE cbbcsd( 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, RWORK, LRWORK, INFO )
338 CHARACTER JOBU1, JOBU2, JOBV1T, JOBV2T, TRANS
339 INTEGER INFO, LDU1, LDU2, LDV1T, LDV2T, LRWORK, M, P, Q
342 REAL B11D( * ), B11E( * ), B12D( * ), B12E( * ),
343 $ B21D( * ), B21E( * ), B22D( * ), B22E( * ),
344 $ PHI( * ), THETA( * ), RWORK( * )
345 COMPLEX U1( LDU1, * ), U2( LDU2, * ), V1T( LDV1T, * ),
353 PARAMETER ( MAXITR = 6 )
354 real hundred, meighth, one, ten, zero
355 parameter( hundred = 100.0e0, meighth = -0.125e0,
356 $ one = 1.0e0, ten = 10.0e0, zero = 0.0e0 )
357 COMPLEX NEGONECOMPLEX
358 parameter( negonecomplex = (-1.0e0,0.0e0) )
360 parameter( piover2 = 1.57079632679489661923132169163975144210e0 )
363 LOGICAL COLMAJOR, LQUERY, RESTART11
366INTEGER I, IMIN, IMAX, ITER, IU1CS, IU1SN, IU2CS,
367 $ , IV1TCS, IV1TSN, IV2TCS, IV2TSN, J,
368 $ LRWORKMIN, LRWORKOPT, MAXIT, MINI
369 REAL B11BULGE, B12BULGE, , B22BULGE, DUMMY,
370 $ EPS, MU, NU, R, SIGMA11, SIGMA21,
371 $ TEMP, THETAMAX, THETAMIN, THRESH, TOL, TOLMUL,
372 $ unfl, x1, x2, y1, y2
381 EXTERNAL LSAME, SLAMCH
384 INTRINSIC abs, atan2, cos,
max,
min, sin, sqrt
391 lquery = lrwork .EQ. -1
392 wantu1 = lsame( jobu1,
'Y' )
393 wantu2 = lsame( jobu2,
'Y' )
394 wantv1t = lsame( jobv1t,
'Y' )
395 wantv2t = lsame( jobv2t, 'y
' )
396.NOT.
COLMAJOR = LSAME( TRANS, 't
' )
400.LT..OR..GT.
ELSE IF( P 0 P M ) THEN
402.LT..OR..GT.
ELSE IF( Q 0 Q M ) THEN
404.GT..OR..GT..OR..GT.
ELSE IF( Q P Q M-P Q M-Q ) THEN
406.AND..LT.
ELSE IF( WANTU1 LDU1 P ) THEN
408.AND..LT.
ELSE IF( WANTU2 LDU2 M-P ) THEN
410.AND..LT.
ELSE IF( WANTV1T LDV1T Q ) THEN
412.AND..LT.
ELSE IF( WANTV2T LDV2T M-Q ) THEN
418.EQ..AND..EQ.
IF( INFO 0 Q 0 ) THEN
426.EQ.
IF( INFO 0 ) THEN
435 LRWORKOPT = IV2TSN + Q - 1
436 LRWORKMIN = LRWORKOPT
438.LT..AND..NOT.
IF( LRWORK LRWORKMIN LQUERY ) THEN
443.NE.
IF( INFO 0 ) THEN
444 CALL XERBLA( 'cbbcsd', -INFO )
446 ELSE IF( LQUERY ) THEN
452 EPS = SLAMCH( 'epsilon
' )
453 UNFL = SLAMCH( 'safe minimum
' )
454 TOLMUL = MAX( TEN, MIN( HUNDRED, EPS**MEIGHTH ) )
456 THRESH = MAX( TOL, MAXITR*Q*Q*UNFL )
461.LT.
IF( THETA(I) THRESH ) THEN
463.GT.
ELSE IF( THETA(I) PIOVER2-THRESH ) THEN
468.LT.
IF( PHI(I) THRESH ) THEN
470.GT.
ELSE IF( PHI(I) PIOVER2-THRESH ) THEN
478.GT.
DO WHILE( IMAX 1 )
479.NE.
IF( PHI(IMAX-1) ZERO ) THEN
485.GT.
IF ( IMIN 1 ) THEN
486.NE.
DO WHILE( PHI(IMIN-1) ZERO )
488.LE.
IF ( IMIN 1 ) EXIT
499.GT.
DO WHILE( IMAX 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) )
508 B12D(I) = SIN( THETA(I) ) * 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.GT.
IF( ITER MAXIT ) THEN
523.NE.
IF( PHI(I) 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.GT.
IF( THETAMAX PIOVER2 - THRESH ) THEN
550.LT.
ELSE IF( THETAMIN THRESH ) THEN
562 CALL SLAS2( B11D(IMAX-1), B11E(IMAX-1), B11D(IMAX), SIGMA11,
564 CALL SLAS2( B21D(IMAX-1), B21E(IMAX-1), B21D(IMAX), SIGMA21,
567.LE.
IF( SIGMA11 SIGMA21 ) THEN
569 NU = SQRT( ONE - MU**2 )
570.LT.
IF( MU THRESH ) THEN
576 MU = SQRT( 1.0 - NU**2 )
577.LT.
IF( NU THRESH ) THEN
587 CALL SLARTGS( B11D(IMIN), B11E(IMIN), MU,
588 $ RWORK(IV1TCS+IMIN-1), RWORK(IV1TSN+IMIN-1) )
590 CALL SLARTGS( B21D(IMIN), B21E(IMIN), NU,
591 $ RWORK(IV1TCS+IMIN-1), RWORK(IV1TSN+IMIN-1) )
594 TEMP = RWORK(IV1TCS+IMIN-1)*B11D(IMIN) +
595 $ RWORK(IV1TSN+IMIN-1)*B11E(IMIN)
596 B11E(IMIN) = RWORK(IV1TCS+IMIN-1)*B11E(IMIN) -
597 $ RWORK(IV1TSN+IMIN-1)*B11D(IMIN)
599 B11BULGE = RWORK(IV1TSN+IMIN-1)*B11D(IMIN+1)
600 B11D(IMIN+1) = RWORK(IV1TCS+IMIN-1)*B11D(IMIN+1)
601 TEMP = RWORK(IV1TCS+IMIN-1)*B21D(IMIN) +
602 $ RWORK(IV1TSN+IMIN-1)*B21E(IMIN)
603 B21E(IMIN) = RWORK(IV1TCS+IMIN-1)*B21E(IMIN) -
604 $ RWORK(IV1TSN+IMIN-1)*B21D(IMIN)
606 B21BULGE = RWORK(IV1TSN+IMIN-1)*B21D(IMIN+1)
607 B21D(IMIN+1) = RWORK(IV1TCS+IMIN-1)*B21D(IMIN+1)
611 THETA( IMIN ) = ATAN2( SQRT( B21D(IMIN)**2+B21BULGE**2 ),
612 $ SQRT( B11D(IMIN)**2+B11BULGE**2 ) )
616.GT.
IF( B11D(IMIN)**2+B11BULGE**2 THRESH**2 ) THEN
617 CALL SLARTGP( B11BULGE, B11D(IMIN), RWORK(IU1SN+IMIN-1),
618 $ RWORK(IU1CS+IMIN-1), R )
619.LE.
ELSE IF( MU NU ) THEN
620 CALL SLARTGS( B11E( IMIN ), B11D( IMIN + 1 ), MU,
621 $ RWORK(IU1CS+IMIN-1), RWORK(IU1SN+IMIN-1) )
623 CALL SLARTGS( B12D( IMIN ), B12E( IMIN ), NU,
624 $ RWORK(IU1CS+IMIN-1), RWORK(IU1SN+IMIN-1) )
626.GT.
IF( B21D(IMIN)**2+B21BULGE**2 THRESH**2 ) THEN
627 CALL SLARTGP( B21BULGE, B21D(IMIN), RWORK(IU2SN+IMIN-1),
628 $ RWORK(IU2CS+IMIN-1), R )
629.LT.
ELSE IF( NU MU ) THEN
630 CALL SLARTGS( B21E( IMIN ), B21D( IMIN + 1 ), NU,
631 $ RWORK(IU2CS+IMIN-1), RWORK(IU2SN+IMIN-1) )
633 CALL SLARTGS( B22D(IMIN), B22E(IMIN), MU,
634 $ RWORK(IU2CS+IMIN-1), RWORK(IU2SN+IMIN-1) )
636 RWORK(IU2CS+IMIN-1) = -RWORK(IU2CS+IMIN-1)
637 RWORK(IU2SN+IMIN-1) = -RWORK(IU2SN+IMIN-1)
639 TEMP = RWORK(IU1CS+IMIN-1)*B11E(IMIN) +
640 $ RWORK(IU1SN+IMIN-1)*B11D(IMIN+1)
641 B11D(IMIN+1) = RWORK(IU1CS+IMIN-1)*B11D(IMIN+1) -
642 $ RWORK(IU1SN+IMIN-1)*B11E(IMIN)
644.GT.
IF( IMAX IMIN+1 ) THEN
645 B11BULGE = RWORK(IU1SN+IMIN-1)*B11E(IMIN+1)
646 B11E(IMIN+1) = RWORK(IU1CS+IMIN-1)*B11E(IMIN+1)
648 TEMP = RWORK(IU1CS+IMIN-1)*B12D(IMIN) +
649 $ RWORK(IU1SN+IMIN-1)*B12E(IMIN)
650 B12E(IMIN) = RWORK(IU1CS+IMIN-1)*B12E(IMIN) -
651 $ RWORK(IU1SN+IMIN-1)*B12D(IMIN)
653 B12BULGE = RWORK(IU1SN+IMIN-1)*B12D(IMIN+1)
654 B12D(IMIN+1) = RWORK(IU1CS+IMIN-1)*B12D(IMIN+1)
655 TEMP = RWORK(IU2CS+IMIN-1)*B21E(IMIN) +
656 $ RWORK(IU2SN+IMIN-1)*B21D(IMIN+1)
657 B21D(IMIN+1) = RWORK(IU2CS+IMIN-1)*B21D(IMIN+1) -
658 $ RWORK(IU2SN+IMIN-1)*B21E(IMIN)
660.GT.
IF( IMAX IMIN+1 ) THEN
661 B21BULGE = RWORK(IU2SN+IMIN-1)*B21E(IMIN+1)
662 B21E(IMIN+1) = RWORK(IU2CS+IMIN-1)*B21E(IMIN+1)
664 TEMP = RWORK(IU2CS+IMIN-1)*B22D(IMIN) +
665 $ RWORK(IU2SN+IMIN-1)*B22E(IMIN)
666 B22E(IMIN) = RWORK(IU2CS+IMIN-1)*B22E(IMIN) -
667 $ RWORK(IU2SN+IMIN-1)*B22D(IMIN)
669 B22BULGE = RWORK(IU2SN+IMIN-1)*B22D(IMIN+1)
670 B22D(IMIN+1) = RWORK(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.LE.
RESTART11 = B11E(I-1)**2 + B11BULGE**2 THRESH**2
691.LE.
RESTART21 = B21E(I-1)**2 + B21BULGE**2 THRESH**2
692.LE.
RESTART12 = B12D(I-1)**2 + B12BULGE**2 THRESH**2
693.LE.
RESTART22 = B22D(I-1)**2 + B22BULGE**2 THRESH**2
699.NOT..AND..NOT.
IF( RESTART11 RESTART21 ) THEN
700 CALL SLARTGP( X2, X1, RWORK(IV1TSN+I-1),
701 $ RWORK(IV1TCS+I-1), R )
702.NOT..AND.
ELSE IF( RESTART11 RESTART21 ) THEN
703 CALL SLARTGP( B11BULGE, B11E(I-1), RWORK(IV1TSN+I-1),
704 $ RWORK(IV1TCS+I-1), R )
705.AND..NOT.
ELSE IF( RESTART11 RESTART21 ) THEN
706 CALL SLARTGP( B21BULGE, B21E(I-1), RWORK(IV1TSN+I-1),
707 $ RWORK(IV1TCS+I-1), R )
708.LE.
ELSE IF( MU NU ) THEN
709 CALL SLARTGS( B11D(I), B11E(I), MU, RWORK(IV1TCS+I-1),
710 $ RWORK(IV1TSN+I-1) )
712 CALL SLARTGS( B21D(I), B21E(I), NU, RWORK(IV1TCS+I-1),
713 $ RWORK(IV1TSN+I-1) )
715 RWORK(IV1TCS+I-1) = -RWORK(IV1TCS+I-1)
716 RWORK(IV1TSN+I-1) = -RWORK(IV1TSN+I-1)
717.NOT..AND..NOT.
IF( RESTART12 RESTART22 ) THEN
718 CALL SLARTGP( Y2, Y1, RWORK(IV2TSN+I-1-1),
719 $ RWORK(IV2TCS+I-1-1), R )
720.NOT..AND.
ELSE IF( RESTART12 RESTART22 ) THEN
721 CALL SLARTGP( B12BULGE, B12D(I-1), RWORK(IV2TSN+I-1-1),
722 $ RWORK(IV2TCS+I-1-1), R )
723.AND..NOT.
ELSE IF( RESTART12 RESTART22 ) THEN
724 CALL SLARTGP( B22BULGE, B22D(I-1), RWORK(IV2TSN+I-1-1),
725 $ RWORK(IV2TCS+I-1-1), R )
726.LT.
ELSE IF( NU MU ) THEN
727 CALL SLARTGS( B12E(I-1), B12D(I), NU,
728 $ RWORK(IV2TCS+I-1-1), RWORK(IV2TSN+I-1-1) )
730 CALL SLARTGS( B22E(I-1), B22D(I), MU,
731 $ RWORK(IV2TCS+I-1-1), RWORK(IV2TSN+I-1-1) )
734 TEMP = RWORK(IV1TCS+I-1)*B11D(I) + RWORK(IV1TSN+I-1)*B11E(I)
735 B11E(I) = RWORK(IV1TCS+I-1)*B11E(I) -
736 $ RWORK(IV1TSN+I-1)*B11D(I)
738 B11BULGE = RWORK(IV1TSN+I-1)*B11D(I+1)
739 B11D(I+1) = RWORK(IV1TCS+I-1)*B11D(I+1)
740 TEMP = RWORK(IV1TCS+I-1)*B21D(I) + RWORK(IV1TSN+I-1)*B21E(I)
741 B21E(I) = RWORK(IV1TCS+I-1)*B21E(I) -
742 $ RWORK(IV1TSN+I-1)*B21D(I)
744 B21BULGE = RWORK(IV1TSN+I-1)*B21D(I+1)
745 B21D(I+1) = RWORK(IV1TCS+I-1)*B21D(I+1)
746 TEMP = RWORK(IV2TCS+I-1-1)*B12E(I-1) +
747 $ RWORK(IV2TSN+I-1-1)*B12D(I)
748 B12D(I) = RWORK(IV2TCS+I-1-1)*B12D(I) -
749 $ RWORK(IV2TSN+I-1-1)*B12E(I-1)
751 B12BULGE = RWORK(IV2TSN+I-1-1)*B12E(I)
752 B12E(I) = RWORK(IV2TCS+I-1-1)*B12E(I)
753 TEMP = RWORK(IV2TCS+I-1-1)*B22E(I-1) +
754 $ RWORK(IV2TSN+I-1-1)*B22D(I)
755 B22D(I) = RWORK(IV2TCS+I-1-1)*B22D(I) -
756 $ RWORK(IV2TSN+I-1-1)*B22E(I-1)
758 B22BULGE = RWORK(IV2TSN+I-1-1)*B22E(I)
759 B22E(I) = RWORK(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
768 THETA(I) = ATAN2( SQRT(Y1**2+Y2**2), SQRT(X1**2+X2**2) )
773.LE.
RESTART11 = B11D(I)**2 + B11BULGE**2 THRESH**2
774.LE.
RESTART12 = B12E(I-1)**2 + B12BULGE**2 THRESH**2
775.LE.
RESTART21 = B21D(I)**2 + B21BULGE**2 THRESH**2
776.LE.
RESTART22 = B22E(I-1)**2 + B22BULGE**2 THRESH**2
782.NOT..AND..NOT.
IF( RESTART11 RESTART12 ) THEN
783 CALL SLARTGP( X2, X1, RWORK(IU1SN+I-1), RWORK(IU1CS+I-1),
785.NOT..AND.
ELSE IF( RESTART11 RESTART12 ) THEN
786 CALL SLARTGP( B11BULGE, B11D(I), RWORK(IU1SN+I-1),
787 $ RWORK(IU1CS+I-1), R )
788.AND..NOT.
ELSE IF( RESTART11 RESTART12 ) THEN
789 CALL SLARTGP( B12BULGE, B12E(I-1), RWORK(IU1SN+I-1),
790 $ RWORK(IU1CS+I-1), R )
791.LE.
ELSE IF( MU NU ) THEN
792 CALL SLARTGS( B11E(I), B11D(I+1), MU, RWORK(IU1CS+I-1),
795 CALL SLARTGS( B12D(I), B12E(I), NU, RWORK(IU1CS+I-1),
798.NOT..AND..NOT.
IF( RESTART21 RESTART22 ) THEN
799 CALL SLARTGP( Y2, Y1, RWORK(IU2SN+I-1), RWORK(IU2CS+I-1),
801.NOT..AND.
ELSE IF( RESTART21 RESTART22 ) THEN
802 CALL SLARTGP( B21BULGE, B21D(I), RWORK(IU2SN+I-1),
803 $ RWORK(IU2CS+I-1), R )
804.AND..NOT.
ELSE IF( RESTART21 RESTART22 ) THEN
805 CALL SLARTGP( B22BULGE, B22E(I-1), RWORK(IU2SN+I-1),
806 $ RWORK(IU2CS+I-1), R )
807.LT.
ELSE IF( NU MU ) THEN
808 CALL SLARTGS( B21E(I), B21E(I+1), NU, RWORK(IU2CS+I-1),
811 CALL SLARTGS( B22D(I), B22E(I), MU, RWORK(IU2CS+I-1),
814 RWORK(IU2CS+I-1) = -RWORK(IU2CS+I-1)
815 RWORK(IU2SN+I-1) = -RWORK(IU2SN+I-1)
817 TEMP = RWORK(IU1CS+I-1)*B11E(I) + RWORK(IU1SN+I-1)*B11D(I+1)
818 B11D(I+1) = RWORK(IU1CS+I-1)*B11D(I+1) -
819 $ RWORK(IU1SN+I-1)*B11E(I)
821.LT.
IF( I IMAX - 1 ) THEN
822 B11BULGE = RWORK(IU1SN+I-1)*B11E(I+1)
823 B11E(I+1) = RWORK(IU1CS+I-1)*B11E(I+1)
825 TEMP = RWORK(IU2CS+I-1)*B21E(I) + RWORK(IU2SN+I-1)*B21D(I+1)
826 B21D(I+1) = RWORK(IU2CS+I-1)*B21D(I+1) -
827 $ RWORK(IU2SN+I-1)*B21E(I)
829.LT.
IF( I IMAX - 1 ) THEN
830 B21BULGE = RWORK(IU2SN+I-1)*B21E(I+1)
831 B21E(I+1) = RWORK(IU2CS+I-1)*B21E(I+1)
833 TEMP = RWORK(IU1CS+I-1)*B12D(I) + RWORK(IU1SN+I-1)*B12E(I)
834 B12E(I) = RWORK(IU1CS+I-1)*B12E(I) -
835 $ RWORK(IU1SN+I-1)*B12D(I)
837 B12BULGE = RWORK(IU1SN+I-1)*B12D(I+1)
838 B12D(I+1) = RWORK(IU1CS+I-1)*B12D(I+1)
839 TEMP = RWORK(IU2CS+I-1)*B22D(I) + RWORK(IU2SN+I-1)*B22E(I)
840 B22E(I) = RWORK(IU2CS+I-1)*B22E(I) -
841 $ RWORK(IU2SN+I-1)*B22D(I)
843 B22BULGE = RWORK(IU2SN+I-1)*B22D(I+1)
844 B22D(I+1) = RWORK(IU2CS+I-1)*B22D(I+1)
850 X1 = SIN(THETA(IMAX-1))*B11E(IMAX-1) +
851 $ COS(THETA(IMAX-1))*B21E(IMAX-1)
852 Y1 = SIN(THETA(IMAX-1))*B12D(IMAX-1) +
853 $ COS(THETA(IMAX-1))*B22D(IMAX-1)
854 Y2 = SIN(THETA(IMAX-1))*B12BULGE + COS(THETA(IMAX-1))*B22BULGE
856 PHI(IMAX-1) = ATAN2( ABS(X1), SQRT(Y1**2+Y2**2) )
860.LE.
RESTART12 = B12D(IMAX-1)**2 + B12BULGE**2 THRESH**2
861.LE.
RESTART22 = B22D(IMAX-1)**2 + B22BULGE**2 THRESH**2
863.NOT..AND..NOT.
IF( RESTART12 RESTART22 ) THEN
864 CALL SLARTGP( Y2, Y1, RWORK(IV2TSN+IMAX-1-1),
865 $ RWORK(IV2TCS+IMAX-1-1), R )
866.NOT..AND.
ELSE IF( RESTART12 RESTART22 ) THEN
867 CALL SLARTGP( B12BULGE, B12D(IMAX-1),
868 $ RWORK(IV2TSN+IMAX-1-1),
869 $ RWORK(IV2TCS+IMAX-1-1), R )
870.AND..NOT.
ELSE IF( RESTART12 RESTART22 ) THEN
871 CALL SLARTGP( B22BULGE, B22D(IMAX-1),
872 $ RWORK(IV2TSN+IMAX-1-1),
873 $ RWORK(IV2TCS+IMAX-1-1), R )
874.LT.
ELSE IF( NU MU ) THEN
875 CALL SLARTGS( B12E(IMAX-1), B12D(IMAX), NU,
876 $ RWORK(IV2TCS+IMAX-1-1),
877 $ RWORK(IV2TSN+IMAX-1-1) )
879 CALL SLARTGS( B22E(IMAX-1), B22D(IMAX), MU,
880 $ RWORK(IV2TCS+IMAX-1-1),
881 $ RWORK(IV2TSN+IMAX-1-1) )
884 TEMP = RWORK(IV2TCS+IMAX-1-1)*B12E(IMAX-1) +
885 $ RWORK(IV2TSN+IMAX-1-1)*B12D(IMAX)
886 B12D(IMAX) = RWORK(IV2TCS+IMAX-1-1)*B12D(IMAX) -
887 $ RWORK(IV2TSN+IMAX-1-1)*B12E(IMAX-1)
889 TEMP = RWORK(IV2TCS+IMAX-1-1)*B22E(IMAX-1) +
890 $ RWORK(IV2TSN+IMAX-1-1)*B22D(IMAX)
891 B22D(IMAX) = RWORK(IV2TCS+IMAX-1-1)*B22D(IMAX) -
892 $ RWORK(IV2TSN+IMAX-1-1)*B22E(IMAX-1)
899 CALL CLASR( 'r
', 'v
', 'f
', P, IMAX-IMIN+1,
900 $ RWORK(IU1CS+IMIN-1), RWORK(IU1SN+IMIN-1),
903 CALL CLASR( 'l
', 'v
', 'f
', IMAX-IMIN+1, P,
904 $ RWORK(IU1CS+IMIN-1), RWORK(IU1SN+IMIN-1),
910 CALL CLASR( 'r
', 'v
', 'f
', M-P, IMAX-IMIN+1,
911 $ RWORK(IU2CS+IMIN-1), RWORK(IU2SN+IMIN-1),
914 CALL CLASR( 'l
', 'v
', 'f
', IMAX-IMIN+1, M-P,
915 $ RWORK(IU2CS+IMIN-1), RWORK(IU2SN+IMIN-1),
921 CALL CLASR( 'l
', 'v
', 'f
', IMAX-IMIN+1, Q,
922 $ RWORK(IV1TCS+IMIN-1), RWORK(IV1TSN+IMIN-1),
923 $ V1T(IMIN,1), LDV1T )
925 CALL CLASR( 'r
', 'v
', 'f
', Q, IMAX-IMIN+1,
926 $ RWORK(IV1TCS+IMIN-1), RWORK(IV1TSN+IMIN-1),
927 $ V1T(1,IMIN), LDV1T )
932 CALL CLASR( 'l
', 'v
', 'f
', IMAX-IMIN+1, M-Q,
933 $ RWORK(IV2TCS+IMIN-1), RWORK(IV2TSN+IMIN-1),
934 $ V2T(IMIN,1), LDV2T )
936 CALL CLASR( 'r
', 'v
', 'f
', M-Q, IMAX-IMIN+1,
937 $ RWORK(IV2TCS+IMIN-1), RWORK(IV2TSN+IMIN-1),
938 $ V2T(1,IMIN), LDV2T )
944.GT.
IF( B11E(IMAX-1)+B21E(IMAX-1) 0 ) THEN
945 B11D(IMAX) = -B11D(IMAX)
946 B21D(IMAX) = -B21D(IMAX)
949 CALL CSCAL( Q, NEGONECOMPLEX, V1T(IMAX,1), LDV1T )
951 CALL CSCAL( Q, NEGONECOMPLEX, V1T(1,IMAX), 1 )
958 X1 = COS(PHI(IMAX-1))*B11D(IMAX) +
959 $ SIN(PHI(IMAX-1))*B12E(IMAX-1)
960 Y1 = COS(PHI(IMAX-1))*B21D(IMAX) +
961 $ SIN(PHI(IMAX-1))*B22E(IMAX-1)
963 THETA(IMAX) = ATAN2( ABS(Y1), ABS(X1) )
968.LT.
IF( B11D(IMAX)+B12E(IMAX-1) 0 ) THEN
969 B12D(IMAX) = -B12D(IMAX)
972 CALL CSCAL( P, NEGONECOMPLEX, U1(1,IMAX), 1 )
974 CALL CSCAL( P, NEGONECOMPLEX, U1(IMAX,1), LDU1 )
978.GT.
IF( B21D(IMAX)+B22E(IMAX-1) 0 ) THEN
979 B22D(IMAX) = -B22D(IMAX)
982 CALL CSCAL( M-P, NEGONECOMPLEX, U2(1,IMAX), 1 )
984 CALL CSCAL( M-P, NEGONECOMPLEX, U2(IMAX,1), LDU2 )
991.LT.
IF( B12D(IMAX)+B22D(IMAX) 0 ) THEN
994 CALL CSCAL( M-Q, NEGONECOMPLEX, V2T(IMAX,1), LDV2T )
996 CALL CSCAL( M-Q, NEGONECOMPLEX, V2T(1,IMAX), 1 )
1004.LT.
IF( THETA(I) THRESH ) THEN
1006.GT.
ELSE IF( THETA(I) PIOVER2-THRESH ) THEN
1011.LT.
IF( PHI(I) THRESH ) THEN
1013.GT.
ELSE IF( PHI(I) PIOVER2-THRESH ) THEN
1020.GT.
IF (IMAX 1) THEN
1021.EQ.
DO WHILE( PHI(IMAX-1) ZERO )
1023.LE.
IF (IMAX 1) EXIT
1026.GT.
IF( IMIN IMAX - 1 )
1028.GT.
IF (IMIN 1) THEN
1029.NE.
DO WHILE (PHI(IMIN-1) ZERO)
1031.LE.
IF (IMIN 1) EXIT
1046.LT.
IF( THETA(J) THETAMIN ) THEN
1052.NE.
IF( MINI I ) THEN
1053 THETA(MINI) = THETA(I)
1057 $ CALL CSWAP( P, U1(1,I), 1, U1(1,MINI), 1 )
1059 $ CALL CSWAP( M-P, U2(1,I), 1, U2(1,MINI), 1 )
1061 $ CALL CSWAP( Q, V1T(I,1), LDV1T, V1T(MINI,1), LDV1T )
1063 $ CALL CSWAP( M-Q, V2T(I,1), LDV2T, V2T(MINI,1),
1067 $ CALL CSWAP( P, U1(I,1), LDU1, U1(MINI,1), LDU1 )
1069 $ CALL CSWAP( M-P, U2(I,1), LDU2, U2(MINI,1), LDU2 )
1071 $ CALL CSWAP( Q, V1T(1,I), 1, V1T(1,MINI), 1 )
1073 $ CALL CSWAP( M-Q, V2T(1,I), 1, V2T(1,MINI), 1 )
subroutine cbbcsd(jobu1, jobu2, jobv1t, jobv2t, trans, m, p, q, theta, phi, u1, ldu1, u2, ldu2, v1t, ldv1t, v2t, ldv2t, b11d, b11e, b12d, b12e, b21d, b21e, b22d, b22e, rwork, lrwork, info)
CBBCSD