From 3dc372e5bc6e56fa29fb04c73cc249e5091b1efe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?= Date: Wed, 10 Jul 2013 12:02:12 +0200 Subject: [PATCH] Added (command line) nointeractive option. --- doc/dynare.texi | 3 ++ matlab/check_list_of_variables.m | 53 +++++++++++---------- matlab/global_initialization.m | 3 ++ matlab/metropolis_hastings_initialization.m | 12 +++-- preprocessor/DynareMain.cc | 9 ++-- preprocessor/DynareMain2.cc | 4 +- preprocessor/ModFile.cc | 5 +- preprocessor/ModFile.hh | 3 +- 8 files changed, 58 insertions(+), 34 deletions(-) diff --git a/doc/dynare.texi b/doc/dynare.texi index 2b143dd92..3ce0fb5f8 100644 --- a/doc/dynare.texi +++ b/doc/dynare.texi @@ -747,6 +747,9 @@ computations. Activate the @code{nograph} option (@xref{nograph}), so that Dynare will not produce any graph +@item nointeractive +Instructs Dynare to not request user input + @item cygwin Tells Dynare that your MATLAB is configured for compiling MEX files with Cygwin (@pxref{Software requirements}). This option is only available diff --git a/matlab/check_list_of_variables.m b/matlab/check_list_of_variables.m index 4b1b69384..75d83f7dc 100644 --- a/matlab/check_list_of_variables.m +++ b/matlab/check_list_of_variables.m @@ -93,30 +93,35 @@ if isempty(varlist) string = [ cas , ' will be computed for the ' num2str(M_.endo_nbr) ' endogenous variables']; string = [ string ' of your model, this can be very long....']; format_text(string, 10) - choice = []; - while isempty(choice) - disp(' ') - disp(' ') - disp('Choose one of the following options:') - disp(' ') - disp(' [1] Consider all the endogenous variables.') - disp(' [2] Consider all the observed endogenous variables.') - disp(' [3] Stop Dynare and change the mod file.') - disp(' ') - choice = input('options [default is 1] = '); - if isempty(choice) - choice=1; - end - if choice==1 - varlist = M_.endo_names(1:M_.orig_endo_nbr, :); - elseif choice==2 - varlist = options_.varobs; - elseif choice==3 - varlist = NaN; - else - disp('') - disp('YOU HAVE TO ANSWER 1, 2 or 3!') - disp('') + if options_.nointeractive + % Default behaviour is to consider all the endogenous variables. + varlist = M_.endo_names(1:M_.orig_endo_nbr, :); + else + choice = []; + while isempty(choice) + disp(' ') + disp(' ') + disp('Choose one of the following options:') + disp(' ') + disp(' [1] Consider all the endogenous variables.') + disp(' [2] Consider all the observed endogenous variables.') + disp(' [3] Stop Dynare and change the mod file.') + disp(' ') + choice = input('options [default is 1] = '); + if isempty(choice) + choice=1; + end + if choice==1 + varlist = M_.endo_names(1:M_.orig_endo_nbr, :); + elseif choice==2 + varlist = options_.varobs; + elseif choice==3 + varlist = NaN; + else + disp('') + disp('YOU HAVE TO ANSWER 1, 2 or 3!') + disp('') + end end end end diff --git a/matlab/global_initialization.m b/matlab/global_initialization.m index 3b497efb2..dae49c300 100644 --- a/matlab/global_initialization.m +++ b/matlab/global_initialization.m @@ -107,6 +107,9 @@ gmhmaxlik.nclimb = 200000; gmhmaxlik.nscale = 200000; options_.gmhmaxlik = gmhmaxlik; +% Request user input. +options_.nointeractive = 0; + % Graphics options_.graphics.nrows = 3; options_.graphics.ncols = 3; diff --git a/matlab/metropolis_hastings_initialization.m b/matlab/metropolis_hastings_initialization.m index 3e75c78da..e42407b24 100644 --- a/matlab/metropolis_hastings_initialization.m +++ b/matlab/metropolis_hastings_initialization.m @@ -127,9 +127,15 @@ if ~options_.load_mh_file && ~options_.mh_recover init_iter = init_iter + 1; if init_iter > 100 && validate == 0 disp(['MH: I couldn''t get a valid initial value in 100 trials.']) - disp(['MH: You should Reduce mh_init_scale...']) - disp(sprintf('MH: Parameter mh_init_scale is equal to %f.',options_.mh_init_scale)) - options_.mh_init_scale = input('MH: Enter a new value... '); + if options_.nointeractive + disp(['MH: I reduce mh_init_scale by ten percent:']) + options_.mh_init_scale = .9*options_.mh_init_scale; + disp(sprintf('MH: Parameter mh_init_scale is now equal to %f.',options_.mh_init_scale)) + else + disp(['MH: You should Reduce mh_init_scale...']) + disp(sprintf('MH: Parameter mh_init_scale is equal to %f.',options_.mh_init_scale)) + options_.mh_init_scale = input('MH: Enter a new value... '); + end trial = trial+1; end end diff --git a/preprocessor/DynareMain.cc b/preprocessor/DynareMain.cc index b05740086..f62f60399 100644 --- a/preprocessor/DynareMain.cc +++ b/preprocessor/DynareMain.cc @@ -36,7 +36,7 @@ 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, bool no_log, bool no_warn, bool warn_uninit, bool console, bool nograph, +void main2(stringstream &in, string &basename, bool debug, bool clear_all, bool no_tmp_terms, bool no_log, bool no_warn, bool warn_uninit, bool console, bool nograph, bool nointeractive, bool parallel, const string ¶llel_config_file, const string &cluster_name, bool parallel_slave_open_mode, bool parallel_test #if defined(_WIN32) || defined(__CYGWIN32__) @@ -48,7 +48,7 @@ void usage() { cerr << "Dynare usage: dynare mod_file [debug] [noclearall] [savemacro[=macro_file]] [onlymacro] [nolinemacro] [notmpterms] [nolog] [warn_uninit]" - << " [console] [nograph] [parallel[=cluster_name]] [conffile=parallel_config_path_and_filename] [parallel_slave_open_mode] [parallel_test] " + << " [console] [nograph] [nointeractive] [parallel[=cluster_name]] [conffile=parallel_config_path_and_filename] [parallel_slave_open_mode] [parallel_test] " << " [-D[=]]" #if defined(_WIN32) || defined(__CYGWIN32__) << " [cygwin] [msvc]" @@ -85,6 +85,7 @@ main(int argc, char **argv) bool warn_uninit = false; bool console = false; bool nograph = false; + bool nointeractive = false; #if defined(_WIN32) || defined(__CYGWIN32__) bool cygwin = false; bool msvc = false; @@ -132,6 +133,8 @@ main(int argc, char **argv) console = true; else if (!strcmp(argv[arg], "nograph")) nograph = true; + else if (!strcmp(argv[arg], "nointeractive")) + nointeractive = true; #if defined(_WIN32) || defined(__CYGWIN32__) else if (!strcmp(argv[arg], "cygwin")) cygwin = true; @@ -224,7 +227,7 @@ main(int argc, char **argv) return EXIT_SUCCESS; // Do the rest - main2(macro_output, basename, debug, clear_all, no_tmp_terms, no_log, no_warn, warn_uninit, console, nograph, + main2(macro_output, basename, debug, clear_all, no_tmp_terms, no_log, no_warn, warn_uninit, console, nograph, nointeractive, parallel, parallel_config_file, cluster_name, parallel_slave_open_mode, parallel_test #if defined(_WIN32) || defined(__CYGWIN32__) , cygwin, msvc diff --git a/preprocessor/DynareMain2.cc b/preprocessor/DynareMain2.cc index 5927896c4..aed6e4e6a 100644 --- a/preprocessor/DynareMain2.cc +++ b/preprocessor/DynareMain2.cc @@ -26,7 +26,7 @@ using namespace std; #include "ConfigFile.hh" void -main2(stringstream &in, string &basename, bool debug, bool clear_all, bool no_tmp_terms, bool no_log, bool no_warn, bool warn_uninit, bool console, bool nograph, +main2(stringstream &in, string &basename, bool debug, bool clear_all, bool no_tmp_terms, bool no_log, bool no_warn, bool warn_uninit, bool console, bool nograph, bool nointeractive, bool parallel, const string ¶llel_config_file, const string &cluster_name, bool parallel_slave_open_mode, bool parallel_test #if defined(_WIN32) || defined(__CYGWIN32__) @@ -58,7 +58,7 @@ main2(stringstream &in, string &basename, bool debug, bool clear_all, bool no_tm mod_file->computingPass(no_tmp_terms); // Write outputs - mod_file->writeOutputFiles(basename, clear_all, no_log, no_warn, console, nograph, config_file + mod_file->writeOutputFiles(basename, clear_all, no_log, no_warn, console, nograph, nointeractive, config_file #if defined(_WIN32) || defined(__CYGWIN32__) , cygwin, msvc #endif diff --git a/preprocessor/ModFile.cc b/preprocessor/ModFile.cc index c2b10732e..13a7641f9 100644 --- a/preprocessor/ModFile.cc +++ b/preprocessor/ModFile.cc @@ -455,7 +455,7 @@ ModFile::computingPass(bool no_tmp_terms) } void -ModFile::writeOutputFiles(const string &basename, bool clear_all, bool no_log, bool no_warn, bool console, bool nograph, const ConfigFile &config_file +ModFile::writeOutputFiles(const string &basename, bool clear_all, bool no_log, bool no_warn, bool console, bool nograph, bool nointeractive, const ConfigFile &config_file #if defined(_WIN32) || defined(__CYGWIN32__) , bool cygwin, bool msvc #endif @@ -511,6 +511,9 @@ ModFile::writeOutputFiles(const string &basename, bool clear_all, bool no_log, b << "options_.nodisplay = 1;" << endl; if (nograph) mOutputFile << "options_.nograph = 1;" << endl; + + if (nointeractive) + mOutputFile << "options_.nointeractive = 1;" << endl; cout << "Processing outputs ..."; diff --git a/preprocessor/ModFile.hh b/preprocessor/ModFile.hh index a10b90e89..28a4a2f43 100644 --- a/preprocessor/ModFile.hh +++ b/preprocessor/ModFile.hh @@ -128,10 +128,11 @@ public: \param clear_all Should a "clear all" instruction be written to output ? \param console Are we in console mode ? \param nograph Should we build the figures? + \param nointeractive Should Dynare request user input? \param cygwin Should the MEX command of use_dll be adapted for Cygwin? \param msvc Should the MEX command of use_dll be adapted for MSVC? */ - void writeOutputFiles(const string &basename, bool clear_all, bool no_log, bool no_warn, bool console, bool nograph, const ConfigFile &config_file + void writeOutputFiles(const string &basename, bool clear_all, bool no_log, bool no_warn, bool console, bool nograph, bool nointeractive, const ConfigFile &config_file #if defined(_WIN32) || defined(__CYGWIN32__) , bool cygwin, bool msvc #endif