348
  349      INTEGER           NOUT
  350      parameter(nout=6)
  351
  352      DOUBLE PRECISION  SFAC
  353
  354      INTEGER           ICASE, INCX, INCY, MODE, N
  355      LOGICAL           PASS
  356
  357      COMPLEX*16        CA
  358      INTEGER           I, J, KI, KN, KSIZE, LENX, LENY, LINCX, LINCY,
  359     +                  MX, MY
  360
  361      COMPLEX*16        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*16        ZDOTC, ZDOTU
  369
  371
  372      INTRINSIC         abs, min
  373
  374      COMMON            /combla/icase, n, incx, incy, mode, pass
  375
  376      DATA              ca/(0.4d0,-0.7d0)/
  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.7d0,-0.8d0), (-0.4d0,-0.7d0),
  382     +                  (-0.1d0,-0.9d0), (0.2d0,-0.8d0),
  383     +                  (-0.9d0,-0.4d0), (0.1d0,0.4d0), (-0.6d0,0.6d0)/
  384      DATA              cy1/(0.6d0,-0.6d0), (-0.9d0,0.5d0),
  385     +                  (0.7d0,-0.6d0), (0.1d0,-0.5d0), (-0.1d0,-0.2d0),
  386     +                  (-0.5d0,-0.3d0), (0.8d0,-0.7d0)/
  387      DATA              ((ct8(i,j,1),i=1,7),j=1,4)/(0.6d0,-0.6d0),
  388     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  389     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  390     +                  (0.32d0,-1.41d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  391     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  392     +                  (0.0d0,0.0d0), (0.32d0,-1.41d0),
  393     +                  (-1.55d0,0.5d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  394     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  395     +                  (0.32d0,-1.41d0), (-1.55d0,0.5d0),
  396     +                  (0.03d0,-0.89d0), (-0.38d0,-0.96d0),
  397     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0)/
  398      DATA              ((ct8(i,j,2),i=1,7),j=1,4)/(0.6d0,-0.6d0),
  399     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  400     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  401     +                  (0.32d0,-1.41d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  402     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  403     +                  (0.0d0,0.0d0), (-0.07d0,-0.89d0),
  404     +                  (-0.9d0,0.5d0), (0.42d0,-1.41d0), (0.0d0,0.0d0),
  405     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  406     +                  (0.78d0,0.06d0), (-0.9d0,0.5d0),
  407     +                  (0.06d0,-0.13d0), (0.1d0,-0.5d0),
  408     +                  (-0.77d0,-0.49d0), (-0.5d0,-0.3d0),
  409     +                  (0.52d0,-1.51d0)/
  410      DATA              ((ct8(i,j,3),i=1,7),j=1,4)/(0.6d0,-0.6d0),
  411     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  412     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  413     +                  (0.32d0,-1.41d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  414     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  415     +                  (0.0d0,0.0d0), (-0.07d0,-0.89d0),
  416     +                  (-1.18d0,-0.31d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  417     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  418     +                  (0.78d0,0.06d0), (-1.54d0,0.97d0),
  419     +                  (0.03d0,-0.89d0), (-0.18d0,-1.31d0),
  420     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0)/
  421      DATA              ((ct8(i,j,4),i=1,7),j=1,4)/(0.6d0,-0.6d0),
  422     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  423     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  424     +                  (0.32d0,-1.41d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  425     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  426     +                  (0.0d0,0.0d0), (0.32d0,-1.41d0), (-0.9d0,0.5d0),
  427     +                  (0.05d0,-0.6d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  428     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.32d0,-1.41d0),
  429     +                  (-0.9d0,0.5d0), (0.05d0,-0.6d0), (0.1d0,-0.5d0),
  430     +                  (-0.77d0,-0.49d0), (-0.5d0,-0.3d0),
  431     +                  (0.32d0,-1.16d0)/
  432      DATA              ct7/(0.0d0,0.0d0), (-0.06d0,-0.90d0),
  433     +                  (0.65d0,-0.47d0), (-0.34d0,-1.22d0),
  434     +                  (0.0d0,0.0d0), (-0.06d0,-0.90d0),
  435     +                  (-0.59d0,-1.46d0), (-1.04d0,-0.04d0),
  436     +                  (0.0d0,0.0d0), (-0.06d0,-0.90d0),
  437     +                  (-0.83d0,0.59d0), (0.07d0,-0.37d0),
  438     +                  (0.0d0,0.0d0), (-0.06d0,-0.90d0),
  439     +                  (-0.76d0,-1.15d0), (-1.33d0,-1.82d0)/
  440      DATA              ct6/(0.0d0,0.0d0), (0.90d0,0.06d0),
  441     +                  (0.91d0,-0.77d0), (1.80d0,-0.10d0),
  442     +                  (0.0d0,0.0d0), (0.90d0,0.06d0), (1.45d0,0.74d0),
  443     +                  (0.20d0,0.90d0), (0.0d0,0.0d0), (0.90d0,0.06d0),
  444     +                  (-0.55d0,0.23d0), (0.83d0,-0.39d0),
  445     +                  (0.0d0,0.0d0), (0.90d0,0.06d0), (1.04d0,0.79d0),
  446     +                  (1.95d0,1.22d0)/
  447      DATA              ((ct10x(i,j,1),i=1,7),j=1,4)/(0.7d0,-0.8d0),
  448     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  449     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  450     +                  (0.6d0,-0.6d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  451     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  452     +                  (0.0d0,0.0d0), (0.6d0,-0.6d0), (-0.9d0,0.5d0),
  453     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  454     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.6d0,-0.6d0),
  455     +                  (-0.9d0,0.5d0), (0.7d0,-0.6d0), (0.1d0,-0.5d0),
  456     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0)/
  457      DATA              ((ct10x(i,j,2),i=1,7),j=1,4)/(0.7d0,-0.8d0),
  458     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  459     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  460     +                  (0.6d0,-0.6d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  461     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  462     +                  (0.0d0,0.0d0), (0.7d0,-0.6d0), (-0.4d0,-0.7d0),
  463     +                  (0.6d0,-0.6d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  464     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.8d0,-0.7d0),
  465     +                  (-0.4d0,-0.7d0), (-0.1d0,-0.2d0),
  466     +                  (0.2d0,-0.8d0), (0.7d0,-0.6d0), (0.1d0,0.4d0),
  467     +                  (0.6d0,-0.6d0)/
  468      DATA              ((ct10x(i,j,3),i=1,7),j=1,4)/(0.7d0,-0.8d0),
  469     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  470     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  471     +                  (0.6d0,-0.6d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  472     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  473     +                  (0.0d0,0.0d0), (-0.9d0,0.5d0), (-0.4d0,-0.7d0),
  474     +                  (0.6d0,-0.6d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  475     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.1d0,-0.5d0),
  476     +                  (-0.4d0,-0.7d0), (0.7d0,-0.6d0), (0.2d0,-0.8d0),
  477     +                  (-0.9d0,0.5d0), (0.1d0,0.4d0), (0.6d0,-0.6d0)/
  478      DATA              ((ct10x(i,j,4),i=1,7),j=1,4)/(0.7d0,-0.8d0),
  479     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  480     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  481     +                  (0.6d0,-0.6d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  482     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  483     +                  (0.0d0,0.0d0), (0.6d0,-0.6d0), (0.7d0,-0.6d0),
  484     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  485     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.6d0,-0.6d0),
  486     +                  (0.7d0,-0.6d0), (-0.1d0,-0.2d0), (0.8d0,-0.7d0),
  487     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0)/
  488      DATA              ((ct10y(i,j,1),i=1,7),j=1,4)/(0.6d0,-0.6d0),
  489     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  490     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  491     +                  (0.7d0,-0.8d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  492     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  493     +                  (0.0d0,0.0d0), (0.7d0,-0.8d0), (-0.4d0,-0.7d0),
  494     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  495     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.7d0,-0.8d0),
  496     +                  (-0.4d0,-0.7d0), (-0.1d0,-0.9d0),
  497     +                  (0.2d0,-0.8d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  498     +                  (0.0d0,0.0d0)/
  499      DATA              ((ct10y(i,j,2),i=1,7),j=1,4)/(0.6d0,-0.6d0),
  500     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  501     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  502     +                  (0.7d0,-0.8d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  503     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  504     +                  (0.0d0,0.0d0), (-0.1d0,-0.9d0), (-0.9d0,0.5d0),
  505     +                  (0.7d0,-0.8d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  506     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (-0.6d0,0.6d0),
  507     +                  (-0.9d0,0.5d0), (-0.9d0,-0.4d0), (0.1d0,-0.5d0),
  508     +                  (-0.1d0,-0.9d0), (-0.5d0,-0.3d0),
  509     +                  (0.7d0,-0.8d0)/
  510      DATA              ((ct10y(i,j,3),i=1,7),j=1,4)/(0.6d0,-0.6d0),
  511     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  512     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  513     +                  (0.7d0,-0.8d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  514     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  515     +                  (0.0d0,0.0d0), (-0.1d0,-0.9d0), (0.7d0,-0.8d0),
  516     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  517     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (-0.6d0,0.6d0),
  518     +                  (-0.9d0,-0.4d0), (-0.1d0,-0.9d0),
  519     +                  (0.7d0,-0.8d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  520     +                  (0.0d0,0.0d0)/
  521      DATA              ((ct10y(i,j,4),i=1,7),j=1,4)/(0.6d0,-0.6d0),
  522     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  523     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  524     +                  (0.7d0,-0.8d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  525     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  526     +                  (0.0d0,0.0d0), (0.7d0,-0.8d0), (-0.9d0,0.5d0),
  527     +                  (-0.4d0,-0.7d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  528     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.7d0,-0.8d0),
  529     +                  (-0.9d0,0.5d0), (-0.4d0,-0.7d0), (0.1d0,-0.5d0),
  530     +                  (-0.1d0,-0.9d0), (-0.5d0,-0.3d0),
  531     +                  (0.2d0,-0.8d0)/
  532      DATA              csize1/(0.0d0,0.0d0), (0.9d0,0.9d0),
  533     +                  (1.63d0,1.73d0), (2.90d0,2.78d0)/
  534      DATA              csize3/(0.0d0,0.0d0), (0.0d0,0.0d0),
  535     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  536     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (1.17d0,1.17d0),
  537     +                  (1.17d0,1.17d0), (1.17d0,1.17d0),
  538     +                  (1.17d0,1.17d0), (1.17d0,1.17d0),
  539     +                  (1.17d0,1.17d0), (1.17d0,1.17d0)/
  540      DATA              csize2/(0.0d0,0.0d0), (0.0d0,0.0d0),
  541     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (0.0d0,0.0d0),
  542     +                  (0.0d0,0.0d0), (0.0d0,0.0d0), (1.54d0,1.54d0),
  543     +                  (1.54d0,1.54d0), (1.54d0,1.54d0),
  544     +                  (1.54d0,1.54d0), (1.54d0,1.54d0),
  545     +                  (1.54d0,1.54d0), (1.54d0,1.54d0)/
  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) = 
zdotc(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) = 
zdotu(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 zaxpy(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 zcopy(n,cx,incx,cy,incy)
 
  578               CALL ctest(leny,cy,ct10y(1,kn,ki),csize3,1.0d0)
 
  579               IF (ki.EQ.1) THEN
  580                  cx0(1) = (42.0d0,43.0d0)
  581                  cy0(1) = (44.0d0,45.0d0)
  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 zcopy(n,cx0,incx,cy0,incy)
 
  592                  CALL ctest(1,cy0,cty0,csize3,1.0d0)
 
  593                  incx = lincx
  594                  incy = lincy
  595               END IF
  596            ELSE IF (icase.EQ.5) THEN
  597
  598               CALL zswap(n,cx,incx,cy,incy)
 
  599               CALL ctest(lenx,cx,ct10x(1,kn,ki),csize3,1.0d0)
 
  600               CALL ctest(leny,cy,ct10y(1,kn,ki),csize3,1.0d0)
 
  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 zaxpy(n, za, zx, incx, zy, incy)
ZAXPY
subroutine zcopy(n, zx, incx, zy, incy)
ZCOPY
complex *16 function zdotc(n, zx, incx, zy, incy)
ZDOTC
complex *16 function zdotu(n, zx, incx, zy, incy)
ZDOTU
subroutine zswap(n, zx, incx, zy, incy)
ZSWAP