Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F122384254
dgscale.F
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Thu, Jul 17, 13:25
Size
1 KB
Mime Type
text/x-c
Expires
Sat, Jul 19, 13:24 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
27476123
Attached To
R2795 mitgcm_lac_leman_abirani
dgscale.F
View Options
subroutine dgscale( nn, gold, xdiff, diag, rmin )
c ==================================================================
c SUBROUTINE dgscale
c ==================================================================
c
c o computes new preconditioner and writes it to OPWARMD
c
c o started: ??? not reproducible
c
c o Version: 2.1.0, 02-Mar-2000: Patrick Heimbach, MIT/EAPS
c
c ==================================================================
c SUBROUTINE dgscale
c ==================================================================
implicit none
#include "blas1.h"
integer nn
double precision gold(nn), xdiff(nn), diag(nn)
integer i
double precision r1, rmin, den
c-----------------------------------------
c read diagonal
c-----------------------------------------
call dostore( nn, diag, .false., 3 )
r1 = 0.
do i = 1, nn
r1 = r1 + gold(i)*gold(i)*diag(i)
end do
r1 = 1.0 / r1
call SSCAL( nn, r1, diag, 1 )
c-----------------------------------------
c update the diagonal
c (gg is used as an auxiliary vector)
c-----------------------------------------
den = 0.0
do i = 1, nn
cph(
if (diag(i).LE.0) then
cph print *, 'pathei-lsopt: in dgscale; diag = 0 for i=', i
diag(i) = rmin
end if
cph)
den = den + xdiff(i)*xdiff(i) / diag(i)
end do
do i = 1, nn
diag(i) = 1./
$ (1./diag(i)+gold(i)**2-(xdiff(i)/diag(i))**2/den)
if (diag(i).le.0.) then
diag(i) = rmin
endif
end do
c-----------------------------------------
c write diagonal
c-----------------------------------------
call dostore( nn, diag, .true., 3 )
return
end
Event Timeline
Log In to Comment