1SUBROUTINE chkder(m, n, x, fvec, fjac, ldfjac, xp, fvecp, mode, err)
94 INTEGER(kind=4) ldfjac
103 REAL(kind=8) fjac(ldfjac, n)
105 REAL(kind=8) fvecp(m)
113 epsmch = epsilon(epsmch)
122 IF (temp == 0.0d+00)
THEN
130 ELSE IF (mode == 2)
THEN
132 epsf = 100.0d+00*epsmch
139 IF (temp == 0.0d+00)
THEN
142 err(1:m) = err(1:m) + temp*fjac(1:m, j)
149 IF (fvec(i) /= 0.0d+00 .AND. fvecp(i) /= 0.0d+00 .AND. &
150 abs(fvecp(i) - fvec(i)) >= epsf*abs(fvec(i)))
THEN
151 temp = eps*abs((fvecp(i) - fvec(i))/eps - err(i)) &
152 /(abs(fvec(i)) + abs(fvecp(i)))
157 IF (epsmch < temp .AND. temp < eps)
THEN
158 err(i) = (log10(temp) - epslog)/epslog
161 IF (eps <= temp)
THEN
171SUBROUTINE dogleg(n, r, lr, diag, qtb, delta, x)
260 epsmch = epsilon(epsmch)
264 jj = (n*(n + 1))/2 + 1
274 sum2 = sum2 + r(l)*x(i)
280 IF (temp == 0.0d+00)
THEN
284 temp = max(temp, abs(r(l)))
288 IF (temp == 0.0d+00)
THEN
296 x(j) = (qtb(j) - sum2)/temp
303 wa2(1:n) = diag(1:n)*x(1:n)
304 qnorm =
enorm(n, wa2)
306 IF (qnorm <= delta)
THEN
317 wa1(i) = wa1(i) + r(l)*temp
320 wa1(j) = wa1(j)/diag(j)
326 gnorm =
enorm(n, wa1)
330 IF (gnorm /= 0.0d+00)
THEN
334 wa1(1:n) = (wa1(1:n)/gnorm)/diag(1:n)
340 sum2 = sum2 + r(l)*wa1(i)
347 sgnorm = (gnorm/temp)/temp
356 IF (sgnorm < delta)
THEN
358 bnorm =
enorm(n, qtb)
359 temp = (bnorm/gnorm)*(bnorm/qnorm)*(sgnorm/delta)
360 temp = temp - (delta/qnorm)*(sgnorm/delta)**2 &
361 + sqrt((temp - (delta/qnorm))**2 &
362 + (1.0d+00 - (delta/qnorm)**2) &
363 *(1.0d+00 - (sgnorm/delta)**2))
365 alpha = ((delta/qnorm)*(1.0d+00 - (sgnorm/delta)**2)) &
375 temp = (1.0d+00 - alpha)*min(sgnorm, delta)
377 x(1:n) = temp*wa1(1:n) + alpha*x(1:n)
426 enorm = sqrt(sum(x(1:n)**2))
498 rdwarf = sqrt(tiny(rdwarf))
499 rgiant = sqrt(huge(rgiant))
506 agiant = rgiant/real(n, kind=8)
512 IF (xabs <= rdwarf)
THEN
514 IF (x3max < xabs)
THEN
515 s3 = 1.0d+00 + s3*(x3max/xabs)**2
517 ELSE IF (xabs /= 0.0d+00)
THEN
518 s3 = s3 + (xabs/x3max)**2
521 ELSE IF (agiant <= xabs)
THEN
523 IF (x1max < xabs)
THEN
524 s1 = 1.0d+00 + s1*(x1max/xabs)**2
527 s1 = s1 + (xabs/x1max)**2
540 IF (s1 /= 0.0d+00)
THEN
542 enorm2 = x1max*sqrt(s1 + (s2/x1max)/x1max)
544 ELSE IF (s2 /= 0.0d+00)
THEN
546 IF (x3max <= s2)
THEN
547 enorm2 = sqrt(s2*(1.0d+00 + (x3max/s2)*(x3max*s3)))
549 enorm2 = sqrt(x3max*((s2/x3max) + (x3max*s3)))
560SUBROUTINE fdjac1(fcn, n, x, fvec, fjac, ldfjac, iflag, ml, mu, epsfcn, m, prms)
639 INTEGER(kind=4) ldfjac
647 REAL(kind=8) fjac(ldfjac, n)
651 INTEGER(kind=4) iflag
663 epsmch = epsilon(epsmch)
665 eps = sqrt(max(epsfcn, epsmch))
676 IF (h == 0.0d+00)
THEN
682 CALL fcn(n, x, wa1, iflag, m, prms)
689 fjac(1:n, j) = (wa1(1:n) - fvec(1:n))/h
702 IF (h == 0.0d+00)
THEN
709 CALL fcn(n, x, wa1, iflag, m, prms)
720 IF (h == 0.0d+00)
THEN
724 fjac(1:n, j) = 0.0d+00
727 IF (j - mu <= i .AND. i <= j + ml)
THEN
728 fjac(i, j) = (wa1(i) - fvec(i))/h
740SUBROUTINE fdjac2(fcn, m, n, x, xdat, ydat, fvec, fjac, ldfjac, iflag, epsfcn)
816 INTEGER(kind=4) ldfjac
824 REAL(kind=8) fjac(ldfjac, n)
825 REAL(kind=8) fvec(m), xdat(m), ydat(m)
828 INTEGER(kind=4) iflag
834 epsmch = epsilon(epsmch)
836 eps = sqrt(max(epsfcn, epsmch))
842 IF (h == 0.0d+00)
THEN
848 CALL fcn(m, n, x, xdat, ydat, wa, iflag)
855 fjac(1:m, j) = (wa(1:m) - fvec(1:m))/h
862SUBROUTINE hybrd(fcn, n, x, fvec, xtol, maxfev, ml, mu, epsfcn, diag, mode, &
863 factor, nprint, info, nfev, fjac, ldfjac, r, lr, qtf, m, prms)
991 INTEGER(kind=4) ldfjac
1004 REAL(kind=8) fjac(ldfjac, n)
1007 REAL(kind=8) fvec(n)
1009 INTEGER(kind=4) iflag
1010 INTEGER(kind=4) info
1011 INTEGER(kind=4) iter
1012 INTEGER(kind=4) iwa(1)
1016 INTEGER(kind=4) maxfev
1018 INTEGER(kind=4) mode
1019 INTEGER(kind=4) msum
1021 INTEGER(kind=4) ncfail
1022 INTEGER(kind=4) nslow1
1023 INTEGER(kind=4) nslow2
1024 INTEGER(kind=4) ncsuc
1025 INTEGER(kind=4) nfev
1026 INTEGER(kind=4) nprint
1043 REAL(kind=8) prms(m)
1045 epsmch = epsilon(epsmch)
1055 ELSE IF (xtol < 0.0d+00)
THEN
1057 ELSE IF (maxfev <= 0)
THEN
1059 ELSE IF (ml < 0)
THEN
1061 ELSE IF (mu < 0)
THEN
1063 ELSE IF (factor <= 0.0d+00)
THEN
1065 ELSE IF (ldfjac < n)
THEN
1067 ELSE IF (lr < (n*(n + 1))/2)
THEN
1074 IF (diag(j) <= 0.0d+00)
THEN
1085 CALL fcn(n, x, fvec, iflag, m, prms)
1092 fnorm =
enorm(n, fvec)
1096 msum = min(ml + mu + 1, n)
1115 CALL fdjac1(fcn, n, x, fvec, fjac, ldfjac, iflag, ml, mu, epsfcn, m, prms)
1126 CALL qrfac(n, n, fjac, ldfjac, pivot, iwa, 1, wa1, wa2)
1135 diag(1:n) = wa2(1:n)
1137 IF (wa2(j) == 0.0d+00)
THEN
1147 wa3(1:n) = diag(1:n)*x(1:n)
1148 xnorm =
enorm(n, wa3)
1149 delta = factor*xnorm
1150 IF (delta == 0.0d+00)
THEN
1158 qtf(1:n) = fvec(1:n)
1162 IF (fjac(j, j) /= 0.0d+00)
THEN
1163 temp = -dot_product(qtf(j:n), fjac(j:n, j))/fjac(j, j)
1164 qtf(j:n) = qtf(j:n) + fjac(j:n, j)*temp
1180 IF (wa1(j) == 0.0d+00)
THEN
1187 CALL qform(n, n, fjac, ldfjac)
1193 diag(j) = max(diag(j), wa2(j))
1203 IF (0 < nprint)
THEN
1205 IF (mod(iter - 1, nprint) == 0)
THEN
1206 CALL fcn(n, x, fvec, iflag, m, prms)
1215 CALL dogleg(n, r, lr, diag, qtf, delta, wa1)
1220 wa1(1:n) = -wa1(1:n)
1221 wa2(1:n) = x(1:n) + wa1(1:n)
1222 wa3(1:n) = diag(1:n)*wa1(1:n)
1224 pnorm =
enorm(n, wa3)
1229 delta = min(delta, pnorm)
1235 CALL fcn(n, wa2, wa4, iflag, m, prms)
1242 fnorm1 =
enorm(n, wa4)
1247 IF (fnorm1 < fnorm)
THEN
1248 actred = 1.0d+00 - (fnorm1/fnorm)**2
1257 sum2 = sum2 + r(l)*wa1(j)
1260 wa3(i) = qtf(i) + sum2
1263 temp =
enorm(n, wa3)
1265 IF (temp < fnorm)
THEN
1266 prered = 1.0d+00 - (temp/fnorm)**2
1272 IF (0.0d+00 < prered)
THEN
1273 ratio = actred/prered
1278 IF (ratio < 0.1d+00)
THEN
1282 delta = 0.5d+00*delta
1289 IF (0.5d+00 <= ratio .OR. 1 < ncsuc)
THEN
1290 delta = max(delta, pnorm/0.5d+00)
1293 IF (abs(ratio - 1.0d+00) <= 0.1d+00)
THEN
1294 delta = pnorm/0.5d+00
1304 IF (0.0001d+00 <= ratio)
THEN
1306 wa2(1:n) = diag(1:n)*x(1:n)
1307 fvec(1:n) = wa4(1:n)
1308 xnorm =
enorm(n, wa2)
1316 IF (0.001d+00 <= actred)
THEN
1324 IF (0.1d+00 <= actred)
THEN
1330 IF (delta <= xtol*xnorm .OR. fnorm == 0.0d+00)
THEN
1340 IF (maxfev <= nfev)
THEN
1344 IF (0.1d+00*max(0.1d+00*delta, pnorm) <= epsmch*xnorm)
THEN
1348 IF (nslow2 == 5)
THEN
1352 IF (nslow1 == 10)
THEN
1363 IF (ncfail == 2)
THEN
1371 sum2 = dot_product(wa4(1:n), fjac(1:n, j))
1372 wa2(j) = (sum2 - wa3(j))/pnorm
1373 wa1(j) = diag(j)*((diag(j)*wa1(j))/pnorm)
1374 IF (0.0001d+00 <= ratio)
THEN
1381 CALL r1updt(n, n, r, lr, wa1, wa2, wa3, sing)
1382 CALL r1mpyq(n, n, fjac, ldfjac, wa2, wa3)
1383 CALL r1mpyq(1, n, qtf, 1, wa2, wa3)
1406 IF (0 < nprint)
THEN
1407 CALL fcn(n, x, fvec, iflag, m, prms)
1413SUBROUTINE hybrd1(fcn, n, x, fvec, tol, info, m, prms)
1499 REAL(kind=8) diag(n)
1503 REAL(kind=8) fjac(n, n)
1504 REAL(kind=8) fvec(n)
1505 INTEGER(kind=4) info
1507 INTEGER(kind=4) ldfjac
1509 INTEGER(kind=4) maxfev
1511 INTEGER(kind=4) mode
1513 INTEGER(kind=4) nfev
1514 INTEGER(kind=4) nprint
1516 REAL(kind=8) r((n*(n + 1))/2)
1520 REAL(kind=8) prms(m)
1527 IF (tol < 0.0d+00)
THEN
1533 maxfev = 200*(n + 1)
1543 fjac(1:n, 1:n) = 0.0d+00
1545 r(1:(n*(n + 1))/2) = 0.0d+00
1549 CALL hybrd(fcn, n, x, fvec, xtol, maxfev, ml, mu, epsfcn, diag, mode, &
1550 factor, nprint, info, nfev, fjac, ldfjac, r, lr, qtf, m, prms)
1558SUBROUTINE hybrj(fcn, n, x, fvec, fjac, ldfjac, xtol, maxfev, diag, mode, &
1559 factor, nprint, info, nfev, njev, r, lr, qtf)
1683 INTEGER(kind=4) ldfjac
1689 REAL(kind=8) diag(n)
1694 REAL(kind=8) fjac(ldfjac, n)
1697 REAL(kind=8) fvec(n)
1699 INTEGER(kind=4) iflag
1700 INTEGER(kind=4) info
1701 INTEGER(kind=4) iter
1702 INTEGER(kind=4) iwa(1)
1706 INTEGER(kind=4) maxfev
1707 INTEGER(kind=4) mode
1708 INTEGER(kind=4) ncfail
1709 INTEGER(kind=4) nslow1
1710 INTEGER(kind=4) nslow2
1711 INTEGER(kind=4) ncsuc
1712 INTEGER(kind=4) nfev
1713 INTEGER(kind=4) njev
1714 INTEGER(kind=4) nprint
1732 epsmch = epsilon(epsmch)
1746 IF (0 < nprint)
THEN
1747 CALL fcn(n, x, fvec, fjac, ldfjac, iflag)
1752 IF (ldfjac < n .OR. &
1753 xtol < 0.0d+00 .OR. &
1755 factor <= 0.0d+00 .OR. &
1756 lr < (n*(n + 1))/2)
THEN
1761 IF (0 < nprint)
THEN
1762 CALL fcn(n, x, fvec, fjac, ldfjac, iflag)
1769 IF (diag(j) <= 0.0d+00)
THEN
1774 IF (0 < nprint)
THEN
1775 CALL fcn(n, x, fvec, fjac, ldfjac, iflag)
1785 CALL fcn(n, x, fvec, fjac, ldfjac, iflag)
1793 IF (0 < nprint)
THEN
1794 CALL fcn(n, x, fvec, fjac, ldfjac, iflag)
1799 fnorm =
enorm(n, fvec)
1818 CALL fcn(n, x, fvec, fjac, ldfjac, iflag)
1824 IF (0 < nprint)
THEN
1825 CALL fcn(n, x, fvec, fjac, ldfjac, iflag)
1833 CALL qrfac(n, n, fjac, ldfjac, pivot, iwa, 1, wa1, wa2)
1841 diag(1:n) = wa2(1:n)
1843 IF (wa2(j) == 0.0d+00)
THEN
1852 wa3(1:n) = diag(1:n)*x(1:n)
1853 xnorm =
enorm(n, wa3)
1854 delta = factor*xnorm
1855 IF (delta == 0.0d+00)
THEN
1863 qtf(1:n) = fvec(1:n)
1866 IF (fjac(j, j) /= 0.0d+00)
THEN
1869 sum2 = sum2 + fjac(i, j)*qtf(i)
1871 temp = -sum2/fjac(j, j)
1873 qtf(i) = qtf(i) + fjac(i, j)*temp
1889 IF (wa1(j) == 0.0d+00)
THEN
1896 CALL qform(n, n, fjac, ldfjac)
1902 diag(j) = max(diag(j), wa2(j))
1912 IF (0 < nprint)
THEN
1915 IF (mod(iter - 1, nprint) == 0)
THEN
1916 CALL fcn(n, x, fvec, fjac, ldfjac, iflag)
1922 IF (0 < nprint)
THEN
1923 CALL fcn(n, x, fvec, fjac, ldfjac, iflag)
1932 CALL dogleg(n, r, lr, diag, qtf, delta, wa1)
1937 wa1(1:n) = -wa1(1:n)
1938 wa2(1:n) = x(1:n) + wa1(1:n)
1939 wa3(1:n) = diag(1:n)*wa1(1:n)
1940 pnorm =
enorm(n, wa3)
1945 delta = min(delta, pnorm)
1951 CALL fcn(n, wa2, wa4, fjac, ldfjac, iflag)
1957 IF (0 < nprint)
THEN
1958 CALL fcn(n, x, fvec, fjac, ldfjac, iflag)
1963 fnorm1 =
enorm(n, wa4)
1968 IF (fnorm1 < fnorm)
THEN
1969 actred = 1.0d+00 - (fnorm1/fnorm)**2
1978 sum2 = sum2 + r(l)*wa1(j)
1981 wa3(i) = qtf(i) + sum2
1984 temp =
enorm(n, wa3)
1986 IF (temp < fnorm)
THEN
1987 prered = 1.0d+00 - (temp/fnorm)**2
1992 IF (0.0d+00 < prered)
THEN
1993 ratio = actred/prered
2000 IF (ratio < 0.1d+00)
THEN
2004 delta = 0.5d+00*delta
2011 IF (0.5d+00 <= ratio .OR. 1 < ncsuc)
THEN
2012 delta = max(delta, pnorm/0.5d+00)
2015 IF (abs(ratio - 1.0d+00) <= 0.1d+00)
THEN
2016 delta = pnorm/0.5d+00
2028 IF (0.0001d+00 <= ratio)
THEN
2030 wa2(1:n) = diag(1:n)*x(1:n)
2031 fvec(1:n) = wa4(1:n)
2032 xnorm =
enorm(n, wa2)
2040 IF (0.001d+00 <= actred)
THEN
2048 IF (0.1d+00 <= actred)
THEN
2054 IF (delta <= xtol*xnorm .OR. fnorm == 0.0d+00)
THEN
2060 IF (0 < nprint)
THEN
2061 CALL fcn(n, x, fvec, fjac, ldfjac, iflag)
2068 IF (maxfev <= nfev)
THEN
2072 IF (0.1d+00*max(0.1d+00*delta, pnorm) <= epsmch*xnorm)
THEN
2076 IF (nslow2 == 5)
THEN
2080 IF (nslow1 == 10)
THEN
2086 IF (0 < nprint)
THEN
2087 CALL fcn(n, x, fvec, fjac, ldfjac, iflag)
2094 IF (ncfail == 2)
THEN
2102 sum2 = dot_product(wa4(1:n), fjac(1:n, j))
2103 wa2(j) = (sum2 - wa3(j))/pnorm
2104 wa1(j) = diag(j)*((diag(j)*wa1(j))/pnorm)
2105 IF (0.0001d+00 <= ratio)
THEN
2112 CALL r1updt(n, n, r, lr, wa1, wa2, wa3, sing)
2113 CALL r1mpyq(n, n, fjac, ldfjac, wa2, wa3)
2114 CALL r1mpyq(1, n, qtf, 1, wa2, wa3)
2127SUBROUTINE hybrj1(fcn, n, x, fvec, fjac, ldfjac, tol, info)
2213 INTEGER(kind=4) ldfjac
2216 REAL(kind=8) diag(n)
2219 REAL(kind=8) fjac(ldfjac, n)
2220 REAL(kind=8) fvec(n)
2221 INTEGER(kind=4) info
2224 INTEGER(kind=4) maxfev
2225 INTEGER(kind=4) mode
2226 INTEGER(kind=4) nfev
2227 INTEGER(kind=4) njev
2228 INTEGER(kind=4) nprint
2230 REAL(kind=8) r((n*(n + 1))/2)
2239 ELSE IF (ldfjac < n)
THEN
2241 ELSE IF (tol < 0.0d+00)
THEN
2245 maxfev = 100*(n + 1)
2253 CALL hybrj(fcn, n, x, fvec, fjac, ldfjac, xtol, maxfev, diag, mode, &
2254 factor, nprint, info, nfev, njev, r, lr, qtf)
2262SUBROUTINE lmder(fcn, m, n, x, fvec, fjac, ldfjac, ftol, xtol, gtol, maxfev, &
2263 diag, mode, factor, nprint, info, nfev, njev, ipvt, qtf)
2411 INTEGER(kind=4) ldfjac
2417 REAL(kind=8) diag(n)
2423 REAL(kind=8) fjac(ldfjac, n)
2427 REAL(kind=8) fvec(m)
2431 INTEGER(kind=4) iflag
2432 INTEGER(kind=4) info
2433 INTEGER(kind=4) ipvt(n)
2434 INTEGER(kind=4) iter
2437 INTEGER(kind=4) maxfev
2438 INTEGER(kind=4) mode
2439 INTEGER(kind=4) nfev
2440 INTEGER(kind=4) njev
2441 INTEGER(kind=4) nprint
2460 epsmch = epsilon(epsmch)
2478 .OR. ftol < 0.0d+00 .OR. xtol < 0.0d+00 .OR. gtol < 0.0d+00 &
2479 .OR. maxfev <= 0 .OR. factor <= 0.0d+00)
THEN
2485 IF (diag(j) <= 0.0d+00)
THEN
2494 CALL fcn(m, n, x, fvec, fjac, ldfjac, iflag)
2500 fnorm =
enorm(m, fvec)
2514 CALL fcn(m, n, x, fvec, fjac, ldfjac, iflag)
2524 IF (0 < nprint)
THEN
2526 IF (mod(iter - 1, nprint) == 0)
THEN
2527 CALL fcn(m, n, x, fvec, fjac, ldfjac, iflag)
2537 CALL qrfac(m, n, fjac, ldfjac, pivot, ipvt, n, wa1, wa2)
2545 diag(1:n) = wa2(1:n)
2547 IF (wa2(j) == 0.0d+00)
THEN
2556 wa3(1:n) = diag(1:n)*x(1:n)
2558 xnorm =
enorm(n, wa3)
2559 delta = factor*xnorm
2560 IF (delta == 0.0d+00)
THEN
2568 wa4(1:m) = fvec(1:m)
2572 IF (fjac(j, j) /= 0.0d+00)
THEN
2573 sum2 = dot_product(wa4(j:m), fjac(j:m, j))
2574 temp = -sum2/fjac(j, j)
2575 wa4(j:m) = wa4(j:m) + fjac(j:m, j)*temp
2587 IF (fnorm /= 0.0d+00)
THEN
2591 IF (wa2(l) /= 0.0d+00)
THEN
2592 sum2 = dot_product(qtf(1:j), fjac(1:j, j))/fnorm
2593 gnorm = max(gnorm, abs(sum2/wa2(l)))
2601 IF (gnorm <= gtol)
THEN
2610 diag(j) = max(diag(j), wa2(j))
2620 CALL lmpar(n, fjac, ldfjac, ipvt, diag, qtf, delta, par, wa1, wa2)
2624 wa1(1:n) = -wa1(1:n)
2625 wa2(1:n) = x(1:n) + wa1(1:n)
2626 wa3(1:n) = diag(1:n)*wa1(1:n)
2628 pnorm =
enorm(n, wa3)
2633 delta = min(delta, pnorm)
2639 CALL fcn(m, n, wa2, wa4, fjac, ldfjac, iflag)
2647 fnorm1 =
enorm(m, wa4)
2652 IF (0.1d+00*fnorm1 < fnorm)
THEN
2653 actred = 1.0d+00 - (fnorm1/fnorm)**2
2663 wa3(1:j) = wa3(1:j) + fjac(1:j, j)*temp
2666 temp1 =
enorm(n, wa3)/fnorm
2667 temp2 = (sqrt(par)*pnorm)/fnorm
2668 prered = temp1**2 + temp2**2/0.5d+00
2669 dirder = -(temp1**2 + temp2**2)
2673 IF (prered /= 0.0d+00)
THEN
2674 ratio = actred/prered
2681 IF (ratio <= 0.25d+00)
THEN
2683 IF (0.0d+00 <= actred)
THEN
2687 IF (actred < 0.0d+00)
THEN
2688 temp = 0.5d+00*dirder/(dirder + 0.5d+00*actred)
2691 IF (0.1d+00*fnorm1 >= fnorm .OR. temp < 0.1d+00)
THEN
2695 delta = temp*min(delta, pnorm/0.1d+00)
2700 IF (par == 0.0d+00 .OR. ratio >= 0.75d+00)
THEN
2701 delta = 2.0d+00*pnorm
2711 IF (0.0001d+00 <= ratio)
THEN
2713 wa2(1:n) = diag(1:n)*x(1:n)
2714 fvec(1:m) = wa4(1:m)
2715 xnorm =
enorm(n, wa2)
2722 IF (abs(actred) <= ftol .AND. &
2723 prered <= ftol .AND. &
2724 0.5d+00*ratio <= 1.0d+00)
THEN
2728 IF (delta <= xtol*xnorm)
THEN
2732 IF (abs(actred) <= ftol .AND. prered <= ftol &
2733 .AND. 0.5d+00*ratio <= 1.0d+00 .AND. info == 2)
THEN
2743 IF (nfev >= maxfev)
THEN
2747 IF (abs(actred) <= epsmch .AND. prered <= epsmch &
2748 .AND. 0.5d+00*ratio <= 1.0d+00)
THEN
2752 IF (delta <= epsmch*xnorm)
THEN
2756 IF (gnorm <= epsmch)
THEN
2766 IF (ratio < 0.0001d+00)
THEN
2784 IF (0 < nprint)
THEN
2785 CALL fcn(m, n, x, fvec, fjac, ldfjac, iflag)
2790SUBROUTINE lmder1(fcn, m, n, x, fvec, fjac, ldfjac, tol, info)
2890 INTEGER(kind=4) ldfjac
2894 REAL(kind=8) diag(n)
2897 REAL(kind=8) fjac(ldfjac, n)
2899 REAL(kind=8) fvec(m)
2901 INTEGER(kind=4) info
2902 INTEGER(kind=4) ipvt(n)
2903 INTEGER(kind=4) maxfev
2904 INTEGER(kind=4) mode
2905 INTEGER(kind=4) nfev
2906 INTEGER(kind=4) njev
2907 INTEGER(kind=4) nprint
2917 ELSE IF (m < n)
THEN
2919 ELSE IF (ldfjac < m)
THEN
2921 ELSE IF (tol < 0.0d+00)
THEN
2926 maxfev = 100*(n + 1)
2933 CALL lmder(fcn, m, n, x, fvec, fjac, ldfjac, ftol, xtol, gtol, maxfev, &
2934 diag, mode, factor, nprint, info, nfev, njev, ipvt, qtf)
2942SUBROUTINE lmdif(fcn, m, n, x, xdat, ydat, fvec, ftol, xtol, gtol, maxfev, epsfcn, &
2943 diag, mode, factor, nprint, info, nfev, fjac, ldfjac, ipvt, qtf)
3097 INTEGER(kind=4) ldfjac
3103 REAL(kind=8) diag(n)
3110 REAL(kind=8) fjac(ldfjac, n)
3114 REAL(kind=8) :: fvec(m), xdat(m), ydat(m)
3118 INTEGER(kind=4) iflag
3119 INTEGER(kind=4) iter
3120 INTEGER(kind=4) info
3121 INTEGER(kind=4) ipvt(n)
3124 INTEGER(kind=4) maxfev
3125 INTEGER(kind=4) mode
3126 INTEGER(kind=4) nfev
3127 INTEGER(kind=4) nprint
3146 epsmch = epsilon(epsmch)
3154 ELSE IF (m < n)
THEN
3156 ELSE IF (ldfjac < m)
THEN
3158 ELSE IF (ftol < 0.0d+00)
THEN
3160 ELSE IF (xtol < 0.0d+00)
THEN
3162 ELSE IF (gtol < 0.0d+00)
THEN
3164 ELSE IF (maxfev <= 0)
THEN
3166 ELSE IF (factor <= 0.0d+00)
THEN
3172 IF (diag(j) <= 0.0d+00)
THEN
3181 CALL fcn(m, n, x, xdat, ydat, fvec, iflag)
3188 fnorm =
enorm(m, fvec)
3202 CALL fdjac2(fcn, m, n, x, xdat, ydat, fvec, fjac, ldfjac, iflag, epsfcn)
3211 IF (0 < nprint)
THEN
3213 IF (mod(iter - 1, nprint) == 0)
THEN
3214 CALL fcn(m, n, x, xdat, ydat, fvec, iflag)
3224 CALL qrfac(m, n, fjac, ldfjac, pivot, ipvt, n, wa1, wa2)
3232 diag(1:n) = wa2(1:n)
3234 IF (wa2(j) == 0.0d+00)
THEN
3243 wa3(1:n) = diag(1:n)*x(1:n)
3244 xnorm =
enorm(n, wa3)
3245 delta = factor*xnorm
3246 IF (delta == 0.0d+00)
THEN
3253 wa4(1:m) = fvec(1:m)
3257 IF (fjac(j, j) /= 0.0d+00)
THEN
3258 sum2 = dot_product(wa4(j:m), fjac(j:m, j))
3259 temp = -sum2/fjac(j, j)
3260 wa4(j:m) = wa4(j:m) + fjac(j:m, j)*temp
3272 IF (fnorm /= 0.0d+00)
THEN
3278 IF (wa2(l) /= 0.0d+00)
THEN
3281 sum2 = sum2 + fjac(i, j)*(qtf(i)/fnorm)
3283 gnorm = max(gnorm, abs(sum2/wa2(l)))
3292 IF (gnorm <= gtol)
THEN
3301 diag(j) = max(diag(j), wa2(j))
3311 CALL lmpar(n, fjac, ldfjac, ipvt, diag, qtf, delta, par, wa1, wa2)
3316 wa1(1:n) = -wa1(1:n)
3317 wa2(1:n) = x(1:n) + wa1(1:n)
3318 wa3(1:n) = diag(1:n)*wa1(1:n)
3320 pnorm =
enorm(n, wa3)
3325 delta = min(delta, pnorm)
3331 CALL fcn(m, n, wa2, xdat, ydat, wa4, iflag)
3336 fnorm1 =
enorm(m, wa4)
3340 IF (0.1d+00*fnorm1 < fnorm)
THEN
3341 actred = 1.0d+00 - (fnorm1/fnorm)**2
3352 wa3(1:j) = wa3(1:j) + fjac(1:j, j)*temp
3355 temp1 =
enorm(n, wa3)/fnorm
3356 temp2 = (sqrt(par)*pnorm)/fnorm
3357 prered = temp1**2 + temp2**2/0.5d+00
3358 dirder = -(temp1**2 + temp2**2)
3363 IF (prered /= 0.0d+00)
THEN
3364 ratio = actred/prered
3369 IF (ratio <= 0.25d+00)
THEN
3371 IF (actred >= 0.0d+00)
THEN
3375 IF (actred < 0.0d+00)
THEN
3376 temp = 0.5d+00*dirder/(dirder + 0.5d+00*actred)
3379 IF (0.1d+00*fnorm1 >= fnorm .OR. temp < 0.1d+00)
THEN
3383 delta = temp*min(delta, pnorm/0.1d+00)
3388 IF (par == 0.0d+00 .OR. ratio >= 0.75d+00)
THEN
3389 delta = 2.0d+00*pnorm
3401 IF (0.0001d+00 <= ratio)
THEN
3403 wa2(1:n) = diag(1:n)*x(1:n)
3404 fvec(1:m) = wa4(1:m)
3405 xnorm =
enorm(n, wa2)
3412 IF (abs(actred) <= ftol .AND. prered <= ftol &
3413 .AND. 0.5d+00*ratio <= 1.0d+00)
THEN
3417 IF (delta <= xtol*xnorm)
THEN
3421 IF (abs(actred) <= ftol .AND. prered <= ftol &
3422 .AND. 0.5d+00*ratio <= 1.0d+00 .AND. info == 2) info = 3
3430 IF (maxfev <= nfev)
THEN
3434 IF (abs(actred) <= epsmch .AND. prered <= epsmch &
3435 .AND. 0.5d+00*ratio <= 1.0d+00)
THEN
3439 IF (delta <= epsmch*xnorm)
THEN
3443 IF (gnorm <= epsmch)
THEN
3453 IF (ratio < 0.0001d+00)
THEN
3471 IF (0 < nprint)
THEN
3472 CALL fcn(m, n, x, xdat, ydat, fvec, iflag)
3477SUBROUTINE lmdif1(fcn, m, n, x, xdat, ydat, fvec, tol, info)
3568 REAL(kind=8) diag(n)
3572 REAL(kind=8) fjac(m, n)
3574 REAL(kind=8) :: fvec(m), xdat(m), ydat(m)
3576 INTEGER(kind=4) info
3577 INTEGER(kind=4) ipvt(n)
3578 INTEGER(kind=4) ldfjac
3579 INTEGER(kind=4) maxfev
3580 INTEGER(kind=4) mode
3581 INTEGER(kind=4) nfev
3582 INTEGER(kind=4) nprint
3592 ELSE IF (m < n)
THEN
3594 ELSE IF (tol < 0.0d+00)
THEN
3599 maxfev = 200*(n + 1)
3608 CALL lmdif(fcn, m, n, x, xdat, ydat, fvec, ftol, xtol, gtol, maxfev, epsfcn, &
3609 diag, mode, factor, nprint, info, nfev, fjac, ldfjac, ipvt, qtf)
3617SUBROUTINE lmpar(n, r, ldr, ipvt, diag, qtb, delta, par, x, sdiag)
3721 REAL(kind=8) diag(n)
3728 INTEGER(kind=4) ipvt(n)
3729 INTEGER(kind=4) iter
3733 INTEGER(kind=4) nsing
3740 REAL(kind=8) r(ldr, n)
3741 REAL(kind=8) sdiag(n)
3760 IF (r(j, j) == 0.0d+00 .AND. nsing == n)
THEN
3770 wa1(j) = wa1(j)/r(j, j)
3772 wa1(1:j - 1) = wa1(1:j - 1) - r(1:j - 1, j)*temp
3785 wa2(1:n) = diag(1:n)*x(1:n)
3786 dxnorm =
enorm(n, wa2)
3789 IF (fp <= 0.1d+00*delta)
THEN
3804 IF (n <= nsing)
THEN
3808 wa1(j) = diag(l)*(wa2(l)/dxnorm)
3812 sum2 = dot_product(wa1(1:j - 1), r(1:j - 1, j))
3813 wa1(j) = (wa1(j) - sum2)/r(j, j)
3816 temp =
enorm(n, wa1)
3817 parl = ((fp/delta)/temp)/temp
3824 sum2 = dot_product(qtb(1:j), r(1:j, j))
3826 wa1(j) = sum2/diag(l)
3829 gnorm =
enorm(n, wa1)
3832 IF (paru == 0.0d+00)
THEN
3833 paru = dwarf/min(delta, 0.1d+00)
3839 par = max(par, parl)
3840 par = min(par, paru)
3841 IF (par == 0.0d+00)
THEN
3853 IF (par == 0.0d+00)
THEN
3854 par = max(dwarf, 0.001d+00*paru)
3857 wa1(1:n) = sqrt(par)*diag(1:n)
3859 CALL qrsolv(n, r, ldr, ipvt, wa1, qtb, x, sdiag)
3861 wa2(1:n) = diag(1:n)*x(1:n)
3862 dxnorm =
enorm(n, wa2)
3868 IF (abs(fp) <= 0.1d+00*delta)
THEN
3875 IF (parl == 0.0d+00 .AND. fp <= temp .AND. temp < 0.0d+00)
THEN
3877 ELSE IF (iter == 10)
THEN
3885 wa1(j) = diag(l)*(wa2(l)/dxnorm)
3889 wa1(j) = wa1(j)/sdiag(j)
3891 wa1(j + 1:n) = wa1(j + 1:n) - r(j + 1:n, j)*temp
3894 temp =
enorm(n, wa1)
3895 parc = ((fp/delta)/temp)/temp
3899 IF (0.0d+00 < fp)
THEN
3900 parl = max(parl, par)
3901 ELSE IF (fp < 0.0d+00)
THEN
3902 paru = min(paru, par)
3907 par = max(parl, par + parc)
3921SUBROUTINE lmstr(fcn, m, n, x, fvec, fjac, ldfjac, ftol, xtol, gtol, maxfev, &
3922 diag, mode, factor, nprint, info, nfev, njev, ipvt, qtf)
4073 INTEGER(kind=4) ldfjac
4079 REAL(kind=8) diag(n)
4085 REAL(kind=8) fjac(ldfjac, n)
4089 REAL(kind=8) fvec(m)
4093 INTEGER(kind=4) iflag
4094 INTEGER(kind=4) info
4095 INTEGER(kind=4) ipvt(n)
4096 INTEGER(kind=4) iter
4099 INTEGER(kind=4) maxfev
4100 INTEGER(kind=4) mode
4101 INTEGER(kind=4) nfev
4102 INTEGER(kind=4) njev
4103 INTEGER(kind=4) nprint
4123 epsmch = epsilon(epsmch)
4135 ELSE IF (m < n)
THEN
4137 ELSE IF (ldfjac < n)
THEN
4139 ELSE IF (ftol < 0.0d+00)
THEN
4141 ELSE IF (xtol < 0.0d+00)
THEN
4143 ELSE IF (gtol < 0.0d+00)
THEN
4145 ELSE IF (maxfev <= 0)
THEN
4147 ELSE IF (factor <= 0.0d+00)
THEN
4153 IF (diag(j) <= 0.0d+00)
THEN
4162 CALL fcn(m, n, x, fvec, wa3, iflag)
4169 fnorm =
enorm(m, fvec)
4182 IF (0 < nprint)
THEN
4184 IF (mod(iter - 1, nprint) == 0)
THEN
4185 CALL fcn(m, n, x, fvec, wa3, iflag)
4197 fjac(1:n, 1:n) = 0.0d+00
4201 CALL fcn(m, n, x, fvec, wa3, iflag)
4206 CALL rwupdt(n, fjac, ldfjac, wa3, qtf, temp, wa1, wa2)
4217 IF (fjac(j, j) == 0.0d+00)
THEN
4221 wa2(j) =
enorm(j, fjac(1, j))
4227 CALL qrfac(n, n, fjac, ldfjac, pivot, ipvt, n, wa1, wa2)
4231 IF (fjac(j, j) /= 0.0d+00)
THEN
4233 sum2 = dot_product(qtf(j:n), fjac(j:n, j))
4234 temp = -sum2/fjac(j, j)
4235 qtf(j:n) = qtf(j:n) + fjac(j:n, j)*temp
4255 diag(1:n) = wa2(1:n)
4257 IF (wa2(j) == 0.0d+00)
THEN
4264 wa3(1:n) = diag(1:n)*x(1:n)
4265 xnorm =
enorm(n, wa3)
4266 delta = factor*xnorm
4267 IF (delta == 0.0d+00)
THEN
4277 IF (fnorm /= 0.0d+00)
THEN
4281 IF (wa2(l) /= 0.0d+00)
THEN
4282 sum2 = dot_product(qtf(1:j), fjac(1:j, j))/fnorm
4283 gnorm = max(gnorm, abs(sum2/wa2(l)))
4291 IF (gnorm <= gtol)
THEN
4300 diag(j) = max(diag(j), wa2(j))
4310 CALL lmpar(n, fjac, ldfjac, ipvt, diag, qtf, delta, par, wa1, wa2)
4315 wa1(1:n) = -wa1(1:n)
4316 wa2(1:n) = x(1:n) + wa1(1:n)
4317 wa3(1:n) = diag(1:n)*wa1(1:n)
4318 pnorm =
enorm(n, wa3)
4323 delta = min(delta, pnorm)
4329 CALL fcn(m, n, wa2, wa4, wa3, iflag)
4334 fnorm1 =
enorm(m, wa4)
4338 IF (0.1d+00*fnorm1 < fnorm)
THEN
4339 actred = 1.0d+00 - (fnorm1/fnorm)**2
4351 wa3(1:j) = wa3(1:j) + fjac(1:j, j)*temp
4354 temp1 =
enorm(n, wa3)/fnorm
4355 temp2 = (sqrt(par)*pnorm)/fnorm
4356 prered = temp1**2 + temp2**2/0.5d+00
4357 dirder = -(temp1**2 + temp2**2)
4361 IF (prered /= 0.0d+00)
THEN
4362 ratio = actred/prered
4369 IF (ratio <= 0.25d+00)
THEN
4371 IF (actred >= 0.0d+00)
THEN
4374 temp = 0.5d+00*dirder/(dirder + 0.5d+00*actred)
4377 IF (0.1d+00*fnorm1 >= fnorm .OR. temp < 0.1d+00)
THEN
4381 delta = temp*min(delta, pnorm/0.1d+00)
4386 IF (par == 0.0d+00 .OR. ratio >= 0.75d+00)
THEN
4387 delta = pnorm/0.5d+00
4395 IF (ratio >= 0.0001d+00)
THEN
4397 wa2(1:n) = diag(1:n)*x(1:n)
4398 fvec(1:m) = wa4(1:m)
4399 xnorm =
enorm(n, wa2)
4406 IF (abs(actred) <= ftol .AND. prered <= ftol &
4407 .AND. 0.5d+00*ratio <= 1.0d+00)
THEN
4411 IF (delta <= xtol*xnorm)
THEN
4415 IF (abs(actred) <= ftol .AND. prered <= ftol &
4416 .AND. 0.5d+00*ratio <= 1.0d+00 .AND. info == 2)
THEN
4424 IF (nfev >= maxfev)
THEN
4428 IF (abs(actred) <= epsmch .AND. prered <= epsmch &
4429 .AND. 0.5d+00*ratio <= 1.0d+00)
THEN
4433 IF (delta <= epsmch*xnorm)
THEN
4437 IF (gnorm <= epsmch)
THEN
4447 IF (ratio < 0.0001d+00)
THEN
4465 IF (0 < nprint)
THEN
4466 CALL fcn(m, n, x, fvec, wa3, iflag)
4471SUBROUTINE lmstr1(fcn, m, n, x, fvec, fjac, ldfjac, tol, info)
4574 INTEGER(kind=4) ldfjac
4578 REAL(kind=8) diag(n)
4581 REAL(kind=8) fjac(ldfjac, n)
4583 REAL(kind=8) fvec(m)
4585 INTEGER(kind=4) info
4586 INTEGER(kind=4) ipvt(n)
4587 INTEGER(kind=4) maxfev
4588 INTEGER(kind=4) mode
4589 INTEGER(kind=4) nfev
4590 INTEGER(kind=4) njev
4591 INTEGER(kind=4) nprint
4607 IF (ldfjac < n)
THEN
4612 IF (tol < 0.0d+00)
THEN
4618 fjac(1:ldfjac, 1:n) = 0.0d+00
4622 maxfev = 100*(n + 1)
4633 CALL lmstr(fcn, m, n, x, fvec, fjac, ldfjac, ftol, xtol, gtol, maxfev, &
4634 diag, mode, factor, nprint, info, nfev, njev, ipvt, qtf)
4700 INTEGER(kind=4) minmn
4701 REAL(kind=8) q(ldq, m)
4708 q(1:j - 1, j) = 0.0d+00
4713 q(1:m, n + 1:m) = 0.0d+00
4730 IF (wa(k) /= 0.0d+00)
THEN
4733 temp = dot_product(wa(k:m), q(k:m, j))/wa(k)
4734 q(k:m, j) = q(k:m, j) - temp*wa(k:m)
4743SUBROUTINE qrfac(m, n, a, lda, pivot, ipvt, lipvt, rdiag, acnorm)
4819 INTEGER(kind=4) lipvt
4823 REAL(kind=8) a(lda, n)
4824 REAL(kind=8) acnorm(n)
4829 INTEGER(kind=4) i4_temp
4830 INTEGER(kind=4) ipvt(lipvt)
4833 INTEGER(kind=4) kmax
4834 INTEGER(kind=4) minmn
4836 REAL(kind=8) r8_temp(m)
4837 REAL(kind=8) rdiag(n)
4841 epsmch = epsilon(epsmch)
4846 acnorm(j) =
enorm(m, a(1:m, j))
4849 rdiag(1:n) = acnorm(1:n)
4850 wa(1:n) = acnorm(1:n)
4871 IF (rdiag(kmax) < rdiag(k))
THEN
4878 r8_temp(1:m) = a(1:m, j)
4879 a(1:m, j) = a(1:m, kmax)
4880 a(1:m, kmax) = r8_temp(1:m)
4882 rdiag(kmax) = rdiag(j)
4886 ipvt(j) = ipvt(kmax)
4887 ipvt(kmax) = i4_temp
4896 ajnorm =
enorm(m - j + 1, a(j, j))
4898 IF (ajnorm /= 0.0d+00)
THEN
4900 IF (a(j, j) < 0.0d+00)
THEN
4904 a(j:m, j) = a(j:m, j)/ajnorm
4905 a(j, j) = a(j, j) + 1.0d+00
4911 temp = dot_product(a(j:m, j), a(j:m, k))/a(j, j)
4913 a(j:m, k) = a(j:m, k) - temp*a(j:m, j)
4915 IF (pivot .AND. rdiag(k) /= 0.0d+00)
THEN
4917 temp = a(j, k)/rdiag(k)
4918 rdiag(k) = rdiag(k)*sqrt(max(0.0d+00, 1.0d+00 - temp**2))
4920 IF (0.05d+00*(rdiag(k)/wa(k))**2 <= epsmch)
THEN
4921 rdiag(k) =
enorm(m - j, a(j + 1, k))
4937SUBROUTINE qrsolv(n, r, ldr, ipvt, diag, qtb, x, sdiag)
5028 REAL(kind=8) diag(n)
5030 INTEGER(kind=4) ipvt(n)
5034 INTEGER(kind=4) nsing
5037 REAL(kind=8) r(ldr, n)
5039 REAL(kind=8) sdiag(n)
5051 r(j:n, j) = r(j, j:n)
5066 IF (diag(l) /= 0.0d+00)
THEN
5068 sdiag(j:n) = 0.0d+00
5082 IF (sdiag(k) /= 0.0d+00)
THEN
5084 IF (abs(r(k, k)) < abs(sdiag(k)))
THEN
5085 cotan = r(k, k)/sdiag(k)
5086 s = 0.5d+00/sqrt(0.25d+00 + 0.25d+00*cotan**2)
5089 t = sdiag(k)/r(k, k)
5090 c = 0.5d+00/sqrt(0.25d+00 + 0.25d+00*t**2)
5097 r(k, k) = c*r(k, k) + s*sdiag(k)
5098 temp = c*wa(k) + s*qtbpj
5099 qtbpj = -s*wa(k) + c*qtbpj
5105 temp = c*r(i, k) + s*sdiag(i)
5106 sdiag(i) = -s*r(i, k) + c*sdiag(i)
5131 IF (sdiag(j) == 0.0d+00 .AND. nsing == n)
THEN
5142 sum2 = dot_product(wa(j + 1:nsing), r(j + 1:nsing, j))
5143 wa(j) = (wa(j) - sum2)/sdiag(j)
5215 REAL(kind=8) a(lda, n)
5228 IF (1.0d+00 < abs(v(j)))
THEN
5230 s = sqrt(1.0d+00 - c**2)
5233 c = sqrt(1.0d+00 - s**2)
5237 temp = c*a(i, j) - s*a(i, n)
5238 a(i, n) = s*a(i, j) + c*a(i, n)
5248 IF (abs(w(j)) > 1.0d+00)
THEN
5250 s = sqrt(1.0d+00 - c**2)
5253 c = sqrt(1.0d+00 - s**2)
5257 temp = c*a(i, j) + s*a(i, n)
5258 a(i, n) = -s*a(i, j) + c*a(i, n)
5366 jj = (n*(2*m - n + 1))/2 - (m - n)
5381 jj = jj - (m - j + 1)
5384 IF (v(j) /= 0.0d+00)
THEN
5389 IF (abs(v(n)) < abs(v(j)))
THEN
5391 sin = 0.5d+00/sqrt(0.25d+00 + 0.25d+00*cotan**2)
5394 IF (abs(cos)*giant > 1.0d+00)
THEN
5399 cos = 0.5d+00/sqrt(0.25d+00 + 0.25d+00*tan**2)
5407 v(n) = sin*v(j) + cos*v(n)
5414 temp = cos*s(l) - sin*w(i)
5415 w(i) = sin*s(l) + cos*w(i)
5426 w(1:m) = w(1:m) + v(n)*u(1:m)
5434 IF (w(j) /= 0.0d+00)
THEN
5439 IF (abs(s(jj)) < abs(w(j)))
THEN
5442 sin = 0.5d+00/sqrt(0.25d+00 + 0.25d+00*cotan**2)
5445 IF (1.0d+00 < abs(cos)*giant)
THEN
5454 cos = 0.5d+00/sqrt(0.25d+00 + 0.25d+00*tan**2)
5464 temp = cos*s(l) + sin*w(i)
5465 w(i) = -sin*s(l) + cos*w(i)
5478 IF (s(jj) == 0.0d+00)
THEN
5482 jj = jj + (m - j + 1)
5494 IF (s(jj) == 0.0d+00)
THEN
5536 CHARACTER(len=*) title
5538 WRITE (*,
'(a)')
' '
5539 WRITE (*,
'(a)') trim(title)
5540 WRITE (*,
'(a)')
' '
5542 WRITE (*,
'(2x,i8,2x,g16.8)') i, a(i)
5547SUBROUTINE rwupdt(n, r, ldr, w, b, alpha, c, s)
5624 REAL(kind=8) r(ldr, n)
5638 temp = c(i)*r(i, j) + s(i)*rowj
5639 rowj = -s(i)*r(i, j) + c(i)*rowj
5648 IF (rowj /= 0.0d+00)
THEN
5650 IF (abs(r(j, j)) < abs(rowj))
THEN
5651 cotan = r(j, j)/rowj
5652 s(j) = 0.5d+00/sqrt(0.25d+00 + 0.25d+00*cotan**2)
5656 c(j) = 0.5d+00/sqrt(0.25d+00 + 0.25d+00*tan**2)
5662 r(j, j) = c(j)*r(j, j) + s(j)*rowj
5663 temp = c(j)*b(j) + s(j)*alpha
5664 alpha = -s(j)*b(j) + c(j)*alpha
5701 CHARACTER(len=8) ampm
5706 CHARACTER(len=9),
PARAMETER,
DIMENSION(12) :: month = (/ &
5707 'January ',
'February ',
'March ',
'April ', &
5708 'May ',
'June ',
'July ',
'August ', &
5709 'September',
'October ',
'November ',
'December '/)
5712 INTEGER(kind=4) values(8)
5715 CALL date_and_time(values=values)
5727 ELSE IF (h == 12)
THEN
5728 IF (n == 0 .AND. s == 0)
THEN
5737 ELSE IF (h == 12)
THEN
5738 IF (n == 0 .AND. s == 0)
THEN
5746 WRITE (*,
'(i2.2,1x,a,1x,i4,2x,i2,a1,i2.2,a1,i2.2,a1,i3.3,1x,a)') &
5747 d, trim(month(m)), y, h,
':', n,
':', s,
'.', mm, trim(ampm)
subroutine chkder(m, n, x, fvec, fjac, ldfjac, xp, fvecp, mode, err)
real(kind=8) function enorm2(n, x)
subroutine qrsolv(n, r, ldr, ipvt, diag, qtb, x, sdiag)
subroutine hybrd(fcn, n, x, fvec, xtol, maxfev, ml, mu, epsfcn, diag, mode, factor, nprint, info, nfev, fjac, ldfjac, r, lr, qtf, m, prms)
subroutine qform(m, n, q, ldq)
subroutine fdjac1(fcn, n, x, fvec, fjac, ldfjac, iflag, ml, mu, epsfcn, m, prms)
subroutine lmstr(fcn, m, n, x, fvec, fjac, ldfjac, ftol, xtol, gtol, maxfev, diag, mode, factor, nprint, info, nfev, njev, ipvt, qtf)
subroutine lmpar(n, r, ldr, ipvt, diag, qtb, delta, par, x, sdiag)
subroutine lmder(fcn, m, n, x, fvec, fjac, ldfjac, ftol, xtol, gtol, maxfev, diag, mode, factor, nprint, info, nfev, njev, ipvt, qtf)
subroutine lmdif(fcn, m, n, x, xdat, ydat, fvec, ftol, xtol, gtol, maxfev, epsfcn, diag, mode, factor, nprint, info, nfev, fjac, ldfjac, ipvt, qtf)
subroutine fdjac2(fcn, m, n, x, xdat, ydat, fvec, fjac, ldfjac, iflag, epsfcn)
subroutine hybrj(fcn, n, x, fvec, fjac, ldfjac, xtol, maxfev, diag, mode, factor, nprint, info, nfev, njev, r, lr, qtf)
subroutine qrfac(m, n, a, lda, pivot, ipvt, lipvt, rdiag, acnorm)
subroutine lmdif1(fcn, m, n, x, xdat, ydat, fvec, tol, info)
subroutine r1updt(m, n, s, ls, u, v, w, sing)
subroutine lmder1(fcn, m, n, x, fvec, fjac, ldfjac, tol, info)
subroutine dogleg(n, r, lr, diag, qtb, delta, x)
subroutine r1mpyq(m, n, a, lda, v, w)
real(kind=8) function enorm(n, x)
subroutine lmstr1(fcn, m, n, x, fvec, fjac, ldfjac, tol, info)
subroutine hybrd1(fcn, n, x, fvec, tol, info, m, prms)
subroutine rwupdt(n, r, ldr, w, b, alpha, c, s)
subroutine r8vec_print(n, a, title)
subroutine hybrj1(fcn, n, x, fvec, fjac, ldfjac, tol, info)