diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index 956a6c40..8717e739 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -4067,7 +4067,8 @@ DynamicModel::declarePacModelConsistentExpectationEndogs(const string &name) void DynamicModel::addPacModelConsistentExpectationEquation(const string &name, int discount_symb_id, const map, pair> &eqtag_and_lag, - ExprNode::subst_table_t &diff_subst_table) + ExprNode::subst_table_t &diff_subst_table, + expr_t growth) { int pac_target_symb_id; try @@ -4190,7 +4191,11 @@ DynamicModel::addPacModelConsistentExpectationEquation(const string &name, int d AddMinus(AddTimes(A, AddMinus(const_cast(target_base_diff_node), fs)), fp)); addEquation(neweq, -1); neqs++; - pac_expectation_substitution[{name, eqtag}] = AddVariable(mce_z1_symb_id); + /* The growth correction term is not added to the definition of Z₁ + because the latter is recursive. Rather put it at the level of the + substition of pac_expectation operator. */ + expr_t growth_correction = growth ? AddTimes(AddVariable(pac_growth_neutrality_params.at(name)), growth) : Zero; + pac_expectation_substitution[{name, eqtag}] = AddPlus(AddVariable(mce_z1_symb_id), growth_correction); } cout << "Pac Model Consistent Expectation: added " << neqs << " auxiliary variables and equations for model " << name << "." << endl; } diff --git a/src/DynamicModel.hh b/src/DynamicModel.hh index 7b97e8d4..ee08a698 100644 --- a/src/DynamicModel.hh +++ b/src/DynamicModel.hh @@ -582,7 +582,7 @@ public: //! Add model consistent expectation equation for pac model void addPacModelConsistentExpectationEquation(const string &name, int discount, const map, pair> &eqtag_and_lag, - ExprNode::subst_table_t &diff_subst_table); + ExprNode::subst_table_t &diff_subst_table, expr_t growth); //! Table to undiff LHS variables for pac vector z vector getUndiffLHSForPac(const string &aux_model_name, diff --git a/src/ModFile.cc b/src/ModFile.cc index 4cd14be5..511f29c0 100644 --- a/src/ModFile.cc +++ b/src/ModFile.cc @@ -490,7 +490,8 @@ ModFile::transformPass(bool nostrict, bool stochastic, bool compute_xrefs, bool auto eqtag_and_lag = dynamic_model.walkPacParameters(pms->name); if (pms->aux_model_name.empty()) dynamic_model.addPacModelConsistentExpectationEquation(pms->name, symbol_table.getID(pms->discount), - eqtag_and_lag, diff_subst_table); + eqtag_and_lag, diff_subst_table, + pms->growth); else dynamic_model.fillPacModelInfo(pms->name, lhs, max_lag, aux_model_type, eqtag_and_lag, nonstationary, pms->growth);