2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758 COMPLEX ZERO, ONE
2759 parameter( zero = ( 0.0, 0.0 ), one = ( 1.0, 0.0 ) )
2760 COMPLEX ROGUE
2761 parameter( rogue = ( -1.0e10, 1.0e10 ) )
2762 REAL RZERO
2763 parameter( rzero = 0.0 )
2764 REAL RROGUE
2765 parameter( rrogue = -1.0e10 )
2766
2767 COMPLEX TRANSL
2768 INTEGER KL, KU, LDA, M, N, NMAX
2769 LOGICAL RESET
2770 CHARACTER*1 DIAG, UPLO
2771 CHARACTER*2 TYPE
2772
2773 COMPLEX A( NMAX, * ), AA( * )
2774
2775 INTEGER I, I1, I2, I3, IBEG, IEND, IOFF, J, JJ, KK
2776 LOGICAL GEN, LOWER, SYM, TRI, UNIT, UPPER
2777
2778 COMPLEX CBEG
2780
2781 INTRINSIC cmplx, conjg, max, min, real
2782
2783 gen = TYPE( 1: 1 ).EQ.'g'
2784 sym = TYPE( 1: 1 ).EQ.'h'
2785 tri = TYPE( 1: 1 ).EQ.'t'
2786 upper = ( sym.OR.tri ).AND.uplo.EQ.'U'
2787 lower = ( sym.OR.tri ).AND.uplo.EQ.'L'
2788 unit = tri.AND.diag.EQ.'U'
2789
2790
2791
2792 DO 20 j = 1, n
2793 DO 10 i = 1, m
2794 IF( gen.OR.( upper.AND.i.LE.j ).OR.( lower.AND.i.GE.j ) )
2795 $ THEN
2796 IF( ( i.LE.j.AND.j - i.LE.ku ).OR.
2797 $ ( i.GE.j.AND.i - j.LE.kl ) )THEN
2798 a( i, j ) =
cbeg( reset ) + transl
2799 ELSE
2800 a( i, j ) = zero
2801 END IF
2802 IF( i.NE.j )THEN
2803 IF( sym )THEN
2804 a( j, i ) = conjg( a( i, j ) )
2805 ELSE IF( tri )THEN
2806 a( j, i ) = zero
2807 END IF
2808 END IF
2809 END IF
2810 10 CONTINUE
2811 IF( sym )
2812 $ a( j, j ) = cmplx( real( a( j, j ) ), rzero )
2813 IF( tri )
2814 $ a( j, j ) = a( j, j ) + one
2815 IF( unit )
2816 $ a( j, j ) = one
2817 20 CONTINUE
2818
2819
2820
2821 IF( type.EQ.'ge' )THEN
2822 DO 50 j = 1, n
2823 DO 30 i = 1, m
2824 aa( i + ( j - 1 )*lda ) = a( i, j )
2825 30 CONTINUE
2826 DO 40 i = m + 1, lda
2827 aa( i + ( j - 1 )*lda ) = rogue
2828 40 CONTINUE
2829 50 CONTINUE
2830 ELSE IF( type.EQ.'gb' )THEN
2831 DO 90 j = 1, n
2832 DO 60 i1 = 1, ku + 1 - j
2833 aa( i1 + ( j - 1 )*lda ) = rogue
2834 60 CONTINUE
2835 DO 70 i2 = i1, min( kl + ku + 1, ku + 1 + m - j )
2836 aa( i2 + ( j - 1 )*lda ) = a( i2 + j - ku - 1, j )
2837 70 CONTINUE
2838 DO 80 i3 = i2, lda
2839 aa( i3 + ( j - 1 )*lda ) = rogue
2840 80 CONTINUE
2841 90 CONTINUE
2842 ELSE IF( type.EQ.'he'.OR.type.EQ.'tr' )THEN
2843 DO 130 j = 1, n
2844 IF( upper )THEN
2845 ibeg = 1
2846 IF( unit )THEN
2847 iend = j - 1
2848 ELSE
2849 iend = j
2850 END IF
2851 ELSE
2852 IF( unit )THEN
2853 ibeg = j + 1
2854 ELSE
2855 ibeg = j
2856 END IF
2857 iend = n
2858 END IF
2859 DO 100 i = 1, ibeg - 1
2860 aa( i + ( j - 1 )*lda ) = rogue
2861 100 CONTINUE
2862 DO 110 i = ibeg, iend
2863 aa( i + ( j - 1 )*lda ) = a( i, j )
2864 110 CONTINUE
2865 DO 120 i = iend + 1, lda
2866 aa( i + ( j - 1 )*lda ) = rogue
2867 120 CONTINUE
2868 IF( sym )THEN
2869 jj = j + ( j - 1 )*lda
2870 aa( jj ) = cmplx( real( aa( jj ) ), rrogue )
2871 END IF
2872 130 CONTINUE
2873 ELSE IF( type.EQ.'hb'.OR.type.EQ.'tb' )THEN
2874 DO 170 j = 1, n
2875 IF( upper )THEN
2876 kk = kl + 1
2877 ibeg = max( 1, kl + 2 - j )
2878 IF( unit )THEN
2879 iend = kl
2880 ELSE
2881 iend = kl + 1
2882 END IF
2883 ELSE
2884 kk = 1
2885 IF( unit )THEN
2886 ibeg = 2
2887 ELSE
2888 ibeg = 1
2889 END IF
2890 iend = min( kl + 1, 1 + m - j )
2891 END IF
2892 DO 140 i = 1, ibeg - 1
2893 aa( i + ( j - 1 )*lda ) = rogue
2894 140 CONTINUE
2895 DO 150 i = ibeg, iend
2896 aa( i + ( j - 1 )*lda ) = a( i + j - kk, j )
2897 150 CONTINUE
2898 DO 160 i = iend + 1, lda
2899 aa( i + ( j - 1 )*lda ) = rogue
2900 160 CONTINUE
2901 IF( sym )THEN
2902 jj = kk + ( j - 1 )*lda
2903 aa( jj ) = cmplx( real( aa( jj ) ), rrogue )
2904 END IF
2905 170 CONTINUE
2906 ELSE IF( type.EQ.'hp'.OR.type.EQ.'tp' )THEN
2907 ioff = 0
2908 DO 190 j = 1, n
2909 IF( upper )THEN
2910 ibeg = 1
2911 iend = j
2912 ELSE
2913 ibeg = j
2914 iend = n
2915 END IF
2916 DO 180 i = ibeg, iend
2917 ioff = ioff + 1
2918 aa( ioff ) = a( i, j )
2919 IF( i.EQ.j )THEN
2920 IF( unit )
2921 $ aa( ioff ) = rogue
2922 IF( sym )
2923 $ aa( ioff ) = cmplx( real( aa( ioff ) ), rrogue )
2924 END IF
2925 180 CONTINUE
2926 190 CONTINUE
2927 END IF
2928 RETURN
2929
2930
2931
complex function cbeg(reset)