From e1f7d8c73556398a774ab55c8dc578c79ebb6c3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org> Date: Wed, 21 Jul 2021 12:23:50 +0200 Subject: [PATCH] VAR models: add a parameter representing the constant in the development of the pac_expectation operator --- src/DynamicModel.cc | 66 ++++++++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 22 deletions(-) diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index c5b2724d..81d3612c 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -4222,36 +4222,58 @@ DynamicModel::fillPacModelInfo(const string &pac_model_name, string standard_eqtag = pac_models_and_eqtags.second.first; expr_t subExpr = Zero; if (stationary_vars_present) - for (int i = 1; i < max_lag + 1; i++) - for (auto lhsit : lhs) + { + if (aux_model_type == "var") { - stringstream param_name_h0; - param_name_h0 << "h0_" << pac_model_name - << "_" << standard_eqtag - << "_var_" << symbol_table.getName(lhsit) - << "_lag_" << i; - int new_param_symb_id = symbol_table.addSymbol(param_name_h0.str(), SymbolType::parameter); + /* If the auxiliary model is a VAR, add a parameter corresponding + to the constant. */ + string param_name_h0 = "h0_" + pac_model_name + "_" + standard_eqtag + "_constant"; + int new_param_symb_id = symbol_table.addSymbol(param_name_h0, SymbolType::parameter); pac_h0_indices[{pac_model_name, standard_eqtag}].push_back(new_param_symb_id); - subExpr = AddPlus(subExpr, - AddTimes(AddVariable(new_param_symb_id), - AddVariable(lhsit, -i))); + subExpr = AddPlus(subExpr, AddVariable(new_param_symb_id)); } + for (int i = 1; i < max_lag + 1; i++) + for (auto lhsit : lhs) + { + stringstream param_name_h0; + param_name_h0 << "h0_" << pac_model_name + << "_" << standard_eqtag + << "_var_" << symbol_table.getName(lhsit) + << "_lag_" << i; + int new_param_symb_id = symbol_table.addSymbol(param_name_h0.str(), SymbolType::parameter); + pac_h0_indices[{pac_model_name, standard_eqtag}].push_back(new_param_symb_id); + subExpr = AddPlus(subExpr, + AddTimes(AddVariable(new_param_symb_id), + AddVariable(lhsit, -i))); + } + } if (nonstationary_vars_present) - for (int i = 1; i < max_lag + 1; i++) - for (auto lhsit : lhs) + { + if (aux_model_type == "var") { - stringstream param_name_h1; - param_name_h1 << "h1_" << pac_model_name - << "_" << standard_eqtag - << "_var_" << symbol_table.getName(lhsit) - << "_lag_" << i; - int new_param_symb_id = symbol_table.addSymbol(param_name_h1.str(), SymbolType::parameter); + /* If the auxiliary model is a VAR, add a parameter corresponding + to the constant. */ + string param_name_h1 = "h1_" + pac_model_name + "_" + standard_eqtag + "_constant"; + int new_param_symb_id = symbol_table.addSymbol(param_name_h1, SymbolType::parameter); pac_h1_indices[{pac_model_name, standard_eqtag}].push_back(new_param_symb_id); - subExpr = AddPlus(subExpr, - AddTimes(AddVariable(new_param_symb_id), - AddVariable(lhsit, -i))); + subExpr = AddPlus(subExpr, AddVariable(new_param_symb_id)); } + for (int i = 1; i < max_lag + 1; i++) + for (auto lhsit : lhs) + { + stringstream param_name_h1; + param_name_h1 << "h1_" << pac_model_name + << "_" << standard_eqtag + << "_var_" << symbol_table.getName(lhsit) + << "_lag_" << i; + int new_param_symb_id = symbol_table.addSymbol(param_name_h1.str(), SymbolType::parameter); + pac_h1_indices[{pac_model_name, standard_eqtag}].push_back(new_param_symb_id); + subExpr = AddPlus(subExpr, + AddTimes(AddVariable(new_param_symb_id), + AddVariable(lhsit, -i))); + } + } if (growth) subExpr = AddPlus(subExpr, -- GitLab