subroutine OPTIM_SUB(
I nn
& )
c ==================================================================
c SUBROUTINE optim_sub
c ==================================================================
c
c o Initialization of optimization run.
c
c started: Christian Eckert eckert@mit.edu 15-Feb-2000
c
c changed: Christian Eckert eckert@mit.edu 10-Mar-2000
c
c - Added ECCO layout.
c
c changed: Patrick Heimbach heimbach@mit.edu 19-Jun-2000
c - finished, revised and debugged
c
c ==================================================================
c SUBROUTINE optim_sub
c ==================================================================
implicit none
c == global variables ==
#include "EEPARAMS.h"
#include "SIZE.h"
#include "ctrl.h"
#include "optim.h"
c == routine arguments ==
integer nn
c == local variables ==
_RL objf
#if defined (DYNAMIC)
_RL xx(nn)
_RL adxx(nn)
_RL dd(nn)
_RL gold(nn)
_RL xdiff(nn)
#elif defined (USE_POINTER) (MAX_INDEPEND == 0)
_RL xx
_RL adxx
_RL dd(1)
_RL gold(1)
_RL xdiff(1)
pointer (pxx,xx(1))
pointer (padxx,adxx(1))
pointer (pdd,dd)
pointer (pgold,gold)
pointer (pxdiff,xdiff)
#else
integer nmax
parameter( nmax = MAX_INDEPEND )
_RL xx(nmax)
_RL adxx(nmax)
_RL dd(nmax)
_RL gold(nmax)
_RL xdiff(nmax)
#endif
c-- Allocate memory for the control variables and the gradient vector.
#if defined(DYNAMIC)
#elif defined(USE_POINTER) (MAX_INDEPEND == 0)
call MYALLOC( pxx , nn*REAL_BYTE )
call MYALLOC( padxx, nn*REAL_BYTE )
call MYALLOC( pdd, nn*REAL_BYTE )
call MYALLOC( pgold, nn*REAL_BYTE )
call MYALLOC( pxdiff, nn*REAL_BYTE )
#endif
integer ifail
integer itmax
logical loffline
c == external ==
external
external
c == end of interface ==
c-- Initialisize the model and set a first guess of the control
c-- variables.
call OPTIM_INITMOD( nn, xx )
#if defined (DYNAMIC)
#elif defined(USE_POINTER) (MAX_INDEPEND == 0)
#else
if (nn .gt. nmax) then
print*,' OPTIMUM: Not enough space.'
print*,' nmax = ',nmax
print*,' nn = ',nn
print*
print*,' Set MAX_INDEPEND in Makefile .ge. ',nn
print*
stop ' ... stopped in OPTIMUM.'
endif
#endif
print*, ' OPTIMUM: Calling lsopt for iteration: ',optimcycle
print*, ' OPTIMUM: with nn, REAL_BYTE = ', nn, REAL_BYTE
loffline = .true.
itmax = numiter
c-- Large scale optimization --> Gilbert & Lemarechal.
call LSOPT_TOP( nn, xx, objf, adxx
& , simul, lsline
& , epsx, fmin, epsg
& , iprint
& , itmax, nfunc, nupdate
& , dd, gold, xdiff
& , loffline
& , ifail )
return
end