LAPACK 3.12.1
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches

◆ dmake()

subroutine dmake ( character*2 type,
character*1 uplo,
character*1 diag,
integer m,
integer n,
double precision, dimension( nmax, * ) a,
integer nmax,
double precision, dimension( * ) aa,
integer lda,
logical reset,
double precision transl )

Definition at line 2099 of file c_dblat3.f.

2101*
2102* Generates values for an M by N matrix A.
2103* Stores the values in the array AA in the data structure required
2104* by the routine, with unwanted elements set to rogue value.
2105*
2106* TYPE is 'GE', 'SY' or 'TR'.
2107*
2108* Auxiliary routine for test program for Level 3 Blas.
2109*
2110* -- Written on 8-February-1989.
2111* Jack Dongarra, Argonne National Laboratory.
2112* Iain Duff, AERE Harwell.
2113* Jeremy Du Croz, Numerical Algorithms Group Ltd.
2114* Sven Hammarling, Numerical Algorithms Group Ltd.
2115*
2116* .. Parameters ..
2117 DOUBLE PRECISION ZERO, ONE
2118 parameter( zero = 0.0d0, one = 1.0d0 )
2119 DOUBLE PRECISION ROGUE
2120 parameter( rogue = -1.0d10 )
2121* .. Scalar Arguments ..
2122 DOUBLE PRECISION TRANSL
2123 INTEGER LDA, M, N, NMAX
2124 LOGICAL RESET
2125 CHARACTER*1 DIAG, UPLO
2126 CHARACTER*2 TYPE
2127* .. Array Arguments ..
2128 DOUBLE PRECISION A( NMAX, * ), AA( * )
2129* .. Local Scalars ..
2130 INTEGER I, IBEG, IEND, J
2131 LOGICAL GEN, LOWER, SYM, TRI, UNIT, UPPER
2132* .. External Functions ..
2133 DOUBLE PRECISION DBEG
2134 EXTERNAL dbeg
2135* .. Executable Statements ..
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* Generate data in array A.
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* Set some elements to zero
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* Store elements in array AS in data structure required by routine.
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* End of DMAKE.
2210*
double precision function dbeg(reset)
Definition dblat2.f:3059