3
    4
    5
    6
    7
    8
    9      CHARACTER*1           MODE
   10      INTEGER               ICONTXT, INCX, INCY, N
   11      DOUBLE PRECISION      ALPHA, BETA
   12
   13
   14      DOUBLE PRECISION      X( * ), Y( * )
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76      DOUBLE PRECISION   ZERO,          ONE
   77      parameter( zero = 0.0d+0, one = 1.0d+0)
   78
   79
   80      INTEGER            I, IX, IY
   81
   82
   83      LOGICAL            LSAME
   85
   86
   87      EXTERNAL           dscal, dcopy, daxpy
   88
   89
   90
   91      IF( n.LE.0 .OR. ( alpha.EQ.zero .AND. beta.EQ.one ) ) RETURN
   92
   93      IF( alpha.EQ.zero ) THEN
   94         IF( beta.EQ.zero ) THEN
   95            IF( incy.EQ.1 ) THEN
   96               DO 10 i = 1, n
   97                  y( i ) = zero
   98   10          CONTINUE
   99            ELSE
  100               iy = 1
  101               DO 20 i = 1, n
  102                  y( iy ) = zero
  103                  iy = iy + incy
  104   20          CONTINUE
  105            END IF
  106
  107         ELSE
  108            IF( 
lsame( mode, 
'V' ) ) 
THEN 
  109               CALL dscal( n, beta, y, incy )
  110            ELSE IF( incy.EQ.1 ) THEN
  111               DO 30 i = 1, n
  112                  y( i ) = beta * y( i )
  113   30          CONTINUE
  114            ELSE
  115               iy = 1
  116               DO 40 i = 1, n
  117                  y( iy ) = beta * y( iy )
  118                  iy = iy + incy
  119   40          CONTINUE
  120            END IF
  121         END IF
  122
  123      ELSE
  124         IF( alpha.EQ.one ) THEN
  125            IF( beta.EQ.zero ) THEN
  126               IF( 
lsame( mode, 
'V' ) ) 
THEN 
  127                  CALL dcopy( n, x, incx, y, incy )
  128               ELSE IF( incx.EQ.1 .AND. incy.EQ.1 ) THEN
  129                  DO 50 i = 1, n
  130                     y( i ) = x( i )
  131   50             CONTINUE
  132               ELSE
  133                  ix = 1
  134                  iy = 1
  135                  DO 60 i = 1, n
  136                     y( iy ) = x( ix )
  137                     ix = ix + incx
  138                     iy = iy + incy
  139   60             CONTINUE
  140               END IF
  141
  142            ELSE IF( beta.EQ.one ) THEN
  143               IF( incx.EQ.1 .AND. incy.EQ.1 ) THEN
  144                  DO 70 i = 1, n
  145                     y( i ) = x( i ) + y( i )
  146   70             CONTINUE
  147               ELSE
  148                  ix = 1
  149                  iy = 1
  150                  DO 80 i = 1, n
  151                     y( iy ) = x( ix ) + y( iy )
  152                     ix = ix + incx
  153                     iy = iy + incy
  154   80             CONTINUE
  155               END IF
  156
  157            ELSE
  158               IF( incx.EQ.1 .AND. incy.EQ.1 ) THEN
  159                  DO 90 i = 1, n
  160                     y( i ) = x( i ) + beta * y( i )
  161   90             CONTINUE
  162               ELSE
  163                  ix = 1
  164                  iy = 1
  165                  DO 100 i = 1, n
  166                     y( iy ) = x( ix ) + beta * y( iy )
  167                     ix = ix + incx
  168                     iy = iy + incy
  169  100             CONTINUE
  170               END IF
  171            END IF
  172
  173         ELSE
  174            IF( beta.EQ.zero ) THEN
  175               IF( incx.EQ.1 .AND. incy.EQ.1 ) THEN
  176                  DO 110 i = 1, n
  177                     y( i ) = alpha * x( i )
  178  110             CONTINUE
  179               ELSE
  180                  ix = 1
  181                  iy = 1
  182                  DO 120 i = 1, n
  183                     y( iy ) = x( ix )
  184                     ix = ix + incx
  185                     iy = iy + incy
  186  120             CONTINUE
  187               END IF
  188
  189            ELSE IF( beta.EQ.one ) THEN
  190               IF( 
lsame( mode, 
'V' ) ) 
THEN 
  191                  CALL daxpy( n, alpha, x, incx, y, incy )
  192               ELSE IF( incx.EQ.1 .AND. incy.EQ.1 ) THEN
  193                  DO 130 i = 1, n
  194                     y( i ) = alpha * x( i ) + y( i )
  195  130             CONTINUE
  196               ELSE
  197                  ix = 1
  198                  iy = 1
  199                  DO 140 i = 1, n
  200                     y( iy ) = alpha * x( ix ) + y( iy )
  201                     ix = ix + incx
  202                     iy = iy + incy
  203  140             CONTINUE
  204               END IF
  205
  206            ELSE
  207               IF( incx.EQ.1 .AND. incy.EQ.1 ) THEN
  208                  DO 150 i = 1, n
  209                     y( i ) = alpha * x( i ) + beta * y( i )
  210  150             CONTINUE
  211               ELSE
  212                  ix = 1
  213                  iy = 1
  214                  DO 160 i = 1, n
  215                     y( iy ) = alpha * x( ix ) + beta * y( iy )
  216                     ix = ix + incx
  217                     iy = iy + incy
  218  160             CONTINUE
  219               END IF
  220            END IF
  221         END IF
  222      END IF
  223
  224      RETURN
  225
  226
  227