348
349 INTEGER NOUT
350 parameter(nout=6)
351
352 REAL SFAC
353
354 INTEGER ICASE, INCX, INCY, MODE, N
355 LOGICAL PASS
356
357 COMPLEX CA
358 INTEGER I, J, KI, KN, KSIZE, LENX, LENY, LINCX, LINCY,
359 + MX, MY
360
361 COMPLEX CDOT(1), CSIZE1(4), CSIZE2(7,2), CSIZE3(14),
362 + CT10X(7,4,4), CT10Y(7,4,4), CT6(4,4), CT7(4,4),
363 + CT8(7,4,4), CTY0(1), CX(7), CX0(1), CX1(7),
364 + CY(7), CY0(1), CY1(7)
365 INTEGER INCXS(4), INCYS(4), LENS(4,2), NS(4)
366
367 COMPLEX CDOTC, CDOTU
369
371
372 INTRINSIC abs, min
373
374 COMMON /combla/icase, n, incx, incy, mode, pass
375
376 DATA ca/(0.4e0,-0.7e0)/
377 DATA incxs/1, 2, -2, -1/
378 DATA incys/1, -2, 1, -2/
379 DATA lens/1, 1, 2, 4, 1, 1, 3, 7/
380 DATA ns/0, 1, 2, 4/
381 DATA cx1/(0.7e0,-0.8e0), (-0.4e0,-0.7e0),
382 + (-0.1e0,-0.9e0), (0.2e0,-0.8e0),
383 + (-0.9e0,-0.4e0), (0.1e0,0.4e0), (-0.6e0,0.6e0)/
384 DATA cy1/(0.6e0,-0.6e0), (-0.9e0,0.5e0),
385 + (0.7e0,-0.6e0), (0.1e0,-0.5e0), (-0.1e0,-0.2e0),
386 + (-0.5e0,-0.3e0), (0.8e0,-0.7e0)/
387 DATA ((ct8(i,j,1),i=1,7),j=1,4)/(0.6e0,-0.6e0),
388 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
389 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
390 + (0.32e0,-1.41e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
391 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
392 + (0.0e0,0.0e0), (0.32e0,-1.41e0),
393 + (-1.55e0,0.5e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
394 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
395 + (0.32e0,-1.41e0), (-1.55e0,0.5e0),
396 + (0.03e0,-0.89e0), (-0.38e0,-0.96e0),
397 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0)/
398 DATA ((ct8(i,j,2),i=1,7),j=1,4)/(0.6e0,-0.6e0),
399 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
400 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
401 + (0.32e0,-1.41e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
402 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
403 + (0.0e0,0.0e0), (-0.07e0,-0.89e0),
404 + (-0.9e0,0.5e0), (0.42e0,-1.41e0), (0.0e0,0.0e0),
405 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
406 + (0.78e0,0.06e0), (-0.9e0,0.5e0),
407 + (0.06e0,-0.13e0), (0.1e0,-0.5e0),
408 + (-0.77e0,-0.49e0), (-0.5e0,-0.3e0),
409 + (0.52e0,-1.51e0)/
410 DATA ((ct8(i,j,3),i=1,7),j=1,4)/(0.6e0,-0.6e0),
411 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
412 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
413 + (0.32e0,-1.41e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
414 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
415 + (0.0e0,0.0e0), (-0.07e0,-0.89e0),
416 + (-1.18e0,-0.31e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
417 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
418 + (0.78e0,0.06e0), (-1.54e0,0.97e0),
419 + (0.03e0,-0.89e0), (-0.18e0,-1.31e0),
420 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0)/
421 DATA ((ct8(i,j,4),i=1,7),j=1,4)/(0.6e0,-0.6e0),
422 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
423 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
424 + (0.32e0,-1.41e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
425 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
426 + (0.0e0,0.0e0), (0.32e0,-1.41e0), (-0.9e0,0.5e0),
427 + (0.05e0,-0.6e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
428 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.32e0,-1.41e0),
429 + (-0.9e0,0.5e0), (0.05e0,-0.6e0), (0.1e0,-0.5e0),
430 + (-0.77e0,-0.49e0), (-0.5e0,-0.3e0),
431 + (0.32e0,-1.16e0)/
432 DATA ct7/(0.0e0,0.0e0), (-0.06e0,-0.90e0),
433 + (0.65e0,-0.47e0), (-0.34e0,-1.22e0),
434 + (0.0e0,0.0e0), (-0.06e0,-0.90e0),
435 + (-0.59e0,-1.46e0), (-1.04e0,-0.04e0),
436 + (0.0e0,0.0e0), (-0.06e0,-0.90e0),
437 + (-0.83e0,0.59e0), (0.07e0,-0.37e0),
438 + (0.0e0,0.0e0), (-0.06e0,-0.90e0),
439 + (-0.76e0,-1.15e0), (-1.33e0,-1.82e0)/
440 DATA ct6/(0.0e0,0.0e0), (0.90e0,0.06e0),
441 + (0.91e0,-0.77e0), (1.80e0,-0.10e0),
442 + (0.0e0,0.0e0), (0.90e0,0.06e0), (1.45e0,0.74e0),
443 + (0.20e0,0.90e0), (0.0e0,0.0e0), (0.90e0,0.06e0),
444 + (-0.55e0,0.23e0), (0.83e0,-0.39e0),
445 + (0.0e0,0.0e0), (0.90e0,0.06e0), (1.04e0,0.79e0),
446 + (1.95e0,1.22e0)/
447 DATA ((ct10x(i,j,1),i=1,7),j=1,4)/(0.7e0,-0.8e0),
448 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
449 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
450 + (0.6e0,-0.6e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
451 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
452 + (0.0e0,0.0e0), (0.6e0,-0.6e0), (-0.9e0,0.5e0),
453 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
454 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.6e0,-0.6e0),
455 + (-0.9e0,0.5e0), (0.7e0,-0.6e0), (0.1e0,-0.5e0),
456 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0)/
457 DATA ((ct10x(i,j,2),i=1,7),j=1,4)/(0.7e0,-0.8e0),
458 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
459 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
460 + (0.6e0,-0.6e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
461 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
462 + (0.0e0,0.0e0), (0.7e0,-0.6e0), (-0.4e0,-0.7e0),
463 + (0.6e0,-0.6e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
464 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.8e0,-0.7e0),
465 + (-0.4e0,-0.7e0), (-0.1e0,-0.2e0),
466 + (0.2e0,-0.8e0), (0.7e0,-0.6e0), (0.1e0,0.4e0),
467 + (0.6e0,-0.6e0)/
468 DATA ((ct10x(i,j,3),i=1,7),j=1,4)/(0.7e0,-0.8e0),
469 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
470 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
471 + (0.6e0,-0.6e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
472 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
473 + (0.0e0,0.0e0), (-0.9e0,0.5e0), (-0.4e0,-0.7e0),
474 + (0.6e0,-0.6e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
475 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.1e0,-0.5e0),
476 + (-0.4e0,-0.7e0), (0.7e0,-0.6e0), (0.2e0,-0.8e0),
477 + (-0.9e0,0.5e0), (0.1e0,0.4e0), (0.6e0,-0.6e0)/
478 DATA ((ct10x(i,j,4),i=1,7),j=1,4)/(0.7e0,-0.8e0),
479 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
480 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
481 + (0.6e0,-0.6e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
482 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
483 + (0.0e0,0.0e0), (0.6e0,-0.6e0), (0.7e0,-0.6e0),
484 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
485 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.6e0,-0.6e0),
486 + (0.7e0,-0.6e0), (-0.1e0,-0.2e0), (0.8e0,-0.7e0),
487 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0)/
488 DATA ((ct10y(i,j,1),i=1,7),j=1,4)/(0.6e0,-0.6e0),
489 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
490 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
491 + (0.7e0,-0.8e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
492 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
493 + (0.0e0,0.0e0), (0.7e0,-0.8e0), (-0.4e0,-0.7e0),
494 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
495 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.7e0,-0.8e0),
496 + (-0.4e0,-0.7e0), (-0.1e0,-0.9e0),
497 + (0.2e0,-0.8e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
498 + (0.0e0,0.0e0)/
499 DATA ((ct10y(i,j,2),i=1,7),j=1,4)/(0.6e0,-0.6e0),
500 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
501 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
502 + (0.7e0,-0.8e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
503 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
504 + (0.0e0,0.0e0), (-0.1e0,-0.9e0), (-0.9e0,0.5e0),
505 + (0.7e0,-0.8e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
506 + (0.0e0,0.0e0), (0.0e0,0.0e0), (-0.6e0,0.6e0),
507 + (-0.9e0,0.5e0), (-0.9e0,-0.4e0), (0.1e0,-0.5e0),
508 + (-0.1e0,-0.9e0), (-0.5e0,-0.3e0),
509 + (0.7e0,-0.8e0)/
510 DATA ((ct10y(i,j,3),i=1,7),j=1,4)/(0.6e0,-0.6e0),
511 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
512 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
513 + (0.7e0,-0.8e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
514 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
515 + (0.0e0,0.0e0), (-0.1e0,-0.9e0), (0.7e0,-0.8e0),
516 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
517 + (0.0e0,0.0e0), (0.0e0,0.0e0), (-0.6e0,0.6e0),
518 + (-0.9e0,-0.4e0), (-0.1e0,-0.9e0),
519 + (0.7e0,-0.8e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
520 + (0.0e0,0.0e0)/
521 DATA ((ct10y(i,j,4),i=1,7),j=1,4)/(0.6e0,-0.6e0),
522 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
523 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
524 + (0.7e0,-0.8e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
525 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
526 + (0.0e0,0.0e0), (0.7e0,-0.8e0), (-0.9e0,0.5e0),
527 + (-0.4e0,-0.7e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
528 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.7e0,-0.8e0),
529 + (-0.9e0,0.5e0), (-0.4e0,-0.7e0), (0.1e0,-0.5e0),
530 + (-0.1e0,-0.9e0), (-0.5e0,-0.3e0),
531 + (0.2e0,-0.8e0)/
532 DATA csize1/(0.0e0,0.0e0), (0.9e0,0.9e0),
533 + (1.63e0,1.73e0), (2.90e0,2.78e0)/
534 DATA csize3/(0.0e0,0.0e0), (0.0e0,0.0e0),
535 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
536 + (0.0e0,0.0e0), (0.0e0,0.0e0), (1.17e0,1.17e0),
537 + (1.17e0,1.17e0), (1.17e0,1.17e0),
538 + (1.17e0,1.17e0), (1.17e0,1.17e0),
539 + (1.17e0,1.17e0), (1.17e0,1.17e0)/
540 DATA csize2/(0.0e0,0.0e0), (0.0e0,0.0e0),
541 + (0.0e0,0.0e0), (0.0e0,0.0e0), (0.0e0,0.0e0),
542 + (0.0e0,0.0e0), (0.0e0,0.0e0), (1.54e0,1.54e0),
543 + (1.54e0,1.54e0), (1.54e0,1.54e0),
544 + (1.54e0,1.54e0), (1.54e0,1.54e0),
545 + (1.54e0,1.54e0), (1.54e0,1.54e0)/
546
547 DO 60 ki = 1, 4
548 incx = incxs(ki)
549 incy = incys(ki)
550 mx = abs(incx)
551 my = abs(incy)
552
553 DO 40 kn = 1, 4
554 n = ns(kn)
555 ksize = min(2,kn)
556 lenx = lens(kn,mx)
557 leny = lens(kn,my)
558
559 DO 20 i = 1, 7
560 cx(i) = cx1(i)
561 cy(i) = cy1(i)
562 20 CONTINUE
563 IF (icase.EQ.1) THEN
564
565 cdot(1) =
cdotc(n,cx,incx,cy,incy)
566 CALL ctest(1,cdot,ct6(kn,ki),csize1(kn),sfac)
567 ELSE IF (icase.EQ.2) THEN
568
569 cdot(1) =
cdotu(n,cx,incx,cy,incy)
570 CALL ctest(1,cdot,ct7(kn,ki),csize1(kn),sfac)
571 ELSE IF (icase.EQ.3) THEN
572
573 CALL caxpy(n,ca,cx,incx,cy,incy)
574 CALL ctest(leny,cy,ct8(1,kn,ki),csize2(1,ksize),sfac)
575 ELSE IF (icase.EQ.4) THEN
576
577 CALL ccopy(n,cx,incx,cy,incy)
578 CALL ctest(leny,cy,ct10y(1,kn,ki),csize3,1.0e0)
579 IF (ki.EQ.1) THEN
580 cx0(1) = (42.0e0,43.0e0)
581 cy0(1) = (44.0e0,45.0e0)
582 IF (n.EQ.0) THEN
583 cty0(1) = cy0(1)
584 ELSE
585 cty0(1) = cx0(1)
586 END IF
587 lincx = incx
588 incx = 0
589 lincy = incy
590 incy = 0
591 CALL ccopy(n,cx0,incx,cy0,incy)
592 CALL ctest(1,cy0,cty0,csize3,1.0e0)
593 incx = lincx
594 incy = lincy
595 END IF
596 ELSE IF (icase.EQ.5) THEN
597
598 CALL cswap(n,cx,incx,cy,incy)
599 CALL ctest(lenx,cx,ct10x(1,kn,ki),csize3,1.0e0)
600 CALL ctest(leny,cy,ct10y(1,kn,ki),csize3,1.0e0)
601 ELSE
602 WRITE (nout,*) ' Shouldn''t be here in CHECK2'
603 stop
604 END IF
605
606 40 CONTINUE
607 60 CONTINUE
608 RETURN
609
610
611
subroutine ctest(len, ccomp, ctrue, csize, sfac)
subroutine caxpy(n, ca, cx, incx, cy, incy)
CAXPY
subroutine ccopy(n, cx, incx, cy, incy)
CCOPY
complex function cdotu(n, cx, incx, cy, incy)
CDOTU
complex function cdotc(n, cx, incx, cy, incy)
CDOTC
subroutine cswap(n, cx, incx, cy, incy)
CSWAP