2738 COMPLEX*16 ZERO, ONE
2739 parameter( zero = ( 0.0d0, 0.0d0 ),
2740 $ one = ( 1.0d0, 0.0d0 ) )
2742 parameter( rogue = ( -1.0d10, 1.0d10 ) )
2743 DOUBLE PRECISION RZERO
2744 parameter( rzero = 0.0d0 )
2745 DOUBLE PRECISION RROGUE
2746 parameter( rrogue = -1.0d10 )
2749 INTEGER KL, KU, LDA, M, N, NMAX
2751 CHARACTER*1 DIAG, UPLO
2754 COMPLEX*16 A( NMAX, * ), AA( * )
2756 INTEGER I, I1, I2, I3, IBEG, IEND, IOFF, J, JJ, KK
2757 LOGICAL GEN, LOWER, SYM, TRI, UNIT, UPPER
2762 INTRINSIC dble, dcmplx, dconjg, max, min
2764 gen =
TYPE( 1: 1 ).EQ.
'G'
2765 sym =
TYPE( 1: 1 ).EQ.
'H'
2766 tri =
TYPE( 1: 1 ).EQ.
'T'
2767 upper = ( sym.OR.tri ).AND.uplo.EQ.
'U'
2768 lower = ( sym.OR.tri ).AND.uplo.EQ.
'L'
2769 unit = tri.AND.diag.EQ.
'U'
2775 IF( gen.OR.( upper.AND.i.LE.j ).OR.( lower.AND.i.GE.j ) )
2777 IF( ( i.LE.j.AND.j - i.LE.ku ).OR.
2778 $ ( i.GE.j.AND.i - j.LE.kl ) )
THEN
2779 a( i, j ) =
zbeg( reset ) + transl
2785 a( j, i ) = dconjg( a( i, j ) )
2793 $ a( j, j ) = dcmplx( dble( a( j, j ) ), rzero )
2795 $ a( j, j ) = a( j, j ) + one
2802 IF( type.EQ.
'GE' )
THEN
2805 aa( i + ( j - 1 )*lda ) = a( i, j )
2807 DO 40 i = m + 1, lda
2808 aa( i + ( j - 1 )*lda ) = rogue
2811 ELSE IF( type.EQ.
'GB' )
THEN
2813 DO 60 i1 = 1, ku + 1 - j
2814 aa( i1 + ( j - 1 )*lda ) = rogue
2816 DO 70 i2 = i1, min( kl + ku + 1, ku + 1 + m - j )
2817 aa( i2 + ( j - 1 )*lda ) = a( i2 + j - ku - 1, j )
2820 aa( i3 + ( j - 1 )*lda ) = rogue
2823 ELSE IF( type.EQ.
'HE'.OR.type.EQ.
'TR' )
THEN
2840 DO 100 i = 1, ibeg - 1
2841 aa( i + ( j - 1 )*lda ) = rogue
2843 DO 110 i = ibeg, iend
2844 aa( i + ( j - 1 )*lda ) = a( i, j )
2846 DO 120 i = iend + 1, lda
2847 aa( i + ( j - 1 )*lda ) = rogue
2850 jj = j + ( j - 1 )*lda
2851 aa( jj ) = dcmplx( dble( aa( jj ) ), rrogue )
2854 ELSE IF( type.EQ.
'HB'.OR.type.EQ.
'TB' )
THEN
2858 ibeg = max( 1, kl + 2 - j )
2871 iend = min( kl + 1, 1 + m - j )
2873 DO 140 i = 1, ibeg - 1
2874 aa( i + ( j - 1 )*lda ) = rogue
2876 DO 150 i = ibeg, iend
2877 aa( i + ( j - 1 )*lda ) = a( i + j - kk, j )
2879 DO 160 i = iend + 1, lda
2880 aa( i + ( j - 1 )*lda ) = rogue
2883 jj = kk + ( j - 1 )*lda
2884 aa( jj ) = dcmplx( dble( aa( jj ) ), rrogue )
2887 ELSE IF( type.EQ.
'HP'.OR.type.EQ.
'TP' )
THEN
2897 DO 180 i = ibeg, iend
2899 aa( ioff ) = a( i, j )
2902 $ aa( ioff ) = rogue
2904 $ aa( ioff ) = dcmplx( dble( aa( ioff ) ), rrogue )
complex *16 function zbeg(RESET)