|
| 1 | +*> \brief \b DAXPBY |
| 2 | +* |
| 3 | +* =========== DOCUMENTATION =========== |
| 4 | +* |
| 5 | +* Online html documentation available at |
| 6 | +* http://www.netlib.org/lapack/explore-html/ |
| 7 | +* |
| 8 | +* Definition: |
| 9 | +* =========== |
| 10 | +* |
| 11 | +* SUBROUTINE DAXPBY(N,DA,DX,INCX,DB,DY,INCY) |
| 12 | +* |
| 13 | +* .. Scalar Arguments .. |
| 14 | +* DOUBLE PRECISION DA,DB |
| 15 | +* INTEGER INCX,INCY,N |
| 16 | +* .. |
| 17 | +* .. Array Arguments .. |
| 18 | +* DOUBLE PRECISION DX(*),DY(*) |
| 19 | +* .. |
| 20 | +* |
| 21 | +* |
| 22 | +*> \par Purpose: |
| 23 | +* ============= |
| 24 | +*> |
| 25 | +*> \verbatim |
| 26 | +*> |
| 27 | +*> DAXPBY constant times a vector plus constant times a vector. |
| 28 | +*> |
| 29 | +*> Y = ALPHA * X + BETA * Y |
| 30 | +*> |
| 31 | +*> \endverbatim |
| 32 | +* |
| 33 | +* Arguments: |
| 34 | +* ========== |
| 35 | +* |
| 36 | +*> \param[in] N |
| 37 | +*> \verbatim |
| 38 | +*> N is INTEGER |
| 39 | +*> number of elements in input vector(s) |
| 40 | +*> \endverbatim |
| 41 | +*> |
| 42 | +*> \param[in] DA |
| 43 | +*> \verbatim |
| 44 | +*> DA is DOUBLE PRECISION |
| 45 | +*> On entry, DA specifies the scalar alpha. |
| 46 | +*> \endverbatim |
| 47 | +*> |
| 48 | +*> \param[in] DX |
| 49 | +*> \verbatim |
| 50 | +*> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) ) |
| 51 | +*> \endverbatim |
| 52 | +*> |
| 53 | +*> \param[in] INCX |
| 54 | +*> \verbatim |
| 55 | +*> INCX is INTEGER |
| 56 | +*> storage spacing between elements of DX |
| 57 | +*> \endverbatim |
| 58 | +*> |
| 59 | +*> \param[in] DB |
| 60 | +*> \verbatim |
| 61 | +*> DB is DOUBLE PRECISION |
| 62 | +*> On entry, DB specifies the scalar beta. |
| 63 | +*> \endverbatim |
| 64 | +*> |
| 65 | +*> \param[in,out] DY |
| 66 | +*> \verbatim |
| 67 | +*> DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCY ) ) |
| 68 | +*> \endverbatim |
| 69 | +*> |
| 70 | +*> \param[in] INCY |
| 71 | +*> \verbatim |
| 72 | +*> INCY is INTEGER |
| 73 | +*> storage spacing between elements of DY |
| 74 | +*> \endverbatim |
| 75 | +* |
| 76 | +* Authors: |
| 77 | +* ======== |
| 78 | +* |
| 79 | +*> \author Univ. of Tennessee |
| 80 | +*> \author Univ. of California Berkeley |
| 81 | +*> \author Univ. of Colorado Denver |
| 82 | +*> \author NAG Ltd. |
| 83 | +*> \author Martin Koehler, MPI Magdeburg |
| 84 | +* |
| 85 | +*> \ingroup axpby |
| 86 | +* |
| 87 | +* ===================================================================== |
| 88 | + SUBROUTINE DAXPBY(N,DA,DX,INCX,DB,DY,INCY) |
| 89 | + IMPLICIT NONE |
| 90 | +* |
| 91 | +* -- Reference BLAS level1 routine -- |
| 92 | +* -- Reference BLAS is a software package provided by Univ. of Tennessee, -- |
| 93 | +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
| 94 | +* |
| 95 | +* .. Scalar Arguments .. |
| 96 | + DOUBLE PRECISION DA,DB |
| 97 | + INTEGER INCX,INCY,N |
| 98 | +* .. |
| 99 | +* .. Array Arguments .. |
| 100 | + DOUBLE PRECISION DX(*),DY(*) |
| 101 | +* .. |
| 102 | +* .. External Subroutines |
| 103 | + EXTERNAL DSCAL |
| 104 | +* |
| 105 | +* ===================================================================== |
| 106 | +* |
| 107 | +* .. Local Scalars .. |
| 108 | + INTEGER I,IX,IY,M,MP1 |
| 109 | +* .. |
| 110 | +* .. Intrinsic Functions .. |
| 111 | + INTRINSIC MOD |
| 112 | +* .. |
| 113 | + IF (N.LE.0) RETURN |
| 114 | + |
| 115 | +* Scale if DA.EQ.0 |
| 116 | + IF (DA.EQ.0.0D0 .AND. DB.NE.0.0D0) THEN |
| 117 | + CALL DSCAL(N, DB, DY, INCY) |
| 118 | + RETURN |
| 119 | + END IF |
| 120 | + |
| 121 | + IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN |
| 122 | +* |
| 123 | +* code for both increments equal to 1 |
| 124 | +* |
| 125 | +* |
| 126 | +* |
| 127 | + DO I = 1,N |
| 128 | + DY(I) = DB*DY(I) + DA*DX(I) |
| 129 | + END DO |
| 130 | + ELSE |
| 131 | +* |
| 132 | +* code for unequal increments or equal increments |
| 133 | +* not equal to 1 |
| 134 | +* |
| 135 | + IX = 1 |
| 136 | + IY = 1 |
| 137 | + IF (INCX.LT.0) IX = (-N+1)*INCX + 1 |
| 138 | + IF (INCY.LT.0) IY = (-N+1)*INCY + 1 |
| 139 | + DO I = 1,N |
| 140 | + DY(IY) = DB*DY(IY) + DA*DX(IX) |
| 141 | + IX = IX + INCX |
| 142 | + IY = IY + INCY |
| 143 | + END DO |
| 144 | + END IF |
| 145 | + RETURN |
| 146 | +* |
| 147 | +* End of DAXPBY |
| 148 | +* |
| 149 | + END |
0 commit comments