diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index fb84ffcb9110c92d708e54955134929903c4a7b6..0b7cc063d893f9c26b5091dda63d9fa906632278 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<string, string>, pair<string, int>> &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<VariableNode *>(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 7b97e8d474e5780311083736af63cb6cc47e73a2..ee08a698d7d51d8ded6d1814362af52834695fed 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<string, string>, pair<string, int>> &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<int> getUndiffLHSForPac(const string &aux_model_name, diff --git a/src/ModFile.cc b/src/ModFile.cc index 4cd14be50afe3bbdbd117c772e9d06d29b27872c..511f29c018f3368b512bbfca10d27e7c36c70a57 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);