diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index c5b2724dbb0148b531fe727c9eb413a170ef1143..81d3612c86214a6a7d49455b57f8e7bd42b26678 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,