subroutine minpack_lmder1(fcn, m, n, x, Fvec, Fjac, Ldfjac, Tol, Info, Ipvt, Wa, Lwa, &
& udata) &
& bind(c)
procedure(minpack_fcn_lmder) :: fcn
integer(c_int), value :: m
integer(c_int), value :: n
integer(c_int), value :: ldfjac
integer(c_int), intent(out) :: info
integer(c_int), value :: lwa
integer(c_int), intent(out) :: ipvt(n)
real(c_double), value :: tol
real(c_double), intent(inout) :: x(n)
real(c_double), intent(out) :: fvec(m)
real(c_double), intent(out) :: fjac(ldfjac, n)
real(c_double), intent(inout) :: wa(lwa)
type(c_ptr), value :: udata
call lmder1(wrap_fcn, m, n, x, Fvec, Fjac, Ldfjac, Tol, Info, Ipvt, Wa, Lwa)
contains
subroutine wrap_fcn(m, n, x, fvec, fjac, ldfjac, iflag)
integer, intent(in) :: m
integer, intent(in) :: n
integer, intent(in) :: ldfjac
integer, intent(inout) :: iflag
real(wp), intent(in) :: x(n)
real(wp), intent(inout) :: fvec(m)
real(wp), intent(inout) :: fjac(ldfjac, n)
call fcn(m, n, x, fvec, fjac, ldfjac, iflag, udata)
end subroutine wrap_fcn
end subroutine minpack_lmder1