MODULE nr
        INTERFACE
                SUBROUTINE airy(x,ai,bi,aip,bip)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                REAL(SP), INTENT(OUT) :: ai,bi,aip,bip
                END SUBROUTINE airy
        END INTERFACE
        INTERFACE
                SUBROUTINE amebsa(p,y,pb,yb,ftol,func,iter,temptr)
                USE nrtype
                INTEGER(I4B), INTENT(INOUT) :: iter
                REAL(SP), INTENT(INOUT) :: yb
                REAL(SP), INTENT(IN) :: ftol,temptr
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: y,pb
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: p
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x
                        REAL(SP) :: func
                        END FUNCTION func
                END INTERFACE
                END SUBROUTINE amebsa
        END INTERFACE
        INTERFACE
                SUBROUTINE amoeba(p,y,ftol,func,iter)
                USE nrtype
                INTEGER(I4B), INTENT(OUT) :: iter
                REAL(SP), INTENT(IN) :: ftol
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: y
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: p
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x
                        REAL(SP) :: func
                        END FUNCTION func
                END INTERFACE
                END SUBROUTINE amoeba
        END INTERFACE
        INTERFACE
                SUBROUTINE anneal(x,y,iorder)
                USE nrtype
                INTEGER(I4B), DIMENSION(:), INTENT(INOUT) :: iorder
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,y
                END SUBROUTINE anneal
        END INTERFACE
        INTERFACE
                SUBROUTINE asolve(b,x,itrnsp)
                USE nrtype
                REAL(DP), DIMENSION(:), INTENT(IN) :: b
                REAL(DP), DIMENSION(:), INTENT(OUT) :: x
                INTEGER(I4B), INTENT(IN) :: itrnsp
                END SUBROUTINE asolve
        END INTERFACE
        INTERFACE
                SUBROUTINE atimes(x,r,itrnsp)
                USE nrtype
                REAL(DP), DIMENSION(:), INTENT(IN) :: x
                REAL(DP), DIMENSION(:), INTENT(OUT) :: r
                INTEGER(I4B), INTENT(IN) :: itrnsp
                END SUBROUTINE atimes
        END INTERFACE
        INTERFACE
                SUBROUTINE avevar(data,ave,var)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: data
                REAL(SP), INTENT(OUT) :: ave,var
                END SUBROUTINE avevar
        END INTERFACE
        INTERFACE
                SUBROUTINE balanc(a)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: a
                END SUBROUTINE balanc
        END INTERFACE
        INTERFACE
                SUBROUTINE banbks(a,m1,m2,al,indx,b)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: m1,m2
                INTEGER(I4B), DIMENSION(:), INTENT(IN) :: indx
                REAL(SP), DIMENSION(:,:), INTENT(IN) :: a,al
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: b
                END SUBROUTINE banbks
        END INTERFACE
        INTERFACE
                SUBROUTINE bandec(a,m1,m2,al,indx,d)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: m1,m2
                INTEGER(I4B), DIMENSION(:), INTENT(OUT) :: indx
                REAL(SP), INTENT(OUT) :: d
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: a
                REAL(SP), DIMENSION(:,:), INTENT(OUT) :: al
                END SUBROUTINE bandec
        END INTERFACE
        INTERFACE
                SUBROUTINE banmul(a,m1,m2,x,b)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: m1,m2
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(:), INTENT(OUT) :: b
                REAL(SP), DIMENSION(:,:), INTENT(IN) :: a
                END SUBROUTINE banmul
        END INTERFACE
        INTERFACE
                SUBROUTINE bcucof(y,y1,y2,y12,d1,d2,c)
                USE nrtype
                REAL(SP), INTENT(IN) :: d1,d2
                REAL(SP), DIMENSION(4), INTENT(IN) :: y,y1,y2,y12
                REAL(SP), DIMENSION(4,4), INTENT(OUT) :: c
                END SUBROUTINE bcucof
        END INTERFACE
        INTERFACE
                SUBROUTINE bcuint(y,y1,y2,y12,x1l,x1u,x2l,x2u,x1,x2,ansy,&
                        ansy1,ansy2)
                USE nrtype
                REAL(SP), DIMENSION(4), INTENT(IN) :: y,y1,y2,y12
                REAL(SP), INTENT(IN) :: x1l,x1u,x2l,x2u,x1,x2
                REAL(SP), INTENT(OUT) :: ansy,ansy1,ansy2
                END SUBROUTINE bcuint
        END INTERFACE
        INTERFACE beschb
                SUBROUTINE beschb_s(x,gam1,gam2,gampl,gammi)
                USE nrtype
                REAL(DP), INTENT(IN) :: x
                REAL(DP), INTENT(OUT) :: gam1,gam2,gampl,gammi
                END SUBROUTINE beschb_s
!BL
                SUBROUTINE beschb_v(x,gam1,gam2,gampl,gammi)
                USE nrtype
                REAL(DP), DIMENSION(:), INTENT(IN) :: x
                REAL(DP), DIMENSION(:), INTENT(OUT) :: gam1,gam2,gampl,gammi
                END SUBROUTINE beschb_v
        END INTERFACE
        INTERFACE bessi
                FUNCTION bessi_s(n,x)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: bessi_s
                END FUNCTION bessi_s
!BL
                FUNCTION bessi_v(n,x)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(size(x)) :: bessi_v
                END FUNCTION bessi_v
        END INTERFACE
        INTERFACE bessi0
                FUNCTION bessi0_s(x)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: bessi0_s
                END FUNCTION bessi0_s
