This is a first attempt to show what things are done where


File		Functions/ Subroutines [out-dented if called from R/S]
----		----------------------

fdcore.f	subroutine fracdf( x, n, M, nar, nma, dtol, drange,

		    double prec. function dopt(x, dinit, drange, hood, delta, w)
		    double prec. function pqopt( x, d, w)

		    subroutine fdfilt( x, d, y, slogvk, amk, ak, vk, phi, pi)
		    subroutine ajqp( qp, a, ajac, lajac, iflag, y)
		    subroutine  ajp( p, a, ajac, lajac, iflag, y)
		    subroutine  ajq( qp, a, ajac, lajac, iflag, y)

fracdf() -> dopt() -> pqopt()


fdhess.f        subroutine fdcom( n, M, nar, nma, hood,

	        subroutine fdhpq( x, H, lH, w)
	        subroutine fdcov( x, d, hh, hd, cov, lcov, cor, lcor, se, w, info)
		    subroutine invsvd ( s, u, lu, v, lv, cov, lcov)
		    subroutine hesspq( qp, a, ajac, lajac, H, lH, aij, g)
		    subroutine hesdpq( x, d, hh, hd, w)
		    subroutine gradpq( g, a, ajac, ljac)


fdsim.f		subroutine fdsim( n, ip, iq, ar, ma, d, rmu, y, s,


fdgam.f             double prec. function dgamma (x)
		    double prec. function dgamr (x)
		    subroutine dlgams (x, dlgam, sgngam)
		    integer function initds (dos, nos, eta)
		    subroutine d9gaml (xmin, xmax)
		    double prec. function d9lgmc (x)
		    double prec. function dcsevl (x, a, n)
		    double prec. function dlngam (x)

fdmin.f             subroutine lmder1(fcn,m,n,x,fvec,fjac,ldfjac,ftol,xtol,gtol,

	            double prec. function enorm(n,x)
	            subroutine qrfac(m,n,a,lda,pivot,ipvt,lipvt,rdiag,acnorm,wa)
	            subroutine lmpar(n,r,ldr,ipvt,diag,qtb,delta,par,x,sdiag,wa1,

	            subroutine qrsolv(n,r,ldr,ipvt,diag,qtb,x,sdiag,wa)

---------------------------

Then, these communicate via "common blocks" even across file boundaries
(yuck!) :

grep -iw common *f  (and take each once only one per file)

fdcore.f:      common /CNTRFD/    maxopt,maxfun,nopt,nfun,ngrd,ifun,igrd,info
fdcore.f:      common /DIMSFD/    n, M, np, nq, npq, npq1, maxpq, maxpq1, nm
fdcore.f:      common /FILTFD/    hatmu, wnv, cllf
fdcore.f:      common /GAMMFD/    IGAMMA, JGAMMA
fdcore.f:      common /HESSFD/    KSVD, KCOV, KCOR
fdcore.f:      common /LIMSFD/    ILIMIT, JLIMIT
fdcore.f:      common /MACHFD/    FLTMIN, FLTMAX, EPSMIN, EPSMAX
fdcore.f:      common /MAUXFD/    EPSP25, EPSPT3, EPSPT5, EPSP75, BIGNUM
fdcore.f:      common /MNPKFD/    IMINPK, JMINPK
fdcore.f:      common /TOLSFD/    told, tolf, tolx, tolg, anorm, deltax, gnorm
fdcore.f:      common /WFILFD/    ly, lamk, lak, lvk, lphi, lpi
fdcore.f:      common /WOPTFD/    lqp, la, lajac, ipvt, ldiag, lqtf,
fdcore.f:      common /WORKFD/    lenthw, lwfree

fdgam.f:      common /GAMMFD/    IGAMMA, JGAMMA
fdgam.f:      common /MACHFD/    FLTMIN, FLTMAX, EPSMIN, EPSMAX

fdhess.f:      common /DIMSFD/	 n, M, np, nq, npq, npq1, maxpq, maxpq1, nm
fdhess.f:      common /FILTFD/	 hatmu, wnv, cllf
fdhess.f:      common /GAMMFD/    IGAMMA, JGAMMA
fdhess.f:      common /HESSFD/    KSVD, KCOV, KCOR
fdhess.f:      common /MACHFD/    FLTMIN, FLTMAX, EPSMIN, EPSMAX
fdhess.f:      common /MAUXFD/	 EPSP25, EPSPT3, EPSPT5, EPSP75, BIGNUM
fdhess.f:      common /WFILFD/	 ly, lamk, lak, lvk, lphi, lpi
fdhess.f:      common /WOPTFD/	 lqp, la, lajac, ipvt, ldiag, lqtf,

fdmin.f:      common /MACHFD/   FLTMIN, FLTMAX, EPSMIN, EPSMAX
fdmin.f:      common /MAUXFD/    EPSP25, EPSPT3, EPSPT5, EPSP75, BIGNUM
fdmin.f:      common /TOLSFD/    told, tolf, tolx, tolg, fnorm, delta, gnorm

fdsim.f:      common /MACHFD/    FLTMIN, FLTMAX, EPSMIN, EPSMAX
fdsim.f:      common /GAMMFD/    IGAMMA, JGAMMA

-------------------------------------

egrep -in '( |\))call  *([a-z_])* *\(' fdcore.f fdgam.f fdhess.f fdmin.f fdsim.f  | grep -iv '^[1-9][0-9]*:[c*]'
=====

fdcore.f:204:c     if (npq .ne. 0) call dcopy( npq, zero, 0, w(lqp), 1)
fdcore.f:207:        call dcopy( np, ar, 1, w(lqp+nq), 1)
fdcore.f:208:        call dcopy( nq, ma, 1, w(lqp)   , 1)
fdcore.f:225:        call dcopy( np, FLTMAX, 0, ar, 1)
fdcore.f:226:        call dcopy( nq, FLTMAX, 0, ma, 1)
fdcore.f:232:      call dcopy( np, w(lqp+nq), 1, ar, 1)
fdcore.f:233:      call dcopy( nq, w(lqp   ), 1, ma, 1)
fdcore.f:567:        call fdfilt( x, d, w(ly), slogvk,
fdcore.f:589:         if (modelm .eq. 2) call dcopy( npq,  one, 0, w(ldiag), 1)
fdgam.f:240: 10   call dlgams (x, alngx, sgngx)

fdhess.f:129:      call hesspq( w(lqp), w(la), w(lajac), nm, H, lH,

fdhess.f:187:      call hesdpq( x, d, hh, hd, w)
fdhess.f:189:      call dcopy( npq1, hd, 1, cov, lcov)
fdhess.f:214:      call dsvdc( cov, lcov, npq1, npq1, w(ls), w(le),
fdhess.f:218:        call dcopy( npq1, zero, 0, se, 1)
fdhess.f:220:           call dcopy( npq1, zero, 0, cov(1,j), 1)
fdhess.f:227:      call invsvd( w(ls), w(lu), npq1, w(lv), npq1, cov, lcov)
fdhess.f:247:          call dcopy( k, cov( 1, k), 1, cor( 1, k), 1)
fdhess.f:250:          call dscal( (npq1-i+1), (one/se(i)), cor(i,i), lcor)
fdhess.f:253:          call dscal( j, (one/se(j)), cor(1,j),    1)
fdhess.f:258:          call dcopy( npq1, zero, 0, cor(1,j), 1)
fdhess.f:334:        call dcopy( k, zero, 0, cov( 1, k), 1)

fdhess.f:357:          call daxpy( j, (ss*u(j,k)), v(1,k), 1, cov(1,j), 1)
fdhess.f:540:        call fdfilt( x, (d-hh), w(ly), slogvk,
fdhess.f:544:          call ajqp( w(lqp), w(la), w(lajac), nm, 1, w(ly))
fdhess.f:545:          call ajqp( w(lqp), w(la), w(lajac), nm, 2, w(ly))
fdhess.f:547:          call gradpq( w(lwa1), w(la), w(lajac), nm)
fdhess.f:551:          call dscal( npq, (one/wnv), w(lwa1), 1)
fdhess.f:562:          call fdfilt( x, (d+hh), w(ly), slogvk,
fdhess.f:566:            call ajqp( w(lqp), w(la), w(lajac), nm, 1, w(ly))
fdhess.f:567:            call ajqp( w(lqp), w(la), w(lajac), nm, 2, w(ly))
fdhess.f:569:            call gradpq( w(lwa2), w(la), w(lajac), nm)
fdhess.f:573:            call dscal( npq, (one/wnv), w(lwa2), 1)
fdhess.f:586:          call fdfilt( x, (d-two*hh), w(ly), slogvk,
fdhess.f:590:            call ajqp( w(lqp), w(la), w(lajac), nm, 1, w(ly))
fdhess.f:591:            call ajqp( w(lqp), w(la), w(lajac), nm, 2, w(ly))
fdhess.f:593:            call gradpq( w(lwa2), w(la), w(lajac), nm)
fdhess.f:597:            call dscal( npq, (one/wnv), w(lwa2), 1)
fdhess.f:612:        call fdfilt( x, (d+hh), w(ly), slogvk,
fdhess.f:616:          call ajqp( w(lqp), w(la), w(lajac), nm, 1, w(ly))
fdhess.f:617:          call ajqp( w(lqp), w(la), w(lajac), nm, 2, w(ly))
fdhess.f:619:          call gradpq( w(lwa1), w(la), w(lajac), nm)
fdhess.f:623:          call dscal( npq, (one/wnv), w(lwa1), 1)
fdhess.f:632:        call fdfilt( x, (d+two*hh), w(ly), slogvk,
fdhess.f:636:          call ajqp( w(lqp), w(la), w(lajac), nm, 1, w(ly))
fdhess.f:637:          call ajqp( w(lqp), w(la), w(lajac), nm, 2, w(ly))
fdhess.f:639:          call gradpq( w(lwa1), w(la), w(lajac), nm)
fdhess.f:643:          call dscal( npq, (one/wnv), w(lwa1), 1)
fdhess.f:659:      call daxpy( npq, (-one), w(lwa2), 1, w(lwa1), 1)
fdhess.f:660:      call dscal( npq, (dble(n)/(two*hh)), w(lwa1), 1)
fdhess.f:662:      call dcopy( npq, w(lwa1), 1, hd(2), 1)

fdmin.f:233:      call fcn(x,fvec,fjac,ldfjac,iflag,Y)
fdmin.f:251:         call fcn(x,fvec,fjac,ldfjac,iflag,Y)
fdmin.f:260:     *      call fcn(x,fvec,fjac,ldfjac,iflag,Y)
fdmin.f:266:         call qrfac(m,n,fjac,ldfjac,.true.,ipvt,n,wa1,wa2,wa3)
fdmin.f:347:            call lmpar(n,fjac,ldfjac,ipvt,diag,qtf,delta,par,wa1,wa2,
fdmin.f:366:            call fcn(wa2,wa4,fjac,ldfjac,iflag,Y)
fdmin.f:470:      if (nprint .gt. 0) call fcn(x,fvec,fjac,ldfjac,iflag,Y)
fdmin.f:967:         call qrsolv(n,r,ldr,ipvt,wa1,qtb,x,sdiag,wa2)

