File indexing completed on 2024-12-17 18:31:10 UTC
view on githubraw file Latest commit 60c45318 on 2004-09-09 15:51:26 UTC
4cee17c1be Patr*0001
0002 subroutine dgscale( nn, gold, xdiff, diag, rmin )
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 implicit none
0020
f50e6c1777 Patr*0021 #include "blas1.h"
4cee17c1be Patr*0022
0023 integer nn
0024 double precision gold(nn), xdiff(nn), diag(nn)
0025
0026 integer i
0027 double precision r1, rmin, den
0028
0029
0030
0031
0032
0033 call dostore( nn, diag, .false., 3 )
0034
0035 r1 = 0.
0036 do i = 1, nn
0037 r1 = r1 + gold(i)*gold(i)*diag(i)
0038 end do
0039 r1 = 1.0 / r1
0040
0041 call SSCAL( nn, r1, diag, 1 )
0042
0043
0044
0045
0046
0047
0048 den = 0.0
0049
0050 do i = 1, nn
0051
0052 if (diag(i).LE.0) then
60c4531875 Patr*0053
4cee17c1be Patr*0054 diag(i) = rmin
0055 end if
0056
0057 den = den + xdiff(i)*xdiff(i) / diag(i)
0058 end do
0059
0060 do i = 1, nn
0061 diag(i) = 1./
0062 $ (1./diag(i)+gold(i)**2-(xdiff(i)/diag(i))**2/den)
0063 if (diag(i).le.0.) then
0064 diag(i) = rmin
0065 endif
0066 end do
0067
0068
0069
0070
0071 call dostore( nn, diag, .true., 3 )
0072
0073 return
0074 end