!BL
                FUNCTION bessi0_v(x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(size(x)) :: bessi0_v
                END FUNCTION bessi0_v
        END INTERFACE
        INTERFACE bessi1
                FUNCTION bessi1_s(x)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: bessi1_s
                END FUNCTION bessi1_s
!BL
                FUNCTION bessi1_v(x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(size(x)) :: bessi1_v
                END FUNCTION bessi1_v
        END INTERFACE
        INTERFACE
                SUBROUTINE bessik(x,xnu,ri,rk,rip,rkp)
                USE nrtype
                REAL(SP), INTENT(IN) :: x,xnu
                REAL(SP), INTENT(OUT) :: ri,rk,rip,rkp
                END SUBROUTINE bessik
        END INTERFACE
        INTERFACE bessj
                FUNCTION bessj_s(n,x)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: bessj_s
                END FUNCTION bessj_s
!BL
                FUNCTION bessj_v(n,x)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(size(x)) :: bessj_v
                END FUNCTION bessj_v
        END INTERFACE
        INTERFACE bessj0
                FUNCTION bessj0_s(x)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: bessj0_s
                END FUNCTION bessj0_s
!BL
                FUNCTION bessj0_v(x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(size(x)) :: bessj0_v
                END FUNCTION bessj0_v
        END INTERFACE
        INTERFACE bessj1
                FUNCTION bessj1_s(x)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: bessj1_s
                END FUNCTION bessj1_s
!BL
                FUNCTION bessj1_v(x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(size(x)) :: bessj1_v
                END FUNCTION bessj1_v
        END INTERFACE
        INTERFACE bessjy
                SUBROUTINE bessjy_s(x,xnu,rj,ry,rjp,ryp)
                USE nrtype
                REAL(SP), INTENT(IN) :: x,xnu
                REAL(SP), INTENT(OUT) :: rj,ry,rjp,ryp
                END SUBROUTINE bessjy_s
!BL
                SUBROUTINE bessjy_v(x,xnu,rj,ry,rjp,ryp)
                USE nrtype
                REAL(SP), INTENT(IN) :: xnu
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(:), INTENT(OUT) :: rj,rjp,ry,ryp
                END SUBROUTINE bessjy_v
        END INTERFACE
        INTERFACE bessk
                FUNCTION bessk_s(n,x)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: bessk_s
                END FUNCTION bessk_s
!BL
                FUNCTION bessk_v(n,x)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(size(x)) :: bessk_v
                END FUNCTION bessk_v
        END INTERFACE
        INTERFACE bessk0
                FUNCTION bessk0_s(x)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: bessk0_s
                END FUNCTION bessk0_s
!BL
                FUNCTION bessk0_v(x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(size(x)) :: bessk0_v
                END FUNCTION bessk0_v
        END INTERFACE
        INTERFACE bessk1
                FUNCTION bessk1_s(x)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: bessk1_s
                END FUNCTION bessk1_s
!BL
                FUNCTION bessk1_v(x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(size(x)) :: bessk1_v
                END FUNCTION bessk1_v
        END INTERFACE
        INTERFACE bessy
                FUNCTION bessy_s(n,x)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: bessy_s
                END FUNCTION bessy_s
!BL
                FUNCTION bessy_v(n,x)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(size(x)) :: bessy_v
                END FUNCTION bessy_v
        END INTERFACE
        INTERFACE bessy0
                FUNCTION bessy0_s(x)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: bessy0_s
                END FUNCTION bessy0_s
!BL
                FUNCTION bessy0_v(x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(size(x)) :: bessy0_v
                END FUNCTION bessy0_v
        END INTERFACE
        INTERFACE bessy1
                FUNCTION bessy1_s(x)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: bessy1_s
                END FUNCTION bessy1_s
!BL
                FUNCTION bessy1_v(x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(size(x)) :: bessy1_v
                END FUNCTION bessy1_v
        END INTERFACE
        INTERFACE beta
                FUNCTION beta_s(z,w)
                USE nrtype
                REAL(SP), INTENT(IN) :: z,w
                REAL(SP) :: beta_s
                END FUNCTION beta_s
!BL
                FUNCTION beta_v(z,w)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: z,w
                REAL(SP), DIMENSION(size(z)) :: beta_v
                END FUNCTION beta_v
        END INTERFACE
        INTERFACE betacf
                FUNCTION betacf_s(a,b,x)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,b,x
                REAL(SP) :: betacf_s
                END FUNCTION betacf_s
!BL
                FUNCTION betacf_v(a,b,x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: a,b,x
                REAL(SP), DIMENSION(size(x)) :: betacf_v
                END FUNCTION betacf_v
        END INTERFACE
        INTERFACE betai
                FUNCTION betai_s(a,b,x)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,b,x
                REAL(SP) :: betai_s
                END FUNCTION betai_s
!BL
                FUNCTION betai_v(a,b,x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: a,b,x
                REAL(SP), DIMENSION(size(a)) :: betai_v
                END FUNCTION betai_v
        END INTERFACE
        INTERFACE bico
                FUNCTION bico_s(n,k)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n,k
                REAL(SP) :: bico_s
                END FUNCTION bico_s
!BL
                FUNCTION bico_v(n,k)
                USE nrtype
                INTEGER(I4B), DIMENSION(:), INTENT(IN) :: n,k
                REAL(SP), DIMENSION(size(n)) :: bico_v
                END FUNCTION bico_v
        END INTERFACE
        INTERFACE
                FUNCTION bnldev(pp,n)
                USE nrtype
                REAL(SP), INTENT(IN) :: pp
                INTEGER(I4B), INTENT(IN) :: n
                REAL(SP) :: bnldev
                END FUNCTION bnldev
        END INTERFACE
        INTERFACE
                FUNCTION brent(ax,bx,cx,func,tol,xmin)
                USE nrtype
                REAL(SP), INTENT(IN) :: ax,bx,cx,tol
                REAL(SP), INTENT(OUT) :: xmin
                REAL(SP) :: brent
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP) :: func
                        END FUNCTION func
                END INTERFACE
                END FUNCTION brent
        END INTERFACE
        INTERFACE
                SUBROUTINE broydn(x,check)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: x
                LOGICAL(LGT), INTENT(OUT) :: check
                END SUBROUTINE broydn
        END INTERFACE
        INTERFACE
                SUBROUTINE bsstep(y,dydx,x,htry,eps,yscal,hdid,hnext,derivs)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: y
                REAL(SP), DIMENSION(:), INTENT(IN) :: dydx,yscal
                REAL(SP), INTENT(INOUT) :: x
                REAL(SP), INTENT(IN) :: htry,eps
                REAL(SP), INTENT(OUT) :: hdid,hnext
                INTERFACE
                        SUBROUTINE derivs(x,y,dydx)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP), DIMENSION(:), INTENT(IN) :: y
                        REAL(SP), DIMENSION(:), INTENT(OUT) :: dydx
                        END SUBROUTINE derivs
                END INTERFACE
                END SUBROUTINE bsstep
        END INTERFACE
        INTERFACE
                SUBROUTINE caldat(julian,mm,id,iyyy)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: julian
                INTEGER(I4B), INTENT(OUT) :: mm,id,iyyy
                END SUBROUTINE caldat
        END INTERFACE
        INTERFACE
                FUNCTION chder(a,b,c)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,b
                REAL(SP), DIMENSION(:), INTENT(IN) :: c
                REAL(SP), DIMENSION(size(c)) :: chder
                END FUNCTION chder
        END INTERFACE
        INTERFACE chebev
                FUNCTION chebev_s(a,b,c,x)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,b,x
                REAL(SP), DIMENSION(:), INTENT(IN) :: c
                REAL(SP) :: chebev_s
                END FUNCTION chebev_s
!BL
                FUNCTION chebev_v(a,b,c,x)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,b
                REAL(SP), DIMENSION(:), INTENT(IN) :: c,x
                REAL(SP), DIMENSION(size(x)) :: chebev_v
                END FUNCTION chebev_v
        END INTERFACE
        INTERFACE
                FUNCTION chebft(a,b,n,func)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,b
                INTEGER(I4B), INTENT(IN) :: n
                REAL(SP), DIMENSION(n) :: chebft
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x
                        REAL(SP), DIMENSION(size(x)) :: func
                        END FUNCTION func
                END INTERFACE
                END FUNCTION chebft
        END INTERFACE
        INTERFACE
                FUNCTION chebpc(c)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: c
                REAL(SP), DIMENSION(size(c)) :: chebpc
                END FUNCTION chebpc
        END INTERFACE
        INTERFACE
                FUNCTION chint(a,b,c)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,b
                REAL(SP), DIMENSION(:), INTENT(IN) :: c
                REAL(SP), DIMENSION(size(c)) :: chint
                END FUNCTION chint
        END INTERFACE
        INTERFACE
                SUBROUTINE choldc(a,p)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: a
                REAL(SP), DIMENSION(:), INTENT(OUT) :: p
                END SUBROUTINE choldc
        END INTERFACE
        INTERFACE
                SUBROUTINE cholsl(a,p,b,x)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(IN) :: a
                REAL(SP), DIMENSION(:), INTENT(IN) :: p,b
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: x
                END SUBROUTINE cholsl
        END INTERFACE
        INTERFACE
                SUBROUTINE chsone(bins,ebins,knstrn,df,chsq,prob)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: knstrn
                REAL(SP), INTENT(OUT) :: df,chsq,prob
                REAL(SP), DIMENSION(:), INTENT(IN) :: bins,ebins
                END SUBROUTINE chsone
        END INTERFACE
        INTERFACE
                SUBROUTINE chstwo(bins1,bins2,knstrn,df,chsq,prob)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: knstrn
                REAL(SP), INTENT(OUT) :: df,chsq,prob
                REAL(SP), DIMENSION(:), INTENT(IN) :: bins1,bins2
                END SUBROUTINE chstwo
        END INTERFACE
        INTERFACE
                SUBROUTINE cisi(x,ci,si)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                REAL(SP), INTENT(OUT) :: ci,si
                END SUBROUTINE cisi
        END INTERFACE
        INTERFACE
                SUBROUTINE cntab1(nn,chisq,df,prob,cramrv,ccc)
                USE nrtype
                INTEGER(I4B), DIMENSION(:,:), INTENT(IN) :: nn
                REAL(SP), INTENT(OUT) :: chisq,df,prob,cramrv,ccc
                END SUBROUTINE cntab1
        END INTERFACE
        INTERFACE
                SUBROUTINE cntab2(nn,h,hx,hy,hygx,hxgy,uygx,uxgy,uxy)
                USE nrtype
                INTEGER(I4B), DIMENSION(:,:), INTENT(IN) :: nn
                REAL(SP), INTENT(OUT) :: h,hx,hy,hygx,hxgy,uygx,uxgy,uxy
                END SUBROUTINE cntab2
        END INTERFACE
        INTERFACE
                FUNCTION convlv(data,respns,isign)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: data
                REAL(SP), DIMENSION(:), INTENT(IN) :: respns
                INTEGER(I4B), INTENT(IN) :: isign
                REAL(SP), DIMENSION(size(data)) :: convlv
                END FUNCTION convlv
        END INTERFACE
        INTERFACE
                FUNCTION correl(data1,data2)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: data1,data2
                REAL(SP), DIMENSION(size(data1)) :: correl
                END FUNCTION correl
        END INTERFACE
        INTERFACE
                SUBROUTINE cosft1(y)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: y
                END SUBROUTINE cosft1
        END INTERFACE
        INTERFACE
                SUBROUTINE cosft2(y,isign)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: y
                INTEGER(I4B), INTENT(IN) :: isign
                END SUBROUTINE cosft2
        END INTERFACE
        INTERFACE
                SUBROUTINE covsrt(covar,maska)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: covar
                LOGICAL(LGT), DIMENSION(:), INTENT(IN) :: maska
                END SUBROUTINE covsrt
        END INTERFACE
        INTERFACE
                SUBROUTINE cyclic(a,b,c,alpha,beta,r,x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN):: a,b,c,r
                REAL(SP), INTENT(IN) :: alpha,beta
                REAL(SP), DIMENSION(:), INTENT(OUT):: x
                END SUBROUTINE cyclic
        END INTERFACE
        INTERFACE
                SUBROUTINE daub4(a,isign)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: a
                INTEGER(I4B), INTENT(IN) :: isign
                END SUBROUTINE daub4
        END INTERFACE
        INTERFACE dawson
                FUNCTION dawson_s(x)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: dawson_s
                END FUNCTION dawson_s
!BL
                FUNCTION dawson_v(x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(size(x)) :: dawson_v
                END FUNCTION dawson_v
        END INTERFACE
        INTERFACE
                FUNCTION dbrent(ax,bx,cx,func,dbrent_dfunc,tol,xmin)
                USE nrtype
                REAL(SP), INTENT(IN) :: ax,bx,cx,tol
                REAL(SP), INTENT(OUT) :: xmin
                REAL(SP) :: dbrent
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP) :: func
                        END FUNCTION func
!BL
                        FUNCTION dbrent_dfunc(x)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP) :: dbrent_dfunc
                        END FUNCTION dbrent_dfunc
                END INTERFACE
                END FUNCTION dbrent
        END INTERFACE
        INTERFACE
                SUBROUTINE ddpoly(c,x,pd)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                REAL(SP), DIMENSION(:), INTENT(IN) :: c
                REAL(SP), DIMENSION(:), INTENT(OUT) :: pd
                END SUBROUTINE ddpoly
        END INTERFACE
        INTERFACE
                FUNCTION decchk(string,ch)
                USE nrtype
                CHARACTER(1), DIMENSION(:), INTENT(IN) :: string
                CHARACTER(1), INTENT(OUT) :: ch
                LOGICAL(LGT) :: decchk
                END FUNCTION decchk
        END INTERFACE
        INTERFACE
                SUBROUTINE dfpmin(p,gtol,iter,fret,func,dfunc)
                USE nrtype
                INTEGER(I4B), INTENT(OUT) :: iter
                REAL(SP), INTENT(IN) :: gtol
                REAL(SP), INTENT(OUT) :: fret
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: p
                INTERFACE
                        FUNCTION func(p)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: p
                        REAL(SP) :: func
                        END FUNCTION func
!BL
                        FUNCTION dfunc(p)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: p
                        REAL(SP), DIMENSION(size(p)) :: dfunc
                        END FUNCTION dfunc
                END INTERFACE
                END SUBROUTINE dfpmin
        END INTERFACE
        INTERFACE
                FUNCTION dfridr(func,x,h,err)
                USE nrtype
                REAL(SP), INTENT(IN) :: x,h
                REAL(SP), INTENT(OUT) :: err
                REAL(SP) :: dfridr
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP) :: func
                        END FUNCTION func
                END INTERFACE
                END FUNCTION dfridr
        END INTERFACE
        INTERFACE
                SUBROUTINE dftcor(w,delta,a,b,endpts,corre,corim,corfac)
                USE nrtype
                REAL(SP), INTENT(IN) :: w,delta,a,b
                REAL(SP), INTENT(OUT) :: corre,corim,corfac
                REAL(SP), DIMENSION(:), INTENT(IN) :: endpts
                END SUBROUTINE dftcor
        END INTERFACE
        INTERFACE
                SUBROUTINE dftint(func,a,b,w,cosint,sinint)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,b,w
                REAL(SP), INTENT(OUT) :: cosint,sinint
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x
                        REAL(SP), DIMENSION(size(x)) :: func
                        END FUNCTION func
                END INTERFACE
                END SUBROUTINE dftint
        END INTERFACE
        INTERFACE
                SUBROUTINE difeq(k,k1,k2,jsf,is1,isf,indexv,s,y)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: is1,isf,jsf,k,k1,k2
                INTEGER(I4B), DIMENSION(:), INTENT(IN) :: indexv
                REAL(SP), DIMENSION(:,:), INTENT(OUT) :: s
                REAL(SP), DIMENSION(:,:), INTENT(IN) :: y
                END SUBROUTINE difeq
        END INTERFACE
        INTERFACE
                FUNCTION eclass(lista,listb,n)
                USE nrtype
                INTEGER(I4B), DIMENSION(:), INTENT(IN) :: lista,listb
                INTEGER(I4B), INTENT(IN) :: n
                INTEGER(I4B), DIMENSION(n) :: eclass
                END FUNCTION eclass
        END INTERFACE
        INTERFACE
                FUNCTION eclazz(equiv,n)
                USE nrtype
                INTERFACE
                        FUNCTION equiv(i,j)
                        USE nrtype
                        LOGICAL(LGT) :: equiv
                        INTEGER(I4B), INTENT(IN) :: i,j
                        END FUNCTION equiv
                END INTERFACE
                INTEGER(I4B), INTENT(IN) :: n
                INTEGER(I4B), DIMENSION(n) :: eclazz
                END FUNCTION eclazz
        END INTERFACE
        INTERFACE
                FUNCTION ei(x)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: ei
                END FUNCTION ei
        END INTERFACE
        INTERFACE
                SUBROUTINE eigsrt(d,v)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: d
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: v
                END SUBROUTINE eigsrt
        END INTERFACE
        INTERFACE elle
                FUNCTION elle_s(phi,ak)
                USE nrtype
                REAL(SP), INTENT(IN) :: phi,ak
                REAL(SP) :: elle_s
                END FUNCTION elle_s
!BL
                FUNCTION elle_v(phi,ak)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: phi,ak
                REAL(SP), DIMENSION(size(phi)) :: elle_v
                END FUNCTION elle_v
        END INTERFACE
        INTERFACE ellf
                FUNCTION ellf_s(phi,ak)
                USE nrtype
                REAL(SP), INTENT(IN) :: phi,ak
                REAL(SP) :: ellf_s
                END FUNCTION ellf_s
!BL
                FUNCTION ellf_v(phi,ak)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: phi,ak
                REAL(SP), DIMENSION(size(phi)) :: ellf_v
                END FUNCTION ellf_v
        END INTERFACE
        INTERFACE ellpi
                FUNCTION ellpi_s(phi,en,ak)
                USE nrtype
                REAL(SP), INTENT(IN) :: phi,en,ak
                REAL(SP) :: ellpi_s
                END FUNCTION ellpi_s
!BL
                FUNCTION ellpi_v(phi,en,ak)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: phi,en,ak
                REAL(SP), DIMENSION(size(phi)) :: ellpi_v
                END FUNCTION ellpi_v
        END INTERFACE
        INTERFACE
                SUBROUTINE elmhes(a)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: a
                END SUBROUTINE elmhes
        END INTERFACE
        INTERFACE erf
                FUNCTION erf_s(x)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: erf_s
                END FUNCTION erf_s
!BL
                FUNCTION erf_v(x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(size(x)) :: erf_v
                END FUNCTION erf_v
        END INTERFACE
        INTERFACE erfc
                FUNCTION erfc_s(x)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: erfc_s
                END FUNCTION erfc_s
!BL
                FUNCTION erfc_v(x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(size(x)) :: erfc_v
                END FUNCTION erfc_v
        END INTERFACE
        INTERFACE erfcc
                FUNCTION erfcc_s(x)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: erfcc_s
                END FUNCTION erfcc_s
!BL
                FUNCTION erfcc_v(x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(size(x)) :: erfcc_v
                END FUNCTION erfcc_v
        END INTERFACE
        INTERFACE
                SUBROUTINE eulsum(sum,term,jterm)
                USE nrtype
                REAL(SP), INTENT(INOUT) :: sum
                REAL(SP), INTENT(IN) :: term
                INTEGER(I4B), INTENT(IN) :: jterm
                END SUBROUTINE eulsum
        END INTERFACE
        INTERFACE
                FUNCTION evlmem(fdt,d,xms)
                USE nrtype
                REAL(SP), INTENT(IN) :: fdt,xms
                REAL(SP), DIMENSION(:), INTENT(IN) :: d
                REAL(SP) :: evlmem
                END FUNCTION evlmem
        END INTERFACE
        INTERFACE expdev
                SUBROUTINE expdev_s(harvest)
                USE nrtype
                REAL(SP), INTENT(OUT) :: harvest
                END SUBROUTINE expdev_s
!BL
                SUBROUTINE expdev_v(harvest)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(OUT) :: harvest
                END SUBROUTINE expdev_v
        END INTERFACE
        INTERFACE
                FUNCTION expint(n,x)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: expint
                END FUNCTION expint
        END INTERFACE
        INTERFACE factln
                FUNCTION factln_s(n)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n
                REAL(SP) :: factln_s
                END FUNCTION factln_s
!BL
                FUNCTION factln_v(n)
                USE nrtype
                INTEGER(I4B), DIMENSION(:), INTENT(IN) :: n
                REAL(SP), DIMENSION(size(n)) :: factln_v
                END FUNCTION factln_v
        END INTERFACE
        INTERFACE factrl
                FUNCTION factrl_s(n)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n
                REAL(SP) :: factrl_s
                END FUNCTION factrl_s
!BL
                FUNCTION factrl_v(n)
                USE nrtype
                INTEGER(I4B), DIMENSION(:), INTENT(IN) :: n
                REAL(SP), DIMENSION(size(n)) :: factrl_v
                END FUNCTION factrl_v
        END INTERFACE
        INTERFACE
                SUBROUTINE fasper(x,y,ofac,hifac,px,py,jmax,prob)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,y
                REAL(SP), INTENT(IN) :: ofac,hifac
                INTEGER(I4B), INTENT(OUT) :: jmax
                REAL(SP), INTENT(OUT) :: prob
                REAL(SP), DIMENSION(:), POINTER :: px,py
                END SUBROUTINE fasper
        END INTERFACE
        INTERFACE
                SUBROUTINE fdjac(x,fvec,df)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: fvec
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: x
                REAL(SP), DIMENSION(:,:), INTENT(OUT) :: df
                END SUBROUTINE fdjac
        END INTERFACE
        INTERFACE
                SUBROUTINE fgauss(x,a,y,dyda)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,a
                REAL(SP), DIMENSION(:), INTENT(OUT) :: y
                REAL(SP), DIMENSION(:,:), INTENT(OUT) :: dyda
                END SUBROUTINE fgauss
        END INTERFACE
        INTERFACE
                SUBROUTINE fit(x,y,a,b,siga,sigb,chi2,q,sig)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,y
                REAL(SP), INTENT(OUT) :: a,b,siga,sigb,chi2,q
                REAL(SP), DIMENSION(:), OPTIONAL, INTENT(IN) :: sig
                END SUBROUTINE fit
        END INTERFACE
        INTERFACE
                SUBROUTINE fitexy(x,y,sigx,sigy,a,b,siga,sigb,chi2,q)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,y,sigx,sigy
                REAL(SP), INTENT(OUT) :: a,b,siga,sigb,chi2,q
                END SUBROUTINE fitexy
        END INTERFACE
        INTERFACE
                SUBROUTINE fixrts(d)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: d
                END SUBROUTINE fixrts
        END INTERFACE
        INTERFACE
                FUNCTION fleg(x,n)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                INTEGER(I4B), INTENT(IN) :: n
                REAL(SP), DIMENSION(n) :: fleg
                END FUNCTION fleg
        END INTERFACE
        INTERFACE
                SUBROUTINE flmoon(n,nph,jd,frac)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n,nph
                INTEGER(I4B), INTENT(OUT) :: jd
                REAL(SP), INTENT(OUT) :: frac
                END SUBROUTINE flmoon
        END INTERFACE
        INTERFACE four1
                SUBROUTINE four1_dp(data,isign)
                USE nrtype
                COMPLEX(DPC), DIMENSION(:), INTENT(INOUT) :: data
                INTEGER(I4B), INTENT(IN) :: isign
                END SUBROUTINE four1_dp
!BL
                SUBROUTINE four1_sp(data,isign)
                USE nrtype
                COMPLEX(SPC), DIMENSION(:), INTENT(INOUT) :: data
                INTEGER(I4B), INTENT(IN) :: isign
                END SUBROUTINE four1_sp
        END INTERFACE
        INTERFACE
                SUBROUTINE four1_alt(data,isign)
                USE nrtype
                COMPLEX(SPC), DIMENSION(:), INTENT(INOUT) :: data
                INTEGER(I4B), INTENT(IN) :: isign
                END SUBROUTINE four1_alt
        END INTERFACE
        INTERFACE
                SUBROUTINE four1_gather(data,isign)
                USE nrtype
                COMPLEX(SPC), DIMENSION(:), INTENT(INOUT) :: data
                INTEGER(I4B), INTENT(IN) :: isign
                END SUBROUTINE four1_gather
        END INTERFACE
        INTERFACE
                SUBROUTINE four2(data,isign)
                USE nrtype
                COMPLEX(SPC), DIMENSION(:,:), INTENT(INOUT) :: data
                INTEGER(I4B),INTENT(IN) :: isign
                END SUBROUTINE four2
        END INTERFACE
        INTERFACE
                SUBROUTINE four2_alt(data,isign)
                USE nrtype
                COMPLEX(SPC), DIMENSION(:,:), INTENT(INOUT) :: data
                INTEGER(I4B), INTENT(IN) :: isign
                END SUBROUTINE four2_alt
        END INTERFACE
        INTERFACE
                SUBROUTINE four3(data,isign)
                USE nrtype
                COMPLEX(SPC), DIMENSION(:,:,:), INTENT(INOUT) :: data
                INTEGER(I4B),INTENT(IN) :: isign
                END SUBROUTINE four3
        END INTERFACE
        INTERFACE
                SUBROUTINE four3_alt(data,isign)
                USE nrtype
                COMPLEX(SPC), DIMENSION(:,:,:), INTENT(INOUT) :: data
                INTEGER(I4B), INTENT(IN) :: isign
                END SUBROUTINE four3_alt
        END INTERFACE
        INTERFACE
                SUBROUTINE fourcol(data,isign)
                USE nrtype
                COMPLEX(SPC), DIMENSION(:,:), INTENT(INOUT) :: data
                INTEGER(I4B), INTENT(IN) :: isign
                END SUBROUTINE fourcol
        END INTERFACE
        INTERFACE
                SUBROUTINE fourcol_3d(data,isign)
                USE nrtype
                COMPLEX(SPC), DIMENSION(:,:,:), INTENT(INOUT) :: data
                INTEGER(I4B), INTENT(IN) :: isign
                END SUBROUTINE fourcol_3d
        END INTERFACE
        INTERFACE
                SUBROUTINE fourn_gather(data,nn,isign)
                USE nrtype
                COMPLEX(SPC), DIMENSION(:), INTENT(INOUT) :: data
                INTEGER(I4B), DIMENSION(:), INTENT(IN) :: nn
                INTEGER(I4B), INTENT(IN) :: isign
                END SUBROUTINE fourn_gather
        END INTERFACE
        INTERFACE fourrow
                SUBROUTINE fourrow_dp(data,isign)
                USE nrtype
                COMPLEX(DPC), DIMENSION(:,:), INTENT(INOUT) :: data
                INTEGER(I4B), INTENT(IN) :: isign
                END SUBROUTINE fourrow_dp
!BL
                SUBROUTINE fourrow_sp(data,isign)
                USE nrtype
                COMPLEX(SPC), DIMENSION(:,:), INTENT(INOUT) :: data
                INTEGER(I4B), INTENT(IN) :: isign
                END SUBROUTINE fourrow_sp
        END INTERFACE
        INTERFACE
                SUBROUTINE fourrow_3d(data,isign)
                USE nrtype
                COMPLEX(SPC), DIMENSION(:,:,:), INTENT(INOUT) :: data
                INTEGER(I4B), INTENT(IN) :: isign
                END SUBROUTINE fourrow_3d
        END INTERFACE
        INTERFACE
                FUNCTION fpoly(x,n)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                INTEGER(I4B), INTENT(IN) :: n
                REAL(SP), DIMENSION(n) :: fpoly
                END FUNCTION fpoly
        END INTERFACE
        INTERFACE
                SUBROUTINE fred2(a,b,t,f,w,g,ak)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,b
                REAL(SP), DIMENSION(:), INTENT(OUT) :: t,f,w
                INTERFACE
                        FUNCTION g(t)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: t
                        REAL(SP), DIMENSION(size(t)) :: g
                        END FUNCTION g
!BL
                        FUNCTION ak(t,s)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: t,s
                        REAL(SP), DIMENSION(size(t),size(s)) :: ak
                        END FUNCTION ak
                END INTERFACE
                END SUBROUTINE fred2
        END INTERFACE
        INTERFACE
                FUNCTION fredin(x,a,b,t,f,w,g,ak)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,b
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,t,f,w
                REAL(SP), DIMENSION(size(x)) :: fredin
                INTERFACE
                        FUNCTION g(t)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: t
                        REAL(SP), DIMENSION(size(t)) :: g
                        END FUNCTION g
!BL
                        FUNCTION ak(t,s)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: t,s
                        REAL(SP), DIMENSION(size(t),size(s)) :: ak
                        END FUNCTION ak
                END INTERFACE
                END FUNCTION fredin
        END INTERFACE
        INTERFACE
                SUBROUTINE frenel(x,s,c)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                REAL(SP), INTENT(OUT) :: s,c
                END SUBROUTINE frenel
        END INTERFACE
        INTERFACE
                SUBROUTINE frprmn(p,ftol,iter,fret)
                USE nrtype
                INTEGER(I4B), INTENT(OUT) :: iter
                REAL(SP), INTENT(IN) :: ftol
                REAL(SP), INTENT(OUT) :: fret
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: p
                END SUBROUTINE frprmn
        END INTERFACE
        INTERFACE
                SUBROUTINE ftest(data1,data2,f,prob)
                USE nrtype
                REAL(SP), INTENT(OUT) :: f,prob
                REAL(SP), DIMENSION(:), INTENT(IN) :: data1,data2
                END SUBROUTINE ftest
        END INTERFACE
        INTERFACE
                FUNCTION gamdev(ia)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: ia
                REAL(SP) :: gamdev
                END FUNCTION gamdev
        END INTERFACE
        INTERFACE gammln
                FUNCTION gammln_s(xx)
                USE nrtype
                REAL(SP), INTENT(IN) :: xx
                REAL(SP) :: gammln_s
                END FUNCTION gammln_s
!BL
                FUNCTION gammln_v(xx)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: xx
                REAL(SP), DIMENSION(size(xx)) :: gammln_v
                END FUNCTION gammln_v
        END INTERFACE
        INTERFACE gammp
                FUNCTION gammp_s(a,x)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,x
                REAL(SP) :: gammp_s
                END FUNCTION gammp_s
!BL
                FUNCTION gammp_v(a,x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: a,x
                REAL(SP), DIMENSION(size(a)) :: gammp_v
                END FUNCTION gammp_v
        END INTERFACE
        INTERFACE gammq
                FUNCTION gammq_s(a,x)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,x
                REAL(SP) :: gammq_s
                END FUNCTION gammq_s
!BL
                FUNCTION gammq_v(a,x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: a,x
                REAL(SP), DIMENSION(size(a)) :: gammq_v
                END FUNCTION gammq_v
        END INTERFACE
        INTERFACE gasdev
                SUBROUTINE gasdev_s(harvest)
                USE nrtype
                REAL(SP), INTENT(OUT) :: harvest
                END SUBROUTINE gasdev_s
!BL
                SUBROUTINE gasdev_v(harvest)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(OUT) :: harvest
                END SUBROUTINE gasdev_v
        END INTERFACE
        INTERFACE
                SUBROUTINE gaucof(a,b,amu0,x,w)
                USE nrtype
                REAL(SP), INTENT(IN) :: amu0
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: a,b
                REAL(SP), DIMENSION(:), INTENT(OUT) :: x,w
                END SUBROUTINE gaucof
        END INTERFACE
        INTERFACE
                SUBROUTINE gauher(x,w)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(OUT) :: x,w
                END SUBROUTINE gauher
        END INTERFACE
        INTERFACE
                SUBROUTINE gaujac(x,w,alf,bet)
                USE nrtype
                REAL(SP), INTENT(IN) :: alf,bet
                REAL(SP), DIMENSION(:), INTENT(OUT) :: x,w
                END SUBROUTINE gaujac
        END INTERFACE
        INTERFACE
                SUBROUTINE gaulag(x,w,alf)
                USE nrtype
                REAL(SP), INTENT(IN) :: alf
                REAL(SP), DIMENSION(:), INTENT(OUT) :: x,w
                END SUBROUTINE gaulag
        END INTERFACE
        INTERFACE
                SUBROUTINE gauleg(x1,x2,x,w)
                USE nrtype
                REAL(SP), INTENT(IN) :: x1,x2
                REAL(SP), DIMENSION(:), INTENT(OUT) :: x,w
                END SUBROUTINE gauleg
        END INTERFACE
        INTERFACE
                SUBROUTINE gaussj(a,b)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: a,b
                END SUBROUTINE gaussj
        END INTERFACE
        INTERFACE gcf
                FUNCTION gcf_s(a,x,gln)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,x
                REAL(SP), OPTIONAL, INTENT(OUT) :: gln
                REAL(SP) :: gcf_s
                END FUNCTION gcf_s
!BL
                FUNCTION gcf_v(a,x,gln)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: a,x
                REAL(SP), DIMENSION(:), OPTIONAL, INTENT(OUT) :: gln
                REAL(SP), DIMENSION(size(a)) :: gcf_v
                END FUNCTION gcf_v
        END INTERFACE
        INTERFACE
                FUNCTION golden(ax,bx,cx,func,tol,xmin)
                USE nrtype
                REAL(SP), INTENT(IN) :: ax,bx,cx,tol
                REAL(SP), INTENT(OUT) :: xmin
                REAL(SP) :: golden
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP) :: func
                        END FUNCTION func
                END INTERFACE
                END FUNCTION golden
        END INTERFACE
        INTERFACE gser
                FUNCTION gser_s(a,x,gln)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,x
                REAL(SP), OPTIONAL, INTENT(OUT) :: gln
                REAL(SP) :: gser_s
                END FUNCTION gser_s
!BL
                FUNCTION gser_v(a,x,gln)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: a,x
                REAL(SP), DIMENSION(:), OPTIONAL, INTENT(OUT) :: gln
                REAL(SP), DIMENSION(size(a)) :: gser_v
                END FUNCTION gser_v
        END INTERFACE
        INTERFACE
                SUBROUTINE hqr(a,wr,wi)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(OUT) :: wr,wi
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: a
                END SUBROUTINE hqr
        END INTERFACE
        INTERFACE
                SUBROUTINE hunt(xx,x,jlo)
                USE nrtype
                INTEGER(I4B), INTENT(INOUT) :: jlo
                REAL(SP), INTENT(IN) :: x
                REAL(SP), DIMENSION(:), INTENT(IN) :: xx
                END SUBROUTINE hunt
        END INTERFACE
        INTERFACE
                SUBROUTINE hypdrv(s,ry,rdyds)
                USE nrtype
                REAL(SP), INTENT(IN) :: s
                REAL(SP), DIMENSION(:), INTENT(IN) :: ry
                REAL(SP), DIMENSION(:), INTENT(OUT) :: rdyds
                END SUBROUTINE hypdrv
        END INTERFACE
        INTERFACE
                FUNCTION hypgeo(a,b,c,z)
                USE nrtype
                COMPLEX(SPC), INTENT(IN) :: a,b,c,z
                COMPLEX(SPC) :: hypgeo
                END FUNCTION hypgeo
        END INTERFACE
        INTERFACE
                SUBROUTINE hypser(a,b,c,z,series,deriv)
                USE nrtype
                COMPLEX(SPC), INTENT(IN) :: a,b,c,z
                COMPLEX(SPC), INTENT(OUT) :: series,deriv
                END SUBROUTINE hypser
        END INTERFACE
        INTERFACE
                FUNCTION icrc(crc,buf,jinit,jrev)
                USE nrtype
                CHARACTER(1), DIMENSION(:), INTENT(IN) :: buf
                INTEGER(I2B), INTENT(IN) :: crc,jinit
                INTEGER(I4B), INTENT(IN) :: jrev
                INTEGER(I2B) :: icrc
                END FUNCTION icrc
        END INTERFACE
        INTERFACE
                FUNCTION igray(n,is)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n,is
                INTEGER(I4B) :: igray
                END FUNCTION igray
        END INTERFACE
        INTERFACE
                RECURSIVE SUBROUTINE index_bypack(arr,index,partial)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: arr
                INTEGER(I4B), DIMENSION(:), INTENT(INOUT) :: index
                INTEGER, OPTIONAL, INTENT(IN) :: partial
                END SUBROUTINE index_bypack
        END INTERFACE
        INTERFACE indexx
                SUBROUTINE indexx_sp(arr,index)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: arr
                INTEGER(I4B), DIMENSION(:), INTENT(OUT) :: index
                END SUBROUTINE indexx_sp
                SUBROUTINE indexx_i4b(iarr,index)
                USE nrtype
                INTEGER(I4B), DIMENSION(:), INTENT(IN) :: iarr
                INTEGER(I4B), DIMENSION(:), INTENT(OUT) :: index
                END SUBROUTINE indexx_i4b
        END INTERFACE
        INTERFACE
                FUNCTION interp(uc)
                USE nrtype
                REAL(DP), DIMENSION(:,:), INTENT(IN) :: uc
                REAL(DP), DIMENSION(2*size(uc,1)-1,2*size(uc,1)-1) :: interp
                END FUNCTION interp
        END INTERFACE
        INTERFACE
                FUNCTION rank(indx)
                USE nrtype
                INTEGER(I4B), DIMENSION(:), INTENT(IN) :: indx
                INTEGER(I4B), DIMENSION(size(indx)) :: rank
                END FUNCTION rank
        END INTERFACE
        INTERFACE
                FUNCTION irbit1(iseed)
                USE nrtype
                INTEGER(I4B), INTENT(INOUT) :: iseed
                INTEGER(I4B) :: irbit1
                END FUNCTION irbit1
        END INTERFACE
        INTERFACE
                FUNCTION irbit2(iseed)
                USE nrtype
                INTEGER(I4B), INTENT(INOUT) :: iseed
                INTEGER(I4B) :: irbit2
                END FUNCTION irbit2
        END INTERFACE
        INTERFACE
                SUBROUTINE jacobi(a,d,v,nrot)
                USE nrtype
                INTEGER(I4B), INTENT(OUT) :: nrot
                REAL(SP), DIMENSION(:), INTENT(OUT) :: d
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: a
                REAL(SP), DIMENSION(:,:), INTENT(OUT) :: v
                END SUBROUTINE jacobi
        END INTERFACE
        INTERFACE
                SUBROUTINE jacobn(x,y,dfdx,dfdy)
                USE nrtype
                REAL(SP), INTENT(IN) :: x
                REAL(SP), DIMENSION(:), INTENT(IN) :: y
                REAL(SP), DIMENSION(:), INTENT(OUT) :: dfdx
                REAL(SP), DIMENSION(:,:), INTENT(OUT) :: dfdy
                END SUBROUTINE jacobn
        END INTERFACE
        INTERFACE
                FUNCTION julday(mm,id,iyyy)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: mm,id,iyyy
                INTEGER(I4B) :: julday
                END FUNCTION julday
        END INTERFACE
        INTERFACE
                SUBROUTINE kendl1(data1,data2,tau,z,prob)
                USE nrtype
                REAL(SP), INTENT(OUT) :: tau,z,prob
                REAL(SP), DIMENSION(:), INTENT(IN) :: data1,data2
                END SUBROUTINE kendl1
        END INTERFACE
        INTERFACE
                SUBROUTINE kendl2(tab,tau,z,prob)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(IN) :: tab
                REAL(SP), INTENT(OUT) :: tau,z,prob
                END SUBROUTINE kendl2
        END INTERFACE
        INTERFACE
                FUNCTION kermom(y,m)
                USE nrtype
                REAL(DP), INTENT(IN) :: y
                INTEGER(I4B), INTENT(IN) :: m
                REAL(DP), DIMENSION(m) :: kermom
                END FUNCTION kermom
        END INTERFACE
        INTERFACE
                SUBROUTINE ks2d1s(x1,y1,quadvl,d1,prob)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x1,y1
                REAL(SP), INTENT(OUT) :: d1,prob
                INTERFACE
                        SUBROUTINE quadvl(x,y,fa,fb,fc,fd)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x,y
                        REAL(SP), INTENT(OUT) :: fa,fb,fc,fd
                        END SUBROUTINE quadvl
                END INTERFACE
                END SUBROUTINE ks2d1s
        END INTERFACE
        INTERFACE
                SUBROUTINE ks2d2s(x1,y1,x2,y2,d,prob)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x1,y1,x2,y2
                REAL(SP), INTENT(OUT) :: d,prob
                END SUBROUTINE ks2d2s
        END INTERFACE
        INTERFACE
                SUBROUTINE ksone(data,func,d,prob)
                USE nrtype
                REAL(SP), INTENT(OUT) :: d,prob
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: data
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x
                        REAL(SP), DIMENSION(size(x)) :: func
                        END FUNCTION func
                END INTERFACE
                END SUBROUTINE ksone
        END INTERFACE
        INTERFACE
                SUBROUTINE kstwo(data1,data2,d,prob)
                USE nrtype
                REAL(SP), INTENT(OUT) :: d,prob
                REAL(SP), DIMENSION(:), INTENT(IN) :: data1,data2
                END SUBROUTINE kstwo
        END INTERFACE
        INTERFACE
                SUBROUTINE laguer(a,x,its)
                USE nrtype
                INTEGER(I4B), INTENT(OUT) :: its
                COMPLEX(SPC), INTENT(INOUT) :: x
                COMPLEX(SPC), DIMENSION(:), INTENT(IN) :: a
                END SUBROUTINE laguer
        END INTERFACE
        INTERFACE
                SUBROUTINE lfit(x,y,sig,a,maska,covar,chisq,funcs)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,y,sig
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: a
                LOGICAL(LGT), DIMENSION(:), INTENT(IN) :: maska
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: covar
                REAL(SP), INTENT(OUT) :: chisq
                INTERFACE
                        SUBROUTINE funcs(x,arr)
                        USE nrtype
                        REAL(SP),INTENT(IN) :: x
                        REAL(SP), DIMENSION(:), INTENT(OUT) :: arr
                        END SUBROUTINE funcs
                END INTERFACE
                END SUBROUTINE lfit
        END INTERFACE
        INTERFACE
                SUBROUTINE linbcg(b,x,itol,tol,itmax,iter,err)
                USE nrtype
                REAL(DP), DIMENSION(:), INTENT(IN) :: b
                REAL(DP), DIMENSION(:), INTENT(INOUT) :: x
                INTEGER(I4B), INTENT(IN) :: itol,itmax
                REAL(DP), INTENT(IN) :: tol
                INTEGER(I4B), INTENT(OUT) :: iter
                REAL(DP), INTENT(OUT) :: err
                END SUBROUTINE linbcg
        END INTERFACE
        INTERFACE
                SUBROUTINE linmin(p,xi,fret)
                USE nrtype
                REAL(SP), INTENT(OUT) :: fret
                REAL(SP), DIMENSION(:), TARGET, INTENT(INOUT) :: p,xi
                END SUBROUTINE linmin
        END INTERFACE
        INTERFACE
                SUBROUTINE lnsrch(xold,fold,g,p,x,f,stpmax,check,func)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: xold,g
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: p
                REAL(SP), INTENT(IN) :: fold,stpmax
                REAL(SP), DIMENSION(:), INTENT(OUT) :: x
                REAL(SP), INTENT(OUT) :: f
                LOGICAL(LGT), INTENT(OUT) :: check
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP) :: func
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x
                        END FUNCTION func
                END INTERFACE
                END SUBROUTINE lnsrch
        END INTERFACE
        INTERFACE
                FUNCTION locate(xx,x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: xx
                REAL(SP), INTENT(IN) :: x
                INTEGER(I4B) :: locate
                END FUNCTION locate
        END INTERFACE
        INTERFACE
                FUNCTION lop(u)
                USE nrtype
                REAL(DP), DIMENSION(:,:), INTENT(IN) :: u
                REAL(DP), DIMENSION(size(u,1),size(u,1)) :: lop
                END FUNCTION lop
        END INTERFACE
        INTERFACE
                SUBROUTINE lubksb(a,indx,b)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(IN) :: a
                INTEGER(I4B), DIMENSION(:), INTENT(IN) :: indx
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: b
                END SUBROUTINE lubksb
        END INTERFACE
        INTERFACE
                SUBROUTINE ludcmp(a,indx,d)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: a
                INTEGER(I4B), DIMENSION(:), INTENT(OUT) :: indx
                REAL(SP), INTENT(OUT) :: d
                END SUBROUTINE ludcmp
        END INTERFACE
        INTERFACE
                SUBROUTINE machar(ibeta,it,irnd,ngrd,machep,negep,iexp,minexp,&
                        maxexp,eps,epsneg,xmin,xmax)
                USE nrtype
                INTEGER(I4B), INTENT(OUT) :: ibeta,iexp,irnd,it,machep,maxexp,&
                        minexp,negep,ngrd
                REAL(SP), INTENT(OUT) :: eps,epsneg,xmax,xmin
                END SUBROUTINE machar
        END INTERFACE
        INTERFACE
                SUBROUTINE medfit(x,y,a,b,abdev)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,y
                REAL(SP), INTENT(OUT) :: a,b,abdev
                END SUBROUTINE medfit
        END INTERFACE
        INTERFACE
                SUBROUTINE memcof(data,xms,d)
                USE nrtype
                REAL(SP), INTENT(OUT) :: xms
                REAL(SP), DIMENSION(:), INTENT(IN) :: data
                REAL(SP), DIMENSION(:), INTENT(OUT) :: d
                END SUBROUTINE memcof
        END INTERFACE
        INTERFACE
                SUBROUTINE mgfas(u,maxcyc)
                USE nrtype
                REAL(DP), DIMENSION(:,:), INTENT(INOUT) :: u
                INTEGER(I4B), INTENT(IN) :: maxcyc
                END SUBROUTINE mgfas
        END INTERFACE
        INTERFACE
                SUBROUTINE mglin(u,ncycle)
                USE nrtype
                REAL(DP), DIMENSION(:,:), INTENT(INOUT) :: u
                INTEGER(I4B), INTENT(IN) :: ncycle
                END SUBROUTINE mglin
        END INTERFACE
        INTERFACE
                SUBROUTINE midexp(funk,aa,bb,s,n)
                USE nrtype
                REAL(SP), INTENT(IN) :: aa,bb
                REAL(SP), INTENT(INOUT) :: s
                INTEGER(I4B), INTENT(IN) :: n
                INTERFACE
                        FUNCTION funk(x)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x
                        REAL(SP), DIMENSION(size(x)) :: funk
                        END FUNCTION funk
                END INTERFACE
                END SUBROUTINE midexp
        END INTERFACE
        INTERFACE
                SUBROUTINE midinf(funk,aa,bb,s,n)
                USE nrtype
                REAL(SP), INTENT(IN) :: aa,bb
                REAL(SP), INTENT(INOUT) :: s
                INTEGER(I4B), INTENT(IN) :: n
                INTERFACE
                        FUNCTION funk(x)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x
                        REAL(SP), DIMENSION(size(x)) :: funk
                        END FUNCTION funk
                END INTERFACE
                END SUBROUTINE midinf
        END INTERFACE
        INTERFACE
                SUBROUTINE midpnt(func,a,b,s,n)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,b
                REAL(SP), INTENT(INOUT) :: s
                INTEGER(I4B), INTENT(IN) :: n
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x
                        REAL(SP), DIMENSION(size(x)) :: func
                        END FUNCTION func
                END INTERFACE
                END SUBROUTINE midpnt
        END INTERFACE
        INTERFACE
                SUBROUTINE midsql(funk,aa,bb,s,n)
                USE nrtype
                REAL(SP), INTENT(IN) :: aa,bb
                REAL(SP), INTENT(INOUT) :: s
                INTEGER(I4B), INTENT(IN) :: n
                INTERFACE
                        FUNCTION funk(x)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x
                        REAL(SP), DIMENSION(size(x)) :: funk
                        END FUNCTION funk
                END INTERFACE
                END SUBROUTINE midsql
        END INTERFACE
        INTERFACE
                SUBROUTINE midsqu(funk,aa,bb,s,n)
                USE nrtype
                REAL(SP), INTENT(IN) :: aa,bb
                REAL(SP), INTENT(INOUT) :: s
                INTEGER(I4B), INTENT(IN) :: n
                INTERFACE
                        FUNCTION funk(x)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x
                        REAL(SP), DIMENSION(size(x)) :: funk
                        END FUNCTION funk
                END INTERFACE
                END SUBROUTINE midsqu
        END INTERFACE
        INTERFACE
                RECURSIVE SUBROUTINE miser(func,regn,ndim,npts,dith,ave,var)
                USE nrtype
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP) :: func
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x
                        END FUNCTION func
                END INTERFACE
                REAL(SP), DIMENSION(:), INTENT(IN) :: regn
                INTEGER(I4B), INTENT(IN) :: ndim,npts
                REAL(SP), INTENT(IN) :: dith
                REAL(SP), INTENT(OUT) :: ave,var
                END SUBROUTINE miser
        END INTERFACE
        INTERFACE
                SUBROUTINE mmid(y,dydx,xs,htot,nstep,yout,derivs)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: nstep
                REAL(SP), INTENT(IN) :: xs,htot
                REAL(SP), DIMENSION(:), INTENT(IN) :: y,dydx
                REAL(SP), DIMENSION(:), INTENT(OUT) :: yout
                INTERFACE
                        SUBROUTINE derivs(x,y,dydx)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP), DIMENSION(:), INTENT(IN) :: y
                        REAL(SP), DIMENSION(:), INTENT(OUT) :: dydx
                        END SUBROUTINE derivs
                END INTERFACE
                END SUBROUTINE mmid
        END INTERFACE
        INTERFACE
                SUBROUTINE mnbrak(ax,bx,cx,fa,fb,fc,func)
                USE nrtype
                REAL(SP), INTENT(INOUT) :: ax,bx
                REAL(SP), INTENT(OUT) :: cx,fa,fb,fc
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP) :: func
                        END FUNCTION func
                END INTERFACE
                END SUBROUTINE mnbrak
        END INTERFACE
        INTERFACE
                SUBROUTINE mnewt(ntrial,x,tolx,tolf,usrfun)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: ntrial
                REAL(SP), INTENT(IN) :: tolx,tolf
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: x
                INTERFACE
                        SUBROUTINE usrfun(x,fvec,fjac)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x
                        REAL(SP), DIMENSION(:), INTENT(OUT) :: fvec
                        REAL(SP), DIMENSION(:,:), INTENT(OUT) :: fjac
                        END SUBROUTINE usrfun
                END INTERFACE
                END SUBROUTINE mnewt
        END INTERFACE
        INTERFACE
                SUBROUTINE moment(data,ave,adev,sdev,var,skew,curt)
                USE nrtype
                REAL(SP), INTENT(OUT) :: ave,adev,sdev,var,skew,curt
                REAL(SP), DIMENSION(:), INTENT(IN) :: data
                END SUBROUTINE moment
        END INTERFACE
        INTERFACE
                SUBROUTINE mp2dfr(a,s,n,m)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n
                INTEGER(I4B), INTENT(OUT) :: m
                CHARACTER(1), DIMENSION(:), INTENT(INOUT) :: a
                CHARACTER(1), DIMENSION(:), INTENT(OUT) :: s
                END SUBROUTINE mp2dfr
        END INTERFACE
        INTERFACE
                SUBROUTINE mpdiv(q,r,u,v,n,m)
                USE nrtype
                CHARACTER(1), DIMENSION(:), INTENT(OUT) :: q,r
                CHARACTER(1), DIMENSION(:), INTENT(IN) :: u,v
                INTEGER(I4B), INTENT(IN) :: n,m
                END SUBROUTINE mpdiv
        END INTERFACE
        INTERFACE
                SUBROUTINE mpinv(u,v,n,m)
                USE nrtype
                CHARACTER(1), DIMENSION(:), INTENT(OUT) :: u
                CHARACTER(1), DIMENSION(:), INTENT(IN) :: v
                INTEGER(I4B), INTENT(IN) :: n,m
                END SUBROUTINE mpinv
        END INTERFACE
        INTERFACE
                SUBROUTINE mpmul(w,u,v,n,m)
                USE nrtype
                CHARACTER(1), DIMENSION(:), INTENT(IN) :: u,v
                CHARACTER(1), DIMENSION(:), INTENT(OUT) :: w
                INTEGER(I4B), INTENT(IN) :: n,m
                END SUBROUTINE mpmul
        END INTERFACE
        INTERFACE
                SUBROUTINE mppi(n)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n
                END SUBROUTINE mppi
        END INTERFACE
        INTERFACE
                SUBROUTINE mprove(a,alud,indx,b,x)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(IN) :: a,alud
                INTEGER(I4B), DIMENSION(:), INTENT(IN) :: indx
                REAL(SP), DIMENSION(:), INTENT(IN) :: b
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: x
                END SUBROUTINE mprove
        END INTERFACE
        INTERFACE
                SUBROUTINE mpsqrt(w,u,v,n,m)
                USE nrtype
                CHARACTER(1), DIMENSION(:), INTENT(OUT) :: w,u
                CHARACTER(1), DIMENSION(:), INTENT(IN) :: v
                INTEGER(I4B), INTENT(IN) :: n,m
                END SUBROUTINE mpsqrt
        END INTERFACE
        INTERFACE
                SUBROUTINE mrqcof(x,y,sig,a,maska,alpha,beta,chisq,funcs)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,y,a,sig
                REAL(SP), DIMENSION(:), INTENT(OUT) :: beta
                REAL(SP), DIMENSION(:,:), INTENT(OUT) :: alpha
                REAL(SP), INTENT(OUT) :: chisq
                LOGICAL(LGT), DIMENSION(:), INTENT(IN) :: maska
                INTERFACE
                        SUBROUTINE funcs(x,a,yfit,dyda)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x,a
                        REAL(SP), DIMENSION(:), INTENT(OUT) :: yfit
                        REAL(SP), DIMENSION(:,:), INTENT(OUT) :: dyda
                        END SUBROUTINE funcs
                END INTERFACE
                END SUBROUTINE mrqcof
        END INTERFACE
        INTERFACE
                SUBROUTINE mrqmin(x,y,sig,a,maska,covar,alpha,chisq,funcs,alamda)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,y,sig
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: a
                REAL(SP), DIMENSION(:,:), INTENT(OUT) :: covar,alpha
                REAL(SP), INTENT(OUT) :: chisq
                REAL(SP), INTENT(INOUT) :: alamda
                LOGICAL(LGT), DIMENSION(:), INTENT(IN) :: maska
                INTERFACE
                        SUBROUTINE funcs(x,a,yfit,dyda)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x,a
                        REAL(SP), DIMENSION(:), INTENT(OUT) :: yfit
                        REAL(SP), DIMENSION(:,:), INTENT(OUT) :: dyda
                        END SUBROUTINE funcs
                END INTERFACE
                END SUBROUTINE mrqmin
        END INTERFACE
        INTERFACE
                SUBROUTINE newt(x,check)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: x
                LOGICAL(LGT), INTENT(OUT) :: check
                END SUBROUTINE newt
        END INTERFACE
        INTERFACE
                SUBROUTINE odeint(ystart,x1,x2,eps,h1,hmin,derivs,rkqs)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: ystart
                REAL(SP), INTENT(IN) :: x1,x2,eps,h1,hmin
                INTERFACE
                        SUBROUTINE derivs(x,y,dydx)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP), DIMENSION(:), INTENT(IN) :: y
                        REAL(SP), DIMENSION(:), INTENT(OUT) :: dydx
                        END SUBROUTINE derivs
!BL
                        SUBROUTINE rkqs(y,dydx,x,htry,eps,yscal,hdid,hnext,derivs)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(INOUT) :: y
                        REAL(SP), DIMENSION(:), INTENT(IN) :: dydx,yscal
                        REAL(SP), INTENT(INOUT) :: x
                        REAL(SP), INTENT(IN) :: htry,eps
                        REAL(SP), INTENT(OUT) :: hdid,hnext
                                INTERFACE
                                SUBROUTINE derivs(x,y,dydx)
                                        USE nrtype
                                        REAL(SP), INTENT(IN) :: x
                                        REAL(SP), DIMENSION(:), INTENT(IN) :: y
                                        REAL(SP), DIMENSION(:), INTENT(OUT) :: dydx
                                        END SUBROUTINE derivs
                                END INTERFACE
                        END SUBROUTINE rkqs
                END INTERFACE
                END SUBROUTINE odeint
        END INTERFACE
        INTERFACE
                SUBROUTINE orthog(anu,alpha,beta,a,b)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: anu,alpha,beta
                REAL(SP), DIMENSION(:), INTENT(OUT) :: a,b
                END SUBROUTINE orthog
        END INTERFACE
        INTERFACE
                SUBROUTINE pade(cof,resid)
                USE nrtype
                REAL(DP), DIMENSION(:), INTENT(INOUT) :: cof
                REAL(SP), INTENT(OUT) :: resid
                END SUBROUTINE pade
        END INTERFACE
        INTERFACE
                FUNCTION pccheb(d)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: d
                REAL(SP), DIMENSION(size(d)) :: pccheb
                END FUNCTION pccheb
        END INTERFACE
        INTERFACE
                SUBROUTINE pcshft(a,b,d)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,b
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: d
                END SUBROUTINE pcshft
        END INTERFACE
        INTERFACE
                SUBROUTINE pearsn(x,y,r,prob,z)
                USE nrtype
                REAL(SP), INTENT(OUT) :: r,prob,z
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,y
                END SUBROUTINE pearsn
        END INTERFACE
        INTERFACE
                SUBROUTINE period(x,y,ofac,hifac,px,py,jmax,prob)
                USE nrtype
                INTEGER(I4B), INTENT(OUT) :: jmax
                REAL(SP), INTENT(IN) :: ofac,hifac
                REAL(SP), INTENT(OUT) :: prob
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,y
                REAL(SP), DIMENSION(:), POINTER :: px,py
                END SUBROUTINE period
        END INTERFACE
        INTERFACE plgndr
                FUNCTION plgndr_s(l,m,x)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: l,m
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: plgndr_s
                END FUNCTION plgndr_s
!BL
                FUNCTION plgndr_v(l,m,x)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: l,m
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(size(x)) :: plgndr_v
                END FUNCTION plgndr_v
        END INTERFACE
        INTERFACE
                FUNCTION poidev(xm)
                USE nrtype
                REAL(SP), INTENT(IN) :: xm
                REAL(SP) :: poidev
                END FUNCTION poidev
        END INTERFACE
        INTERFACE
                FUNCTION polcoe(x,y)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,y
                REAL(SP), DIMENSION(size(x)) :: polcoe
                END FUNCTION polcoe
        END INTERFACE
        INTERFACE
                FUNCTION polcof(xa,ya)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: xa,ya
                REAL(SP), DIMENSION(size(xa)) :: polcof
                END FUNCTION polcof
        END INTERFACE
        INTERFACE
                SUBROUTINE poldiv(u,v,q,r)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: u,v
                REAL(SP), DIMENSION(:), INTENT(OUT) :: q,r
                END SUBROUTINE poldiv
        END INTERFACE
        INTERFACE
                SUBROUTINE polin2(x1a,x2a,ya,x1,x2,y,dy)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x1a,x2a
                REAL(SP), DIMENSION(:,:), INTENT(IN) :: ya
                REAL(SP), INTENT(IN) :: x1,x2
                REAL(SP), INTENT(OUT) :: y,dy
                END SUBROUTINE polin2
        END INTERFACE
        INTERFACE
                SUBROUTINE polint(xa,ya,x,y,dy)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: xa,ya
                REAL(SP), INTENT(IN) :: x
                REAL(SP), INTENT(OUT) :: y,dy
                END SUBROUTINE polint
        END INTERFACE
        INTERFACE
                SUBROUTINE powell(p,xi,ftol,iter,fret)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: p
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: xi
                INTEGER(I4B), INTENT(OUT) :: iter
                REAL(SP), INTENT(IN) :: ftol
                REAL(SP), INTENT(OUT) :: fret
                END SUBROUTINE powell
        END INTERFACE
        INTERFACE
                FUNCTION predic(data,d,nfut)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: data,d
                INTEGER(I4B), INTENT(IN) :: nfut
                REAL(SP), DIMENSION(nfut) :: predic
                END FUNCTION predic
        END INTERFACE
        INTERFACE
                FUNCTION probks(alam)
                USE nrtype
                REAL(SP), INTENT(IN) :: alam
                REAL(SP) :: probks
                END FUNCTION probks
        END INTERFACE
        INTERFACE psdes
                SUBROUTINE psdes_s(lword,rword)
                USE nrtype
                INTEGER(I4B), INTENT(INOUT) :: lword,rword
                END SUBROUTINE psdes_s
!BL
                SUBROUTINE psdes_v(lword,rword)
                USE nrtype
                INTEGER(I4B), DIMENSION(:), INTENT(INOUT) :: lword,rword
                END SUBROUTINE psdes_v
        END INTERFACE
        INTERFACE
                SUBROUTINE pwt(a,isign)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: a
                INTEGER(I4B), INTENT(IN) :: isign
                END SUBROUTINE pwt
        END INTERFACE
        INTERFACE
                SUBROUTINE pwtset(n)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n
                END SUBROUTINE pwtset
        END INTERFACE
        INTERFACE pythag
                FUNCTION pythag_dp(a,b)
                USE nrtype
                REAL(DP), INTENT(IN) :: a,b
                REAL(DP) :: pythag_dp
                END FUNCTION pythag_dp
!BL
                FUNCTION pythag_sp(a,b)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,b
                REAL(SP) :: pythag_sp
                END FUNCTION pythag_sp
        END INTERFACE
        INTERFACE
                SUBROUTINE pzextr(iest,xest,yest,yz,dy)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: iest
                REAL(SP), INTENT(IN) :: xest
                REAL(SP), DIMENSION(:), INTENT(IN) :: yest
                REAL(SP), DIMENSION(:), INTENT(OUT) :: yz,dy
                END SUBROUTINE pzextr
        END INTERFACE
        INTERFACE
                SUBROUTINE qrdcmp(a,c,d,sing)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: a
                REAL(SP), DIMENSION(:), INTENT(OUT) :: c,d
                LOGICAL(LGT), INTENT(OUT) :: sing
                END SUBROUTINE qrdcmp
        END INTERFACE
        INTERFACE
                FUNCTION qromb(func,a,b)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,b
                REAL(SP) :: qromb
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x
                        REAL(SP), DIMENSION(size(x)) :: func
                        END FUNCTION func
                END INTERFACE
                END FUNCTION qromb
        END INTERFACE
        INTERFACE
                FUNCTION qromo(func,a,b,choose)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,b
                REAL(SP) :: qromo
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x
                        REAL(SP), DIMENSION(size(x)) :: func
                        END FUNCTION func
                END INTERFACE
                INTERFACE
                        SUBROUTINE choose(funk,aa,bb,s,n)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: aa,bb
                        REAL(SP), INTENT(INOUT) :: s
                        INTEGER(I4B), INTENT(IN) :: n
                        INTERFACE
                                FUNCTION funk(x)
                                USE nrtype
                                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                                REAL(SP), DIMENSION(size(x)) :: funk
                                END FUNCTION funk
                        END INTERFACE
                        END SUBROUTINE choose
                END INTERFACE
                END FUNCTION qromo
        END INTERFACE
        INTERFACE
                SUBROUTINE qroot(p,b,c,eps)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: p
                REAL(SP), INTENT(INOUT) :: b,c
                REAL(SP), INTENT(IN) :: eps
                END SUBROUTINE qroot
        END INTERFACE
        INTERFACE
                SUBROUTINE qrsolv(a,c,d,b)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(IN) :: a
                REAL(SP), DIMENSION(:), INTENT(IN) :: c,d
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: b
                END SUBROUTINE qrsolv
        END INTERFACE
        INTERFACE
                SUBROUTINE qrupdt(r,qt,u,v)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: r,qt
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: u
                REAL(SP), DIMENSION(:), INTENT(IN) :: v
                END SUBROUTINE qrupdt
        END INTERFACE
        INTERFACE
                FUNCTION qsimp(func,a,b)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,b
                REAL(SP) :: qsimp
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x
                        REAL(SP), DIMENSION(size(x)) :: func
                        END FUNCTION func
                END INTERFACE
                END FUNCTION qsimp
        END INTERFACE
        INTERFACE
                FUNCTION qtrap(func,a,b)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,b
                REAL(SP) :: qtrap
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x
                        REAL(SP), DIMENSION(size(x)) :: func
                        END FUNCTION func
                END INTERFACE
                END FUNCTION qtrap
        END INTERFACE
        INTERFACE
                SUBROUTINE quadct(x,y,xx,yy,fa,fb,fc,fd)
                USE nrtype
                REAL(SP), INTENT(IN) :: x,y
                REAL(SP), DIMENSION(:), INTENT(IN) :: xx,yy
                REAL(SP), INTENT(OUT) :: fa,fb,fc,fd
                END SUBROUTINE quadct
        END INTERFACE
        INTERFACE
                SUBROUTINE quadmx(a)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(OUT) :: a
                END SUBROUTINE quadmx
        END INTERFACE
        INTERFACE
                SUBROUTINE quadvl(x,y,fa,fb,fc,fd)
                USE nrtype
                REAL(SP), INTENT(IN) :: x,y
                REAL(SP), INTENT(OUT) :: fa,fb,fc,fd
                END SUBROUTINE quadvl
        END INTERFACE
        INTERFACE
                FUNCTION ran(idum)
                INTEGER(selected_int_kind(9)), INTENT(INOUT) :: idum
                REAL :: ran
                END FUNCTION ran
        END INTERFACE
        INTERFACE ran0
                SUBROUTINE ran0_s(harvest)
                USE nrtype
                REAL(SP), INTENT(OUT) :: harvest
                END SUBROUTINE ran0_s
!BL
                SUBROUTINE ran0_v(harvest)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(OUT) :: harvest
                END SUBROUTINE ran0_v
        END INTERFACE
        INTERFACE ran1
                SUBROUTINE ran1_s(harvest)
                USE nrtype
                REAL(SP), INTENT(OUT) :: harvest
                END SUBROUTINE ran1_s
!BL
                SUBROUTINE ran1_v(harvest)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(OUT) :: harvest
                END SUBROUTINE ran1_v
        END INTERFACE
        INTERFACE ran2
                SUBROUTINE ran2_s(harvest)
                USE nrtype
                REAL(SP), INTENT(OUT) :: harvest
                END SUBROUTINE ran2_s
!BL
                SUBROUTINE ran2_v(harvest)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(OUT) :: harvest
                END SUBROUTINE ran2_v
        END INTERFACE
        INTERFACE ran3
                SUBROUTINE ran3_s(harvest)
                USE nrtype
                REAL(SP), INTENT(OUT) :: harvest
                END SUBROUTINE ran3_s
!BL
                SUBROUTINE ran3_v(harvest)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(OUT) :: harvest
                END SUBROUTINE ran3_v
        END INTERFACE
        INTERFACE
                SUBROUTINE ratint(xa,ya,x,y,dy)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: xa,ya
                REAL(SP), INTENT(IN) :: x
                REAL(SP), INTENT(OUT) :: y,dy
                END SUBROUTINE ratint
        END INTERFACE
        INTERFACE
                SUBROUTINE ratlsq(func,a,b,mm,kk,cof,dev)
                USE nrtype
                REAL(DP), INTENT(IN) :: a,b
                INTEGER(I4B), INTENT(IN) :: mm,kk
                REAL(DP), DIMENSION(:), INTENT(OUT) :: cof
                REAL(DP), INTENT(OUT) :: dev
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(DP), DIMENSION(:), INTENT(IN) :: x
                        REAL(DP), DIMENSION(size(x)) :: func
                        END FUNCTION func
                END INTERFACE
                END SUBROUTINE ratlsq
        END INTERFACE
        INTERFACE ratval
                FUNCTION ratval_s(x,cof,mm,kk)
                USE nrtype
                REAL(DP), INTENT(IN) :: x
                INTEGER(I4B), INTENT(IN) :: mm,kk
                REAL(DP), DIMENSION(mm+kk+1), INTENT(IN) :: cof
                REAL(DP) :: ratval_s
                END FUNCTION ratval_s
!BL
                FUNCTION ratval_v(x,cof,mm,kk)
                USE nrtype
                REAL(DP), DIMENSION(:), INTENT(IN) :: x
                INTEGER(I4B), INTENT(IN) :: mm,kk
                REAL(DP), DIMENSION(mm+kk+1), INTENT(IN) :: cof
                REAL(DP), DIMENSION(size(x)) :: ratval_v
                END FUNCTION ratval_v
        END INTERFACE
        INTERFACE rc
                FUNCTION rc_s(x,y)
                USE nrtype
                REAL(SP), INTENT(IN) :: x,y
                REAL(SP) :: rc_s
                END FUNCTION rc_s
!BL
                FUNCTION rc_v(x,y)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,y
                REAL(SP), DIMENSION(size(x)) :: rc_v
                END FUNCTION rc_v
        END INTERFACE
        INTERFACE rd
                FUNCTION rd_s(x,y,z)
                USE nrtype
                REAL(SP), INTENT(IN) :: x,y,z
                REAL(SP) :: rd_s
                END FUNCTION rd_s
!BL
                FUNCTION rd_v(x,y,z)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,y,z
                REAL(SP), DIMENSION(size(x)) :: rd_v
                END FUNCTION rd_v
        END INTERFACE
        INTERFACE realft
                SUBROUTINE realft_dp(data,isign,zdata)
                USE nrtype
                REAL(DP), DIMENSION(:), INTENT(INOUT) :: data
                INTEGER(I4B), INTENT(IN) :: isign
                COMPLEX(DPC), DIMENSION(:), OPTIONAL, TARGET :: zdata
                END SUBROUTINE realft_dp
!BL
                SUBROUTINE realft_sp(data,isign,zdata)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: data
                INTEGER(I4B), INTENT(IN) :: isign
                COMPLEX(SPC), DIMENSION(:), OPTIONAL, TARGET :: zdata
                END SUBROUTINE realft_sp
        END INTERFACE
        INTERFACE
                RECURSIVE FUNCTION recur1(a,b) RESULT(u)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: a,b
                REAL(SP), DIMENSION(size(a)) :: u
                END FUNCTION recur1
        END INTERFACE
        INTERFACE
                FUNCTION recur2(a,b,c)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: a,b,c
                REAL(SP), DIMENSION(size(a)) :: recur2
                END FUNCTION recur2
        END INTERFACE
        INTERFACE
                SUBROUTINE relax(u,rhs)
                USE nrtype
                REAL(DP), DIMENSION(:,:), INTENT(INOUT) :: u
                REAL(DP), DIMENSION(:,:), INTENT(IN) :: rhs
                END SUBROUTINE relax
        END INTERFACE
        INTERFACE
                SUBROUTINE relax2(u,rhs)
                USE nrtype
                REAL(DP), DIMENSION(:,:), INTENT(INOUT) :: u
                REAL(DP), DIMENSION(:,:), INTENT(IN) :: rhs
                END SUBROUTINE relax2
        END INTERFACE
        INTERFACE
        FUNCTION resid(u,rhs)
                USE nrtype
                REAL(DP), DIMENSION(:,:), INTENT(IN) :: u,rhs
                REAL(DP), DIMENSION(size(u,1),size(u,1)) :: resid
                END FUNCTION resid
        END INTERFACE
        INTERFACE rf
                FUNCTION rf_s(x,y,z)
                USE nrtype
                REAL(SP), INTENT(IN) :: x,y,z
                REAL(SP) :: rf_s
                END FUNCTION rf_s
!BL
                FUNCTION rf_v(x,y,z)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,y,z
                REAL(SP), DIMENSION(size(x)) :: rf_v
                END FUNCTION rf_v
        END INTERFACE
        INTERFACE rj
                FUNCTION rj_s(x,y,z,p)
                USE nrtype
                REAL(SP), INTENT(IN) :: x,y,z,p
                REAL(SP) :: rj_s
                END FUNCTION rj_s
!BL
                FUNCTION rj_v(x,y,z,p)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,y,z,p
                REAL(SP), DIMENSION(size(x)) :: rj_v
                END FUNCTION rj_v
        END INTERFACE
        INTERFACE
                SUBROUTINE rk4(y,dydx,x,h,yout,derivs)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: y,dydx
                REAL(SP), INTENT(IN) :: x,h
                REAL(SP), DIMENSION(:), INTENT(OUT) :: yout
                INTERFACE
                        SUBROUTINE derivs(x,y,dydx)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP), DIMENSION(:), INTENT(IN) :: y
                        REAL(SP), DIMENSION(:), INTENT(OUT) :: dydx
                        END SUBROUTINE derivs
                END INTERFACE
                END SUBROUTINE rk4
        END INTERFACE
        INTERFACE
                SUBROUTINE rkck(y,dydx,x,h,yout,yerr,derivs)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: y,dydx
                REAL(SP), INTENT(IN) :: x,h
                REAL(SP), DIMENSION(:), INTENT(OUT) :: yout,yerr
                INTERFACE
                        SUBROUTINE derivs(x,y,dydx)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP), DIMENSION(:), INTENT(IN) :: y
                        REAL(SP), DIMENSION(:), INTENT(OUT) :: dydx
                        END SUBROUTINE derivs
                END INTERFACE
                END SUBROUTINE rkck
        END INTERFACE
        INTERFACE
                SUBROUTINE rkdumb(vstart,x1,x2,nstep,derivs)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: vstart
                REAL(SP), INTENT(IN) :: x1,x2
                INTEGER(I4B), INTENT(IN) :: nstep
                INTERFACE
                        SUBROUTINE derivs(x,y,dydx)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP), DIMENSION(:), INTENT(IN) :: y
                        REAL(SP), DIMENSION(:), INTENT(OUT) :: dydx
                        END SUBROUTINE derivs
                END INTERFACE
                END SUBROUTINE rkdumb
        END INTERFACE
        INTERFACE
                SUBROUTINE rkqs(y,dydx,x,htry,eps,yscal,hdid,hnext,derivs)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: y
                REAL(SP), DIMENSION(:), INTENT(IN) :: dydx,yscal
                REAL(SP), INTENT(INOUT) :: x
                REAL(SP), INTENT(IN) :: htry,eps
                REAL(SP), INTENT(OUT) :: hdid,hnext
                INTERFACE
                        SUBROUTINE derivs(x,y,dydx)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP), DIMENSION(:), INTENT(IN) :: y
                        REAL(SP), DIMENSION(:), INTENT(OUT) :: dydx
                        END SUBROUTINE derivs
                END INTERFACE
                END SUBROUTINE rkqs
        END INTERFACE
        INTERFACE
                SUBROUTINE rlft2(data,spec,speq,isign)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: data
                COMPLEX(SPC), DIMENSION(:,:), INTENT(OUT) :: spec
                COMPLEX(SPC), DIMENSION(:), INTENT(OUT) :: speq
                INTEGER(I4B), INTENT(IN) :: isign
                END SUBROUTINE rlft2
        END INTERFACE
        INTERFACE
                SUBROUTINE rlft3(data,spec,speq,isign)
                USE nrtype
                REAL(SP), DIMENSION(:,:,:), INTENT(INOUT) :: data
                COMPLEX(SPC), DIMENSION(:,:,:), INTENT(OUT) :: spec
                COMPLEX(SPC), DIMENSION(:,:), INTENT(OUT) :: speq
                INTEGER(I4B), INTENT(IN) :: isign
                END SUBROUTINE rlft3
        END INTERFACE
        INTERFACE
                SUBROUTINE rotate(r,qt,i,a,b)
                USE nrtype
                REAL(SP), DIMENSION(:,:), TARGET, INTENT(INOUT) :: r,qt
                INTEGER(I4B), INTENT(IN) :: i
                REAL(SP), INTENT(IN) :: a,b
                END SUBROUTINE rotate
        END INTERFACE
        INTERFACE
                SUBROUTINE rsolv(a,d,b)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(IN) :: a
                REAL(SP), DIMENSION(:), INTENT(IN) :: d
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: b
                END SUBROUTINE rsolv
        END INTERFACE
        INTERFACE
                FUNCTION rstrct(uf)
                USE nrtype
                REAL(DP), DIMENSION(:,:), INTENT(IN) :: uf
                REAL(DP), DIMENSION((size(uf,1)+1)/2,(size(uf,1)+1)/2) :: rstrct
                END FUNCTION rstrct
        END INTERFACE
        INTERFACE
                FUNCTION rtbis(func,x1,x2,xacc)
                USE nrtype
                REAL(SP), INTENT(IN) :: x1,x2,xacc
                REAL(SP) :: rtbis
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP) :: func
                        END FUNCTION func
                END INTERFACE
                END FUNCTION rtbis
        END INTERFACE
        INTERFACE
                FUNCTION rtflsp(func,x1,x2,xacc)
                USE nrtype
                REAL(SP), INTENT(IN) :: x1,x2,xacc
                REAL(SP) :: rtflsp
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP) :: func
                        END FUNCTION func
                END INTERFACE
                END FUNCTION rtflsp
        END INTERFACE
        INTERFACE
                FUNCTION rtnewt(funcd,x1,x2,xacc)
                USE nrtype
                REAL(SP), INTENT(IN) :: x1,x2,xacc
                REAL(SP) :: rtnewt
                INTERFACE
                        SUBROUTINE funcd(x,fval,fderiv)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP), INTENT(OUT) :: fval,fderiv
                        END SUBROUTINE funcd
                END INTERFACE
                END FUNCTION rtnewt
        END INTERFACE
        INTERFACE
                FUNCTION rtsafe(funcd,x1,x2,xacc)
                USE nrtype
                REAL(SP), INTENT(IN) :: x1,x2,xacc
                REAL(SP) :: rtsafe
                INTERFACE
                        SUBROUTINE funcd(x,fval,fderiv)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP), INTENT(OUT) :: fval,fderiv
                        END SUBROUTINE funcd
                END INTERFACE
                END FUNCTION rtsafe
        END INTERFACE
        INTERFACE
                FUNCTION rtsec(func,x1,x2,xacc)
                USE nrtype
                REAL(SP), INTENT(IN) :: x1,x2,xacc
                REAL(SP) :: rtsec
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP) :: func
                        END FUNCTION func
                END INTERFACE
                END FUNCTION rtsec
        END INTERFACE
        INTERFACE
                SUBROUTINE rzextr(iest,xest,yest,yz,dy)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: iest
                REAL(SP), INTENT(IN) :: xest
                REAL(SP), DIMENSION(:), INTENT(IN) :: yest
                REAL(SP), DIMENSION(:), INTENT(OUT) :: yz,dy
                END SUBROUTINE rzextr
        END INTERFACE
        INTERFACE
                FUNCTION savgol(nl,nrr,ld,m)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: nl,nrr,ld,m
                REAL(SP), DIMENSION(nl+nrr+1) :: savgol
                END FUNCTION savgol
        END INTERFACE
        INTERFACE
                SUBROUTINE scrsho(func)
                USE nrtype
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP) :: func
                        END FUNCTION func
                END INTERFACE
                END SUBROUTINE scrsho
        END INTERFACE
        INTERFACE
                FUNCTION select(k,arr)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: k
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: arr
                REAL(SP) :: select
                END FUNCTION select
        END INTERFACE
        INTERFACE
                FUNCTION select_bypack(k,arr)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: k
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: arr
                REAL(SP) :: select_bypack
                END FUNCTION select_bypack
        END INTERFACE
        INTERFACE
                SUBROUTINE select_heap(arr,heap)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: arr
                REAL(SP), DIMENSION(:), INTENT(OUT) :: heap
                END SUBROUTINE select_heap
        END INTERFACE
        INTERFACE
                FUNCTION select_inplace(k,arr)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: k
                REAL(SP), DIMENSION(:), INTENT(IN) :: arr
                REAL(SP) :: select_inplace
                END FUNCTION select_inplace
        END INTERFACE
        INTERFACE
                SUBROUTINE simplx(a,m1,m2,m3,icase,izrov,iposv)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: a
                INTEGER(I4B), INTENT(IN) :: m1,m2,m3
                INTEGER(I4B), INTENT(OUT) :: icase
                INTEGER(I4B), DIMENSION(:), INTENT(OUT) :: izrov,iposv
                END SUBROUTINE simplx
        END INTERFACE
        INTERFACE
                SUBROUTINE simpr(y,dydx,dfdx,dfdy,xs,htot,nstep,yout,derivs)
                USE nrtype
                REAL(SP), INTENT(IN) :: xs,htot
                REAL(SP), DIMENSION(:), INTENT(IN) :: y,dydx,dfdx
                REAL(SP), DIMENSION(:,:), INTENT(IN) :: dfdy
                INTEGER(I4B), INTENT(IN) :: nstep
                REAL(SP), DIMENSION(:), INTENT(OUT) :: yout
                INTERFACE
                        SUBROUTINE derivs(x,y,dydx)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP), DIMENSION(:), INTENT(IN) :: y
                        REAL(SP), DIMENSION(:), INTENT(OUT) :: dydx
                        END SUBROUTINE derivs
                END INTERFACE
                END SUBROUTINE simpr
        END INTERFACE
        INTERFACE
                SUBROUTINE sinft(y)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: y
                END SUBROUTINE sinft
        END INTERFACE
        INTERFACE
                SUBROUTINE slvsm2(u,rhs)
                USE nrtype
                REAL(DP), DIMENSION(3,3), INTENT(OUT) :: u
                REAL(DP), DIMENSION(3,3), INTENT(IN) :: rhs
                END SUBROUTINE slvsm2
        END INTERFACE
        INTERFACE
                SUBROUTINE slvsml(u,rhs)
                USE nrtype
                REAL(DP), DIMENSION(3,3), INTENT(OUT) :: u
                REAL(DP), DIMENSION(3,3), INTENT(IN) :: rhs
                END SUBROUTINE slvsml
        END INTERFACE
        INTERFACE
                SUBROUTINE sncndn(uu,emmc,sn,cn,dn)
                USE nrtype
                REAL(SP), INTENT(IN) :: uu,emmc
                REAL(SP), INTENT(OUT) :: sn,cn,dn
                END SUBROUTINE sncndn
        END INTERFACE
        INTERFACE
                FUNCTION snrm(sx,itol)
                USE nrtype
                REAL(DP), DIMENSION(:), INTENT(IN) :: sx
                INTEGER(I4B), INTENT(IN) :: itol
                REAL(DP) :: snrm
                END FUNCTION snrm
        END INTERFACE
        INTERFACE
                SUBROUTINE sobseq(x,init)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(OUT) :: x
                INTEGER(I4B), OPTIONAL, INTENT(IN) :: init
                END SUBROUTINE sobseq
        END INTERFACE
        INTERFACE
                SUBROUTINE solvde(itmax,conv,slowc,scalv,indexv,nb,y)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: itmax,nb
                REAL(SP), INTENT(IN) :: conv,slowc
                REAL(SP), DIMENSION(:), INTENT(IN) :: scalv
                INTEGER(I4B), DIMENSION(:), INTENT(IN) :: indexv
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: y
                END SUBROUTINE solvde
        END INTERFACE
        INTERFACE
                SUBROUTINE sor(a,b,c,d,e,f,u,rjac)
                USE nrtype
                REAL(DP), DIMENSION(:,:), INTENT(IN) :: a,b,c,d,e,f
                REAL(DP), DIMENSION(:,:), INTENT(INOUT) :: u
                REAL(DP), INTENT(IN) :: rjac
                END SUBROUTINE sor
        END INTERFACE
        INTERFACE
                SUBROUTINE sort(arr)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: arr
                END SUBROUTINE sort
        END INTERFACE
        INTERFACE
                SUBROUTINE sort2(arr,slave)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: arr,slave
                END SUBROUTINE sort2
        END INTERFACE
        INTERFACE
                SUBROUTINE sort3(arr,slave1,slave2)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: arr,slave1,slave2
                END SUBROUTINE sort3
        END INTERFACE
        INTERFACE
                SUBROUTINE sort_bypack(arr)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: arr
                END SUBROUTINE sort_bypack
        END INTERFACE
        INTERFACE
                SUBROUTINE sort_byreshape(arr)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: arr
                END SUBROUTINE sort_byreshape
        END INTERFACE
        INTERFACE
                SUBROUTINE sort_heap(arr)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: arr
                END SUBROUTINE sort_heap
        END INTERFACE
        INTERFACE
                SUBROUTINE sort_pick(arr)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: arr
                END SUBROUTINE sort_pick
        END INTERFACE
        INTERFACE
                SUBROUTINE sort_radix(arr)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: arr
                END SUBROUTINE sort_radix
        END INTERFACE
        INTERFACE
                SUBROUTINE sort_shell(arr)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: arr
                END SUBROUTINE sort_shell
        END INTERFACE
        INTERFACE
                SUBROUTINE spctrm(p,k,ovrlap,unit,n_window)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(OUT) :: p
                INTEGER(I4B), INTENT(IN) :: k
                LOGICAL(LGT), INTENT(IN) :: ovrlap
                INTEGER(I4B), OPTIONAL, INTENT(IN) :: n_window,unit
                END SUBROUTINE spctrm
        END INTERFACE
        INTERFACE
                SUBROUTINE spear(data1,data2,d,zd,probd,rs,probrs)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: data1,data2
                REAL(SP), INTENT(OUT) :: d,zd,probd,rs,probrs
                END SUBROUTINE spear
        END INTERFACE
        INTERFACE sphbes
                SUBROUTINE sphbes_s(n,x,sj,sy,sjp,syp)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n
                REAL(SP), INTENT(IN) :: x
                REAL(SP), INTENT(OUT) :: sj,sy,sjp,syp
                END SUBROUTINE sphbes_s
