2323
 2324
 2325
 2326
 2327
 2328
 2329
 2330
 2331
 2332
 2333
 2334
 2335
 2336
 2337
 2338
 2339      COMPLEX*16         ZERO, ONE
 2340      parameter( zero = ( 0.0d0, 0.0d0 ),
 2341     $                   one = ( 1.0d0, 0.0d0 ) )
 2342      COMPLEX*16         ROGUE
 2343      parameter( rogue = ( -1.0d10, 1.0d10 ) )
 2344      DOUBLE PRECISION   RZERO
 2345      parameter( rzero = 0.0d0 )
 2346      DOUBLE PRECISION   RROGUE
 2347      parameter( rrogue = -1.0d10 )
 2348
 2349      COMPLEX*16         TRANSL
 2350      INTEGER            LDA, M, N, NMAX
 2351      LOGICAL            RESET
 2352      CHARACTER*1        DIAG, UPLO
 2353      CHARACTER*2        TYPE
 2354
 2355      COMPLEX*16         A( NMAX, * ), AA( * )
 2356
 2357      INTEGER            I, IBEG, IEND, J, JJ
 2358      LOGICAL            GEN, HER, LOWER, SYM, TRI, UNIT, UPPER
 2359
 2360      COMPLEX*16         ZBEG
 2362
 2363      INTRINSIC          dcmplx, dconjg, dble
 2364
 2365      gen = type.EQ.'ge'
 2366      her = type.EQ.'he'
 2367      sym = type.EQ.'sy'
 2368      tri = type.EQ.'tr'
 2369      upper = ( her.OR.sym.OR.tri ).AND.uplo.EQ.'U'
 2370      lower = ( her.OR.sym.OR.tri ).AND.uplo.EQ.'L'
 2371      unit = tri.AND.diag.EQ.'U'
 2372
 2373
 2374
 2375      DO 20 j = 1, n
 2376         DO 10 i = 1, m
 2377            IF( gen.OR.( upper.AND.i.LE.j ).OR.( lower.AND.i.GE.j ) )
 2378     $          THEN
 2379               a( i, j ) = 
zbeg( reset ) + transl
 
 2380               IF( i.NE.j )THEN
 2381
 2382                  IF( n.GT.3.AND.j.EQ.n/2 )
 2383     $               a( i, j ) = zero
 2384                  IF( her )THEN
 2385                     a( j, i ) = dconjg( a( i, j ) )
 2386                  ELSE IF( sym )THEN
 2387                     a( j, i ) = a( i, j )
 2388                  ELSE IF( tri )THEN
 2389                     a( j, i ) = zero
 2390                  END IF
 2391               END IF
 2392            END IF
 2393   10    CONTINUE
 2394         IF( her )
 2395     $      a( j, j ) = dcmplx( dble( a( j, j ) ), rzero )
 2396         IF( tri )
 2397     $      a( j, j ) = a( j, j ) + one
 2398         IF( unit )
 2399     $      a( j, j ) = one
 2400   20 CONTINUE
 2401
 2402
 2403
 2404      IF( type.EQ.'ge' )THEN
 2405         DO 50 j = 1, n
 2406            DO 30 i = 1, m
 2407               aa( i + ( j - 1 )*lda ) = a( i, j )
 2408   30       CONTINUE
 2409            DO 40 i = m + 1, lda
 2410               aa( i + ( j - 1 )*lda ) = rogue
 2411   40       CONTINUE
 2412   50    CONTINUE
 2413      ELSE IF( type.EQ.'he'.OR.type.EQ.'sy'.OR.type.EQ.'tr' )THEN
 2414         DO 90 j = 1, n
 2415            IF( upper )THEN
 2416               ibeg = 1
 2417               IF( unit )THEN
 2418                  iend = j - 1
 2419               ELSE
 2420                  iend = j
 2421               END IF
 2422            ELSE
 2423               IF( unit )THEN
 2424                  ibeg = j + 1
 2425               ELSE
 2426                  ibeg = j
 2427               END IF
 2428               iend = n
 2429            END IF
 2430            DO 60 i = 1, ibeg - 1
 2431               aa( i + ( j - 1 )*lda ) = rogue
 2432   60       CONTINUE
 2433            DO 70 i = ibeg, iend
 2434               aa( i + ( j - 1 )*lda ) = a( i, j )
 2435   70       CONTINUE
 2436            DO 80 i = iend + 1, lda
 2437               aa( i + ( j - 1 )*lda ) = rogue
 2438   80       CONTINUE
 2439            IF( her )THEN
 2440               jj = j + ( j - 1 )*lda
 2441               aa( jj ) = dcmplx( dble( aa( jj ) ), rrogue )
 2442            END IF
 2443   90    CONTINUE
 2444      END IF
 2445      RETURN
 2446
 2447
 2448
complex *16 function zbeg(reset)