Go to the documentation of this file.00001 SUBROUTINE SSPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP)
00002
00003 REAL ALPHA
00004 INTEGER INCX,INCY,N
00005 CHARACTER UPLO
00006
00007
00008 REAL AP(*),X(*),Y(*)
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099 REAL ZERO
00100 PARAMETER (ZERO=0.0E+0)
00101
00102
00103 REAL TEMP1,TEMP2
00104 INTEGER I,INFO,IX,IY,J,JX,JY,K,KK,KX,KY
00105
00106
00107 LOGICAL LSAME
00108 EXTERNAL LSAME
00109
00110
00111 EXTERNAL XERBLA
00112
00113
00114
00115
00116 INFO = 0
00117 IF (.NOT.LSAME(UPLO,'U') .AND. .NOT.LSAME(UPLO,'L')) THEN
00118 INFO = 1
00119 ELSE IF (N.LT.0) THEN
00120 INFO = 2
00121 ELSE IF (INCX.EQ.0) THEN
00122 INFO = 5
00123 ELSE IF (INCY.EQ.0) THEN
00124 INFO = 7
00125 END IF
00126 IF (INFO.NE.0) THEN
00127 CALL XERBLA('SSPR2 ',INFO)
00128 RETURN
00129 END IF
00130
00131
00132
00133 IF ((N.EQ.0) .OR. (ALPHA.EQ.ZERO)) RETURN
00134
00135
00136
00137
00138 IF ((INCX.NE.1) .OR. (INCY.NE.1)) THEN
00139 IF (INCX.GT.0) THEN
00140 KX = 1
00141 ELSE
00142 KX = 1 - (N-1)*INCX
00143 END IF
00144 IF (INCY.GT.0) THEN
00145 KY = 1
00146 ELSE
00147 KY = 1 - (N-1)*INCY
00148 END IF
00149 JX = KX
00150 JY = KY
00151 END IF
00152
00153
00154
00155
00156 KK = 1
00157 IF (LSAME(UPLO,'U')) THEN
00158
00159
00160
00161 IF ((INCX.EQ.1) .AND. (INCY.EQ.1)) THEN
00162 DO 20 J = 1,N
00163 IF ((X(J).NE.ZERO) .OR. (Y(J).NE.ZERO)) THEN
00164 TEMP1 = ALPHA*Y(J)
00165 TEMP2 = ALPHA*X(J)
00166 K = KK
00167 DO 10 I = 1,J
00168 AP(K) = AP(K) + X(I)*TEMP1 + Y(I)*TEMP2
00169 K = K + 1
00170 10 CONTINUE
00171 END IF
00172 KK = KK + J
00173 20 CONTINUE
00174 ELSE
00175 DO 40 J = 1,N
00176 IF ((X(JX).NE.ZERO) .OR. (Y(JY).NE.ZERO)) THEN
00177 TEMP1 = ALPHA*Y(JY)
00178 TEMP2 = ALPHA*X(JX)
00179 IX = KX
00180 IY = KY
00181 DO 30 K = KK,KK + J - 1
00182 AP(K) = AP(K) + X(IX)*TEMP1 + Y(IY)*TEMP2
00183 IX = IX + INCX
00184 IY = IY + INCY
00185 30 CONTINUE
00186 END IF
00187 JX = JX + INCX
00188 JY = JY + INCY
00189 KK = KK + J
00190 40 CONTINUE
00191 END IF
00192 ELSE
00193
00194
00195
00196 IF ((INCX.EQ.1) .AND. (INCY.EQ.1)) THEN
00197 DO 60 J = 1,N
00198 IF ((X(J).NE.ZERO) .OR. (Y(J).NE.ZERO)) THEN
00199 TEMP1 = ALPHA*Y(J)
00200 TEMP2 = ALPHA*X(J)
00201 K = KK
00202 DO 50 I = J,N
00203 AP(K) = AP(K) + X(I)*TEMP1 + Y(I)*TEMP2
00204 K = K + 1
00205 50 CONTINUE
00206 END IF
00207 KK = KK + N - J + 1
00208 60 CONTINUE
00209 ELSE
00210 DO 80 J = 1,N
00211 IF ((X(JX).NE.ZERO) .OR. (Y(JY).NE.ZERO)) THEN
00212 TEMP1 = ALPHA*Y(JY)
00213 TEMP2 = ALPHA*X(JX)
00214 IX = JX
00215 IY = JY
00216 DO 70 K = KK,KK + N - J
00217 AP(K) = AP(K) + X(IX)*TEMP1 + Y(IY)*TEMP2
00218 IX = IX + INCX
00219 IY = IY + INCY
00220 70 CONTINUE
00221 END IF
00222 JX = JX + INCX
00223 JY = JY + INCY
00224 KK = KK + N - J + 1
00225 80 CONTINUE
00226 END IF
00227 END IF
00228
00229 RETURN
00230
00231
00232
00233 END