!BL
                SUBROUTINE sphbes_v(n,x,sj,sy,sjp,syp)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n
                REAL(SP), DIMENSION(:), INTENT(IN) :: x
                REAL(SP), DIMENSION(:), INTENT(OUT) :: sj,sy,sjp,syp
                END SUBROUTINE sphbes_v
        END INTERFACE
        INTERFACE
                SUBROUTINE splie2(x1a,x2a,ya,y2a)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x1a,x2a
                REAL(SP), DIMENSION(:,:), INTENT(IN) :: ya
                REAL(SP), DIMENSION(:,:), INTENT(OUT) :: y2a
                END SUBROUTINE splie2
        END INTERFACE
        INTERFACE
                FUNCTION splin2(x1a,x2a,ya,y2a,x1,x2)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x1a,x2a
                REAL(SP), DIMENSION(:,:), INTENT(IN) :: ya,y2a
                REAL(SP), INTENT(IN) :: x1,x2
                REAL(SP) :: splin2
                END FUNCTION splin2
        END INTERFACE
        INTERFACE
                SUBROUTINE spline(x,y,yp1,ypn,y2)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,y
                REAL(SP), INTENT(IN) :: yp1,ypn
                REAL(SP), DIMENSION(:), INTENT(OUT) :: y2
                END SUBROUTINE spline
        END INTERFACE
        INTERFACE
                FUNCTION splint(xa,ya,y2a,x)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: xa,ya,y2a
                REAL(SP), INTENT(IN) :: x
                REAL(SP) :: splint
                END FUNCTION splint
        END INTERFACE
        INTERFACE sprsax
                SUBROUTINE sprsax_dp(sa,x,b)
                USE nrtype
                TYPE(sprs2_dp), INTENT(IN) :: sa
                REAL(DP), DIMENSION (:), INTENT(IN) :: x
                REAL(DP), DIMENSION (:), INTENT(OUT) :: b
                END SUBROUTINE sprsax_dp
