155
156
157
158
159
160
161 LOGICAL TSTERR
162 INTEGER NMAX, NN, NOUT, NRHS
163 REAL THRESH
164
165
166 LOGICAL DOTYPE( * )
167 INTEGER IWORK( * ), NVAL( * )
168 REAL RWORK( * )
169 COMPLEX A( * ), AFAC( * ), AINV( * ), B( * ),
170 $ WORK( * ), X( * ), XACT( * )
171
172
173
174
175
176 REAL ONE, ZERO
177 parameter( one = 1.0e+0, zero = 0.0e+0 )
178 INTEGER NTYPES, NTESTS
179 parameter( ntypes = 10, ntests = 3 )
180 INTEGER NFACT
181 parameter( nfact = 2 )
182
183
184 LOGICAL ZEROT
185 CHARACTER DIST, FACT, TYPE, UPLO, XTYPE
186 CHARACTER*3 MATPATH, PATH
187 INTEGER I, I1, I2, IFACT, IMAT, IN, INFO, IOFF, IUPLO,
188 $ IZERO, J, K, KL, KU, LDA, LWORK, MODE, N,
189 $ NB, NBMIN, NERRS, NFAIL, NIMAT, NRUN, NT
190 REAL ANORM, CNDNUM
191
192
193 CHARACTER FACTS( NFACT ), UPLOS( 2 )
194 INTEGER ISEED( 4 ), ISEEDY( 4 )
195 REAL RESULT( NTESTS )
196
197
198 REAL CLANHE, SGET06
200
201
206
207
208 LOGICAL LERR, OK
209 CHARACTER*32 SRNAMT
210 INTEGER INFOT, NUNIT
211
212
213 COMMON / infoc / infot, nunit, ok, lerr
214 COMMON / srnamc / srnamt
215
216
217 INTRINSIC cmplx, max, min
218
219
220 DATA iseedy / 1988, 1989, 1990, 1991 /
221 DATA uplos / 'U', 'L' / , facts / 'F', 'N' /
222
223
224
225
226
227
228
229 path( 1: 1 ) = 'Complex precision'
230 path( 2: 3 ) = 'H2'
231
232
233
234 matpath( 1: 1 ) = 'Complex precision'
235 matpath( 2: 3 ) = 'HE'
236
237 nrun = 0
238 nfail = 0
239 nerrs = 0
240 DO 10 i = 1, 4
241 iseed( i ) = iseedy( i )
242 10 CONTINUE
243
244
245
246 IF( tsterr )
247 $
CALL cerrvx( path, nout )
248 infot = 0
249
250
251
252 nb = 1
253 nbmin = 2
256
257
258
259 DO 180 in = 1, nn
260 n = nval( in )
261 lda = max( n, 1 )
262 xtype = 'N'
263 nimat = ntypes
264 IF( n.LE.0 )
265 $ nimat = 1
266
267 DO 170 imat = 1, nimat
268
269
270
271 IF( .NOT.dotype( imat ) )
272 $ GO TO 170
273
274
275
276 zerot = imat.GE.3 .AND. imat.LE.6
277 IF( zerot .AND. n.LT.imat-2 )
278 $ GO TO 170
279
280
281
282 DO 160 iuplo = 1, 2
283 uplo = uplos( iuplo )
284
285
286
287
288
289
290 CALL clatb4( matpath, imat, n, n,
TYPE, KL, KU, ANORM,
291 $ MODE, CNDNUM, DIST )
292
293
294
295 srnamt = 'CLATMS'
296 CALL clatms( n, n, dist, iseed,
TYPE, RWORK, MODE,
297 $ CNDNUM, ANORM, KL, KU, UPLO, A, LDA,
298 $ WORK, INFO )
299
300
301
302 IF( info.NE.0 ) THEN
303 CALL alaerh( path,
'CLATMS', info, 0, uplo, n, n,
304 $ -1, -1, -1, imat, nfail, nerrs, nout )
305 GO TO 160
306 END IF
307
308
309
310
311 IF( zerot ) THEN
312 IF( imat.EQ.3 ) THEN
313 izero = 1
314 ELSE IF( imat.EQ.4 ) THEN
315 izero = n
316 ELSE
317 izero = n / 2 + 1
318 END IF
319
320 IF( imat.LT.6 ) THEN
321
322
323
324 IF( iuplo.EQ.1 ) THEN
325 ioff = ( izero-1 )*lda
326 DO 20 i = 1, izero - 1
327 a( ioff+i ) = zero
328 20 CONTINUE
329 ioff = ioff + izero
330 DO 30 i = izero, n
331 a( ioff ) = zero
332 ioff = ioff + lda
333 30 CONTINUE
334 ELSE
335 ioff = izero
336 DO 40 i = 1, izero - 1
337 a( ioff ) = zero
338 ioff = ioff + lda
339 40 CONTINUE
340 ioff = ioff - izero
341 DO 50 i = izero, n
342 a( ioff+i ) = zero
343 50 CONTINUE
344 END IF
345 ELSE
346 ioff = 0
347 IF( iuplo.EQ.1 ) THEN
348
349
350
351 DO 70 j = 1, n
352 i2 = min( j, izero )
353 DO 60 i = 1, i2
354 a( ioff+i ) = zero
355 60 CONTINUE
356 ioff = ioff + lda
357 70 CONTINUE
358 izero = 1
359 ELSE
360
361
362
363 ioff = 0
364 DO 90 j = 1, n
365 i1 = max( j, izero )
366 DO 80 i = i1, n
367 a( ioff+i ) = zero
368 80 CONTINUE
369 ioff = ioff + lda
370 90 CONTINUE
371 END IF
372 END IF
373 ELSE
374 izero = 0
375 END IF
376
377
378
379
380 DO 150 ifact = 1, nfact
381
382
383
384 fact = facts( ifact )
385
386
387
388 srnamt = 'CLARHS'
389 CALL clarhs( matpath, xtype, uplo,
' ', n, n, kl, ku,
390 $ nrhs, a, lda, xact, lda, b, lda, iseed,
391 $ info )
392 xtype = 'C'
393
394
395
396 IF( ifact.EQ.2 ) THEN
397 CALL clacpy( uplo, n, n, a, lda, afac, lda )
398 CALL clacpy(
'Full', n, nrhs, b, lda, x, lda )
399
400
401
402 srnamt = 'CHESV_AA_2STAGE '
403 lwork = min(n*nb, 3*nmax*nmax)
405 $ ainv, (3*nb+1)*n,
406 $ iwork, iwork( 1+n ),
407 $ x, lda, work, lwork, info )
408
409
410
411
412 IF( izero.GT.0 ) THEN
413 j = 1
414 k = izero
415 100 CONTINUE
416 IF( j.EQ.k ) THEN
417 k = iwork( j )
418 ELSE IF( iwork( j ).EQ.k ) THEN
419 k = j
420 END IF
421 IF( j.LT.k ) THEN
422 j = j + 1
423 GO TO 100
424 END IF
425 ELSE
426 k = 0
427 END IF
428
429
430
431 IF( info.NE.k ) THEN
432 CALL alaerh( path,
'CHESV_AA', info, k,
433 $ uplo, n, n, -1, -1, nrhs,
434 $ imat, nfail, nerrs, nout )
435 GO TO 120
436 ELSE IF( info.NE.0 ) THEN
437 GO TO 120
438 END IF
439
440
441
442 CALL clacpy(
'Full', n, nrhs, b, lda, work, lda )
443 CALL cpot02( uplo, n, nrhs, a, lda, x, lda, work,
444 $ lda, rwork, result( 1 ) )
445
446
447
448
449
450
451
452
453 nt = 1
454
455
456
457
458 DO 110 k = 1, nt
459 IF( result( k ).GE.thresh ) THEN
460 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
461 $
CALL aladhd( nout, path )
462 WRITE( nout, fmt = 9999 )'CHESV_AA ',
463 $ uplo, n, imat, k, result( k )
464 nfail = nfail + 1
465 END IF
466 110 CONTINUE
467 nrun = nrun + nt
468 120 CONTINUE
469 END IF
470
471 150 CONTINUE
472
473 160 CONTINUE
474 170 CONTINUE
475 180 CONTINUE
476
477
478
479 CALL alasvm( path, nout, nfail, nrun, nerrs )
480
481 9999 FORMAT( 1x, a, ', UPLO=''', a1, ''', N =', i5, ', type ', i2,
482 $ ', test ', i2, ', ratio =', g12.5 )
483 RETURN
484
485
486
subroutine alasvm(type, nout, nfail, nrun, nerrs)
ALASVM
subroutine clarhs(path, xtype, uplo, trans, m, n, kl, ku, nrhs, a, lda, x, ldx, b, ldb, iseed, info)
CLARHS
subroutine xlaenv(ispec, nvalue)
XLAENV
subroutine aladhd(iounit, path)
ALADHD
subroutine alaerh(path, subnam, info, infoe, opts, m, n, kl, ku, n5, imat, nfail, nerrs, nout)
ALAERH
subroutine cerrvx(path, nunit)
CERRVX
subroutine cget04(n, nrhs, x, ldx, xact, ldxact, rcond, resid)
CGET04
subroutine clatb4(path, imat, m, n, type, kl, ku, anorm, mode, cndnum, dist)
CLATB4
subroutine clatms(m, n, dist, iseed, sym, d, mode, cond, dmax, kl, ku, pack, a, lda, work, info)
CLATMS
subroutine cpot02(uplo, n, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
CPOT02
subroutine chesv_aa_2stage(uplo, n, nrhs, a, lda, tb, ltb, ipiv, ipiv2, b, ldb, work, lwork, info)
CHESV_AA_2STAGE computes the solution to system of linear equations A * X = B for HE matrices
subroutine chetrf_aa_2stage(uplo, n, a, lda, tb, ltb, ipiv, ipiv2, work, lwork, info)
CHETRF_AA_2STAGE
subroutine clacpy(uplo, m, n, a, lda, b, ldb)
CLACPY copies all or part of one two-dimensional array to another.
real function clanhe(norm, uplo, n, a, lda, work)
CLANHE returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...
real function sget06(rcond, rcondc)
SGET06