From 342f32b59c1a55f261def2f6a46462cdd3c3f5fd Mon Sep 17 00:00:00 2001 From: sebastien Date: Wed, 29 Oct 2008 15:10:51 +0000 Subject: [PATCH] trunk preprocessor: added option "notmpterms" to dynare command, for disabling temporary terms in static and dynamic files git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@2226 ac1d8469-bf42-47a9-8791-bf33cf982152 --- preprocessor/ComputingTasks.cc | 2 +- preprocessor/DynareMain.cc | 7 +++++-- preprocessor/DynareMain2.cc | 4 ++-- preprocessor/ModFile.cc | 4 ++-- preprocessor/ModelTree.cc | 8 +++++--- preprocessor/include/ComputingTasks.hh | 1 + preprocessor/include/ModFile.hh | 3 ++- preprocessor/include/ModelTree.hh | 5 +++-- 8 files changed, 21 insertions(+), 13 deletions(-) diff --git a/preprocessor/ComputingTasks.cc b/preprocessor/ComputingTasks.cc index 60e543077..3c070ec73 100644 --- a/preprocessor/ComputingTasks.cc +++ b/preprocessor/ComputingTasks.cc @@ -840,7 +840,7 @@ void PlannerObjectiveStatement::computingPass() { model_tree->computeStaticHessian = true; - model_tree->computingPass(eval_context_type()); + model_tree->computingPass(eval_context_type(), false); } void diff --git a/preprocessor/DynareMain.cc b/preprocessor/DynareMain.cc index 61dc9bbb8..da860a50b 100644 --- a/preprocessor/DynareMain.cc +++ b/preprocessor/DynareMain.cc @@ -32,7 +32,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); +void main2(stringstream &in, string &basename, bool debug, bool clear_all, bool no_tmp_terms); int main(int argc, char** argv) @@ -47,6 +47,7 @@ main(int argc, char** argv) bool clear_all = true; bool save_macro = false; bool debug = false; + bool no_tmp_terms = false; // Parse options for (int arg = 2; arg < argc; arg++) @@ -57,6 +58,8 @@ main(int argc, char** argv) clear_all = false; else if (string(argv[arg]) == string("savemacro")) save_macro = true; + else if (string(argv[arg]) == string("notmpterms")) + no_tmp_terms = true; } cout << "Starting Dynare ..." << endl @@ -86,7 +89,7 @@ main(int argc, char** argv) } // Do the rest - main2(macro_output, basename, debug, clear_all); + main2(macro_output, basename, debug, clear_all, no_tmp_terms); return 0; } diff --git a/preprocessor/DynareMain2.cc b/preprocessor/DynareMain2.cc index 53a5584d2..e6111e910 100644 --- a/preprocessor/DynareMain2.cc +++ b/preprocessor/DynareMain2.cc @@ -25,7 +25,7 @@ using namespace std; #include "ModFile.hh" void -main2(stringstream &in, string &basename, bool debug, bool clear_all) +main2(stringstream &in, string &basename, bool debug, bool clear_all, bool no_tmp_terms) { ParsingDriver p; @@ -36,7 +36,7 @@ main2(stringstream &in, string &basename, bool debug, bool clear_all) mod_file->checkPass(); // Do computations - mod_file->computingPass(); + mod_file->computingPass(no_tmp_terms); // Write outputs mod_file->writeOutputFiles(basename, clear_all); diff --git a/preprocessor/ModFile.cc b/preprocessor/ModFile.cc index 6b832720c..6997ee50f 100644 --- a/preprocessor/ModFile.cc +++ b/preprocessor/ModFile.cc @@ -91,7 +91,7 @@ ModFile::checkPass() } void -ModFile::computingPass() +ModFile::computingPass(bool no_tmp_terms) { // Mod file may have no equation (for example in a standalone BVAR estimation) if (model_tree.equation_number() > 0) @@ -113,7 +113,7 @@ ModFile::computingPass() model_tree.computeThirdDerivatives = true; } - model_tree.computingPass(global_eval_context); + model_tree.computingPass(global_eval_context, no_tmp_terms); } for(vector::iterator it = statements.begin(); diff --git a/preprocessor/ModelTree.cc b/preprocessor/ModelTree.cc index c6bef42d5..513a2e4fc 100644 --- a/preprocessor/ModelTree.cc +++ b/preprocessor/ModelTree.cc @@ -3140,7 +3140,7 @@ ModelTree::BlockLinear(Model_Block *ModelBlock) } void -ModelTree::computingPass(const eval_context_type &eval_context) +ModelTree::computingPass(const eval_context_type &eval_context, bool no_tmp_terms) { cout << equations.size() << " equation(s) found" << endl; @@ -3171,10 +3171,12 @@ ModelTree::computingPass(const eval_context_type &eval_context) block_triangular.Normalize_and_BlockDecompose_Static_0_Model(j_m); BlockLinear(block_triangular.ModelBlock); - computeTemporaryTermsOrdered(order, block_triangular.ModelBlock); + if (!no_tmp_terms) + computeTemporaryTermsOrdered(order, block_triangular.ModelBlock); } else - computeTemporaryTerms(order); + if (!no_tmp_terms) + computeTemporaryTerms(order); } void diff --git a/preprocessor/include/ComputingTasks.hh b/preprocessor/include/ComputingTasks.hh index 96e547e2d..c9ba68e4b 100644 --- a/preprocessor/include/ComputingTasks.hh +++ b/preprocessor/include/ComputingTasks.hh @@ -434,6 +434,7 @@ public: /*! \todo check there are only endogenous variables at the current period in the objective (no exogenous, no lead/lag) */ virtual void checkPass(ModFileStructure &mod_file_struct); + /*! \todo allow for the possibility of disabling temporary terms */ virtual void computingPass(); virtual void writeOutput(ostream &output, const string &basename) const; }; diff --git a/preprocessor/include/ModFile.hh b/preprocessor/include/ModFile.hh index 6dde14522..1a3f3a3b2 100644 --- a/preprocessor/include/ModFile.hh +++ b/preprocessor/include/ModFile.hh @@ -63,7 +63,8 @@ public: /*! \todo add check for number of equations and endogenous if ramsey_policy is present */ void checkPass(); //! Execute computations - void computingPass(); + /*! \param no_tmp_terms if true, no temporary terms will be computed in the static and dynamic files */ + void computingPass(bool no_tmp_terms); //! Writes Matlab/Scilab output files /*! \param basename The base name used for writing output files. Should be the name of the mod file without its extension diff --git a/preprocessor/include/ModelTree.hh b/preprocessor/include/ModelTree.hh index 7cb392e65..346455999 100644 --- a/preprocessor/include/ModelTree.hh +++ b/preprocessor/include/ModelTree.hh @@ -157,8 +157,9 @@ public: //! Whether dynamic third order derivatives (w.r. to endogenous and exogenous) should be written bool computeThirdDerivatives; //! Execute computations (variable sorting + derivation) - /*! You must set computeJacobian, computeJacobianExo, computeHessian, computeStaticHessian and computeThirdDerivatives to correct values before calling this function */ - void computingPass(const eval_context_type &eval_context); + /*! You must set computeJacobian, computeJacobianExo, computeHessian, computeStaticHessian and computeThirdDerivatives to correct values before calling this function + \param no_tmp_terms if true, no temporary terms will be computed in the static and dynamic files */ + void computingPass(const eval_context_type &eval_context, bool no_tmp_terms); //! Writes model initialization and lead/lag incidence matrix to output void writeOutput(ostream &output) const; //! Writes static model file