1 SUBROUTINE DSWAP(N,DX,INCX,DY,INCY)
2 * .. Scalar Arguments ..
3 INTEGER INCX,INCY,N
4 * ..
5 * .. Array Arguments ..
6 DOUBLE PRECISION DX(*),DY(*)
7 * ..
8 *
9 * Purpose
10 * =======
11 *
12 * interchanges two vectors.
13 * uses unrolled loops for increments equal one.
14 *
15 * Further Details
16 * ===============
17 *
18 * jack dongarra, linpack, 3/11/78.
19 * modified 12/3/93, array(1) declarations changed to array(*)
20 *
21 * =====================================================================
22 *
23 * .. Local Scalars ..
24 DOUBLE PRECISION DTEMP
25 INTEGER I,IX,IY,M,MP1
26 * ..
27 * .. Intrinsic Functions ..
28 INTRINSIC MOD
29 * ..
30 IF (N.LE.0) RETURN
31 IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
32 *
33 * code for both increments equal to 1
34 *
35 *
36 * clean-up loop
37 *
38 M = MOD(N,3)
39 IF (M.NE.0) THEN
40 DO I = 1,M
41 DTEMP = DX(I)
42 DX(I) = DY(I)
43 DY(I) = DTEMP
44 END DO
45 IF (N.LT.3) RETURN
46 END IF
47 MP1 = M + 1
48 DO I = MP1,N,3
49 DTEMP = DX(I)
50 DX(I) = DY(I)
51 DY(I) = DTEMP
52 DTEMP = DX(I+1)
53 DX(I+1) = DY(I+1)
54 DY(I+1) = DTEMP
55 DTEMP = DX(I+2)
56 DX(I+2) = DY(I+2)
57 DY(I+2) = DTEMP
58 END DO
59 ELSE
60 *
61 * code for unequal increments or equal increments not equal
62 * to 1
63 *
64 IX = 1
65 IY = 1
66 IF (INCX.LT.0) IX = (-N+1)*INCX + 1
67 IF (INCY.LT.0) IY = (-N+1)*INCY + 1
68 DO I = 1,N
69 DTEMP = DX(IX)
70 DX(IX) = DY(IY)
71 DY(IY) = DTEMP
72 IX = IX + INCX
73 IY = IY + INCY
74 END DO
75 END IF
76 RETURN
77 END
2 * .. Scalar Arguments ..
3 INTEGER INCX,INCY,N
4 * ..
5 * .. Array Arguments ..
6 DOUBLE PRECISION DX(*),DY(*)
7 * ..
8 *
9 * Purpose
10 * =======
11 *
12 * interchanges two vectors.
13 * uses unrolled loops for increments equal one.
14 *
15 * Further Details
16 * ===============
17 *
18 * jack dongarra, linpack, 3/11/78.
19 * modified 12/3/93, array(1) declarations changed to array(*)
20 *
21 * =====================================================================
22 *
23 * .. Local Scalars ..
24 DOUBLE PRECISION DTEMP
25 INTEGER I,IX,IY,M,MP1
26 * ..
27 * .. Intrinsic Functions ..
28 INTRINSIC MOD
29 * ..
30 IF (N.LE.0) RETURN
31 IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
32 *
33 * code for both increments equal to 1
34 *
35 *
36 * clean-up loop
37 *
38 M = MOD(N,3)
39 IF (M.NE.0) THEN
40 DO I = 1,M
41 DTEMP = DX(I)
42 DX(I) = DY(I)
43 DY(I) = DTEMP
44 END DO
45 IF (N.LT.3) RETURN
46 END IF
47 MP1 = M + 1
48 DO I = MP1,N,3
49 DTEMP = DX(I)
50 DX(I) = DY(I)
51 DY(I) = DTEMP
52 DTEMP = DX(I+1)
53 DX(I+1) = DY(I+1)
54 DY(I+1) = DTEMP
55 DTEMP = DX(I+2)
56 DX(I+2) = DY(I+2)
57 DY(I+2) = DTEMP
58 END DO
59 ELSE
60 *
61 * code for unequal increments or equal increments not equal
62 * to 1
63 *
64 IX = 1
65 IY = 1
66 IF (INCX.LT.0) IX = (-N+1)*INCX + 1
67 IF (INCY.LT.0) IY = (-N+1)*INCY + 1
68 DO I = 1,N
69 DTEMP = DX(IX)
70 DX(IX) = DY(IY)
71 DY(IY) = DTEMP
72 IX = IX + INCX
73 IY = IY + INCY
74 END DO
75 END IF
76 RETURN
77 END