2101
 2102
 2103
 2104
 2105
 2106
 2107
 2108
 2109
 2110
 2111
 2112
 2113
 2114
 2115
 2116
 2117      DOUBLE PRECISION   ZERO, ONE
 2118      parameter( zero = 0.0d0, one = 1.0d0 )
 2119      DOUBLE PRECISION   ROGUE
 2120      parameter( rogue = -1.0d10 )
 2121
 2122      DOUBLE PRECISION   TRANSL
 2123      INTEGER            LDA, M, N, NMAX
 2124      LOGICAL            RESET
 2125      CHARACTER*1        DIAG, UPLO
 2126      CHARACTER*2        TYPE
 2127
 2128      DOUBLE PRECISION   A( NMAX, * ), AA( * )
 2129
 2130      INTEGER            I, IBEG, IEND, J
 2131      LOGICAL            GEN, LOWER, SYM, TRI, UNIT, UPPER
 2132
 2133      DOUBLE PRECISION   DBEG
 2135
 2136      gen = type.EQ.'GE'
 2137      sym = type.EQ.'SY'
 2138      tri = type.EQ.'TR'
 2139      upper = ( sym.OR.tri ).AND.uplo.EQ.'U'
 2140      lower = ( sym.OR.tri ).AND.uplo.EQ.'L'
 2141      unit = tri.AND.diag.EQ.'U'
 2142
 2143
 2144
 2145      DO 20 j = 1, n
 2146         DO 10 i = 1, m
 2147            IF( gen.OR.( upper.AND.i.LE.j ).OR.( lower.AND.i.GE.j ) )
 2148     $          THEN
 2149               a( i, j ) = 
dbeg( reset ) + transl
 
 2150               IF( i.NE.j )THEN
 2151
 2152                  IF( n.GT.3.AND.j.EQ.n/2 )
 2153     $               a( i, j ) = zero
 2154                  IF( sym )THEN
 2155                     a( j, i ) = a( i, j )
 2156                  ELSE IF( tri )THEN
 2157                     a( j, i ) = zero
 2158                  END IF
 2159               END IF
 2160            END IF
 2161   10    CONTINUE
 2162         IF( tri )
 2163     $      a( j, j ) = a( j, j ) + one
 2164         IF( unit )
 2165     $      a( j, j ) = one
 2166   20 CONTINUE
 2167
 2168
 2169
 2170      IF( type.EQ.'GE' )THEN
 2171         DO 50 j = 1, n
 2172            DO 30 i = 1, m
 2173               aa( i + ( j - 1 )*lda ) = a( i, j )
 2174   30       CONTINUE
 2175            DO 40 i = m + 1, lda
 2176               aa( i + ( j - 1 )*lda ) = rogue
 2177   40       CONTINUE
 2178   50    CONTINUE
 2179      ELSE IF( type.EQ.'SY'.OR.type.EQ.'TR' )THEN
 2180         DO 90 j = 1, n
 2181            IF( upper )THEN
 2182               ibeg = 1
 2183               IF( unit )THEN
 2184                  iend = j - 1
 2185               ELSE
 2186                  iend = j
 2187               END IF
 2188            ELSE
 2189               IF( unit )THEN
 2190                  ibeg = j + 1
 2191               ELSE
 2192                  ibeg = j
 2193               END IF
 2194               iend = n
 2195            END IF
 2196            DO 60 i = 1, ibeg - 1
 2197               aa( i + ( j - 1 )*lda ) = rogue
 2198   60       CONTINUE
 2199            DO 70 i = ibeg, iend
 2200               aa( i + ( j - 1 )*lda ) = a( i, j )
 2201   70       CONTINUE
 2202            DO 80 i = iend + 1, lda
 2203               aa( i + ( j - 1 )*lda ) = rogue
 2204   80       CONTINUE
 2205   90    CONTINUE
 2206      END IF
 2207      RETURN
 2208
 2209
 2210
double precision function dbeg(reset)