From ab8b4f37f13f0f13e24fea33b1a668ca82df1ad2 Mon Sep 17 00:00:00 2001 From: sebastien Date: Fri, 6 Nov 2009 18:31:03 +0000 Subject: [PATCH] * preprocessor: make optional the warnings about uninitialized parameters/endogenous/exogenous, added a new "warn_uninit" option to dynare command to display them * reference manual: documented the new option, fixed XML conformance of the document git-svn-id: https://www.dynare.org/svn/dynare/trunk@3135 ac1d8469-bf42-47a9-8791-bf33cf982152 --- doc/manual.xml | 13 +++++++++++-- preprocessor/DynareMain.cc | 9 ++++++--- preprocessor/DynareMain2.cc | 5 +++-- preprocessor/ModFile.cc | 5 +++-- preprocessor/ModFile.hh | 3 ++- 5 files changed, 25 insertions(+), 10 deletions(-) diff --git a/doc/manual.xml b/doc/manual.xml index ad587e20c..1f9737258 100644 --- a/doc/manual.xml +++ b/doc/manual.xml @@ -253,6 +253,7 @@ second step, the program actually runs the computations. Boths steps are trigger =FILENAME + @@ -314,6 +315,10 @@ These files may be looked at to understand errors reported at the simulation sta Instructs the macro-preprocessor to omit line numbering information in the intermediary .mod file created after the maco-processing step. Useful in conjunction with when one wants that to reuse the intermediary .mod file, without having it cluttered by line numbering directives. + + + Display a warning for each variable or parameter which is not initialized. Initialization should be done through or for parameters, or through , or for endogenous and exogenous. + @@ -1770,9 +1775,13 @@ The simulated endogenous variables are available in global matrix oo_.e - = INTEGER + = INTEGER + See below + - = [INTEGER1:INTEGER2] + = [INTEGER1:INTEGER2] + See below + = [INTEGER1 INTEGER2 ...] Computes a conditional variance decomposition for the specified period(s). Conditional variances are given by var(yt+k|t). For period 1, the conditional variance decomposition provides the decomposition of the effects of shocks upon impact. diff --git a/preprocessor/DynareMain.cc b/preprocessor/DynareMain.cc index 14f31d5a6..c5c236574 100644 --- a/preprocessor/DynareMain.cc +++ b/preprocessor/DynareMain.cc @@ -34,12 +34,12 @@ using namespace std; Splitting main() in two parts was necessary because ParsingDriver.h and MacroDriver.h can't be included simultaneously (because of Bison limitations). */ -void main2(stringstream &in, string &basename, bool debug, bool clear_all, bool no_tmp_terms); +void main2(stringstream &in, string &basename, bool debug, bool clear_all, bool no_tmp_terms, bool warn_uninit); void usage() { - cerr << "Dynare usage: dynare mod_file [debug] [noclearall] [savemacro[=macro_file]] [onlymacro] [nolinemacro] [notmpterms]" << endl; + cerr << "Dynare usage: dynare mod_file [debug] [noclearall] [savemacro[=macro_file]] [onlymacro] [nolinemacro] [notmpterms] [warn_uninit]" << endl; exit(EXIT_FAILURE); } @@ -59,6 +59,7 @@ main(int argc, char** argv) bool no_tmp_terms = false; bool only_macro = false; bool no_line_macro = false; + bool warn_uninit = false; // Parse options for (int arg = 2; arg < argc; arg++) @@ -86,6 +87,8 @@ main(int argc, char** argv) no_line_macro = true; else if (!strcmp(argv[arg], "notmpterms")) no_tmp_terms = true; + else if (!strcmp(argv[arg], "warn_uninit")) + warn_uninit = true; else { cerr << "Unknown option: " << argv[arg] << endl; @@ -125,7 +128,7 @@ main(int argc, char** argv) return EXIT_SUCCESS; // Do the rest - main2(macro_output, basename, debug, clear_all, no_tmp_terms); + main2(macro_output, basename, debug, clear_all, no_tmp_terms, warn_uninit); return EXIT_SUCCESS; } diff --git a/preprocessor/DynareMain2.cc b/preprocessor/DynareMain2.cc index 15049213b..b6dc438dd 100644 --- a/preprocessor/DynareMain2.cc +++ b/preprocessor/DynareMain2.cc @@ -25,7 +25,8 @@ using namespace std; #include "ModFile.hh" void -main2(stringstream &in, string &basename, bool debug, bool clear_all, bool no_tmp_terms) +main2(stringstream &in, string &basename, bool debug, bool clear_all, bool no_tmp_terms, + bool warn_uninit) { ParsingDriver p; @@ -39,7 +40,7 @@ main2(stringstream &in, string &basename, bool debug, bool clear_all, bool no_tm mod_file->transformPass(); // Evaluate parameters initialization, initval, endval and pounds - mod_file->evalAllExpressions(); + mod_file->evalAllExpressions(warn_uninit); // Do computations mod_file->computingPass(no_tmp_terms); diff --git a/preprocessor/ModFile.cc b/preprocessor/ModFile.cc index d31030be5..c9ac4e540 100644 --- a/preprocessor/ModFile.cc +++ b/preprocessor/ModFile.cc @@ -40,7 +40,7 @@ ModFile::~ModFile() } void -ModFile::evalAllExpressions() +ModFile::evalAllExpressions(bool warn_uninit) { cout << "Evaluating expressions..."; @@ -73,7 +73,8 @@ ModFile::evalAllExpressions() || type == eParameter || type == eModelLocalVariable) && global_eval_context.find(id) == global_eval_context.end()) { - cerr << "WARNING: can't find a numeric initial value for " << symbol_table.getName(id) << ", using zero" << endl; + if (warn_uninit) + cerr << "WARNING: can't find a numeric initial value for " << symbol_table.getName(id) << ", using zero" << endl; global_eval_context[id] = 0; } } diff --git a/preprocessor/ModFile.hh b/preprocessor/ModFile.hh index 6a7f3baab..9c735b55a 100644 --- a/preprocessor/ModFile.hh +++ b/preprocessor/ModFile.hh @@ -77,7 +77,8 @@ public: //! Add a statement void addStatement(Statement *st); //! Evaluate all the statements - void evalAllExpressions(); + /*! \param warn_uninit Should a warning be displayed for uninitialized endogenous/exogenous/parameters ? */ + void evalAllExpressions(bool warn_uninit); //! Do some checking and fills mod_file_struct /*! \todo add check for number of equations and endogenous if ramsey_policy is present */ void checkPass();