leastsq_lmder_func Subroutine

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

Arguments

Type IntentOptional Attributes Name
function func(a, m)
Arguments
Type IntentOptional Attributes Name
real(kind=8), dimension(:) :: a
integer :: m
Return Value real(kind=8), dimension(m)
function dfunc(a, m)
Arguments
Type IntentOptional Attributes Name
real(kind=8), dimension(:) :: a
integer :: m
Return Value real(kind=8), dimension(m,size(a))
real(kind=8), dimension(:) :: a
integer :: m
real(kind=8), optional :: tol
integer, optional :: info

Calls

proc~~leastsq_lmder_func~~CallsGraph proc~leastsq_lmder_func leastsq_lmder_func lmder1 lmder1 proc~leastsq_lmder_func->lmder1

Source Code

subroutine leastsq_lmder_func(func,dfunc,a,m,tol,info)
  interface
     function func(a,m)
       real(8),dimension(:) :: a
       integer              :: m
       real(8),dimension(m) :: func
     end function func
     !
     function dfunc(a,m)
       real(8),dimension(:)         :: a
       integer                      :: m
       real(8),dimension(m,size(a)) :: dfunc
     end function 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_func2sub,m,n,a,fvec,fjac,m,tol_,info_)
  if(present(info))info=info_
  include "leastsq_error.h90"

contains
  subroutine leastsq_lmder1_func2sub(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
       fvec = func(a,m)
    elseif(iflag==2)then
       fjac = dfunc(a,m)
    endif
    if(iflag<0)stop "LEASTSQ_LMDER1_func2sub ERROR: iflag < 0 "
  end subroutine leastsq_lmder1_func2sub
end subroutine leastsq_lmder_func