diff --git a/mex/sources/korderpert/src/k_order_test_main.cpp b/mex/sources/korderpert/src/k_order_test_main.cpp index b0d0d4122..4b537ffb4 100644 --- a/mex/sources/korderpert/src/k_order_test_main.cpp +++ b/mex/sources/korderpert/src/k_order_test_main.cpp @@ -197,39 +197,44 @@ int main(int argc, char* argv[]) , ySteady, vCov, modParams, nStat, nPred, nForw, nBoth , jcols, nSteps, kOrder, journal, dynamicDLL, sstol, var_order , llincidence ); - try { - // intiate tensor library + // intiate tensor library #ifdef DEBUG - mexPrintf("k_order_perturbation: Call tls init\n"); + mexPrintf("k_order_perturbation: Call tls init\n"); #endif - tls.init(dynare.order(), - dynare.nstat()+2*dynare.npred()+3*dynare.nboth()+ - 2*dynare.nforw()+dynare.nexog()); - // construct main K-order approximation class - // FistOrderApproximation app(dynare, journal, nSteps); + tls.init(dynare.order(), + dynare.nstat()+2*dynare.npred()+3*dynare.nboth()+ + 2*dynare.nforw()+dynare.nexog()); + // construct main K-order approximation class + // FistOrderApproximation app(dynare, journal, nSteps); #ifdef DEBUG - mexPrintf("k_order_perturbation: Call Approximation constructor \n"); + mexPrintf("k_order_perturbation: Call Approximation constructor \n"); #endif - Approximation app(dynare, journal, nSteps); - // run stochastic steady + Approximation app(dynare, journal, nSteps); + // run stochastic steady #ifdef DEBUG - mexPrintf("k_order_perturbation: Calling walkStochSteady.\n"); + mexPrintf("k_order_perturbation: Calling walkStochSteady.\n"); #endif - app.walkStochSteady(); - - } catch (const KordException& e) { - // tell about the exception and continue - printf("Caught (not yet fatal) Kord exception: "); - e.print(); - JournalRecord rec(journal); - rec << "Solution routine not finished (" << e.get_message() - << "), see what happens" << endrec; - } catch (const TLException& e) { - mexErrMsgTxt("Caugth TL exception."); - } catch (SylvException& e) { - mexErrMsgTxt("Caught Sylv exception."); - } + app.walkStochSteady(); + + // open mat file + std::string matfile(fName);//(params.basename); + matfile += ".mat"; + FILE* matfd = NULL; + if (NULL == (matfd=fopen(matfile.c_str(), "wb"))) { + fprintf(stderr, "Couldn't open %s for writing.\n", matfile.c_str()); + exit(1); + } + + std::string ss_matrix_name(fName);//params.prefix); + ss_matrix_name += "_steady_states"; + ConstTwoDMatrix(app.getSS()).writeMat4(matfd, ss_matrix_name.c_str()); + + // write the folded decision rule to the Mat-4 file + app.getFoldDecisionRule().writeMat4(matfd, fName);//params.prefix); + + fclose(matfd); + // get latest ysteady double * dYsteady = (dynare.getSteady().base()); ySteady = (Vector*)(&dynare.getSteady());