diff --git a/src/ComputingTasks.cc b/src/ComputingTasks.cc index bc0cebf6..28464a2c 100644 --- a/src/ComputingTasks.cc +++ b/src/ComputingTasks.cc @@ -786,6 +786,11 @@ RamseyModelStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsol (it != options_list.num_options.end() && it->second == "true") || mod_file_struct.order_option >= 3) mod_file_struct.k_order_solver = true; + + // Fill list of instruments + if (auto it = options_list.symbol_list_options.find("instruments"); + it != options_list.symbol_list_options.end()) + mod_file_struct.instruments = it->second; } void @@ -944,6 +949,11 @@ RamseyPolicyStatement::checkPass(ModFileStructure &mod_file_struct, WarningConso (it != options_list.num_options.end() && it->second == "true") || mod_file_struct.order_option >= 3) mod_file_struct.k_order_solver = true; + + // Fill list of instruments + if (auto it = options_list.symbol_list_options.find("instruments"); + it != options_list.symbol_list_options.end()) + mod_file_struct.instruments = it->second; } void @@ -1067,6 +1077,11 @@ DiscretionaryPolicyStatement::checkPass(ModFileStructure &mod_file_struct, Warni (it != options_list.num_options.end() && it->second == "true") || mod_file_struct.order_option >= 3) mod_file_struct.k_order_solver = true; + + // Fill list of instruments + if (auto it = options_list.symbol_list_options.find("instruments"); + it != options_list.symbol_list_options.end()) + mod_file_struct.instruments = it->second; } void diff --git a/src/ModelEquationBlock.cc b/src/ModelEquationBlock.cc index 32867240..3f88da46 100644 --- a/src/ModelEquationBlock.cc +++ b/src/ModelEquationBlock.cc @@ -120,12 +120,18 @@ SteadyStateModel::checkPass(ModFileStructure &mod_file_struct, WarningConsolidat copy(symb_ids.begin(), symb_ids.end(), back_inserter(so_far_defined)); } - set orig_endogs = symbol_table.getOrigEndogenous(); - for (int orig_endog : orig_endogs) + /* Check that all original endogous are defined (except the instruments of a + Ramsey model, since the steady_state_block should give the steady state + *conditional* to those instruments) */ + set should_be_defined = symbol_table.getOrigEndogenous(); + if (mod_file_struct.ramsey_policy_present || mod_file_struct.ramsey_model_present) + for (const auto &s : mod_file_struct.instruments.getSymbols()) + should_be_defined.erase(symbol_table.getID(s)); + for (int v : should_be_defined) { - if (find(so_far_defined.begin(), so_far_defined.end(), orig_endog) + if (find(so_far_defined.begin(), so_far_defined.end(), v) == so_far_defined.end()) - warnings << "WARNING: in the 'steady_state_model' block, variable '" << symbol_table.getName(orig_endog) << "' is not assigned a value" << endl; + warnings << "WARNING: in the 'steady_state_model' block, variable '" << symbol_table.getName(v) << "' is not assigned a value" << endl; } } diff --git a/src/Statement.hh b/src/Statement.hh index 3ea99130..b6d6eab3 100644 --- a/src/Statement.hh +++ b/src/Statement.hh @@ -129,6 +129,8 @@ public: bool write_latex_steady_state_model_present{false}; //! Pac growth and discount set pac_params; + //! Instruments if ramsey_model, ramsey_policy or discretionary_policy is present + SymbolList instruments; }; class Statement