1 SUBROUTINE lmdif1(fcn, m, n, x, fvec, tol, epsfcn, nfev_end, &
2 diag, mode, info, lwa, max_processors, num_lm_params)
8 USE fdjac_mod,
ONLY: maxj_processors=>max_processors, &
9 numj_lm_params=>num_lm_params
15 INTEGER,
INTENT(in) :: m, n, lwa, nfev_end, mode
16 INTEGER,
INTENT(out) :: info
17 REAL(rprec),
INTENT(in) :: tol, epsfcn
18 REAL(rprec),
DIMENSION(n),
INTENT(inout) :: x, diag
19 REAL(rprec),
DIMENSION(m),
INTENT(out) :: fvec
20 INTEGER,
INTENT(in) :: max_processors, num_lm_params
24 REAL(rprec),
PARAMETER :: zero=0, factor=10
28 INTEGER,
DIMENSION(:),
ALLOCATABLE :: iwa
29 INTEGER :: maxfev, mp5n, nfev, nprint
30 REAL(rprec),
DIMENSION(:),
ALLOCATABLE :: wa
31 REAL(rprec) :: ftol, gtol, xtol
38 SUBROUTINE lmdif(fcn, m, n, x, fvec, ftol, xtol, gtol, maxfev, &
39 epsfcn, diag, mode, factor, nprint, info, nfev, fjac, &
40 ldfjac, ipvt, qtf, wa1, wa2, wa3, wa4)
42 INTEGER :: m, n, maxfev, mode, nprint, info, nfev, ldfjac
43 REAL(rprec),
INTENT(in) :: ftol, xtol, gtol, epsfcn, factor
44 REAL(rprec),
DIMENSION(n) :: x, wa1, wa2, wa3
45 REAL(rprec),
DIMENSION(m) :: fvec, wa4
46 INTEGER,
DIMENSION(n),
TARGET :: ipvt
47 REAL(rprec),
DIMENSION(n),
TARGET :: diag, qtf
48 REAL(rprec),
DIMENSION(ldfjac,n),
TARGET :: fjac
137 IF (lwa .lt. m*n+5*n+m) stop
'lwa too small'
139 ALLOCATE (wa(lwa), iwa(n), stat=info)
140 IF (info .NE. 0) stop
'Allocation error in lmdif1!'
142 #if !defined(MPI_OPT)
146 maxj_processors = max(max_processors,1)
147 numj_lm_params = max(num_lm_params,1)
150 maxfev = min(maxfev, nfev_end)
162 CALL lmdif (fcn, m, n, x, fvec, ftol, xtol, gtol, maxfev,
163 epsfcn, diag, mode, factor, nprint, info, nfev,
164 wa(mp5n+1), m, iwa, wa(n+1), wa(2*n+1), wa(3*n+1),
165 wa(4*n+1), wa(5*n+1))
167 #if !defined(MPI_OPT)
168 IF (info .eq. 8) info = 4
172 END SUBROUTINE lmdif1