Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F120854678
hessupd.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
Mon, Jul 7, 12:48
Size
3 KB
Mime Type
text/x-c
Expires
Wed, Jul 9, 12:48 (2 d)
Engine
blob
Format
Raw Data
Handle
27217331
Attached To
R2795 mitgcm_lac_leman_abirani
hessupd.F
View Options
subroutine hessupd( nn, mupd, dd, jmin, jmax, xdiff, lphprint )
c ==================================================================
c SUBROUTINE hessupd
c ==================================================================
c
c o controls update of descent vector using available
c approximation of Hessian Matrix based on gradients of
c previous iterations
c
c o Reference: J.C. Gilbert & C. Lemarechal
c Some numerical experiments with variable-storage
c quasi-Newton algorithms
c Mathematical Programming 45 (1989), pp. 407-435
c
c o started: ??? not reproducible
c
c o changed: Patrick Heimbach, MIT/EAPS
c 24-Feb-2000:
c - changed some variable names to be consistent
c with routine lsoptv, lsline;
c
c o Version: 2.1.0, 02-Mar-2000: Patrick Heimbach, MIT/EAPS
c
c ==================================================================
c SUBROUTINE hessupd
c ==================================================================
implicit none
#include "blas1.h"
c------------------------------------
c declare arguments
c------------------------------------
integer nn, mupd, jmin, jmax
double precision dd(nn), alpha(100), xdiff(nn)
logical lphprint
c------------------------------------
c declare local variables
c------------------------------------
external DDOT
double precision DDOT
integer jfin, i, j, jp
double precision r
c------------------------------------
c initialization
c------------------------------------
jfin = jmax
if (lphprint)
& print *, 'pathei-lsopt: in hessupd; ',
& 'jmin, jmax, mupd:', jmin, jmax, mupd
if (jfin.lt.jmin) jfin = jmax+mupd
c------------------------------------
c compute right hand side
c------------------------------------
do j = jfin,jmin,-1
if (lphprint)
& print *, 'pathei-lsopt: in hessupd; loop ',
& 'j,jfin,jmin = ', j,jfin,jmin
jp = j
if (jp.gt.mupd) jp = jp-mupd
call dostore( nn, xdiff, .false., 2*jp+3 )
r = DDOT( nn, dd, 1, xdiff,1 )
call dostore( nn, xdiff, .false., 2*jp+2 )
alpha(jp) = r
do i = 1, nn
dd(i) = dd(i) - r*xdiff(i)
end do
end do
c------------------------------------
c multiply precondition matrix
c------------------------------------
if (mupd .ne. 0) then
call dostore( nn, xdiff, .false., 3 )
do i = 1, nn
dd(i) = dd(i)*xdiff(i)
end do
end if
c------------------------------------
c compute left hand side
c------------------------------------
do j = jmin,jfin
jp = j
if (jp .gt. mupd) jp = jp-mupd
call dostore( nn, xdiff, .false., 2*jp+2 )
r = alpha(jp) - DDOT( nn, dd,1 , xdiff, 1 )
call dostore( nn, xdiff, .false., 2*jp+3 )
do i = 1, nn
dd(i) = dd(i) + r*xdiff(i)
end do
end do
return
end
Event Timeline
Log In to Comment