!BL
                SUBROUTINE sprsax_sp(sa,x,b)
                USE nrtype
                TYPE(sprs2_sp), INTENT(IN) :: sa
                REAL(SP), DIMENSION (:), INTENT(IN) :: x
                REAL(SP), DIMENSION (:), INTENT(OUT) :: b
                END SUBROUTINE sprsax_sp
        END INTERFACE
        INTERFACE sprsdiag
                SUBROUTINE sprsdiag_dp(sa,b)
                USE nrtype
                TYPE(sprs2_dp), INTENT(IN) :: sa
                REAL(DP), DIMENSION(:), INTENT(OUT) :: b
                END SUBROUTINE sprsdiag_dp
!BL
                SUBROUTINE sprsdiag_sp(sa,b)
                USE nrtype
                TYPE(sprs2_sp), INTENT(IN) :: sa
                REAL(SP), DIMENSION(:), INTENT(OUT) :: b
                END SUBROUTINE sprsdiag_sp
        END INTERFACE
        INTERFACE sprsin
                SUBROUTINE sprsin_sp(a,thresh,sa)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(IN) :: a
                REAL(SP), INTENT(IN) :: thresh
                TYPE(sprs2_sp), INTENT(OUT) :: sa
                END SUBROUTINE sprsin_sp
