Diff for /rpl/lapack/blas/dswap.f between versions 1.3 and 1.16

version 1.3, 2010/08/06 15:32:19 version 1.16, 2023/08/07 08:38:43
Line 1 Line 1
   *> \brief \b DSWAP
   *
   *  =========== DOCUMENTATION ===========
   *
   * Online html documentation available at
   *            http://www.netlib.org/lapack/explore-html/
   *
   *  Definition:
   *  ===========
   *
   *       SUBROUTINE DSWAP(N,DX,INCX,DY,INCY)
   *
   *       .. Scalar Arguments ..
   *       INTEGER INCX,INCY,N
   *       ..
   *       .. Array Arguments ..
   *       DOUBLE PRECISION DX(*),DY(*)
   *       ..
   *
   *
   *> \par Purpose:
   *  =============
   *>
   *> \verbatim
   *>
   *>    DSWAP interchanges two vectors.
   *>    uses unrolled loops for increments equal to 1.
   *> \endverbatim
   *
   *  Arguments:
   *  ==========
   *
   *> \param[in] N
   *> \verbatim
   *>          N is INTEGER
   *>         number of elements in input vector(s)
   *> \endverbatim
   *>
   *> \param[in,out] DX
   *> \verbatim
   *>          DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
   *> \endverbatim
   *>
   *> \param[in] INCX
   *> \verbatim
   *>          INCX is INTEGER
   *>         storage spacing between elements of DX
   *> \endverbatim
   *>
   *> \param[in,out] DY
   *> \verbatim
   *>          DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCY ) )
   *> \endverbatim
   *>
   *> \param[in] INCY
   *> \verbatim
   *>          INCY is INTEGER
   *>         storage spacing between elements of DY
   *> \endverbatim
   *
   *  Authors:
   *  ========
   *
   *> \author Univ. of Tennessee
   *> \author Univ. of California Berkeley
   *> \author Univ. of Colorado Denver
   *> \author NAG Ltd.
   *
   *> \ingroup double_blas_level1
   *
   *> \par Further Details:
   *  =====================
   *>
   *> \verbatim
   *>
   *>     jack dongarra, linpack, 3/11/78.
   *>     modified 12/3/93, array(1) declarations changed to array(*)
   *> \endverbatim
   *>
   *  =====================================================================
       SUBROUTINE DSWAP(N,DX,INCX,DY,INCY)        SUBROUTINE DSWAP(N,DX,INCX,DY,INCY)
   *
   *  -- Reference BLAS level1 routine --
   *  -- Reference BLAS is a software package provided by Univ. of Tennessee,    --
   *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
   *
 *     .. Scalar Arguments ..  *     .. Scalar Arguments ..
       INTEGER INCX,INCY,N        INTEGER INCX,INCY,N
 *     ..  *     ..
Line 6 Line 91
       DOUBLE PRECISION DX(*),DY(*)        DOUBLE PRECISION DX(*),DY(*)
 *     ..  *     ..
 *  *
 *  Purpose  
 *  =======  
 *  
 *     interchanges two vectors.  
 *     uses unrolled loops for increments equal one.  
 *  
 *  Further Details  
 *  ===============  
 *  
 *     jack dongarra, linpack, 3/11/78.  
 *     modified 12/3/93, array(1) declarations changed to array(*)  
 *  
 *  =====================================================================  *  =====================================================================
 *  *
 *     .. Local Scalars ..  *     .. Local Scalars ..
Line 28 Line 101
       INTRINSIC MOD        INTRINSIC MOD
 *     ..  *     ..
       IF (N.LE.0) RETURN        IF (N.LE.0) RETURN
       IF (INCX.EQ.1 .AND. INCY.EQ.1) GO TO 20        IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
 *  
 *       code for unequal increments or equal increments not equal  
 *         to 1  
 *  
       IX = 1  
       IY = 1  
       IF (INCX.LT.0) IX = (-N+1)*INCX + 1  
       IF (INCY.LT.0) IY = (-N+1)*INCY + 1  
       DO 10 I = 1,N  
           DTEMP = DX(IX)  
           DX(IX) = DY(IY)  
           DY(IY) = DTEMP  
           IX = IX + INCX  
           IY = IY + INCY  
    10 CONTINUE  
       RETURN  
 *  *
 *       code for both increments equal to 1  *       code for both increments equal to 1
 *  *
 *  *
 *       clean-up loop  *       clean-up loop
 *  *
    20 M = MOD(N,3)           M = MOD(N,3)
       IF (M.EQ.0) GO TO 40           IF (M.NE.0) THEN
       DO 30 I = 1,M              DO I = 1,M
           DTEMP = DX(I)                 DTEMP = DX(I)
           DX(I) = DY(I)                 DX(I) = DY(I)
           DY(I) = DTEMP                 DY(I) = DTEMP
    30 CONTINUE              END DO
       IF (N.LT.3) RETURN              IF (N.LT.3) RETURN
    40 MP1 = M + 1           END IF
       DO 50 I = MP1,N,3           MP1 = M + 1
           DTEMP = DX(I)           DO I = MP1,N,3
           DX(I) = DY(I)              DTEMP = DX(I)
           DY(I) = DTEMP              DX(I) = DY(I)
           DTEMP = DX(I+1)              DY(I) = DTEMP
           DX(I+1) = DY(I+1)              DTEMP = DX(I+1)
           DY(I+1) = DTEMP              DX(I+1) = DY(I+1)
           DTEMP = DX(I+2)              DY(I+1) = DTEMP
           DX(I+2) = DY(I+2)              DTEMP = DX(I+2)
           DY(I+2) = DTEMP              DX(I+2) = DY(I+2)
    50 CONTINUE              DY(I+2) = DTEMP
            END DO
         ELSE
   *
   *       code for unequal increments or equal increments not equal
   *         to 1
   *
            IX = 1
            IY = 1
            IF (INCX.LT.0) IX = (-N+1)*INCX + 1
            IF (INCY.LT.0) IY = (-N+1)*INCY + 1
            DO I = 1,N
               DTEMP = DX(IX)
               DX(IX) = DY(IY)
               DY(IY) = DTEMP
               IX = IX + INCX
               IY = IY + INCY
            END DO
         END IF
       RETURN        RETURN
   *
   *     End of DSWAP
   *
       END        END

Removed from v.1.3  
changed lines
  Added in v.1.16


CVSweb interface <joel.bertrand@systella.fr>