From 696763de8346c0c469e7d6ac5fa81f5a1a1af16b Mon Sep 17 00:00:00 2001 From: Michel Juillard <michel.juillard@mjui.fr> Date: Sun, 25 Sep 2011 20:21:30 +0200 Subject: [PATCH] preprocessor, auxiliary variables: corrects an ordering problem (closes: #214) (manual cherry-pick from 347ab4d0c0c79ae9a42898c1d5409d78708bb8a8 and 762f31bafd4b3a58c5a31c4e7d538d232e15a094) --- preprocessor/DynamicModel.cc | 10 ++++++++-- preprocessor/SteadyStateModel.cc | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/preprocessor/DynamicModel.cc b/preprocessor/DynamicModel.cc index a3efc2a64..4bb697c4c 100644 --- a/preprocessor/DynamicModel.cc +++ b/preprocessor/DynamicModel.cc @@ -3603,8 +3603,14 @@ DynamicModel::substituteLeadLagInternal(aux_var_t type, bool deterministic_model for (int i = 0; i < (int) neweqs.size(); i++) addEquation(neweqs[i]); - // Add the new set of equations at the *beginning* of aux_equations - copy(neweqs.rbegin(), neweqs.rend(), front_inserter(aux_equations)); + // Order of auxiliary variable definition equations: + // - expectation (entered before this function is called) + // - lead variables from lower lead to higher lead (need to be listed in reverse order) + // - lag variables from lower lag to higher lag + if ((type == avEndoLead) || (type == avExoLead)) + copy(neweqs.rbegin(), neweqs.rend(), back_inserter(aux_equations)); + else + copy(neweqs.begin(), neweqs.end(), back_inserter(aux_equations)); if (neweqs.size() > 0) { diff --git a/preprocessor/SteadyStateModel.cc b/preprocessor/SteadyStateModel.cc index a222aa327..d665428bb 100644 --- a/preprocessor/SteadyStateModel.cc +++ b/preprocessor/SteadyStateModel.cc @@ -121,7 +121,7 @@ SteadyStateModel::writeSteadyStateFile(const string &basename, bool ramsey_polic output << ", exo_)" << endl << "% Steady state generated by Dynare preprocessor" << endl; if (!ramsey_policy) - output << " ys_=zeros(" << symbol_table.orig_endo_nbr() << ",1);" << endl; + output << " ys_=zeros(" << symbol_table.endo_nbr() << ",1);" << endl; output << " global M_" << endl; for (size_t i = 0; i < recursive_order.size(); i++) -- GitLab