From 2f7c327b0e66dcf3425e2101871de7cf2d1e8bb3 Mon Sep 17 00:00:00 2001 From: sebastien Date: Wed, 9 Dec 2009 11:50:58 +0000 Subject: [PATCH] k-order: * in the preprocessor, fail if k_order_solver given without use_dll * updated the reference manual, in particular w.r. to the new wiki page on MEX compilation under Windows git-svn-id: https://www.dynare.org/svn/dynare/trunk@3216 ac1d8469-bf42-47a9-8791-bf33cf982152 --- doc/manual.xml | 4 ++-- preprocessor/ComputingTasks.cc | 18 ++++++++++++++++++ preprocessor/ModFile.cc | 6 ++++++ preprocessor/ModFile.hh | 4 ++-- preprocessor/Statement.cc | 3 ++- preprocessor/Statement.hh | 2 ++ 6 files changed, 32 insertions(+), 5 deletions(-) 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