!BL
                SUBROUTINE sprsin_dp(a,thresh,sa)
                USE nrtype
                REAL(DP), DIMENSION(:,:), INTENT(IN) :: a
                REAL(DP), INTENT(IN) :: thresh
                TYPE(sprs2_dp), INTENT(OUT) :: sa
                END SUBROUTINE sprsin_dp
        END INTERFACE
        INTERFACE
                SUBROUTINE sprstp(sa)
                USE nrtype
                TYPE(sprs2_sp), INTENT(INOUT) :: sa
                END SUBROUTINE sprstp
        END INTERFACE
        INTERFACE sprstx
                SUBROUTINE sprstx_dp(sa,x,b)
                USE nrtype
                TYPE(sprs2_dp), INTENT(IN) :: sa
                REAL(DP), DIMENSION (:), INTENT(IN) :: x
                REAL(DP), DIMENSION (:), INTENT(OUT) :: b
                END SUBROUTINE sprstx_dp
!BL
                SUBROUTINE sprstx_sp(sa,x,b)
                USE nrtype
                TYPE(sprs2_sp), INTENT(IN) :: sa
                REAL(SP), DIMENSION (:), INTENT(IN) :: x
                REAL(SP), DIMENSION (:), INTENT(OUT) :: b
                END SUBROUTINE sprstx_sp
        END INTERFACE
        INTERFACE
                SUBROUTINE stifbs(y,dydx,x,htry,eps,yscal,hdid,hnext,derivs)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: y
                REAL(SP), DIMENSION(:), INTENT(IN) :: dydx,yscal
                REAL(SP), INTENT(IN) :: htry,eps
                REAL(SP), INTENT(INOUT) :: x
                REAL(SP), INTENT(OUT) :: hdid,hnext
                INTERFACE
                        SUBROUTINE derivs(x,y,dydx)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP), DIMENSION(:), INTENT(IN) :: y
                        REAL(SP), DIMENSION(:), INTENT(OUT) :: dydx
                        END SUBROUTINE derivs
                END INTERFACE
                END SUBROUTINE stifbs
        END INTERFACE
        INTERFACE
                SUBROUTINE stiff(y,dydx,x,htry,eps,yscal,hdid,hnext,derivs)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: y
                REAL(SP), DIMENSION(:), INTENT(IN) :: dydx,yscal
                REAL(SP), INTENT(INOUT) :: x
                REAL(SP), INTENT(IN) :: htry,eps
                REAL(SP), INTENT(OUT) :: hdid,hnext
                INTERFACE
                        SUBROUTINE derivs(x,y,dydx)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP), DIMENSION(:), INTENT(IN) :: y
                        REAL(SP), DIMENSION(:), INTENT(OUT) :: dydx
                        END SUBROUTINE derivs
                END INTERFACE
                END SUBROUTINE stiff
        END INTERFACE
        INTERFACE
                SUBROUTINE stoerm(y,d2y,xs,htot,nstep,yout,derivs)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: y,d2y
                REAL(SP), INTENT(IN) :: xs,htot
                INTEGER(I4B), INTENT(IN) :: nstep
                REAL(SP), DIMENSION(:), INTENT(OUT) :: yout
                INTERFACE
                        SUBROUTINE derivs(x,y,dydx)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP), DIMENSION(:), INTENT(IN) :: y
                        REAL(SP), DIMENSION(:), INTENT(OUT) :: dydx
                        END SUBROUTINE derivs
                END INTERFACE
                END SUBROUTINE stoerm
        END INTERFACE
        INTERFACE svbksb
                SUBROUTINE svbksb_dp(u,w,v,b,x)
                USE nrtype
                REAL(DP), DIMENSION(:,:), INTENT(IN) :: u,v
                REAL(DP), DIMENSION(:), INTENT(IN) :: w,b
                REAL(DP), DIMENSION(:), INTENT(OUT) :: x
                END SUBROUTINE svbksb_dp
