+++ /dev/null
- subroutine minsumsl(nvar,x,minval)
- implicit real*8 (a-h,o-z)
- include 'DIMENSIONS'
- parameter (maxvar=maxene+3*nnbase)
- parameter (liv=60,lv=(77+maxvar*(maxvar+17)/2))
-*********************************************************************
-* OPTIMIZE sets up SUMSL or DFP and provides a simple interface for *
-* the calling subprogram. *
-* when d(i)=1.0, then v(35) is the length of the initial step, *
-* calculated in the usual pythagorean way. *
-* absolute convergence occurs when the function is within v(31) of *
-* zero. unless you know the minimum value in advance, abs convg *
-* is probably not useful. *
-* relative convergence is when the model predicts that the function *
-* will decrease by less than v(32)*abs(fun). *
-*********************************************************************
- dimension iv(liv)
- real*8 minval,x(nvar),d(maxvar),v(1:lv)
- external funclik,grad,fdum
- integer idum(1)
- double precision rdum(1)
- double precision urparm(maxT)
- double precision g(maxvar)
- call deflt(2,iv,liv,lv,v)
-* 12 means fresh start, dont call deflt
- iv(1)=12
-* max num of fun calls
- maxfun=1000
- iv(17)=maxfun
-* max num of iterations
- maxit=50
- iv(18)=maxit
-* controls output
- iv(19)=1
-* selects output unit
- iv(21)=2
-* 1 means to print out result
- iv(22)=1
-* 1 means to print out summary stats
- iv(23)=1
-* 1 means to print initial x and d
- iv(24)=1
-* min val for v(radfac) default is 0.1
- v(24)=0.01D0
-* max val for v(radfac) default is 4.0
- v(25)=2.0D0
-c v(25)=4.0D0
-* check false conv if (act fnctn decrease) .lt. v(26)*(exp decrease)
-* the sumsl default is 0.1
- v(26)=0.001D0
-* false conv if (act fnctn decrease) .lt. v(34)
-* the sumsl default is 100*machep
- v(34)=v(34)/100.0D0
-* absolute convergence
- tolf=1.0D-4
- v(31)=tolf
-* relative convergence
- rtolf=1.0D-12
- v(32)=rtolf
-* controls initial step size
- v(35)=1.0D-6
-* large vals of d correspond to small components of step
- do 20 i=1,nvar
- d(i)=1.0D0
-20 continue
-
- nf=0
- call funclik(nvar,x,nf,f,idum,urparm,fdum)
- write (2,'(a,1pe17.10)') 'Initial function value:',f
- call grad(nvar,x,nf,g,idum,urparm,fdum)
- write (2,*) "Initial gradient"
- do i=1,nvar
- write (2,'(i5,e15.5)') i,g(i)
- enddo
-c minimize the log-likelihood function
- print *,"iv1",iv(1)
- call sumsl(nvar,d,x,funclik,grad,iv,liv,lv,v,idum,urparm,fdum)
- minval=v(10)
- write (2,*)
- write (2,'(a,i4)') 'SUMSL return code:',iv(1)
- write (2,'(a,1pe17.10)') 'Final function value:',minval
-c print *,"exiting minsumsl"
- return
- end
-c---------------------------------------------------------------------
-