* ..
IF (N.LE.0) RETURN
IF (SCABS1(CA).EQ.0.0E+0) RETURN
- IF (INCX.EQ.1 .AND. INCY.EQ.1) GO TO 20
+ IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
+*
+* code for both increments equal to 1
+*
+ DO I = 1,N
+ CY(I) = CY(I) + CA*CX(I)
+ 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 10 I = 1,N
- CY(IY) = CY(IY) + CA*CX(IX)
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- RETURN
-*
-* code for both increments 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
+ CY(IY) = CY(IY) + CA*CX(IX)
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
*
- 20 DO 30 I = 1,N
- CY(I) = CY(I) + CA*CX(I)
- 30 CONTINUE
RETURN
END
INTEGER I,IX,IY
* ..
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
+* code for both increments 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
- CY(IY) = CX(IX)
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- RETURN
+ DO I = 1,N
+ CY(I) = CX(I)
+ END DO
+ ELSE
*
-* code for both increments equal to 1
+* code for unequal increments or equal increments
+* not equal to 1
*
- 20 DO 30 I = 1,N
- CY(I) = CX(I)
- 30 CONTINUE
+ 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
+ CY(IY) = CX(IX)
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
RETURN
END
CTEMP = (0.0,0.0)
CDOTC = (0.0,0.0)
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
+* code for both increments 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
- CTEMP = CTEMP + CONJG(CX(IX))*CY(IY)
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- CDOTC = CTEMP
- RETURN
+ DO I = 1,N
+ CTEMP = CTEMP + CONJG(CX(I))*CY(I)
+ END DO
+ ELSE
*
-* code for both increments equal to 1
+* code for unequal increments or equal increments
+* not equal to 1
*
- 20 DO 30 I = 1,N
- CTEMP = CTEMP + CONJG(CX(I))*CY(I)
- 30 CONTINUE
+ 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
+ CTEMP = CTEMP + CONJG(CX(IX))*CY(IY)
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
CDOTC = CTEMP
RETURN
END
CTEMP = (0.0,0.0)
CDOTU = (0.0,0.0)
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
+* code for both increments 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
- CTEMP = CTEMP + CX(IX)*CY(IY)
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- CDOTU = CTEMP
- RETURN
+ DO I = 1,N
+ CTEMP = CTEMP + CX(I)*CY(I)
+ END DO
+ ELSE
*
-* code for both increments equal to 1
+* code for unequal increments or equal increments
+* not equal to 1
*
- 20 DO 30 I = 1,N
- CTEMP = CTEMP + CX(I)*CY(I)
- 30 CONTINUE
+ 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
+ CTEMP = CTEMP + CX(IX)*CY(IY)
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
CDOTU = CTEMP
RETURN
END
* .. Intrinsic Functions ..
INTRINSIC CABS,CONJG,SQRT
* ..
- IF (CABS(CA).NE.0.) GO TO 10
- C = 0.
- S = (1.,0.)
- CA = CB
- GO TO 20
- 10 CONTINUE
- SCALE = CABS(CA) + CABS(CB)
- NORM = SCALE*SQRT((CABS(CA/SCALE))**2+ (CABS(CB/SCALE))**2)
- ALPHA = CA/CABS(CA)
- C = CABS(CA)/NORM
- S = ALPHA*CONJG(CB)/NORM
- CA = ALPHA*NORM
- 20 CONTINUE
+ IF (CABS(CA).EQ.0.) THEN
+ C = 0.
+ S = (1.,0.)
+ CA = CB
+ ELSE
+ SCALE = CABS(CA) + CABS(CB)
+ NORM = SCALE*SQRT((CABS(CA/SCALE))**2+ (CABS(CB/SCALE))**2)
+ ALPHA = CA/CABS(CA)
+ C = CABS(CA)/NORM
+ S = ALPHA*CONJG(CB)/NORM
+ CA = ALPHA*NORM
+ END IF
RETURN
END
INTEGER I,NINCX
* ..
IF (N.LE.0 .OR. INCX.LE.0) RETURN
- IF (INCX.EQ.1) GO TO 20
+ IF (INCX.EQ.1) THEN
*
-* code for increment not equal to 1
+* code for increment equal to 1
*
- NINCX = N*INCX
- DO 10 I = 1,NINCX,INCX
- CX(I) = CA*CX(I)
- 10 CONTINUE
- RETURN
+ DO I = 1,N
+ CX(I) = CA*CX(I)
+ END DO
+ ELSE
*
-* code for increment equal to 1
+* code for increment not equal to 1
*
- 20 DO 30 I = 1,N
- CX(I) = CA*CX(I)
- 30 CONTINUE
+ NINCX = N*INCX
+ DO I = 1,NINCX,INCX
+ CX(I) = CA*CX(I)
+ END DO
+ END IF
RETURN
END
*
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
+* code for both increments 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
- CTEMP = C*CX( IX ) + S*CY( IY )
- CY( IY ) = C*CY( IY ) - S*CX( IX )
- CX( IX ) = CTEMP
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- RETURN
+ DO I = 1, N
+ CTEMP = C*CX( I ) + S*CY( I )
+ CY( I ) = C*CY( I ) - S*CX( I )
+ CX( I ) = CTEMP
+ END DO
+ ELSE
*
-* code for both increments equal to 1
+* code for unequal increments or equal increments not equal
+* to 1
*
- 20 DO 30 I = 1, N
- CTEMP = C*CX( I ) + S*CY( I )
- CY( I ) = C*CY( I ) - S*CX( I )
- CX( I ) = CTEMP
- 30 CONTINUE
+ 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
+ CTEMP = C*CX( IX ) + S*CY( IY )
+ CY( IY ) = C*CY( IY ) - S*CX( IX )
+ CX( IX ) = CTEMP
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
RETURN
END
INTRINSIC AIMAG,CMPLX,REAL
* ..
IF (N.LE.0 .OR. INCX.LE.0) RETURN
- IF (INCX.EQ.1) GO TO 20
+ IF (INCX.EQ.1) THEN
*
-* code for increment not equal to 1
+* code for increment equal to 1
*
- NINCX = N*INCX
- DO 10 I = 1,NINCX,INCX
- CX(I) = CMPLX(SA*REAL(CX(I)),SA*AIMAG(CX(I)))
- 10 CONTINUE
- RETURN
+ DO I = 1,N
+ CX(I) = CMPLX(SA*REAL(CX(I)),SA*AIMAG(CX(I)))
+ END DO
+ ELSE
*
-* code for increment equal to 1
+* code for increment not equal to 1
*
- 20 DO 30 I = 1,N
- CX(I) = CMPLX(SA*REAL(CX(I)),SA*AIMAG(CX(I)))
- 30 CONTINUE
+ NINCX = N*INCX
+ DO I = 1,NINCX,INCX
+ CX(I) = CMPLX(SA*REAL(CX(I)),SA*AIMAG(CX(I)))
+ END DO
+ END IF
RETURN
END
INTEGER I,IX,IY
* ..
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 both increments equal to 1
+ DO I = 1,N
+ CTEMP = CX(I)
+ CX(I) = CY(I)
+ CY(I) = CTEMP
+ 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 10 I = 1,N
- CTEMP = CX(IX)
- CX(IX) = CY(IY)
- CY(IY) = CTEMP
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- RETURN
-*
-* code for both increments equal to 1
- 20 DO 30 I = 1,N
- CTEMP = CX(I)
- CX(I) = CY(I)
- CY(I) = CTEMP
- 30 CONTINUE
+ 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
+ CTEMP = CX(IX)
+ CX(IX) = CY(IY)
+ CY(IY) = CTEMP
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
RETURN
END
DASUM = 0.0d0
DTEMP = 0.0d0
IF (N.LE.0 .OR. INCX.LE.0) RETURN
- IF (INCX.EQ.1) GO TO 20
-*
-* code for increment not equal to 1
-*
- NINCX = N*INCX
- DO 10 I = 1,NINCX,INCX
- DTEMP = DTEMP + DABS(DX(I))
- 10 CONTINUE
- DASUM = DTEMP
- RETURN
-*
+ IF (INCX.EQ.1) THEN
* code for increment equal to 1
*
*
* clean-up loop
*
- 20 M = MOD(N,6)
- IF (M.EQ.0) GO TO 40
- DO 30 I = 1,M
- DTEMP = DTEMP + DABS(DX(I))
- 30 CONTINUE
- IF (N.LT.6) GO TO 60
- 40 MP1 = M + 1
- DO 50 I = MP1,N,6
- DTEMP = DTEMP + DABS(DX(I)) + DABS(DX(I+1)) + DABS(DX(I+2)) +
- + DABS(DX(I+3)) + DABS(DX(I+4)) + DABS(DX(I+5))
- 50 CONTINUE
- 60 DASUM = DTEMP
+ M = MOD(N,6)
+ IF (M.NE.0) THEN
+ DO I = 1,M
+ DTEMP = DTEMP + DABS(DX(I))
+ END DO
+ IF (N.LT.6) THEN
+ DASUM = DTEMP
+ RETURN
+ END IF
+ END IF
+ MP1 = M + 1
+ DO I = MP1,N,6
+ DTEMP = DTEMP + DABS(DX(I)) + DABS(DX(I+1)) +
+ $ DABS(DX(I+2)) + DABS(DX(I+3)) +
+ $ DABS(DX(I+4)) + DABS(DX(I+5))
+ END DO
+ ELSE
+*
+* code for increment not equal to 1
+*
+ NINCX = N*INCX
+ DO I = 1,NINCX,INCX
+ DTEMP = DTEMP + DABS(DX(I))
+ END DO
+ END IF
+ DASUM = DTEMP
RETURN
END
* ..
IF (N.LE.0) RETURN
IF (DA.EQ.0.0d0) RETURN
- IF (INCX.EQ.1 .AND. INCY.EQ.1) GO TO 20
+ IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
+*
+* code for both increments equal to 1
+*
+*
+* clean-up loop
+*
+ M = MOD(N,4)
+ IF (M.NE.0) THEN
+ DO I = 1,M
+ DY(I) = DY(I) + DA*DX(I)
+ END DO
+ END IF
+ IF (N.LT.4) RETURN
+ MP1 = M + 1
+ DO I = MP1,N,4
+ DY(I) = DY(I) + DA*DX(I)
+ DY(I+1) = DY(I+1) + DA*DX(I+1)
+ DY(I+2) = DY(I+2) + DA*DX(I+2)
+ DY(I+3) = DY(I+3) + DA*DX(I+3)
+ 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 10 I = 1,N
+ 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
DY(IY) = DY(IY) + DA*DX(IX)
IX = IX + INCX
IY = IY + INCY
- 10 CONTINUE
- RETURN
-*
-* code for both increments equal to 1
-*
-*
-* clean-up loop
-*
- 20 M = MOD(N,4)
- IF (M.EQ.0) GO TO 40
- DO 30 I = 1,M
- DY(I) = DY(I) + DA*DX(I)
- 30 CONTINUE
- IF (N.LT.4) RETURN
- 40 MP1 = M + 1
- DO 50 I = MP1,N,4
- DY(I) = DY(I) + DA*DX(I)
- DY(I+1) = DY(I+1) + DA*DX(I+1)
- DY(I+2) = DY(I+2) + DA*DX(I+2)
- DY(I+3) = DY(I+3) + DA*DX(I+3)
- 50 CONTINUE
+ END DO
+ END IF
RETURN
END
INTRINSIC MOD
* ..
IF (N.LE.0) RETURN
- IF (INCX.EQ.1 .AND. INCY.EQ.1) GO TO 20
-*
-* 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
- DY(IY) = DX(IX)
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- RETURN
+ IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
*
* code for both increments equal to 1
*
*
* clean-up loop
*
- 20 M = MOD(N,7)
- IF (M.EQ.0) GO TO 40
- DO 30 I = 1,M
- DY(I) = DX(I)
- 30 CONTINUE
- IF (N.LT.7) RETURN
- 40 MP1 = M + 1
- DO 50 I = MP1,N,7
- DY(I) = DX(I)
- DY(I+1) = DX(I+1)
- DY(I+2) = DX(I+2)
- DY(I+3) = DX(I+3)
- DY(I+4) = DX(I+4)
- DY(I+5) = DX(I+5)
- DY(I+6) = DX(I+6)
- 50 CONTINUE
+ M = MOD(N,7)
+ IF (M.NE.0) THEN
+ DO I = 1,M
+ DY(I) = DX(I)
+ END DO
+ IF (N.LT.7) RETURN
+ END IF
+ MP1 = M + 1
+ DO I = MP1,N,7
+ DY(I) = DX(I)
+ DY(I+1) = DX(I+1)
+ DY(I+2) = DX(I+2)
+ DY(I+3) = DX(I+3)
+ DY(I+4) = DX(I+4)
+ DY(I+5) = DX(I+5)
+ DY(I+6) = DX(I+6)
+ 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
+ DY(IY) = DX(IX)
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
RETURN
END
DDOT = 0.0d0
DTEMP = 0.0d0
IF (N.LE.0) RETURN
- IF (INCX.EQ.1 .AND. INCY.EQ.1) GO TO 20
-*
-* 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 = DTEMP + DX(IX)*DY(IY)
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- DDOT = DTEMP
- RETURN
+ IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
*
* code for both increments equal to 1
*
*
* clean-up loop
*
- 20 M = MOD(N,5)
- IF (M.EQ.0) GO TO 40
- DO 30 I = 1,M
- DTEMP = DTEMP + DX(I)*DY(I)
- 30 CONTINUE
- IF (N.LT.5) GO TO 60
- 40 MP1 = M + 1
- DO 50 I = MP1,N,5
+ M = MOD(N,5)
+ IF (M.NE.0) THEN
+ DO I = 1,M
+ DTEMP = DTEMP + DX(I)*DY(I)
+ END DO
+ IF (N.LT.5) THEN
+ DDOT=DTEMP
+ RETURN
+ END IF
+ END IF
+ MP1 = M + 1
+ DO I = MP1,N,5
DTEMP = DTEMP + DX(I)*DY(I) + DX(I+1)*DY(I+1) +
- + DX(I+2)*DY(I+2) + DX(I+3)*DY(I+3) + DX(I+4)*DY(I+4)
- 50 CONTINUE
- 60 DDOT = DTEMP
+ $ DX(I+2)*DY(I+2) + DX(I+3)*DY(I+3) + DX(I+4)*DY(I+4)
+ 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 = DTEMP + DX(IX)*DY(IY)
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
+ DDOT = DTEMP
RETURN
END
INTEGER I,IX,IY
* ..
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
+* code for both increments 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 = C*DX(IX) + S*DY(IY)
- DY(IY) = C*DY(IY) - S*DX(IX)
- DX(IX) = DTEMP
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- RETURN
+ DO I = 1,N
+ DTEMP = C*DX(I) + S*DY(I)
+ DY(I) = C*DY(I) - S*DX(I)
+ DX(I) = DTEMP
+ END DO
+ ELSE
*
-* code for both increments equal to 1
+* code for unequal increments or equal increments not equal
+* to 1
*
- 20 DO 30 I = 1,N
- DTEMP = C*DX(I) + S*DY(I)
- DY(I) = C*DY(I) - S*DX(I)
- DX(I) = DTEMP
- 30 CONTINUE
+ 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 = C*DX(IX) + S*DY(IY)
+ DY(IY) = C*DY(IY) - S*DX(IX)
+ DX(IX) = DTEMP
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
RETURN
END
ROE = DB
IF (DABS(DA).GT.DABS(DB)) ROE = DA
SCALE = DABS(DA) + DABS(DB)
- IF (SCALE.NE.0.0d0) GO TO 10
- C = 1.0d0
- S = 0.0d0
- R = 0.0d0
- Z = 0.0d0
- GO TO 20
- 10 R = SCALE*DSQRT((DA/SCALE)**2+ (DB/SCALE)**2)
- R = DSIGN(1.0d0,ROE)*R
- C = DA/R
- S = DB/R
- Z = 1.0d0
- IF (DABS(DA).GT.DABS(DB)) Z = S
- IF (DABS(DB).GE.DABS(DA) .AND. C.NE.0.0d0) Z = 1.0d0/C
- 20 DA = R
+ IF (SCALE.EQ.0.0d0) THEN
+ C = 1.0d0
+ S = 0.0d0
+ R = 0.0d0
+ Z = 0.0d0
+ ELSE
+ R = SCALE*DSQRT((DA/SCALE)**2+ (DB/SCALE)**2)
+ R = DSIGN(1.0d0,ROE)*R
+ C = DA/R
+ S = DB/R
+ Z = 1.0d0
+ IF (DABS(DA).GT.DABS(DB)) Z = S
+ IF (DABS(DB).GE.DABS(DA) .AND. C.NE.0.0d0) Z = 1.0d0/C
+ END IF
+ DA = R
DB = Z
RETURN
END
INTRINSIC MOD
* ..
IF (N.LE.0 .OR. INCX.LE.0) RETURN
- IF (INCX.EQ.1) GO TO 20
-*
-* code for increment not equal to 1
-*
- NINCX = N*INCX
- DO 10 I = 1,NINCX,INCX
- DX(I) = DA*DX(I)
- 10 CONTINUE
- RETURN
+ IF (INCX.EQ.1) THEN
*
* code for increment equal to 1
*
*
* clean-up loop
*
- 20 M = MOD(N,5)
- IF (M.EQ.0) GO TO 40
- DO 30 I = 1,M
- DX(I) = DA*DX(I)
- 30 CONTINUE
- IF (N.LT.5) RETURN
- 40 MP1 = M + 1
- DO 50 I = MP1,N,5
- DX(I) = DA*DX(I)
- DX(I+1) = DA*DX(I+1)
- DX(I+2) = DA*DX(I+2)
- DX(I+3) = DA*DX(I+3)
- DX(I+4) = DA*DX(I+4)
- 50 CONTINUE
+ M = MOD(N,5)
+ IF (M.NE.0) THEN
+ DO I = 1,M
+ DX(I) = DA*DX(I)
+ END DO
+ IF (N.LT.5) RETURN
+ END IF
+ MP1 = M + 1
+ DO I = MP1,N,5
+ DX(I) = DA*DX(I)
+ DX(I+1) = DA*DX(I+1)
+ DX(I+2) = DA*DX(I+2)
+ DX(I+3) = DA*DX(I+3)
+ DX(I+4) = DA*DX(I+4)
+ END DO
+ ELSE
+*
+* code for increment not equal to 1
+*
+ NINCX = N*INCX
+ DO I = 1,NINCX,INCX
+ DX(I) = DA*DX(I)
+ END DO
+ END IF
RETURN
END
* ..
DSDOT = 0.0D0
IF (N.LE.0) RETURN
- IF (INCX.EQ.INCY .AND. INCX.GT.0) GO TO 20
+ IF (INCX.EQ.INCY .AND. INCX.GT.0) THEN
*
-* Code for unequal or nonpositive increments.
+* Code for equal, positive, non-unit increments.
*
- KX = 1
- KY = 1
- IF (INCX.LT.0) KX = 1 + (1-N)*INCX
- IF (INCY.LT.0) KY = 1 + (1-N)*INCY
- DO 10 I = 1,N
- DSDOT = DSDOT + DBLE(SX(KX))*DBLE(SY(KY))
- KX = KX + INCX
- KY = KY + INCY
- 10 CONTINUE
- RETURN
+ NS = N*INCX
+ DO I = 1,NS,INCX
+ DSDOT = DSDOT + DBLE(SX(I))*DBLE(SY(I))
+ END DO
+ ELSE
*
-* Code for equal, positive, non-unit increments.
+* Code for unequal or nonpositive increments.
*
- 20 NS = N*INCX
- DO 30 I = 1,NS,INCX
- DSDOT = DSDOT + DBLE(SX(I))*DBLE(SY(I))
- 30 CONTINUE
+ KX = 1
+ KY = 1
+ IF (INCX.LT.0) KX = 1 + (1-N)*INCX
+ IF (INCY.LT.0) KY = 1 + (1-N)*INCY
+ DO I = 1,N
+ DSDOT = DSDOT + DBLE(SX(KX))*DBLE(SY(KY))
+ KX = KX + INCX
+ KY = KY + INCY
+ END DO
+ END IF
RETURN
END
INTRINSIC MOD
* ..
IF (N.LE.0) RETURN
- IF (INCX.EQ.1 .AND. INCY.EQ.1) GO TO 20
-*
-* 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
+ IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
*
* code for both increments equal to 1
*
*
* clean-up loop
*
- 20 M = MOD(N,3)
- IF (M.EQ.0) GO TO 40
- DO 30 I = 1,M
- DTEMP = DX(I)
- DX(I) = DY(I)
- DY(I) = DTEMP
- 30 CONTINUE
- IF (N.LT.3) RETURN
- 40 MP1 = M + 1
- DO 50 I = MP1,N,3
- DTEMP = DX(I)
- DX(I) = DY(I)
- DY(I) = DTEMP
- DTEMP = DX(I+1)
- DX(I+1) = DY(I+1)
- DY(I+1) = DTEMP
- DTEMP = DX(I+2)
- DX(I+2) = DY(I+2)
- DY(I+2) = DTEMP
- 50 CONTINUE
+ M = MOD(N,3)
+ IF (M.NE.0) THEN
+ DO I = 1,M
+ DTEMP = DX(I)
+ DX(I) = DY(I)
+ DY(I) = DTEMP
+ END DO
+ IF (N.LT.3) RETURN
+ END IF
+ MP1 = M + 1
+ DO I = MP1,N,3
+ DTEMP = DX(I)
+ DX(I) = DY(I)
+ DY(I) = DTEMP
+ DTEMP = DX(I+1)
+ DX(I+1) = DY(I+1)
+ DY(I+1) = DTEMP
+ DTEMP = DX(I+2)
+ DX(I+2) = DY(I+2)
+ 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
END
*
* .. Local Scalars ..
DOUBLE PRECISION STEMP
- INTEGER I,IX
+ INTEGER I,NINCX
* ..
* .. External Functions ..
DOUBLE PRECISION DCABS1
DZASUM = 0.0d0
STEMP = 0.0d0
IF (N.LE.0 .OR. INCX.LE.0) RETURN
- IF (INCX.EQ.1) GO TO 20
+ IF (INCX.EQ.1) THEN
*
-* code for increment not equal to 1
+* code for increment equal to 1
*
- IX = 1
- DO 10 I = 1,N
- STEMP = STEMP + DCABS1(ZX(IX))
- IX = IX + INCX
- 10 CONTINUE
- DZASUM = STEMP
- RETURN
+ DO I = 1,N
+ STEMP = STEMP + DCABS1(ZX(I))
+ END DO
+ ELSE
*
-* code for increment equal to 1
+* code for increment not equal to 1
*
- 20 DO 30 I = 1,N
- STEMP = STEMP + DCABS1(ZX(I))
- 30 CONTINUE
+ NINCX = N*INCX
+ DO I = 1,NINCX,INCX
+ STEMP = STEMP + DCABS1(ZX(I))
+ END DO
+ END IF
DZASUM = STEMP
RETURN
END
IF (N.LT.1 .OR. INCX.LE.0) RETURN
ICAMAX = 1
IF (N.EQ.1) RETURN
- IF (INCX.EQ.1) GO TO 20
+ IF (INCX.EQ.1) THEN
*
-* code for increment not equal to 1
+* code for increment equal to 1
*
- IX = 1
- SMAX = SCABS1(CX(1))
- IX = IX + INCX
- DO 10 I = 2,N
- IF (SCABS1(CX(IX)).LE.SMAX) GO TO 5
- ICAMAX = I
- SMAX = SCABS1(CX(IX))
- 5 IX = IX + INCX
- 10 CONTINUE
- RETURN
+ SMAX = SCABS1(CX(1))
+ DO I = 2,N
+ IF (SCABS1(CX(I)).GT.SMAX) THEN
+ ICAMAX = I
+ SMAX = SCABS1(CX(I))
+ END IF
+ END DO
+ ELSE
*
-* code for increment equal to 1
+* code for increment not equal to 1
*
- 20 SMAX = SCABS1(CX(1))
- DO 30 I = 2,N
- IF (SCABS1(CX(I)).LE.SMAX) GO TO 30
- ICAMAX = I
- SMAX = SCABS1(CX(I))
- 30 CONTINUE
+ IX = 1
+ SMAX = SCABS1(CX(1))
+ IX = IX + INCX
+ DO I = 2,N
+ IF (SCABS1(CX(IX)).GT.SMAX) THEN
+ ICAMAX = I
+ SMAX = SCABS1(CX(IX))
+ END IF
+ IX = IX + INCX
+ END DO
+ END IF
RETURN
END
IF (N.LT.1 .OR. INCX.LE.0) RETURN
IDAMAX = 1
IF (N.EQ.1) RETURN
- IF (INCX.EQ.1) GO TO 20
+ IF (INCX.EQ.1) THEN
*
-* code for increment not equal to 1
+* code for increment equal to 1
*
- IX = 1
- DMAX = DABS(DX(1))
- IX = IX + INCX
- DO 10 I = 2,N
- IF (DABS(DX(IX)).LE.DMAX) GO TO 5
- IDAMAX = I
- DMAX = DABS(DX(IX))
- 5 IX = IX + INCX
- 10 CONTINUE
- RETURN
+ DMAX = DABS(DX(1))
+ DO I = 2,N
+ IF (DABS(DX(I)).GT.DMAX) THEN
+ IDAMAX = I
+ DMAX = DABS(DX(I))
+ END IF
+ END DO
+ ELSE
*
-* code for increment equal to 1
+* code for increment not equal to 1
*
- 20 DMAX = DABS(DX(1))
- DO 30 I = 2,N
- IF (DABS(DX(I)).LE.DMAX) GO TO 30
- IDAMAX = I
- DMAX = DABS(DX(I))
- 30 CONTINUE
+ IX = 1
+ DMAX = DABS(DX(1))
+ IX = IX + INCX
+ DO I = 2,N
+ IF (DABS(DX(IX)).GT.DMAX) THEN
+ IDAMAX = I
+ DMAX = DABS(DX(IX))
+ END IF
+ IX = IX + INCX
+ END DO
+ END IF
RETURN
END
IF (N.LT.1 .OR. INCX.LE.0) RETURN
ISAMAX = 1
IF (N.EQ.1) RETURN
- IF (INCX.EQ.1) GO TO 20
+ IF (INCX.EQ.1) THEN
*
-* code for increment not equal to 1
+* code for increment equal to 1
*
- IX = 1
- SMAX = ABS(SX(1))
- IX = IX + INCX
- DO 10 I = 2,N
- IF (ABS(SX(IX)).LE.SMAX) GO TO 5
- ISAMAX = I
- SMAX = ABS(SX(IX))
- 5 IX = IX + INCX
- 10 CONTINUE
- RETURN
+ SMAX = ABS(SX(1))
+ DO I = 2,N
+ IF (ABS(SX(I)).GT.SMAX) THEN
+ ISAMAX = I
+ SMAX = ABS(SX(I))
+ END IF
+ END DO
+ ELSE
*
-* code for increment equal to 1
+* code for increment not equal to 1
*
- 20 SMAX = ABS(SX(1))
- DO 30 I = 2,N
- IF (ABS(SX(I)).LE.SMAX) GO TO 30
- ISAMAX = I
- SMAX = ABS(SX(I))
- 30 CONTINUE
+ IX = 1
+ SMAX = ABS(SX(1))
+ IX = IX + INCX
+ DO I = 2,N
+ IF (ABS(SX(IX)).GT.SMAX) THEN
+ ISAMAX = I
+ SMAX = ABS(SX(IX))
+ END IF
+ IX = IX + INCX
+ END DO
+ END IF
RETURN
END
* =====================================================================
*
* .. Local Scalars ..
- DOUBLE PRECISION SMAX
+ DOUBLE PRECISION DMAX
INTEGER I,IX
* ..
* .. External Functions ..
IF (N.LT.1 .OR. INCX.LE.0) RETURN
IZAMAX = 1
IF (N.EQ.1) RETURN
- IF (INCX.EQ.1) GO TO 20
+ IF (INCX.EQ.1) THEN
*
-* code for increment not equal to 1
+* code for increment equal to 1
*
- IX = 1
- SMAX = DCABS1(ZX(1))
- IX = IX + INCX
- DO 10 I = 2,N
- IF (DCABS1(ZX(IX)).LE.SMAX) GO TO 5
- IZAMAX = I
- SMAX = DCABS1(ZX(IX))
- 5 IX = IX + INCX
- 10 CONTINUE
- RETURN
+ DMAX = DCABS1(ZX(1))
+ DO I = 2,N
+ IF (DCABS1(ZX(I)).GT.DMAX) THEN
+ IZAMAX = I
+ DMAX = DCABS1(ZX(I))
+ END IF
+ END DO
+ ELSE
*
-* code for increment equal to 1
+* code for increment not equal to 1
*
- 20 SMAX = DCABS1(ZX(1))
- DO 30 I = 2,N
- IF (DCABS1(ZX(I)).LE.SMAX) GO TO 30
- IZAMAX = I
- SMAX = DCABS1(ZX(I))
- 30 CONTINUE
+ IX = 1
+ DMAX = DCABS1(ZX(1))
+ IX = IX + INCX
+ DO I = 2,N
+ IF (DCABS1(ZX(IX)).GT.DMAX) THEN
+ IZAMAX = I
+ DMAX = DCABS1(ZX(IX))
+ END IF
+ IX = IX + INCX
+ END DO
+ END IF
RETURN
END
SASUM = 0.0e0
STEMP = 0.0e0
IF (N.LE.0 .OR. INCX.LE.0) RETURN
- IF (INCX.EQ.1) GO TO 20
-*
-* code for increment not equal to 1
-*
- NINCX = N*INCX
- DO 10 I = 1,NINCX,INCX
- STEMP = STEMP + ABS(SX(I))
- 10 CONTINUE
- SASUM = STEMP
- RETURN
-*
+ IF (INCX.EQ.1) THEN
* code for increment equal to 1
*
*
* clean-up loop
*
- 20 M = MOD(N,6)
- IF (M.EQ.0) GO TO 40
- DO 30 I = 1,M
- STEMP = STEMP + ABS(SX(I))
- 30 CONTINUE
- IF (N.LT.6) GO TO 60
- 40 MP1 = M + 1
- DO 50 I = MP1,N,6
- STEMP = STEMP + ABS(SX(I)) + ABS(SX(I+1)) + ABS(SX(I+2)) +
- + ABS(SX(I+3)) + ABS(SX(I+4)) + ABS(SX(I+5))
- 50 CONTINUE
- 60 SASUM = STEMP
+ M = MOD(N,6)
+ IF (M.NE.0) THEN
+ DO I = 1,M
+ STEMP = STEMP + ABS(SX(I))
+ END DO
+ IF (N.LT.6) THEN
+ SASUM = STEMP
+ RETURN
+ END IF
+ END IF
+ MP1 = M + 1
+ DO I = MP1,N,6
+ STEMP = STEMP + ABS(SX(I)) + ABS(SX(I+1)) +
+ $ ABS(SX(I+2)) + ABS(SX(I+3)) +
+ $ ABS(SX(I+4)) + ABS(SX(I+5))
+ END DO
+ ELSE
+*
+* code for increment not equal to 1
+*
+ NINCX = N*INCX
+ DO I = 1,NINCX,INCX
+ STEMP = STEMP + ABS(SX(I))
+ END DO
+ END IF
+ SASUM = STEMP
RETURN
END
* =======
*
* SAXPY constant times a vector plus a vector.
-* uses unrolled loop for increments equal to one.
+* uses unrolled loops for increments equal to one.
*
* Further Details
* ===============
* ..
IF (N.LE.0) RETURN
IF (SA.EQ.0.0) RETURN
- IF (INCX.EQ.1 .AND. INCY.EQ.1) GO TO 20
+ IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
+*
+* code for both increments equal to 1
+*
+*
+* clean-up loop
+*
+ M = MOD(N,4)
+ IF (M.NE.0) THEN
+ DO I = 1,M
+ SY(I) = SY(I) + SA*SX(I)
+ END DO
+ END IF
+ IF (N.LT.4) RETURN
+ MP1 = M + 1
+ DO I = MP1,N,4
+ SY(I) = SY(I) + SA*SX(I)
+ SY(I+1) = SY(I+1) + SA*SX(I+1)
+ SY(I+2) = SY(I+2) + SA*SX(I+2)
+ SY(I+3) = SY(I+3) + SA*SX(I+3)
+ 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 10 I = 1,N
+ 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
SY(IY) = SY(IY) + SA*SX(IX)
IX = IX + INCX
IY = IY + INCY
- 10 CONTINUE
- RETURN
-*
-* code for both increments equal to 1
-*
-*
-* clean-up loop
-*
- 20 M = MOD(N,4)
- IF (M.EQ.0) GO TO 40
- DO 30 I = 1,M
- SY(I) = SY(I) + SA*SX(I)
- 30 CONTINUE
- IF (N.LT.4) RETURN
- 40 MP1 = M + 1
- DO 50 I = MP1,N,4
- SY(I) = SY(I) + SA*SX(I)
- SY(I+1) = SY(I+1) + SA*SX(I+1)
- SY(I+2) = SY(I+2) + SA*SX(I+2)
- SY(I+3) = SY(I+3) + SA*SX(I+3)
- 50 CONTINUE
+ END DO
+ END IF
RETURN
END
SCASUM = 0.0e0
STEMP = 0.0e0
IF (N.LE.0 .OR. INCX.LE.0) RETURN
- IF (INCX.EQ.1) GO TO 20
+ IF (INCX.EQ.1) THEN
*
-* code for increment not equal to 1
+* code for increment equal to 1
*
- NINCX = N*INCX
- DO 10 I = 1,NINCX,INCX
- STEMP = STEMP + ABS(REAL(CX(I))) + ABS(AIMAG(CX(I)))
- 10 CONTINUE
- SCASUM = STEMP
- RETURN
+ DO I = 1,N
+ STEMP = STEMP + ABS(REAL(CX(I))) + ABS(AIMAG(CX(I)))
+ END DO
+ ELSE
*
-* code for increment equal to 1
+* code for increment not equal to 1
*
- 20 DO 30 I = 1,N
- STEMP = STEMP + ABS(REAL(CX(I))) + ABS(AIMAG(CX(I)))
- 30 CONTINUE
+ NINCX = N*INCX
+ DO I = 1,NINCX,INCX
+ STEMP = STEMP + ABS(REAL(CX(I))) + ABS(AIMAG(CX(I)))
+ END DO
+ END IF
SCASUM = STEMP
RETURN
END
INTRINSIC MOD
* ..
IF (N.LE.0) RETURN
- IF (INCX.EQ.1 .AND. INCY.EQ.1) GO TO 20
-*
-* 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
- SY(IY) = SX(IX)
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- RETURN
+ IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
*
* code for both increments equal to 1
*
*
* clean-up loop
*
- 20 M = MOD(N,7)
- IF (M.EQ.0) GO TO 40
- DO 30 I = 1,M
- SY(I) = SX(I)
- 30 CONTINUE
- IF (N.LT.7) RETURN
- 40 MP1 = M + 1
- DO 50 I = MP1,N,7
- SY(I) = SX(I)
- SY(I+1) = SX(I+1)
- SY(I+2) = SX(I+2)
- SY(I+3) = SX(I+3)
- SY(I+4) = SX(I+4)
- SY(I+5) = SX(I+5)
- SY(I+6) = SX(I+6)
- 50 CONTINUE
+ M = MOD(N,7)
+ IF (M.NE.0) THEN
+ DO I = 1,M
+ SY(I) = SX(I)
+ END DO
+ IF (N.LT.7) RETURN
+ END IF
+ MP1 = M + 1
+ DO I = MP1,N,7
+ SY(I) = SX(I)
+ SY(I+1) = SX(I+1)
+ SY(I+2) = SX(I+2)
+ SY(I+3) = SX(I+3)
+ SY(I+4) = SX(I+4)
+ SY(I+5) = SX(I+5)
+ SY(I+6) = SX(I+6)
+ 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
+ SY(IY) = SX(IX)
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
RETURN
END
STEMP = 0.0e0
SDOT = 0.0e0
IF (N.LE.0) RETURN
- IF (INCX.EQ.1 .AND. INCY.EQ.1) GO TO 20
-*
-* 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
- STEMP = STEMP + SX(IX)*SY(IY)
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- SDOT = STEMP
- RETURN
+ IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
*
* code for both increments equal to 1
*
*
* clean-up loop
*
- 20 M = MOD(N,5)
- IF (M.EQ.0) GO TO 40
- DO 30 I = 1,M
- STEMP = STEMP + SX(I)*SY(I)
- 30 CONTINUE
- IF (N.LT.5) GO TO 60
- 40 MP1 = M + 1
- DO 50 I = MP1,N,5
+ M = MOD(N,5)
+ IF (M.NE.0) THEN
+ DO I = 1,M
+ STEMP = STEMP + SX(I)*SY(I)
+ END DO
+ IF (N.LT.5) THEN
+ SDOT=STEMP
+ RETURN
+ END IF
+ END IF
+ MP1 = M + 1
+ DO I = MP1,N,5
STEMP = STEMP + SX(I)*SY(I) + SX(I+1)*SY(I+1) +
- + SX(I+2)*SY(I+2) + SX(I+3)*SY(I+3) + SX(I+4)*SY(I+4)
- 50 CONTINUE
- 60 SDOT = STEMP
+ $ SX(I+2)*SY(I+2) + SX(I+3)*SY(I+3) + SX(I+4)*SY(I+4)
+ 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
+ STEMP = STEMP + SX(IX)*SY(IY)
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
+ SDOT = STEMP
RETURN
END
INTRINSIC DBLE
* ..
DSDOT = SB
- IF (N.LE.0) GO TO 30
- IF (INCX.EQ.INCY .AND. INCX.GT.0) GO TO 40
+ IF (N.LE.0) THEN
+ SDSDOT = DSDOT
+ RETURN
+ END IF
+ IF (INCX.EQ.INCY .AND. INCX.GT.0) THEN
*
-* Code for unequal or nonpositive increments.
+* Code for equal and positive increments.
*
- KX = 1
- KY = 1
- IF (INCX.LT.0) KX = 1 + (1-N)*INCX
- IF (INCY.LT.0) KY = 1 + (1-N)*INCY
- DO 10 I = 1,N
- DSDOT = DSDOT + DBLE(SX(KX))*DBLE(SY(KY))
- KX = KX + INCX
- KY = KY + INCY
- 10 CONTINUE
- 30 SDSDOT = DSDOT
- RETURN
+ NS = N*INCX
+ DO I = 1,NS,INCX
+ DSDOT = DSDOT + DBLE(SX(I))*DBLE(SY(I))
+ END DO
+ ELSE
*
-* Code for equal and positive increments.
+* Code for unequal or nonpositive increments.
*
- 40 NS = N*INCX
- DO 50 I = 1,NS,INCX
- DSDOT = DSDOT + DBLE(SX(I))*DBLE(SY(I))
- 50 CONTINUE
+ KX = 1
+ KY = 1
+ IF (INCX.LT.0) KX = 1 + (1-N)*INCX
+ IF (INCY.LT.0) KY = 1 + (1-N)*INCY
+ DO I = 1,N
+ DSDOT = DSDOT + DBLE(SX(KX))*DBLE(SY(KY))
+ KX = KX + INCX
+ KY = KY + INCY
+ END DO
+ END IF
SDSDOT = DSDOT
RETURN
END
INTEGER I,IX,IY
* ..
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
+* code for both increments 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
- STEMP = C*SX(IX) + S*SY(IY)
- SY(IY) = C*SY(IY) - S*SX(IX)
- SX(IX) = STEMP
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- RETURN
+ DO I = 1,N
+ STEMP = C*SX(I) + S*SY(I)
+ SY(I) = C*SY(I) - S*SX(I)
+ SX(I) = STEMP
+ END DO
+ ELSE
*
-* code for both increments equal to 1
+* code for unequal increments or equal increments not equal
+* to 1
*
- 20 DO 30 I = 1,N
- STEMP = C*SX(I) + S*SY(I)
- SY(I) = C*SY(I) - S*SX(I)
- SX(I) = STEMP
- 30 CONTINUE
+ 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
+ STEMP = C*SX(IX) + S*SY(IY)
+ SY(IY) = C*SY(IY) - S*SX(IX)
+ SX(IX) = STEMP
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
RETURN
END
ROE = SB
IF (ABS(SA).GT.ABS(SB)) ROE = SA
SCALE = ABS(SA) + ABS(SB)
- IF (SCALE.NE.0.0) GO TO 10
- C = 1.0
- S = 0.0
- R = 0.0
- Z = 0.0
- GO TO 20
- 10 R = SCALE*SQRT((SA/SCALE)**2+ (SB/SCALE)**2)
- R = SIGN(1.0,ROE)*R
- C = SA/R
- S = SB/R
- Z = 1.0
- IF (ABS(SA).GT.ABS(SB)) Z = S
- IF (ABS(SB).GE.ABS(SA) .AND. C.NE.0.0) Z = 1.0/C
- 20 SA = R
+ IF (SCALE.EQ.0.0) THEN
+ C = 1.0
+ S = 0.0
+ R = 0.0
+ Z = 0.0
+ ELSE
+ R = SCALE*SQRT((SA/SCALE)**2+ (SB/SCALE)**2)
+ R = SIGN(1.0,ROE)*R
+ C = SA/R
+ S = SB/R
+ Z = 1.0
+ IF (ABS(SA).GT.ABS(SB)) Z = S
+ IF (ABS(SB).GE.ABS(SA) .AND. C.NE.0.0) Z = 1.0/C
+ END IF
+ SA = R
SB = Z
RETURN
END
INTRINSIC MOD
* ..
IF (N.LE.0 .OR. INCX.LE.0) RETURN
- IF (INCX.EQ.1) GO TO 20
-*
-* code for increment not equal to 1
-*
- NINCX = N*INCX
- DO 10 I = 1,NINCX,INCX
- SX(I) = SA*SX(I)
- 10 CONTINUE
- RETURN
+ IF (INCX.EQ.1) THEN
*
* code for increment equal to 1
*
*
* clean-up loop
*
- 20 M = MOD(N,5)
- IF (M.EQ.0) GO TO 40
- DO 30 I = 1,M
- SX(I) = SA*SX(I)
- 30 CONTINUE
- IF (N.LT.5) RETURN
- 40 MP1 = M + 1
- DO 50 I = MP1,N,5
- SX(I) = SA*SX(I)
- SX(I+1) = SA*SX(I+1)
- SX(I+2) = SA*SX(I+2)
- SX(I+3) = SA*SX(I+3)
- SX(I+4) = SA*SX(I+4)
- 50 CONTINUE
+ M = MOD(N,5)
+ IF (M.NE.0) THEN
+ DO I = 1,M
+ SX(I) = SA*SX(I)
+ END DO
+ IF (N.LT.5) RETURN
+ END IF
+ MP1 = M + 1
+ DO I = MP1,N,5
+ SX(I) = SA*SX(I)
+ SX(I+1) = SA*SX(I+1)
+ SX(I+2) = SA*SX(I+2)
+ SX(I+3) = SA*SX(I+3)
+ SX(I+4) = SA*SX(I+4)
+ END DO
+ ELSE
+*
+* code for increment not equal to 1
+*
+ NINCX = N*INCX
+ DO I = 1,NINCX,INCX
+ SX(I) = SA*SX(I)
+ END DO
+ END IF
RETURN
END
INTRINSIC MOD
* ..
IF (N.LE.0) RETURN
- IF (INCX.EQ.1 .AND. INCY.EQ.1) GO TO 20
-*
-* 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
- STEMP = SX(IX)
- SX(IX) = SY(IY)
- SY(IY) = STEMP
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- RETURN
+ IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
*
* code for both increments equal to 1
*
*
* clean-up loop
*
- 20 M = MOD(N,3)
- IF (M.EQ.0) GO TO 40
- DO 30 I = 1,M
- STEMP = SX(I)
- SX(I) = SY(I)
- SY(I) = STEMP
- 30 CONTINUE
- IF (N.LT.3) RETURN
- 40 MP1 = M + 1
- DO 50 I = MP1,N,3
- STEMP = SX(I)
- SX(I) = SY(I)
- SY(I) = STEMP
- STEMP = SX(I+1)
- SX(I+1) = SY(I+1)
- SY(I+1) = STEMP
- STEMP = SX(I+2)
- SX(I+2) = SY(I+2)
- SY(I+2) = STEMP
- 50 CONTINUE
+ M = MOD(N,3)
+ IF (M.NE.0) THEN
+ DO I = 1,M
+ STEMP = SX(I)
+ SX(I) = SY(I)
+ SY(I) = STEMP
+ END DO
+ IF (N.LT.3) RETURN
+ END IF
+ MP1 = M + 1
+ DO I = MP1,N,3
+ STEMP = SX(I)
+ SX(I) = SY(I)
+ SY(I) = STEMP
+ STEMP = SX(I+1)
+ SX(I+1) = SY(I+1)
+ SY(I+1) = STEMP
+ STEMP = SX(I+2)
+ SX(I+2) = SY(I+2)
+ SY(I+2) = STEMP
+ 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
+ STEMP = SX(IX)
+ SX(IX) = SY(IY)
+ SY(IY) = STEMP
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
RETURN
END
* ..
IF (N.LE.0) RETURN
IF (DCABS1(ZA).EQ.0.0d0) RETURN
- IF (INCX.EQ.1 .AND. INCY.EQ.1) GO TO 20
+ IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
+*
+* code for both increments equal to 1
+*
+ DO I = 1,N
+ ZY(I) = ZY(I) + ZA*ZX(I)
+ 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 10 I = 1,N
- ZY(IY) = ZY(IY) + ZA*ZX(IX)
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- RETURN
-*
-* code for both increments 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
+ ZY(IY) = ZY(IY) + ZA*ZX(IX)
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
*
- 20 DO 30 I = 1,N
- ZY(I) = ZY(I) + ZA*ZX(I)
- 30 CONTINUE
RETURN
END
INTEGER I,IX,IY
* ..
IF (N.LE.0) RETURN
- IF (INCX.EQ.1 .AND. INCY.EQ.1) GO TO 20
-*
-* 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
- ZY(IY) = ZX(IX)
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- RETURN
+ IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN
*
* code for both increments equal to 1
*
- 20 DO 30 I = 1,N
+ DO I = 1,N
ZY(I) = ZX(I)
- 30 CONTINUE
+ 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
+ ZY(IY) = ZX(IX)
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
RETURN
END
ZTEMP = (0.0d0,0.0d0)
ZDOTC = (0.0d0,0.0d0)
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
+* code for both increments 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
- ZTEMP = ZTEMP + DCONJG(ZX(IX))*ZY(IY)
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- ZDOTC = ZTEMP
- RETURN
+ DO I = 1,N
+ ZTEMP = ZTEMP + DCONJG(ZX(I))*ZY(I)
+ END DO
+ ELSE
*
-* code for both increments equal to 1
+* code for unequal increments or equal increments
+* not equal to 1
*
- 20 DO 30 I = 1,N
- ZTEMP = ZTEMP + DCONJG(ZX(I))*ZY(I)
- 30 CONTINUE
+ 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
+ ZTEMP = ZTEMP + DCONJG(ZX(IX))*ZY(IY)
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
ZDOTC = ZTEMP
RETURN
END
ZTEMP = (0.0d0,0.0d0)
ZDOTU = (0.0d0,0.0d0)
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
+* code for both increments 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
- ZTEMP = ZTEMP + ZX(IX)*ZY(IY)
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- ZDOTU = ZTEMP
- RETURN
+ DO I = 1,N
+ ZTEMP = ZTEMP + ZX(I)*ZY(I)
+ END DO
+ ELSE
*
-* code for both increments equal to 1
+* code for unequal increments or equal increments
+* not equal to 1
*
- 20 DO 30 I = 1,N
- ZTEMP = ZTEMP + ZX(I)*ZY(I)
- 30 CONTINUE
+ 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
+ ZTEMP = ZTEMP + ZX(IX)*ZY(IY)
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
ZDOTU = ZTEMP
RETURN
END
*
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
+* code for both increments 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
- CTEMP = C*CX( IX ) + S*CY( IY )
- CY( IY ) = C*CY( IY ) - S*CX( IX )
- CX( IX ) = CTEMP
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- RETURN
+ DO I = 1, N
+ CTEMP = C*CX( I ) + S*CY( I )
+ CY( I ) = C*CY( I ) - S*CX( I )
+ CX( I ) = CTEMP
+ END DO
+ ELSE
*
-* code for both increments equal to 1
+* code for unequal increments or equal increments not equal
+* to 1
*
- 20 CONTINUE
- DO 30 I = 1, N
- CTEMP = C*CX( I ) + S*CY( I )
- CY( I ) = C*CY( I ) - S*CX( I )
- CX( I ) = CTEMP
- 30 CONTINUE
+ 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
+ CTEMP = C*CX( IX ) + S*CY( IY )
+ CY( IY ) = C*CY( IY ) - S*CX( IX )
+ CX( IX ) = CTEMP
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
RETURN
END
* =====================================================================
*
* .. Local Scalars ..
- INTEGER I,IX
+ INTEGER I,NINCX
* ..
* .. Intrinsic Functions ..
INTRINSIC DCMPLX
* ..
IF (N.LE.0 .OR. INCX.LE.0) RETURN
- IF (INCX.EQ.1) GO TO 20
+ IF (INCX.EQ.1) THEN
*
-* code for increment not equal to 1
+* code for increment equal to 1
*
- IX = 1
- DO 10 I = 1,N
- ZX(IX) = DCMPLX(DA,0.0d0)*ZX(IX)
- IX = IX + INCX
- 10 CONTINUE
- RETURN
+ DO I = 1,N
+ ZX(I) = DCMPLX(DA,0.0d0)*ZX(I)
+ END DO
+ ELSE
*
-* code for increment equal to 1
+* code for increment not equal to 1
*
- 20 DO 30 I = 1,N
- ZX(I) = DCMPLX(DA,0.0d0)*ZX(I)
- 30 CONTINUE
+ NINCX = N*INCX
+ DO I = 1,NINCX,INCX
+ ZX(I) = DCMPLX(DA,0.0d0)*ZX(I)
+ END DO
+ END IF
RETURN
END
* .. Intrinsic Functions ..
INTRINSIC CDABS,DCMPLX,DCONJG,DSQRT
* ..
- IF (CDABS(CA).NE.0.0d0) GO TO 10
- C = 0.0d0
- S = (1.0d0,0.0d0)
- CA = CB
- GO TO 20
- 10 CONTINUE
- SCALE = CDABS(CA) + CDABS(CB)
- NORM = SCALE*DSQRT((CDABS(CA/DCMPLX(SCALE,0.0d0)))**2+
- + (CDABS(CB/DCMPLX(SCALE,0.0d0)))**2)
- ALPHA = CA/CDABS(CA)
- C = CDABS(CA)/NORM
- S = ALPHA*DCONJG(CB)/NORM
- CA = ALPHA*NORM
- 20 CONTINUE
+ IF (CDABS(CA).EQ.0.0d0) THEN
+ C = 0.0d0
+ S = (1.0d0,0.0d0)
+ CA = CB
+ ELSE
+ SCALE = CDABS(CA) + CDABS(CB)
+ NORM = SCALE*DSQRT((CDABS(CA/DCMPLX(SCALE,0.0d0)))**2+
+ $ (CDABS(CB/DCMPLX(SCALE,0.0d0)))**2)
+ ALPHA = CA/CDABS(CA)
+ C = CDABS(CA)/NORM
+ S = ALPHA*DCONJG(CB)/NORM
+ CA = ALPHA*NORM
+ END IF
RETURN
END
* =====================================================================
*
* .. Local Scalars ..
- INTEGER I,IX
+ INTEGER I,NINCX
* ..
IF (N.LE.0 .OR. INCX.LE.0) RETURN
- IF (INCX.EQ.1) GO TO 20
+ IF (INCX.EQ.1) THEN
*
-* code for increment not equal to 1
+* code for increment equal to 1
*
- IX = 1
- DO 10 I = 1,N
- ZX(IX) = ZA*ZX(IX)
- IX = IX + INCX
- 10 CONTINUE
- RETURN
+ DO I = 1,N
+ ZX(I) = ZA*ZX(I)
+ END DO
+ ELSE
*
-* code for increment equal to 1
+* code for increment not equal to 1
*
- 20 DO 30 I = 1,N
- ZX(I) = ZA*ZX(I)
- 30 CONTINUE
+ NINCX = N*INCX
+ DO I = 1,NINCX,INCX
+ ZX(I) = ZA*ZX(I)
+ END DO
+ END IF
RETURN
END
INTEGER I,IX,IY
* ..
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 both increments equal to 1
+ DO I = 1,N
+ ZTEMP = ZX(I)
+ ZX(I) = ZY(I)
+ ZY(I) = ZTEMP
+ 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 10 I = 1,N
- ZTEMP = ZX(IX)
- ZX(IX) = ZY(IY)
- ZY(IY) = ZTEMP
- IX = IX + INCX
- IY = IY + INCY
- 10 CONTINUE
- RETURN
-*
-* code for both increments equal to 1
- 20 DO 30 I = 1,N
- ZTEMP = ZX(I)
- ZX(I) = ZY(I)
- ZY(I) = ZTEMP
- 30 CONTINUE
+ 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
+ ZTEMP = ZX(IX)
+ ZX(IX) = ZY(IY)
+ ZY(IY) = ZTEMP
+ IX = IX + INCX
+ IY = IY + INCY
+ END DO
+ END IF
RETURN
END