SUBROUTINE FCN ( NPAR, GRAD, FUN, PAR, IFLAG )

Argument Definitions (+ indicates altered content)
DOUBLE PRECISION  +FUN,       +GRAD(*),   +PAR(*)
INTEGER            IFLAG,     +NPAR
Description
Compute the function fun = - L(par(1),...,par(npar)) in terms of minim 
 L is the log-likelihood function concentrated on BETA and SIGW2. It o 
 depends on: 
 par(1) = 0.5*dlog((1+rho1)/(1-rho1)) <=> rho1 = dtanh(par(1)) 
 par(2) = 0.5*dlog((1+rho2)/(1-rho2)) <=> rho2 = dtanh(par(2)) 
 par(3) = dlog(pi1/(1-pi1))           <=> pi1  = dexp(par(3))/(1+dexp( 
 par(4) = dlog(pi2/(1-pi2))           <=> pi2  = dexp(par(4))/(1+dexp( 
 where par(1),...,par(4) are unconstrained parameters used in DFP mini 
 routine which calls this routine: 
   -infinity < par(1) < +infinity 
   -infinity < par(2) < +infinity 
   -infinity < par(3) < +infinity 
   -infinity < par(4) < +infinity 
 and rho1, rho2, pi1 and pi2 are constrained autocorrelation parameter 
 in this routine: 
   -1 < rho1 < +1 
   -1 < rho2 < +1 
    0 < pi1  < +1 
    0 < pi2  < +1. 
 The next two groups of par(.) are associated with the DELTA-parameter 
 the LAMBDA(Z)-parameters in the heteroskedasticity function f(Z). 
 The last two groups of par(.) are associated with LAMBDA(Y)-parameter 
 the LAMBDA(X)-parameters for the dependent (Y) and independent (X) va 
 respectively in the regression equation. 
NOTE: 
   RHO1 and RHO2 are always estimated, whereas the remaining parameter 
   PI2 , DELTA's, LAMBDA(Z)'s, LAMBDA(Y) and the LAMBDA(X)'s can be fi 
   estimated.
Source file:fcn.f
I/O Operations:
Unit ID  Unit No       Access  Form   Operation
      *                   SEQ  FMTD          RW  
               1          SEQ  FMTD         ORW  
               1                          C      

Operation codes A=rewind,B=backspace,C=close,E=endfile
                I=inquire,O=open,R=read,W=write
Intrinsic Functions Called
DOUBLE PRECISION   DABS,       DEXP,       DLOG,       DLOG10
DOUBLE PRECISION   DMAX1,      DSQRT,      DTANH
INTEGER            IDINT
GENERIC            SQRT
SUBROUTINE         LOC
External Functions and Subroutines Called
DOUBLE PRECISION   DERZL,      TRACE,      ZLAM
SUBROUTINE         ARRAY,      CORREL,     DIFFIR,     EXPELAST
SUBROUTINE         GMPRD,      GMSUB,      GTPRD,      LOC
SUBROUTINE         MATA,       MCPY,       MINV,       MPRD
SUBROUTINE         PMATRIX,    SHMINV,     SINV,       SMPELAST
SUBROUTINE         SMPY,       STORMAT,    VARDEC
Parameter Variables Used
INTEGER            N                  (N = 600)
INTEGER            NXZ                (NXZ = 100)
INTEGER            NX                 (NX = 30)
INTEGER            NLX                (NLX = 10)
INTEGER            NZ                 (NZ = 10)
INTEGER            NLZ                (NLZ = 10)
INTEGER            NXX                (NXX = (NX*(NX+1))/2)
INTEGER            NORD               (NORD = 2)
INTEGER            NP                 (NP = 2*NORD+NZ+NLZ+1+NLX)
INTEGER            NPALL              (NPALL = NX+1+NP)
INTEGER            NCOP               (NCOP = (NPALL*(NPALL+1))/2)
INTEGER            NPCON              (NPCON = NPALL-NLZ-1-NLX)
INTEGER            NCOND              (NCOND = (NPCON*(NPCON+1))/2)
Local Variables (+ indicates altered content)
CHARACTER*30       MATFILE(2)
CHARACTER*8       +MATNAME(2)
CHARACTER*10      +NAMX(NX),  +NAMXZ(NXZ),            +NAMY
CHARACTER*10      +NAMZ(NZ)
CHARACTER*2       +NTYPELX
CHARACTER*3       +STATUS
CHARACTER*14       TABFILE
CHARACTER*30       YXZFILE
CHARACTER*80       YXZFMT
DOUBLE PRECISION   BETA(NX),   BINV1(N,N),             BINV2(N,N)
DOUBLE PRECISION  +C,         +CONDCOV(NCOND),        +CONLIK
DOUBLE PRECISION  +CORYX(NX,2),           +CORYZ(NZ,2)
DOUBLE PRECISION  +COV(NCOP), +CSTPI,     +DDZL,      +DELTA(NZ)
DOUBLE PRECISION  +DERLT(NPALL),           DERSTAR(N,N)
DOUBLE PRECISION  +DERV(N),    DERW(N),    DETP
DOUBLE PRECISION   DIFFRST(N,N),           DWMAT(N,NP)
DOUBLE PRECISION  +EPSINV,    +EXPAR,      EXPDERX(NX)
DOUBLE PRECISION   EXPDERZ(NZ),            EXPELAX(NX)
DOUBLE PRECISION   EXPELAZ(NZ),            EXPY(N),    EYMEAN
DOUBLE PRECISION  +FLIK,      +FLIKB0,     GRADBETA(NX)
DOUBLE PRECISION  +GRADDELTA(NZ),         +GRADLAMX(NLX)
DOUBLE PRECISION  +GRADLAMY,  +GRADLAMZ(NLZ)
DOUBLE PRECISION  +GRADPI(NORD),          +GRADRHO(NORD)
DOUBLE PRECISION  +GRSIGW2,    OLDINV(N,N),           +ONESIGW2
DOUBLE PRECISION  +P(N,N),    +PI(NORD),   PINV(N,N),  PLIM
DOUBLE PRECISION  +PX(N,NX),   PY(N),     +PYMEAN,    +PZ(N,NZ+1)
DOUBLE PRECISION  +R1(N,N),   +R2(N,N),    R2E,       +R2EBAR
DOUBLE PRECISION  +R2L,       +R2LBAR,    +RHO(NORD), +RMAXLAM
DOUBLE PRECISION  +ROWSUM,     RSTAR1(N,N),            RSTAR2(N,N)
DOUBLE PRECISION  +SCALX(NX), +SCALY,     +SCALZ(NZ), +SIGW2
DOUBLE PRECISION  +SIGW2B0,    SMPDERX(NX),            SMPDERZ(NZ)
DOUBLE PRECISION   SMPELAX(NX),            SMPELAZ(NZ)
DOUBLE PRECISION  +SQRTFZ(N), +STDCOND,   +STDERR,    +STU1COND
DOUBLE PRECISION  +STUCOND,   +STUD1,     +STUDENT,   +SUM
DOUBLE PRECISION  +SUMDDZL,   +SUMLNFZ,   +SUMLNY,    +SUMZBOX
DOUBLE PRECISION  +TRACEPI(NORD),         +TRACERHO(NORD)
DOUBLE PRECISION  +U(N),       V(N),      +VLX(NLX),  +VLY
DOUBLE PRECISION  +VLZ(NLZ),  +VMAX,       W(N),       WDERW
DOUBLE PRECISION   WP(N),     +WS,        +X(N,NX),    XBETA(N)
DOUBLE PRECISION  +XBFZ(N,NX),            +XBOX(N,NX)
DOUBLE PRECISION  +XMAX(NX),  +XMEAN(NX), +XMIN(NX),   XPPX(NXX)
DOUBLE PRECISION   XPPY(NX),  +XTCONST(N),            +XTMEAN(NX)
DOUBLE PRECISION  +XZ(NXZ),   +Y(N),      +YBFZ(N),   +YBOX(N)
DOUBLE PRECISION  +YMAX,      +YMEAN,     +YMIN,      +Z(N,NZ)
DOUBLE PRECISION  +ZBOX(N,NZ),            +ZMAX(NZ),  +ZMEAN(NZ)
DOUBLE PRECISION  +ZMIN(NZ),  +ZTMEAN(NZ+1)
INTEGER           +I,          IER,       +IK,        +ILAMX
INTEGER           +IR,        +J,         +JPAR,      +K
INTEGER            KM,        +KPAR,       LW(N),     +M
INTEGER            MW(N),     +NB,        +NB1,       +NBB
INTEGER            NC,         NCOR,      +NESTDELTA, +NESTLAMX
INTEGER           +NESTLAMZ,   NEXPY,     +NFIXDELTA, +NFIXLAMX
INTEGER           +NFIXLAMZ,  +NGROUP,     NLAMX,      NLAMY
INTEGER            NLAMZ,      NOBS,       NORDER,    +NP1
INTEGER           +NP2,       +NPP1,       NRES,       NSCALE
INTEGER            NTDEL(NZ),  NTLX(NLX), +NTLY,       NTLZ(NLZ)
INTEGER            NTPI(NORD),            +NULLX(NX), +NULLY
INTEGER           +NULLZ(NZ),  NUMLX(NX), +NUMLXY,     NUMLZ(NZ)
INTEGER            NUMX(NX),  +NUMXEQZ(NZ),            NUMZ(NZ)
INTEGER            NVARIANT,   NVAX,       NVAXZ,      NVAZ
INTEGER           +NVAZY,      NZZ
Referenced Equivalenced Variables (+ indicates altered content)

EQUIV              DOUBLE PRECISION   DIFFRST()  Local Var
                   DOUBLE PRECISION   OLDINV()   Local Var
Namelists (+ indicates altered content)
AUTOCOR            CHARACTER*30       MATFILE(2)
AUTOCOR            DOUBLE PRECISION  +PI(NORD), +RHO(NORD)
AUTOCOR            INTEGER            NTPI(NORD)
HETERO             DOUBLE PRECISION  +DELTA(NZ)
HETERO             DOUBLE PRECISION  +VLZ(NLZ)
HETERO             INTEGER            NTDEL(NZ)
HETERO             INTEGER            NTLZ(NLZ)
HETERO             INTEGER            NUMLZ(NZ)
HETERO             INTEGER            NUMZ(NZ)
MODEL              INTEGER            NCOR,      NEXPY
MODEL              INTEGER            NLAMX,     NLAMY
MODEL              INTEGER            NLAMZ,     NOBS
MODEL              INTEGER            NORDER,    NRES
MODEL              INTEGER            NSCALE,    NVARIANT
MODEL              INTEGER            NVAX,      NVAXZ
MODEL              INTEGER            NVAZ
XBOXCOX            DOUBLE PRECISION  +VLX(NLX)
XBOXCOX            INTEGER            NTLX(NLX)
XBOXCOX            INTEGER            NUMLX(NX)
XBOXCOX            INTEGER            NUMX(NX)
YBOXCOX            DOUBLE PRECISION  +VLY
YBOXCOX            INTEGER           +NTLY,     +NUMLXY
YXZDATA            CHARACTER*30       YXZFILE
YXZDATA            CHARACTER*80       YXZFMT
Referenced Common Block Variables (+ indicates altered content)
%BLANK             INTEGER            NOPRINT