From 3dc372e5bc6e56fa29fb04c73cc249e5091b1efe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Charybdis=29?=
 <stephane.adjemian@univ-lemans.fr>
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 2b143dd92a..3ce0fb5f80 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 4b1b693847..75d83f7dc1 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 3b497efb24..dae49c300e 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 3e75c78da9..e42407b24c 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 b05740086b..f62f603999 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 &parallel_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<variable>[=<value>]]"
 #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 5927896c4c..aed6e4e6aa 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 &parallel_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 c2b10732e1..13a7641f9e 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 a10b90e899..28a4a2f433 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
-- 
GitLab