!BL
                SUBROUTINE svbksb_sp(u,w,v,b,x)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(IN) :: u,v
                REAL(SP), DIMENSION(:), INTENT(IN) :: w,b
                REAL(SP), DIMENSION(:), INTENT(OUT) :: x
                END SUBROUTINE svbksb_sp
        END INTERFACE
        INTERFACE svdcmp
                SUBROUTINE svdcmp_dp(a,w,v)
                USE nrtype
                REAL(DP), DIMENSION(:,:), INTENT(INOUT) :: a
                REAL(DP), DIMENSION(:), INTENT(OUT) :: w
                REAL(DP), DIMENSION(:,:), INTENT(OUT) :: v
                END SUBROUTINE svdcmp_dp
!BL
                SUBROUTINE svdcmp_sp(a,w,v)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: a
                REAL(SP), DIMENSION(:), INTENT(OUT) :: w
                REAL(SP), DIMENSION(:,:), INTENT(OUT) :: v
                END SUBROUTINE svdcmp_sp
        END INTERFACE
        INTERFACE
                SUBROUTINE svdfit(x,y,sig,a,v,w,chisq,funcs)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: x,y,sig
                REAL(SP), DIMENSION(:), INTENT(OUT) :: a,w
                REAL(SP), DIMENSION(:,:), INTENT(OUT) :: v
                REAL(SP), INTENT(OUT) :: chisq
                INTERFACE
                        FUNCTION funcs(x,n)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        INTEGER(I4B), INTENT(IN) :: n
                        REAL(SP), DIMENSION(n) :: funcs
                        END FUNCTION funcs
                END INTERFACE
                END SUBROUTINE svdfit
        END INTERFACE
        INTERFACE
                SUBROUTINE svdvar(v,w,cvm)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(IN) :: v
                REAL(SP), DIMENSION(:), INTENT(IN) :: w
                REAL(SP), DIMENSION(:,:), INTENT(OUT) :: cvm
                END SUBROUTINE svdvar
        END INTERFACE
        INTERFACE
                FUNCTION toeplz(r,y)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: r,y
                REAL(SP), DIMENSION(size(y)) :: toeplz
                END FUNCTION toeplz
        END INTERFACE
        INTERFACE
                SUBROUTINE tptest(data1,data2,t,prob)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: data1,data2
                REAL(SP), INTENT(OUT) :: t,prob
                END SUBROUTINE tptest
        END INTERFACE
        INTERFACE
                SUBROUTINE tqli(d,e,z)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: d,e
                REAL(SP), DIMENSION(:,:), OPTIONAL, INTENT(INOUT) :: z
                END SUBROUTINE tqli
        END INTERFACE
        INTERFACE
                SUBROUTINE trapzd(func,a,b,s,n)
                USE nrtype
                REAL(SP), INTENT(IN) :: a,b
                REAL(SP), INTENT(INOUT) :: s
                INTEGER(I4B), INTENT(IN) :: n
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: x
                        REAL(SP), DIMENSION(size(x)) :: func
                        END FUNCTION func
                END INTERFACE
                END SUBROUTINE trapzd
        END INTERFACE
        INTERFACE
                SUBROUTINE tred2(a,d,e,novectors)
                USE nrtype
                REAL(SP), DIMENSION(:,:), INTENT(INOUT) :: a
                REAL(SP), DIMENSION(:), INTENT(OUT) :: d,e
                LOGICAL(LGT), OPTIONAL, INTENT(IN) :: novectors
                END SUBROUTINE tred2
        END INTERFACE
