Statistiques
| Révision :

root / src / blas / dscal.f @ 8

Historique | Voir | Annoter | Télécharger (1,21 ko)

1 1 equemene
      SUBROUTINE DSCAL(N,DA,DX,INCX)
2 1 equemene
*     .. Scalar Arguments ..
3 1 equemene
      DOUBLE PRECISION DA
4 1 equemene
      INTEGER INCX,N
5 1 equemene
*     ..
6 1 equemene
*     .. Array Arguments ..
7 1 equemene
      DOUBLE PRECISION DX(*)
8 1 equemene
*     ..
9 1 equemene
*
10 1 equemene
*  Purpose
11 1 equemene
*  =======
12 1 equemene
**
13 1 equemene
*     scales a vector by a constant.
14 1 equemene
*     uses unrolled loops for increment equal to one.
15 1 equemene
*     jack dongarra, linpack, 3/11/78.
16 1 equemene
*     modified 3/93 to return if incx .le. 0.
17 1 equemene
*     modified 12/3/93, array(1) declarations changed to array(*)
18 1 equemene
*
19 1 equemene
*
20 1 equemene
*     .. Local Scalars ..
21 1 equemene
      INTEGER I,M,MP1,NINCX
22 1 equemene
*     ..
23 1 equemene
*     .. Intrinsic Functions ..
24 1 equemene
      INTRINSIC MOD
25 1 equemene
*     ..
26 1 equemene
      IF (N.LE.0 .OR. INCX.LE.0) RETURN
27 1 equemene
      IF (INCX.EQ.1) GO TO 20
28 1 equemene
*
29 1 equemene
*        code for increment not equal to 1
30 1 equemene
*
31 1 equemene
      NINCX = N*INCX
32 1 equemene
      DO 10 I = 1,NINCX,INCX
33 1 equemene
          DX(I) = DA*DX(I)
34 1 equemene
   10 CONTINUE
35 1 equemene
      RETURN
36 1 equemene
*
37 1 equemene
*        code for increment equal to 1
38 1 equemene
*
39 1 equemene
*
40 1 equemene
*        clean-up loop
41 1 equemene
*
42 1 equemene
   20 M = MOD(N,5)
43 1 equemene
      IF (M.EQ.0) GO TO 40
44 1 equemene
      DO 30 I = 1,M
45 1 equemene
          DX(I) = DA*DX(I)
46 1 equemene
   30 CONTINUE
47 1 equemene
      IF (N.LT.5) RETURN
48 1 equemene
   40 MP1 = M + 1
49 1 equemene
      DO 50 I = MP1,N,5
50 1 equemene
          DX(I) = DA*DX(I)
51 1 equemene
          DX(I+1) = DA*DX(I+1)
52 1 equemene
          DX(I+2) = DA*DX(I+2)
53 1 equemene
          DX(I+3) = DA*DX(I+3)
54 1 equemene
          DX(I+4) = DA*DX(I+4)
55 1 equemene
   50 CONTINUE
56 1 equemene
      RETURN
57 1 equemene
      END