2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138 COMPLEX ZERO, HALF, ONE
2139 parameter( zero = ( 0.0, 0.0 ), half = ( 0.5, 0.0 ),
2140 $ one = ( 1.0, 0.0 ) )
2141 REAL RZERO
2142 parameter( rzero = 0.0 )
2143
2144 REAL EPS, THRESH
2145 INTEGER INCMAX, NALF, NIDIM, NINC, NMAX, NOUT, NTRA,
2146 $ IORDER
2147 LOGICAL FATAL, REWI, TRACE
2148 CHARACTER*12 SNAME
2149
2150 COMPLEX A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),
2151 $ AS( NMAX*NMAX ), X( NMAX ), XS( NMAX*INCMAX ),
2152 $ XX( NMAX*INCMAX ), Y( NMAX ),
2153 $ YS( NMAX*INCMAX ), YT( NMAX ),
2154 $ YY( NMAX*INCMAX ), Z( NMAX, 2 )
2155 REAL G( NMAX )
2156 INTEGER IDIM( NIDIM ), INC( NINC )
2157
2158 COMPLEX ALPHA, ALS, TRANSL
2159 REAL ERR, ERRMAX
2160 INTEGER I, IA, IC, IN, INCX, INCXS, INCY, INCYS, IX,
2161 $ IY, J, JA, JJ, LAA, LDA, LDAS, LJ, LX, LY, N,
2162 $ NARGS, NC, NS
2163 LOGICAL FULL, NULL, PACKED, RESET, SAME, UPPER
2164 CHARACTER*1 UPLO, UPLOS
2165 CHARACTER*14 CUPLO
2166 CHARACTER*2 ICH
2167
2168 COMPLEX W( 2 )
2169 LOGICAL ISAME( 13 )
2170
2171 LOGICAL LCE, LCERES
2173
2175
2176 INTRINSIC abs, conjg, max
2177
2178 INTEGER INFOT, NOUTC
2179 LOGICAL OK
2180
2181 COMMON /infoc/infot, noutc, ok
2182
2183 DATA ich/'UL'/
2184
2185 full = sname( 9: 9 ).EQ.'e'
2186 packed = sname( 9: 9 ).EQ.'p'
2187
2188 IF( full )THEN
2189 nargs = 9
2190 ELSE IF( packed )THEN
2191 nargs = 8
2192 END IF
2193
2194 nc = 0
2195 reset = .true.
2196 errmax = rzero
2197
2198 DO 140 in = 1, nidim
2199 n = idim( in )
2200
2201 lda = n
2202 IF( lda.LT.nmax )
2203 $ lda = lda + 1
2204
2205 IF( lda.GT.nmax )
2206 $ GO TO 140
2207 IF( packed )THEN
2208 laa = ( n*( n + 1 ) )/2
2209 ELSE
2210 laa = lda*n
2211 END IF
2212
2213 DO 130 ic = 1, 2
2214 uplo = ich( ic: ic )
2215 IF (uplo.EQ.'U')THEN
2216 cuplo = ' CblasUpper'
2217 ELSE
2218 cuplo = ' CblasLower'
2219 END IF
2220 upper = uplo.EQ.'U'
2221
2222 DO 120 ix = 1, ninc
2223 incx = inc( ix )
2224 lx = abs( incx )*n
2225
2226
2227
2228 transl = half
2229 CALL cmake(
'ge',
' ',
' ', 1, n, x, 1, xx, abs( incx ),
2230 $ 0, n - 1, reset, transl )
2231 IF( n.GT.1 )THEN
2232 x( n/2 ) = zero
2233 xx( 1 + abs( incx )*( n/2 - 1 ) ) = zero
2234 END IF
2235
2236 DO 110 iy = 1, ninc
2237 incy = inc( iy )
2238 ly = abs( incy )*n
2239
2240
2241
2242 transl = zero
2243 CALL cmake(
'ge',
' ',
' ', 1, n, y, 1, yy,
2244 $ abs( incy ), 0, n - 1, reset, transl )
2245 IF( n.GT.1 )THEN
2246 y( n/2 ) = zero
2247 yy( 1 + abs( incy )*( n/2 - 1 ) ) = zero
2248 END IF
2249
2250 DO 100 ia = 1, nalf
2251 alpha = alf( ia )
2252 null = n.LE.0.OR.alpha.EQ.zero
2253
2254
2255
2256 transl = zero
2257 CALL cmake( sname( 8: 9 ), uplo,
' ', n, n, a,
2258 $ nmax, aa, lda, n - 1, n - 1, reset,
2259 $ transl )
2260
2261 nc = nc + 1
2262
2263
2264
2265 uplos = uplo
2266 ns = n
2267 als = alpha
2268 DO 10 i = 1, laa
2269 as( i ) = aa( i )
2270 10 CONTINUE
2271 ldas = lda
2272 DO 20 i = 1, lx
2273 xs( i ) = xx( i )
2274 20 CONTINUE
2275 incxs = incx
2276 DO 30 i = 1, ly
2277 ys( i ) = yy( i )
2278 30 CONTINUE
2279 incys = incy
2280
2281
2282
2283 IF( full )THEN
2284 IF( trace )
2285 $ WRITE( ntra, fmt = 9993 )nc, sname, cuplo, n,
2286 $ alpha, incx, incy, lda
2287 IF( rewi )
2288 $ rewind ntra
2289 CALL ccher2( iorder, uplo, n, alpha, xx, incx,
2290 $ yy, incy, aa, lda )
2291 ELSE IF( packed )THEN
2292 IF( trace )
2293 $ WRITE( ntra, fmt = 9994 )nc, sname, cuplo, n,
2294 $ alpha, incx, incy
2295 IF( rewi )
2296 $ rewind ntra
2297 CALL cchpr2( iorder, uplo, n, alpha, xx, incx,
2298 $ yy, incy, aa )
2299 END IF
2300
2301
2302
2303 IF( .NOT.ok )THEN
2304 WRITE( nout, fmt = 9992 )
2305 fatal = .true.
2306 GO TO 160
2307 END IF
2308
2309
2310
2311 isame( 1 ) = uplo.EQ.uplos
2312 isame( 2 ) = ns.EQ.n
2313 isame( 3 ) = als.EQ.alpha
2314 isame( 4 ) =
lce( xs, xx, lx )
2315 isame( 5 ) = incxs.EQ.incx
2316 isame( 6 ) =
lce( ys, yy, ly )
2317 isame( 7 ) = incys.EQ.incy
2318 IF( null )THEN
2319 isame( 8 ) =
lce( as, aa, laa )
2320 ELSE
2321 isame( 8 ) =
lceres( sname( 8: 9 ), uplo, n, n,
2322 $ as, aa, lda )
2323 END IF
2324 IF( .NOT.packed )THEN
2325 isame( 9 ) = ldas.EQ.lda
2326 END IF
2327
2328
2329
2330 same = .true.
2331 DO 40 i = 1, nargs
2332 same = same.AND.isame( i )
2333 IF( .NOT.isame( i ) )
2334 $ WRITE( nout, fmt = 9998 )i
2335 40 CONTINUE
2336 IF( .NOT.same )THEN
2337 fatal = .true.
2338 GO TO 160
2339 END IF
2340
2341 IF( .NOT.null )THEN
2342
2343
2344
2345 IF( incx.GT.0 )THEN
2346 DO 50 i = 1, n
2347 z( i, 1 ) = x( i )
2348 50 CONTINUE
2349 ELSE
2350 DO 60 i = 1, n
2351 z( i, 1 ) = x( n - i + 1 )
2352 60 CONTINUE
2353 END IF
2354 IF( incy.GT.0 )THEN
2355 DO 70 i = 1, n
2356 z( i, 2 ) = y( i )
2357 70 CONTINUE
2358 ELSE
2359 DO 80 i = 1, n
2360 z( i, 2 ) = y( n - i + 1 )
2361 80 CONTINUE
2362 END IF
2363 ja = 1
2364 DO 90 j = 1, n
2365 w( 1 ) = alpha*conjg( z( j, 2 ) )
2366 w( 2 ) = conjg( alpha )*conjg( z( j, 1 ) )
2367 IF( upper )THEN
2368 jj = 1
2369 lj = j
2370 ELSE
2371 jj = j
2372 lj = n - j + 1
2373 END IF
2374 CALL cmvch(
'N', lj, 2, one, z( jj, 1 ),
2375 $ nmax, w, 1, one, a( jj, j ), 1,
2376 $ yt, g, aa( ja ), eps, err, fatal,
2377 $ nout, .true. )
2378 IF( full )THEN
2379 IF( upper )THEN
2380 ja = ja + lda
2381 ELSE
2382 ja = ja + lda + 1
2383 END IF
2384 ELSE
2385 ja = ja + lj
2386 END IF
2387 errmax = max( errmax, err )
2388
2389 IF( fatal )
2390 $ GO TO 150
2391 90 CONTINUE
2392 ELSE
2393
2394 IF( n.LE.0 )
2395 $ GO TO 140
2396 END IF
2397
2398 100 CONTINUE
2399
2400 110 CONTINUE
2401
2402 120 CONTINUE
2403
2404 130 CONTINUE
2405
2406 140 CONTINUE
2407
2408
2409
2410 IF( errmax.LT.thresh )THEN
2411 WRITE( nout, fmt = 9999 )sname, nc
2412 ELSE
2413 WRITE( nout, fmt = 9997 )sname, nc, errmax
2414 END IF
2415 GO TO 170
2416
2417 150 CONTINUE
2418 WRITE( nout, fmt = 9995 )j
2419
2420 160 CONTINUE
2421 WRITE( nout, fmt = 9996 )sname
2422 IF( full )THEN
2423 WRITE( nout, fmt = 9993 )nc, sname, cuplo, n, alpha, incx,
2424 $ incy, lda
2425 ELSE IF( packed )THEN
2426 WRITE( nout, fmt = 9994 )nc, sname, cuplo, n, alpha, incx, incy
2427 END IF
2428
2429 170 CONTINUE
2430 RETURN
2431
2432 9999 FORMAT(' ',a12, ' PASSED THE COMPUTATIONAL TESTS (', i6, ' CALL',
2433 $ 'S)' )
2434 9998 FORMAT(' ******* FATAL ERROR - PARAMETER NUMBER ', i2, ' WAS CH',
2435 $ 'ANGED INCORRECTLY *******' )
2436 9997 FORMAT(' ',a12, ' COMPLETED THE COMPUTATIONAL TESTS (', i6, ' C',
2437 $ 'ALLS)', /' ******* BUT WITH MAXIMUM TEST RATIO', f8.2,
2438 $ ' - SUSPECT *******' )
2439 9996 FORMAT( ' ******* ',a12, ' FAILED ON CALL NUMBER:' )
2440 9995 FORMAT( ' THESE ARE THE RESULTS FOR COLUMN ', i3 )
2441 9994 FORMAT(1x, i6, ': ',a12, '(', a14, ',', i3, ',(', f4.1, ',',
2442 $ f4.1, '), X,', i2, ', Y,', i2, ', AP) .' )
2443 9993 FORMAT(1x, i6, ': ',a12, '(', a14, ',', i3, ',(', f4.1, ',',
2444 $ f4.1, '), X,', i2, ', Y,', i2, ', A,', i3, ') .' )
2445 9992 FORMAT(' ******* FATAL ERROR - ERROR-EXIT TAKEN ON VALID CALL *',
2446 $ '******' )
2447
2448
2449
subroutine cmake(type, uplo, diag, m, n, a, nmax, aa, lda, kl, ku, reset, transl)
logical function lceres(type, uplo, m, n, aa, as, lda)
subroutine cmvch(trans, m, n, alpha, a, nmax, x, incx, beta, y, incy, yt, g, yy, eps, err, fatal, nout, mv)
logical function lce(ri, rj, lr)