Go to the documentation of this file.00001 SUBROUTINE ZHPR2(UPLO,N,ALPHA,X,INCX,Y,INCY,AP)
00002
00003 DOUBLE COMPLEX ALPHA
00004 INTEGER INCX,INCY,N
00005 CHARACTER UPLO
00006
00007
00008 DOUBLE COMPLEX 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
00100
00101
00102 DOUBLE COMPLEX ZERO
00103 PARAMETER (ZERO= (0.0D+0,0.0D+0))
00104
00105
00106 DOUBLE COMPLEX TEMP1,TEMP2
00107 INTEGER I,INFO,IX,IY,J,JX,JY,K,KK,KX,KY
00108
00109
00110 LOGICAL LSAME
00111 EXTERNAL LSAME
00112
00113
00114 EXTERNAL XERBLA
00115
00116
00117 INTRINSIC DBLE,DCONJG
00118
00119
00120
00121
00122 INFO = 0
00123 IF (.NOT.LSAME(UPLO,'U') .AND. .NOT.LSAME(UPLO,'L')) THEN
00124 INFO = 1
00125 ELSE IF (N.LT.0) THEN
00126 INFO = 2
00127 ELSE IF (INCX.EQ.0) THEN
00128 INFO = 5
00129 ELSE IF (INCY.EQ.0) THEN
00130 INFO = 7
00131 END IF
00132 IF (INFO.NE.0) THEN
00133 CALL XERBLA('ZHPR2 ',INFO)
00134 RETURN
00135 END IF
00136
00137
00138
00139 IF ((N.EQ.0) .OR. (ALPHA.EQ.ZERO)) RETURN
00140
00141
00142
00143
00144 IF ((INCX.NE.1) .OR. (INCY.NE.1)) THEN
00145 IF (INCX.GT.0) THEN
00146 KX = 1
00147 ELSE
00148 KX = 1 - (N-1)*INCX
00149 END IF
00150 IF (INCY.GT.0) THEN
00151 KY = 1
00152 ELSE
00153 KY = 1 - (N-1)*INCY
00154 END IF
00155 JX = KX
00156 JY = KY
00157 END IF
00158
00159
00160
00161
00162 KK = 1
00163 IF (LSAME(UPLO,'U')) THEN
00164
00165
00166
00167 IF ((INCX.EQ.1) .AND. (INCY.EQ.1)) THEN
00168 DO 20 J = 1,N
00169 IF ((X(J).NE.ZERO) .OR. (Y(J).NE.ZERO)) THEN
00170 TEMP1 = ALPHA*DCONJG(Y(J))
00171 TEMP2 = DCONJG(ALPHA*X(J))
00172 K = KK
00173 DO 10 I = 1,J - 1
00174 AP(K) = AP(K) + X(I)*TEMP1 + Y(I)*TEMP2
00175 K = K + 1
00176 10 CONTINUE
00177 AP(KK+J-1) = DBLE(AP(KK+J-1)) +
00178 + DBLE(X(J)*TEMP1+Y(J)*TEMP2)
00179 ELSE
00180 AP(KK+J-1) = DBLE(AP(KK+J-1))
00181 END IF
00182 KK = KK + J
00183 20 CONTINUE
00184 ELSE
00185 DO 40 J = 1,N
00186 IF ((X(JX).NE.ZERO) .OR. (Y(JY).NE.ZERO)) THEN
00187 TEMP1 = ALPHA*DCONJG(Y(JY))
00188 TEMP2 = DCONJG(ALPHA*X(JX))
00189 IX = KX
00190 IY = KY
00191 DO 30 K = KK,KK + J - 2
00192 AP(K) = AP(K) + X(IX)*TEMP1 + Y(IY)*TEMP2
00193 IX = IX + INCX
00194 IY = IY + INCY
00195 30 CONTINUE
00196 AP(KK+J-1) = DBLE(AP(KK+J-1)) +
00197 + DBLE(X(JX)*TEMP1+Y(JY)*TEMP2)
00198 ELSE
00199 AP(KK+J-1) = DBLE(AP(KK+J-1))
00200 END IF
00201 JX = JX + INCX
00202 JY = JY + INCY
00203 KK = KK + J
00204 40 CONTINUE
00205 END IF
00206 ELSE
00207
00208
00209
00210 IF ((INCX.EQ.1) .AND. (INCY.EQ.1)) THEN
00211 DO 60 J = 1,N
00212 IF ((X(J).NE.ZERO) .OR. (Y(J).NE.ZERO)) THEN
00213 TEMP1 = ALPHA*DCONJG(Y(J))
00214 TEMP2 = DCONJG(ALPHA*X(J))
00215 AP(KK) = DBLE(AP(KK)) +
00216 + DBLE(X(J)*TEMP1+Y(J)*TEMP2)
00217 K = KK + 1
00218 DO 50 I = J + 1,N
00219 AP(K) = AP(K) + X(I)*TEMP1 + Y(I)*TEMP2
00220 K = K + 1
00221 50 CONTINUE
00222 ELSE
00223 AP(KK) = DBLE(AP(KK))
00224 END IF
00225 KK = KK + N - J + 1
00226 60 CONTINUE
00227 ELSE
00228 DO 80 J = 1,N
00229 IF ((X(JX).NE.ZERO) .OR. (Y(JY).NE.ZERO)) THEN
00230 TEMP1 = ALPHA*DCONJG(Y(JY))
00231 TEMP2 = DCONJG(ALPHA*X(JX))
00232 AP(KK) = DBLE(AP(KK)) +
00233 + DBLE(X(JX)*TEMP1+Y(JY)*TEMP2)
00234 IX = JX
00235 IY = JY
00236 DO 70 K = KK + 1,KK + N - J
00237 IX = IX + INCX
00238 IY = IY + INCY
00239 AP(K) = AP(K) + X(IX)*TEMP1 + Y(IY)*TEMP2
00240 70 CONTINUE
00241 ELSE
00242 AP(KK) = DBLE(AP(KK))
00243 END IF
00244 JX = JX + INCX
00245 JY = JY + INCY
00246 KK = KK + N - J + 1
00247 80 CONTINUE
00248 END IF
00249 END IF
00250
00251 RETURN
00252
00253
00254
00255 END