!       On a purely serial machine, for greater efficiency, remove
!       the generic name tridag from the following interface,
!       and put it on the next one after that.
        INTERFACE tridag
                RECURSIVE SUBROUTINE tridag_par(a,b,c,r,u)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: a,b,c,r
                REAL(SP), DIMENSION(:), INTENT(OUT) :: u
                END SUBROUTINE tridag_par
        END INTERFACE
        INTERFACE
                SUBROUTINE tridag_ser(a,b,c,r,u)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: a,b,c,r
                REAL(SP), DIMENSION(:), INTENT(OUT) :: u
                END SUBROUTINE tridag_ser
        END INTERFACE
        INTERFACE
                SUBROUTINE ttest(data1,data2,t,prob)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: data1,data2
                REAL(SP), INTENT(OUT) :: t,prob
                END SUBROUTINE ttest
        END INTERFACE
        INTERFACE
                SUBROUTINE tutest(data1,data2,t,prob)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: data1,data2
                REAL(SP), INTENT(OUT) :: t,prob
                END SUBROUTINE tutest
        END INTERFACE
        INTERFACE
                SUBROUTINE twofft(data1,data2,fft1,fft2)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: data1,data2
                COMPLEX(SPC), DIMENSION(:), INTENT(OUT) :: fft1,fft2
                END SUBROUTINE twofft
        END INTERFACE
        INTERFACE
                FUNCTION vander(x,q)
                USE nrtype
                REAL(DP), DIMENSION(:), INTENT(IN) :: x,q
                REAL(DP), DIMENSION(size(x)) :: vander
                END FUNCTION vander
        END INTERFACE
        INTERFACE
                SUBROUTINE vegas(region,func,init,ncall,itmx,nprn,tgral,sd,chi2a)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: region
                INTEGER(I4B), INTENT(IN) :: init,ncall,itmx,nprn
                REAL(SP), INTENT(OUT) :: tgral,sd,chi2a
                INTERFACE
                        FUNCTION func(pt,wgt)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(IN) :: pt
                        REAL(SP), INTENT(IN) :: wgt
                        REAL(SP) :: func
                        END FUNCTION func
                END INTERFACE
                END SUBROUTINE vegas
        END INTERFACE
        INTERFACE
                SUBROUTINE voltra(t0,h,t,f,g,ak)
                USE nrtype
                REAL(SP), INTENT(IN) :: t0,h
                REAL(SP), DIMENSION(:), INTENT(OUT) :: t
                REAL(SP), DIMENSION(:,:), INTENT(OUT) :: f
                INTERFACE
                        FUNCTION g(t)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: t
                        REAL(SP), DIMENSION(:), POINTER :: g
                        END FUNCTION g
