/* * "Nash or Ramsey Inflation" by Sargent, Williams, and Zha (SWZ). * * Revised on 03/27/05. * Copywright (c) by Sargent, Williams, and Zha, June 2004. */ //-------------- Model Economy as a Whole. --------------------- #include "swz_comfuns.h" FILE *fptr_debug = NULL; //Debug output file. static void ftd_FprintOutput(TSinput *input_ps, struct TSconstmodpars_tag *constmodpars_ps, struct TSconstgibbs_tag *constgibbs_ps, struct TSgovprob_tag *govprob_ps); //---------------------------------------------------- // Main Program Begins Here. //---------------------------------------------------- int main(int n_arg, char **args_cl) { // int indxStartValuesForMin; //0: randomly selects the initial starting values for the MLE or posterior estimate; // //1: starts from the fixed values manually keyed in (in the modeleconomy.c). // //2: uses the starting piont (sp) file, filename_sp_vec_csminwel. int indxSwitchingModel; //1: switching model; 0: constant-parameter model. char *filenametag, //Point to the command line name tag. *filename_input, //Point to the command line input file name. filename_sp_vec_csminwel[128], //File name for starting point of vectorized (vec) parameters from the minimization problems with the /c 0 option. Must be allocated big enouch a string area. Increase the array length if necessary. //2 vectors. 1st row: gradient; 2nd row: vectorized parameters. filename_hess[128], //Numerical Hessian used for the Metropolis algorithm. filename_readgibbs[128], //Gibbs draws already generated. filenamebuffer[128]; //Used for multiple file names, so must be allocated big enouch a string area. Increase the array length if necessary. //=== TSinput *input_ps = NULL; TSconstmodpars *constmodpars_ps = NULL; TSconstgibbs *constgibbs_ps = NULL; TSgovprob *govprob_ps = NULL; FILE *fptr_input = NULL, //Input data file for basic data. // *fptr_case = NULL, //Input data file for a specified case, such as constpce specified by filenametag. *fptr_lreutradeoffs = NULL, //Writes MCMC draws of long-run excess unemployment under Ramsey for Matlab plots. *fptr_inpfor_matlab = NULL, //Writes MCMC draws of x_dv to a file for Matlab. *fptr_inpfor_maxGibbs = NULL, //Writes or reads the xmax_dv that has the maximum of logPosteriormatlab from fptr_inpfor_matlab. *fptr_output = NULL; //Writes final output arguments to a file to be examined by us. //----------------- // Reads from the command line the user-specified input file and the most-often-used integer arguments such as sample size. //----------------- filenametag = fn_ParseCommandLine_String(n_arg,args_cl,'t',(char *)NULL); // File tag handle. if ( !filenametag ) fn_DisplayError("No case tag for file names is specified"); if (!strncmp("const", filenametag, 3)) indxSwitchingModel = 0; sprintf(filename_sp_vec_csminwel, "outdatasp_mle_%s.prn", filenametag); sprintf(filename_hess, "outdatasp_hess_%s.prn", filenametag); //+ filename_input = fn_ParseCommandLine_String(n_arg,args_cl,'i',"datainp_swz.prn"); // Input file handle. Default to datainp_swz.prn. fptr_input = tzFopen(filename_input,"r"); //+ // sprintf(filenamebuffer, "datainp_%s.prn", filenametag); // fptr_case = tzFopen(filenamebuffer,"r"); //Input data file for constant-parameter models. // //+ sprintf(filenamebuffer, "outdata_debug_%s.prn", filenametag); fptr_debug = tzFopen(filenamebuffer,"w"); //Debug output file. //+ sprintf(filenamebuffer, "outdata_debug_mhm_%s.prn", filenametag); FPTR_DEBUG = tzFopen(filenamebuffer,"w"); //Debug output file. //+ sprintf(filenamebuffer, "outdataout_posterior_%s.prn", filenametag); fptr_output = tzFopen(filenamebuffer,"w"); //Final output file. //------- Memory allocation. ------- input_ps = CreateTSinput(fptr_input, fptr_output, filename_input, filenametag); if (!indxSwitchingModel) { constmodpars_ps = CreateTSconstmodpars(fptr_input, input_ps, (TFconstmodest *)NULL, (TFconstmodprob *)NULL); //fptr_input is added 03/27/05. constmodpars_ps->indxMLE = 0; //0: posterior estimate (NOT MLE). constgibbs_ps = CreateTSconstgibbs(input_ps, constmodpars_ps); constgibbs_ps->indxHess = fn_ParseCommandLine_Integer(n_arg,args_cl,'h',0); //Default: 0 -- no nemerical Hessian is provided. govprob_ps = CreateTSgovprob(input_ps, constmodpars_ps, gensys_sims, govestimator, govoptimizer); //Creates memory for government problem. } else fn_DisplayError("Swtiching case is not available yet"); //------- Opens or creates a Gibbs draws file. ------- sprintf(filenamebuffer, "outdatainp_for_lreudraws_%s.prn", filenametag); fptr_lreutradeoffs = tzFopen(filenamebuffer, "w"); if (constgibbs_ps->indx_readgibbs) sprintf(filename_readgibbs, "outdatainp_for_prob_%s.prn", filenametag); else { sprintf(filenamebuffer, "outdatainp_for_prob_%s.prn", filenametag); fptr_inpfor_matlab = tzFopen(filenamebuffer, "w"); } //------- Opens or creates a file of xmax_dv that has the maximum of logPosteriorKernel from Gibbs draws. ------- //+ if (constgibbs_ps->indxRecord) { sprintf(filenamebuffer, "outdatainp_for_xmaxGibbs_%s.prn", filenametag); fptr_inpfor_maxGibbs = tzFopen(filenamebuffer, "w"); } else if (constgibbs_ps->indx_readgibbs) { sprintf(filenamebuffer, "outdatainp_for_xmaxGibbs_%s.prn", filenametag); fptr_inpfor_maxGibbs = tzFopen(filenamebuffer, "r"); } else fptr_inpfor_maxGibbs = (FILE *)NULL; //----------------- // Main matter. //----------------- time(&constgibbs_ps->prog_begtime); //Beginning time of the whole program. if (!indxSwitchingModel) { //--- Prior settings. Reallocates the memory to mean*set_dv and Var*Set_dm from CreateTSconstgibbs().. if (!constmodpars_ps->indxMLE) ftd_priorsettings(constmodpars_ps); //--- Posterior simulations, starting from the posterior estimate. InitializeGlobleSeed(input_ps->randomseed); //Initializing the seednumber. if (constgibbs_ps->indx_readgibbs) ReadGibbsDraws_Compute(constgibbs_ps, govprob_ps, constmodpars_ps, input_ps, filename_sp_vec_csminwel, filename_readgibbs, fptr_lreutradeoffs, fptr_inpfor_maxGibbs); else GibbsSimulations(constgibbs_ps, govprob_ps, constmodpars_ps, input_ps, filename_sp_vec_csminwel, fptr_inpfor_matlab, filename_hess); //--- Writes out the final output. ftd_FprintOutput(input_ps, constmodpars_ps, constgibbs_ps, govprob_ps); } else fn_DisplayError("Swtiching case is not available yet"); // //=== Writes the data to a file to be used Matlab for graphs. // ftd_Fprint_uinf(fptr_inpfor_uinfs, minpack_csminwel_ps); //=== Writes out the final output. //ftd_FprintOutput(input_ps, minpack_csminwel_ps); //=== Prints out something for debugging purpose. // fprintf(fptr_debug, "\n********** Steady state solution to the government problem:\n\n"); // fprintf(fptr_debug, "Peak value of logLH: %g\n", constgibbs_ps->peaklogpost); // fprintf(fptr_debug, "Inflation: %g\n", govprob_ps->gpiss); //Inflation pi. // fprintf(fptr_debug, "Unemployment: %g\n", govprob_ps->uss); //Unemployment u. // fprintf(fptr_debug, "Government controlled inflation: %g\n", govprob_ps->xss); //Government's control variable x. // // // fprintf(fptr_debug, "\n********** gensys_sims results:\n\n"); // fprintf(fptr_debug, "eu_dv:\n"); // WriteVector(fptr_debug, govprob_ps->gensys_ps->eu_dv, " %10.4f "); // fprintf(fptr_debug, "Theta_dm:\n"); // WriteMatrix(fptr_debug, govprob_ps->gensys_ps->Theta_dm, " %10.4f "); // fprintf(fptr_debug, "c_dv:\n"); // WriteVector(fptr_debug, govprob_ps->gensys_ps->c_dv, " %10.4f "); // fprintf(fptr_debug, "Impact_dm:\n"); // WriteMatrix(fptr_debug, govprob_ps->gensys_ps->Impact_dm, " %10.4f "); // fprintf(fptr_debug, "Fmat_dzm:\n"); // WriteMatrix(fptr_debug, govprob_ps->gensys_ps->Fmat_dzm->real, " %10.4f "); // WriteMatrix(fptr_debug, govprob_ps->gensys_ps->Fmat_dzm->imag, " %10.4f "); // fprintf(fptr_debug, "Fwt_dzm:\n"); // WriteMatrix(fptr_debug, govprob_ps->gensys_ps->Fwt_dzm->real, " %10.4f "); // WriteMatrix(fptr_debug, govprob_ps->gensys_ps->Fwt_dzm->imag, " %10.4f "); // fprintf(fptr_debug, "Ywt_dzm:\n"); // WriteMatrix(fptr_debug, govprob_ps->gensys_ps->Ywt_dzm->real, " %10.4f "); // WriteMatrix(fptr_debug, govprob_ps->gensys_ps->Ywt_dzm->imag, " %10.4f "); // fprintf(fptr_debug, "Gev_dzm:\n"); // WriteMatrix(fptr_debug, govprob_ps->gensys_ps->Gev_dzm->real, " %10.4f "); // WriteMatrix(fptr_debug, govprob_ps->gensys_ps->Gev_dzm->imag, " %10.4f "); // // fprintf(fptr_debug, "\n********** Some matrices:\n\n"); // fprintf(fptr_debug, "Ppred_dc:\n"); // WriteCell(fptr_debug, govprob_ps->kalcvfurw_ps->Ppred_dc, " %10.4f "); // fprintf(fptr_debug, "Zpredtran_dm:\n"); // WriteMatrix(fptr_debug, govprob_ps->kalcvfurw_ps->Zpredtran_dm, " %10.4f "); // fprintf(fptr_debug, "zupdate_dv:\n"); // WriteVector(fptr_debug, govprob_ps->kalcvfurw_ps->zupdate_dv, " %10.4f "); // // fprintf(fptr_debug, "\n********** Some matrices such as Xrhtran and ylhtran:\n\n"); // fprintf(fptr_debug, "Xrhtran_dm:\n"); // WriteMatrix(fptr_debug, govprob_ps->kalcvfurw_ps->Xrhtran_dm, " %10.4f "); // fprintf(fptr_debug, "ylhtran_dv:\n"); // WriteVector(fptr_debug, govprob_ps->kalcvfurw_ps->ylhtran_dv, " %10.4f "); // // fprintf(fptr_debug, "\n********** Gov controled inflation (govinf_dv), expected inflation (expinf_dv):\n\n"); // WriteVector(fptr_debug, govprob_ps->govinf_dv, " %10.4f "); // WriteVector(fptr_debug, govprob_ps->expinf_dv, " %10.4f "); //=== Destroys memory allocated in this function. govprob_ps = DestroyTSgovprob(govprob_ps); constgibbs_ps = DestroyTSconstgibbs(constgibbs_ps); constmodpars_ps = DestroyTSconstmodpars(constmodpars_ps); input_ps = DestroyTSinput(input_ps); // tzFclose(fptr_debug); tzFclose(FPTR_DEBUG); tzFclose(fptr_input); // tzFclose(fptr_case); tzFclose(fptr_lreutradeoffs); tzFclose(fptr_inpfor_matlab); tzFclose(fptr_inpfor_maxGibbs); tzFclose(fptr_output); //=== Done! printf("\n*** Program is successfully executed! ***\n"); return (EXIT_SUCCESS); } //------------------- // Prints final results to an output file for eye examination. //------------------- #define RFORMAT " %10.5f\n " //R: return carriage. #define NFORMAT " %10.5f " //N: no return carriage. #define AFORMAT " %.16e " //A: accurate (most accurate). #define ARFORMAT " %.16e\n " //A: accurate (most accurate) with carriage return. static void ftd_FprintOutput(TSinput *input_ps, struct TSconstmodpars_tag *constmodpars_ps, struct TSconstgibbs_tag *constgibbs_ps, struct TSgovprob_tag *govprob_ps) { static int header1=0; int _i; FILE *fptr_output = input_ps->fptr_output; //--- Added 03/27/05. int ki; //--- Initialization. The order matters! TSdvector *x_dv = constgibbs_ps->x_dv; TSkalcvfurw *kalcvfurw_ps = govprob_ps->kalcvfurw_ps; TSdvector *ylhtran_dv = kalcvfurw_ps->ylhtran_dv; TSdmatrix *Xrhtran_dm = kalcvfurw_ps->Xrhtran_dm; //Order of the variables in Xrhtran_dm is dependent on the value of input_ps->govmodel. int nrhvars = Xrhtran_dm->nrows; TSdvector *expinf_dv = govprob_ps->expinf_dv; //=== TSdvector *logMarLH_dv = NULL; if (constgibbs_ps->indx_mhm) logMarLH_dv = CreateVector_lf(constgibbs_ps->pcuts_dv->n); if (header1==0) { fprintf(fptr_output, "Reporting results from the last Gibbs draw plus the maximum point in the Gibbs run.\n\n\n"); header1=1; //After this reset, when this function is called second time, this header will not be printed again. } time(&constgibbs_ps->prog_endtime); //Beginning time of the whole program. constgibbs_ps->program_hours = difftime(constgibbs_ps->prog_endtime, constgibbs_ps->prog_begtime)/60.0/60.0; //=== Refresh all the model parameters from constgibbs_ps->x_dv. ftd_freepars2modpars((void *)constgibbs_ps, GIBBSDRAWS); ftd_normalizationforgov((void *)constgibbs_ps, GIBBSDRAWS); //Normalization. //--- Solving the government's problem for expected inflation and government's optimization decision for x_t (which controls at least part of the inflation process). govprob_ps->govestimator(govprob_ps, (void *)constgibbs_ps, GIBBSDRAWS); //--------------------------- Printing final outputs. --------------------------- fprintf(fptr_output, "Type of model (classical 1 == CGP2TP1TI0 and Keynesian 2 == KGP2TP1TI0): %d\n", input_ps->indxWhichModel); fprintf(fptr_output, "Total computing hours for the whole program: %10.3f\n", constgibbs_ps->program_hours); fprintf(fptr_output, "Number of kept draws (ndraws2): %d\n", constgibbs_ps->ndraws2); fprintf(fptr_output, "If 1, Gibbs draws are read from a file; if 0: they are simulated. The value of indx_readgibbs is: %d\n", constgibbs_ps->indx_readgibbs); fprintf(fptr_output, "If 1, Gaussian importance pdf is centered at posterior peak; if 0, centered at posterior mean. The value of indxMHMPeak is: %d\n", constgibbs_ps->indxMHMPeak); fprintf(fptr_output, "\n"); fprintf(fptr_output, "Scale factor for importance covariance matrix used for the MHM method: %10.5f\n", constgibbs_ps->sf_mhm); fprintf(fptr_output, "The overall peak value of log posterior kernel: %10.5f\n", constmodpars_ps->peaklogpost); if (!constgibbs_ps->indx_readgibbs) { fprintf(fptr_output, "The random seed number used in MCMC draws is: %d\n", input_ps->randomseed); fprintf(fptr_output, "Metropolis jumping ratio for the 4th, 5th, and 6th sets of government's parameters: " RFORMAT, constgibbs_ps->jumpingratio); fprintf(fptr_output, "Scale factor for sqrt(jumping covariance) for the Metropolis algorithm: " RFORMAT, constgibbs_ps->sf_mtpl); } else { fprintf(fptr_output, "The log q values for different p (the closer to -infty, the more inaccurate):\n"); WriteVector(fptr_output, constgibbs_ps->logqvals_dv, AFORMAT); fprintf(fptr_output, "The cut-off values for tossing low values of log posterior kernel from the Gibbs draws in the 2nd kept loop: %10.5f\n", constgibbs_ps->cutval_logpost); fprintf(fptr_output, "The max log posterior kernel from the Gibbs draws in the 2nd kept loop: %10.5f\n", constgibbs_ps->maxgibbs_logpostkernel); fprintf(fptr_output, "Free parameters at the maximum point during the Gibbs run:\n"); WriteVector(fptr_output, constgibbs_ps->xmax_dv, AFORMAT); fprintf(fptr_output, "The min log posterior kernel from the Gibbs draws in the 2nd kept loop: %10.5f\n", constgibbs_ps->mingibbs_logpostkernel); fprintf(fptr_output, "Free parameters at the minimum point during the Gibbs run:\n"); WriteVector(fptr_output, constgibbs_ps->xmin_dv, AFORMAT); } //======= Printing out the marginal likelihood for Bayes factors. ======= if (constgibbs_ps->indx_mhm) { for (_i=constgibbs_ps->pcuts_dv->n-1; _i>=0; _i--) logMarLH_dv->v[_i] = log((double)constgibbs_ps->veclogMLH_ps->N_iv->v[_i]) - constgibbs_ps->veclogMLH_ps->logsum_dv->v[_i]; fprintf(fptr_output, "***** Log values of marginal data densities for different p's (should be the SAME in theory): *****\n"); WriteVector(fptr_output, logMarLH_dv, " %.8e "); // fprintf(fptr_output, "Cut-off probabilities (p values) for the importance density:\n"); WriteVector(fptr_output, constgibbs_ps->pcuts_dv, " %.8e "); fprintf(fptr_output, "Total numbers of draws for computing the Bayes factor for different p's:\n"); WriteVector_int(fptr_output, constgibbs_ps->veclogMLH_ps->N_iv); fprintf(fptr_output, "Numbers of draws for different p's in which the MHM weight is zero or the importance density is set to zero:\n"); WriteVector_int(fptr_output, constgibbs_ps->nzeros_pdf_iv); fprintf(fptr_output, "Log values of sums of h()/(LH*Prior) for different p's:\n"); WriteVector(fptr_output, constgibbs_ps->veclogMLH_ps->logsum_dv, " %.8e "); fprintf(fptr_output, "Log values of maxima of all h()/(LH*Prior) for different p's:\n"); WriteVector(fptr_output, constgibbs_ps->veclogMLH_ps->logmax_dv, " %.8e "); //--- Added 03/27/05. logMarLH_dv is used here for other purposes, so it must be refreshed before being used for other purposes. constgibbs_ps->veclogMLH_ps->logsum_dv->flag = V_DEF; CopyVector0(logMarLH_dv, constgibbs_ps->veclogMLH_ps->logsum_dv); VectorPlusMinusVectorUpdate(logMarLH_dv, constgibbs_ps->veclogMLH_ps->logmax_dv, -1.0); for (ki=logMarLH_dv->n-1; ki>=0; ki--) logMarLH_dv->v[ki] = exp(logMarLH_dv->v[ki]); fprintf(fptr_output, "Effective sample size for h()/(LH*Prior) under different p's:\n"); WriteVector(fptr_output, logMarLH_dv, " %.8e "); } fprintf(fptr_output, "\n\n======= Last draw of the model estimates constgibbs_ps->x_dv:=======\n"); WriteVector(fptr_output, x_dv, AFORMAT); fprintf(fptr_output, "--- Parameters for the private econoomy from the last draw:---\n"); fprintf(fptr_output, " ustar: " ARFORMAT, constgibbs_ps->ustar); fprintf(fptr_output, "gtheta0: " ARFORMAT, constgibbs_ps->gtheta0); fprintf(fptr_output, "gtheta1: " ARFORMAT, constgibbs_ps->gtheta1); fprintf(fptr_output, "gtau1: " ARFORMAT, constgibbs_ps->gtau1); fprintf(fptr_output, "gzeta1: " ARFORMAT, constgibbs_ps->gzeta1); fprintf(fptr_output, "gzeta2: " ARFORMAT, constgibbs_ps->gzeta2); fprintf(fptr_output, "gzeta: " ARFORMAT, constgibbs_ps->gzeta); if (!constgibbs_ps->indx_readgibbs) { fprintf(fptr_output, "\n\n********** constgibbs_ps->CovMplsinv_dm -- inverse of covariance matrix for the Metropolis algorithm (NOT changing with draws):\n"); WriteMatrix(fptr_output, constgibbs_ps->CovMplsinv_dm, " %.16e "); } fprintf(fptr_output, "\n\n********** Government-sector results from the last draw:\n"); fprintf(fptr_output, "\n--- Steady State ---:\n"); fprintf(fptr_output, "Inflation: %g\n", govprob_ps->gpiss); //Inflation pi. fprintf(fptr_output, "Unemployment: %g\n", govprob_ps->uss); //Unemployment u. fprintf(fptr_output, "Government controlled inflation: %g\n", govprob_ps->xss); //Government's control variable x. fprintf(fptr_output, "eu_dv:\n"); WriteVector(fptr_output, govprob_ps->gensys_ps->eu_dv, NFORMAT); fprintf(fptr_output, "Theta_dm:\n"); WriteMatrix(fptr_output, govprob_ps->gensys_ps->Theta_dm, NFORMAT); fprintf(fptr_output, "c_dv:\n"); WriteVector(fptr_output, govprob_ps->gensys_ps->c_dv, NFORMAT); fprintf(fptr_output, "Impact_dm:\n"); WriteMatrix(fptr_output, govprob_ps->gensys_ps->Impact_dm, NFORMAT); fprintf(fptr_output, "Fmat_dzm:\n"); WriteMatrix(fptr_output, govprob_ps->gensys_ps->Fmat_dzm->real, NFORMAT); WriteMatrix(fptr_output, govprob_ps->gensys_ps->Fmat_dzm->imag, NFORMAT); fprintf(fptr_output, "Fwt_dzm:\n"); WriteMatrix(fptr_output, govprob_ps->gensys_ps->Fwt_dzm->real, NFORMAT); WriteMatrix(fptr_output, govprob_ps->gensys_ps->Fwt_dzm->imag, NFORMAT); fprintf(fptr_output, "Ywt_dzm:\n"); WriteMatrix(fptr_output, govprob_ps->gensys_ps->Ywt_dzm->real, NFORMAT); WriteMatrix(fptr_output, govprob_ps->gensys_ps->Ywt_dzm->imag, NFORMAT); fprintf(fptr_output, "Gev_dzm:\n"); WriteMatrix(fptr_output, govprob_ps->gensys_ps->Gev_dzm->real, NFORMAT); WriteMatrix(fptr_output, govprob_ps->gensys_ps->Gev_dzm->imag, NFORMAT); fprintf(fptr_output, "\n********** Some matrices:\n\n"); fprintf(fptr_output, "Ppred_dc (P_{2|1}, ..., P_{T+1|T}):\n"); WriteCell(fptr_output, govprob_ps->kalcvfurw_ps->Ppred_dc, AFORMAT); fprintf(fptr_output, "Zpredtran_dm (z_{2|1}, ..., z_{T+1|T}):\n"); WriteMatrix(fptr_output, govprob_ps->kalcvfurw_ps->Zpredtran_dm, AFORMAT); fprintf(fptr_output, "zupdate_dv (z_{T+1|T}):\n"); WriteVector(fptr_output, govprob_ps->kalcvfurw_ps->zupdate_dv, AFORMAT); fprintf(fptr_output, "z10_dv:\n"); WriteVector(fptr_output, govprob_ps->kalcvfurw_ps->z10_dv, AFORMAT); fprintf(fptr_output, "P10_dm:\n"); WriteMatrix(fptr_output, govprob_ps->kalcvfurw_ps->P10_dm, AFORMAT); fprintf(fptr_output, "V_dm:\n"); WriteMatrix(fptr_output, govprob_ps->kalcvfurw_ps->V_dm, AFORMAT); fprintf(fptr_output, "\n********** Data for government's model, such as Xrhtran and ylhtran:\n\n"); fprintf(fptr_output, "For classical regression, column of Xrhtran_dm is pi_t, pi_{t-1}, u_{t-1}, pi_{t-2}, u_{t-2}, and 1.0:\n"); fprintf(fptr_output, "For Keynesian regression, column of Xrhtran_dm is u_t, u_{t-1}, pi_{t-1}, u_{t-2}, pi_{t-2}, and 1.0:\n"); WriteMatrix(fptr_output, govprob_ps->kalcvfurw_ps->Xrhtran_dm, AFORMAT); fprintf(fptr_output, "ylhtran_dv (u_t for classical and pi_t for Keynesian):\n"); WriteVector(fptr_output, govprob_ps->kalcvfurw_ps->ylhtran_dv, AFORMAT); fprintf(fptr_output, "\n********** Gov controled inflation (govinf_dv), expected inflation (expinf_dv), and predicted U (upred_dv):\n\n"); WriteVector(fptr_output, govprob_ps->govinf_dv, AFORMAT); WriteVector(fptr_output, govprob_ps->expinf_dv, AFORMAT); WriteVector(fptr_output, constgibbs_ps->upred_dv, AFORMAT); //=== DestroyVector_lf(logMarLH_dv); }