LAPACK  3.4.1
LAPACK: Linear Algebra PACKage
dswap.f
Go to the documentation of this file.
00001 *> \brief \b DSWAP
00002 *
00003 *  =========== DOCUMENTATION ===========
00004 *
00005 * Online html documentation available at 
00006 *            http://www.netlib.org/lapack/explore-html/ 
00007 *
00008 *  Definition:
00009 *  ===========
00010 *
00011 *       SUBROUTINE DSWAP(N,DX,INCX,DY,INCY)
00012 * 
00013 *       .. Scalar Arguments ..
00014 *       INTEGER INCX,INCY,N
00015 *       ..
00016 *       .. Array Arguments ..
00017 *       DOUBLE PRECISION DX(*),DY(*)
00018 *       ..
00019 *  
00020 *
00021 *> \par Purpose:
00022 *  =============
00023 *>
00024 *> \verbatim
00025 *>
00026 *>    interchanges two vectors.
00027 *>    uses unrolled loops for increments equal one.
00028 *> \endverbatim
00029 *
00030 *  Authors:
00031 *  ========
00032 *
00033 *> \author Univ. of Tennessee 
00034 *> \author Univ. of California Berkeley 
00035 *> \author Univ. of Colorado Denver 
00036 *> \author NAG Ltd. 
00037 *
00038 *> \date November 2011
00039 *
00040 *> \ingroup double_blas_level1
00041 *
00042 *> \par Further Details:
00043 *  =====================
00044 *>
00045 *> \verbatim
00046 *>
00047 *>     jack dongarra, linpack, 3/11/78.
00048 *>     modified 12/3/93, array(1) declarations changed to array(*)
00049 *> \endverbatim
00050 *>
00051 *  =====================================================================
00052       SUBROUTINE DSWAP(N,DX,INCX,DY,INCY)
00053 *
00054 *  -- Reference BLAS level1 routine (version 3.4.0) --
00055 *  -- Reference BLAS is a software package provided by Univ. of Tennessee,    --
00056 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
00057 *     November 2011
00058 *
00059 *     .. Scalar Arguments ..
00060       INTEGER INCX,INCY,N
00061 *     ..
00062 *     .. Array Arguments ..
00063       DOUBLE PRECISION DX(*),DY(*)
00064 *     ..
00065 *
00066 *  =====================================================================
00067 *
00068 *     .. Local Scalars ..
00069       DOUBLE PRECISION DTEMP
00070       INTEGER I,IX,IY,M,MP1
00071 *     ..
00072 *     .. Intrinsic Functions ..
00073       INTRINSIC MOD
00074 *     ..
00075       IF (N.LE.0) RETURN
00076       IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
00077 *
00078 *       code for both increments equal to 1
00079 *
00080 *
00081 *       clean-up loop
00082 *
00083          M = MOD(N,3)
00084          IF (M.NE.0) THEN
00085             DO I = 1,M
00086                DTEMP = DX(I)
00087                DX(I) = DY(I)
00088                DY(I) = DTEMP
00089             END DO
00090             IF (N.LT.3) RETURN
00091          END IF
00092          MP1 = M + 1
00093          DO I = MP1,N,3
00094             DTEMP = DX(I)
00095             DX(I) = DY(I)
00096             DY(I) = DTEMP
00097             DTEMP = DX(I+1)
00098             DX(I+1) = DY(I+1)
00099             DY(I+1) = DTEMP
00100             DTEMP = DX(I+2)
00101             DX(I+2) = DY(I+2)
00102             DY(I+2) = DTEMP
00103          END DO
00104       ELSE
00105 *
00106 *       code for unequal increments or equal increments not equal
00107 *         to 1
00108 *
00109          IX = 1
00110          IY = 1
00111          IF (INCX.LT.0) IX = (-N+1)*INCX + 1
00112          IF (INCY.LT.0) IY = (-N+1)*INCY + 1
00113          DO I = 1,N
00114             DTEMP = DX(IX)
00115             DX(IX) = DY(IY)
00116             DY(IY) = DTEMP
00117             IX = IX + INCX
00118             IY = IY + INCY
00119          END DO
00120       END IF
00121       RETURN
00122       END
 All Files Functions