!BL
                        FUNCTION ak(t,s)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: t,s
                        REAL(SP), DIMENSION(:,:), POINTER :: ak
                        END FUNCTION ak
                END INTERFACE
                END SUBROUTINE voltra
        END INTERFACE
        INTERFACE
                SUBROUTINE wt1(a,isign,wtstep)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: a
                INTEGER(I4B), INTENT(IN) :: isign
                INTERFACE
                        SUBROUTINE wtstep(a,isign)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(INOUT) :: a
                        INTEGER(I4B), INTENT(IN) :: isign
                        END SUBROUTINE wtstep
                END INTERFACE
                END SUBROUTINE wt1
        END INTERFACE
        INTERFACE
                SUBROUTINE wtn(a,nn,isign,wtstep)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(INOUT) :: a
                INTEGER(I4B), DIMENSION(:), INTENT(IN) :: nn
                INTEGER(I4B), INTENT(IN) :: isign
                INTERFACE
                        SUBROUTINE wtstep(a,isign)
                        USE nrtype
                        REAL(SP), DIMENSION(:), INTENT(INOUT) :: a
                        INTEGER(I4B), INTENT(IN) :: isign
                        END SUBROUTINE wtstep
                END INTERFACE
                END SUBROUTINE wtn
        END INTERFACE
        INTERFACE
                FUNCTION wwghts(n,h,kermom)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n
                REAL(SP), INTENT(IN) :: h
                REAL(SP), DIMENSION(n) :: wwghts
                INTERFACE
                        FUNCTION kermom(y,m)
                        USE nrtype
                        REAL(DP), INTENT(IN) :: y
                        INTEGER(I4B), INTENT(IN) :: m
                        REAL(DP), DIMENSION(m) :: kermom
                        END FUNCTION kermom
                END INTERFACE
                END FUNCTION wwghts
        END INTERFACE
        INTERFACE
                SUBROUTINE zbrac(func,x1,x2,succes)
                USE nrtype
                REAL(SP), INTENT(INOUT) :: x1,x2
                LOGICAL(LGT), INTENT(OUT) :: succes
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP) :: func
                        END FUNCTION func
                END INTERFACE
                END SUBROUTINE zbrac
        END INTERFACE
        INTERFACE
                SUBROUTINE zbrak(func,x1,x2,n,xb1,xb2,nb)
                USE nrtype
                INTEGER(I4B), INTENT(IN) :: n
                INTEGER(I4B), INTENT(OUT) :: nb
                REAL(SP), INTENT(IN) :: x1,x2
                REAL(SP), DIMENSION(:), POINTER :: xb1,xb2
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP) :: func
                        END FUNCTION func
                END INTERFACE
                END SUBROUTINE zbrak
        END INTERFACE
        INTERFACE
                FUNCTION zbrent(func,x1,x2,tol)
                USE nrtype
                REAL(SP), INTENT(IN) :: x1,x2,tol
                REAL(SP) :: zbrent
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP) :: func
                        END FUNCTION func
                END INTERFACE
                END FUNCTION zbrent
        END INTERFACE
        INTERFACE
                SUBROUTINE zrhqr(a,rtr,rti)
                USE nrtype
                REAL(SP), DIMENSION(:), INTENT(IN) :: a
                REAL(SP), DIMENSION(:), INTENT(OUT) :: rtr,rti
                END SUBROUTINE zrhqr
        END INTERFACE
        INTERFACE
                FUNCTION zriddr(func,x1,x2,xacc)
                USE nrtype
                REAL(SP), INTENT(IN) :: x1,x2,xacc
                REAL(SP) :: zriddr
                INTERFACE
                        FUNCTION func(x)
                        USE nrtype
                        REAL(SP), INTENT(IN) :: x
                        REAL(SP) :: func
                        END FUNCTION func
                END INTERFACE
                END FUNCTION zriddr
        END INTERFACE
        INTERFACE
                SUBROUTINE zroots(a,roots,polish)
                USE nrtype
                COMPLEX(SPC), DIMENSION(:), INTENT(IN) :: a
                COMPLEX(SPC), DIMENSION(:), INTENT(OUT) :: roots
                LOGICAL(LGT), INTENT(IN) :: polish
                END SUBROUTINE zroots
        END INTERFACE
END MODULE nr

