leastsq_lmder_sub Subroutine

subroutine leastsq_lmder_sub(func, dfunc, a, m, tol, info)

Arguments

Type IntentOptional Attributes Name
subroutine func(a, m, f)
Arguments
Type IntentOptional Attributes Name
real(kind=8), dimension(:) :: a
integer :: m
real(kind=8), dimension(m) :: f
subroutine dfunc(a, m, df)
Arguments
Type IntentOptional Attributes Name
real(kind=8), dimension(:) :: a
integer :: m
real(kind=8), dimension(m,size(a)) :: df
real(kind=8), dimension(:) :: a
integer :: m
real(kind=8), optional :: tol
integer, optional :: info

Calls

proc~~leastsq_lmder_sub~~CallsGraph proc~leastsq_lmder_sub leastsq_lmder_sub lmder1 lmder1 proc~leastsq_lmder_sub->lmder1

Source Code

subroutine leastsq_lmder_sub(func,dfunc,a,m,tol,info)
  interface
     subroutine func(a,m,f)
       real(8),dimension(:) :: a
       integer              :: m
       real(8),dimension(m) :: f
     end subroutine func
     !
     subroutine dfunc(a,m,df)
       real(8),dimension(:)         :: a
       integer                      :: m
       real(8),dimension(m,size(a)) :: df
     end subroutine dfunc
  end interface
  real(8),dimension(:)         :: a
  integer                      :: m
  real(8),optional             :: tol
  integer,optional             :: info
  real(8)                      :: tol_
  integer                      :: info_
  integer                      :: n
  real(8),dimension(m)         :: fvec
  real(8),dimension(m,size(a)) :: fjac
  tol_ = 1.d-15;if(present(tol))tol_=tol
  n=size(a)
  call lmder1(leastsq_lmder1_sub2sub,m,n,a,fvec,fjac,m,tol_,info_)
  if(present(info))info=info_
  include "leastsq_error.h90"
contains
  subroutine leastsq_lmder1_sub2sub(m,n,a,fvec,fjac,ldfjac,iflag)
    integer ::  m
    integer ::  n
    integer ::  ldfjac
    real(8) ::  a(n)
    real(8) ::  fvec(m)
    real(8) ::  fjac(ldfjac,n)
    integer ::  iflag
    if(iflag==1)then
       call func(a,m,fvec)
    elseif(iflag==2)then
       call dfunc(a,m,fjac)
    endif
    if(iflag<0)stop "LEASTSQ_LMDER1_sub2sub ERROR: iflag < 0 "
  end subroutine leastsq_lmder1_sub2sub
end subroutine leastsq_lmder_sub