diff --git a/doc/manual.xml b/doc/manual.xml index bdce693bf..3568a3f10 100644 --- a/doc/manual.xml +++ b/doc/manual.xml @@ -112,7 +112,7 @@ Dynare should work on other systems, but some compilation steps are necessary in Some installation instructions for GNU Octave can be found on Dynare Wiki. -If you are using MATLAB for Windows, and if you plan to use options or , you will need to install a C++ compiler on your machine. The easiest solution is to install Microsoft Visual C++ 2008 Express Edition, and then to type mex -setup on the MATLAB prompt (it should autodetect the compiler). For users of MATLAB 64-bit, please refer to these instructions. Users of MATLAB under Linux and MacOS, and users of GNU Octave normally need to do nothing, since a working compilation environment is available by default. +If you are using MATLAB for Windows, and if you plan to use options or , you will need to install the GNU C++ compiler (g++) on your machine, and configure it with MATLAB (see instructions on the Dynare wiki). Users of MATLAB under Linux and MacOS, and users of GNU Octave normally need to do nothing, since a working compilation environment is available by default. @@ -1834,7 +1834,7 @@ The simulated endogenous variables are available in global matrix oo_.e - Use a k-order solver, implemented in C++, instead of the default Dynare solver. You need a working compilation environment, i.e. a working mex command (see for more details). Default: disabled for order 1 and 2, enabled otherwise + Use a k-order solver, implemented in C++, instead of the default Dynare solver. When using this option, you must specify the option, and you need a working compilation environment, i.e. a working mex command (see for more details). Default: disabled for order 1 and 2, enabled otherwise = INTEGER diff --git a/preprocessor/ComputingTasks.cc b/preprocessor/ComputingTasks.cc index dcf3b6eb5..acdd5a921 100644 --- a/preprocessor/ComputingTasks.cc +++ b/preprocessor/ComputingTasks.cc @@ -118,6 +118,12 @@ StochSimulStatement::checkPass(ModFileStructure &mod_file_struct) it = options_list.num_options.find("partial_information"); if (it != options_list.num_options.end() && it->second == "1") mod_file_struct.partial_information = true; + + // Option k_order_solver (implicit when order >= 3) + it = options_list.num_options.find("k_order_solver"); + if ((it != options_list.num_options.end() && it->second == "1") + || mod_file_struct.order_option >= 3) + mod_file_struct.k_order_solver = true; } void @@ -174,6 +180,12 @@ RamseyPolicyStatement::checkPass(ModFileStructure &mod_file_struct) it = options_list.num_options.find("partial_information"); if (it != options_list.num_options.end() && it->second == "1") mod_file_struct.partial_information = true; + + // Option k_order_solver (implicit when order >= 3) + it = options_list.num_options.find("k_order_solver"); + if ((it != options_list.num_options.end() && it->second == "1") + || mod_file_struct.order_option >= 3) + mod_file_struct.k_order_solver = true; } void @@ -730,6 +742,12 @@ OsrStatement::checkPass(ModFileStructure &mod_file_struct) it = options_list.num_options.find("partial_information"); if (it != options_list.num_options.end() && it->second == "1") mod_file_struct.partial_information = true; + + // Option k_order_solver (implicit when order >= 3) + it = options_list.num_options.find("k_order_solver"); + if ((it != options_list.num_options.end() && it->second == "1") + || mod_file_struct.order_option >= 3) + mod_file_struct.k_order_solver = true; } void diff --git a/preprocessor/ModFile.cc b/preprocessor/ModFile.cc index 341d9b032..e3349675a 100644 --- a/preprocessor/ModFile.cc +++ b/preprocessor/ModFile.cc @@ -118,6 +118,12 @@ ModFile::checkPass() exit(EXIT_FAILURE); } + if (mod_file_struct.k_order_solver && !use_dll) + { + cerr << "ERROR: When using option 'k_order_solver' (which is implicit if order >= 3), you must specify option 'use_dll' on the 'model' block" << endl; + exit(EXIT_FAILURE); + } + if (use_dll && (block || byte_code)) { cerr << "ERROR: In 'model' block, 'use_dll' option is not compatible with 'block' or 'bytecode'" << endl; diff --git a/preprocessor/ModFile.hh b/preprocessor/ModFile.hh index 9c735b55a..118b85048 100644 --- a/preprocessor/ModFile.hh +++ b/preprocessor/ModFile.hh @@ -57,10 +57,10 @@ public: //! Is the model block decomposed? bool block; - //! Is the model stored in baytecode format (byte_code=true) or in a M-file (byte_code=false) + //! Is the model stored in bytecode format (byte_code=true) or in a M-file (byte_code=false) bool byte_code; - //! Deprecated option use_dll + //! Is the model stored in a MEX file ? (option "use_dll" of "model") bool use_dll; //! Global evaluation context diff --git a/preprocessor/Statement.cc b/preprocessor/Statement.cc index ccd1549e5..3f16dc1e9 100644 --- a/preprocessor/Statement.cc +++ b/preprocessor/Statement.cc @@ -31,7 +31,8 @@ ModFileStructure::ModFileStructure() : svar_identification_present(false), identification_present(false), partial_information(false), - shocks_present(false) + shocks_present(false), + k_order_solver(false) { } diff --git a/preprocessor/Statement.hh b/preprocessor/Statement.hh index 55844d425..277731ed7 100644 --- a/preprocessor/Statement.hh +++ b/preprocessor/Statement.hh @@ -59,6 +59,8 @@ public: //! Whether a shocks or mshocks block is present /*! Used for the workaround for trac ticket #35 */ bool shocks_present; + //! Whether the "k_order_solver" option is used (explictly, or implicitly if order >= 3) + bool k_order_solver; }; class Statement