fmin_cgminimize_func Subroutine

subroutine fmin_cgminimize_func(p, fcn, iter, fret, ftol, itmax, iverbose, mode, new_version, hh_par)

Arguments

Type IntentOptional Attributes Name
real(kind=8), intent(inout), dimension(:) :: p
procedure(cgfit_func) :: fcn
integer :: iter
real(kind=8) :: fret
real(kind=8), optional :: ftol
integer, optional :: itmax
logical, optional :: iverbose
integer, optional :: mode
logical, optional :: new_version
real(kind=8), optional :: hh_par

Calls

proc~~fmin_cgminimize_func~~CallsGraph proc~fmin_cgminimize_func fmin_cgminimize_func minimize_krauth_ minimize_krauth_ proc~fmin_cgminimize_func->minimize_krauth_ minimize_sascha_ minimize_sascha_ proc~fmin_cgminimize_func->minimize_sascha_

Source Code

subroutine fmin_cgminimize_func(p,fcn,iter,fret,ftol,itmax,iverbose,mode,new_version,hh_par)
  real(8),dimension(:),intent(inout) :: p
  procedure(cgfit_func)              :: fcn
  integer                            :: iter
  real(8)                            :: fret
  real(8),optional                   :: ftol
  real(8)                            :: ftol_
  integer, optional                  :: itmax,mode
  integer                            :: itmax_,mode_,iprint_
  integer                            :: n
  real(8)                            :: f
  real(8),allocatable,dimension(:)   :: x,g,h,w,xprmt
  real(8)                            :: dfn,deps,hh
  integer                            :: iexit,itn
  logical,optional                   :: new_version
  logical                            :: new_version_
  logical,optional                   :: iverbose
  logical                            :: iverbose_
  real(8),optional                   :: hh_par
  !
  if(associated(func))nullify(func) ; func=>fcn
  !    
  iverbose_=.false.;if(present(iverbose))iverbose_=iverbose
  new_version_=.false.;if(present(new_version))new_version_=new_version
  iprint_=0;if(iverbose_)iprint_=1
  !
  ftol_=1.d-5
  if(present(ftol))then
     ftol_=ftol
     if(iverbose_)write(*,"(A,ES9.2)")"CG-mininize: ftol updated to:",ftol
  endif
  itmax_=1000
  if(present(itmax))then
     itmax_=itmax
     if(iverbose_)write(*,"(A,I5)")"CG-minimize: itmax updated to:",itmax
  endif
  mode_ =1
  if(present(mode))then
     mode_=mode_
     if(iverbose_)write(*,"(A,I5)")"CG-minimize: mode updated to:",mode       
  endif
  !
  N=size(p)
  allocate(x(N),g(N),h(N*N),w(100*N),xprmt(N))
  dfn=-0.5d0
  hh = 1d-5 ; if(present(hh_par))hh = hh_par
  iexit=0
  !set initial point
  x=p
  xprmt=abs(p)+1.d-15
  select case(new_version_)
  case (.true.)
     if(iverbose_)write(*,"(A,I5)")"CG-minimize: using New version:"
     call minimize_sascha_(fcn_,n,x,f,g,h,w,&
          dfn,xprmt,hh,ftol_,mode_,itmax_,iprint_,iexit,itn)
  case(.false.)
     if(iverbose_)write(*,"(A,I5)")"CG-minimize: using Old version:"
     call minimize_krauth_(fcn_,n,x,f,g,h,w,&
          dfn,xprmt,hh,ftol_,mode_,itmax_,iprint_,iexit,itn)
  end select
  !set output variables
  iter=itn
  fret=f
  p=x
  deallocate(x,g,h,w,xprmt)
end subroutine fmin_cgminimize_func