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
time-shift
sebastien 2008-10-29 15:10:51 +00:00
parent 6eadbe0005
commit 342f32b59c
8 changed files with 21 additions and 13 deletions

View File

@ -840,7 +840,7 @@ void
PlannerObjectiveStatement::computingPass() PlannerObjectiveStatement::computingPass()
{ {
model_tree->computeStaticHessian = true; model_tree->computeStaticHessian = true;
model_tree->computingPass(eval_context_type()); model_tree->computingPass(eval_context_type(), false);
} }
void void

View File

@ -32,7 +32,7 @@ using namespace std;
Splitting main() in two parts was necessary because ParsingDriver.h and MacroDriver.h can't be Splitting main() in two parts was necessary because ParsingDriver.h and MacroDriver.h can't be
included simultaneously (because of Bison limitations). 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 int
main(int argc, char** argv) main(int argc, char** argv)
@ -47,6 +47,7 @@ main(int argc, char** argv)
bool clear_all = true; bool clear_all = true;
bool save_macro = false; bool save_macro = false;
bool debug = false; bool debug = false;
bool no_tmp_terms = false;
// Parse options // Parse options
for (int arg = 2; arg < argc; arg++) for (int arg = 2; arg < argc; arg++)
@ -57,6 +58,8 @@ main(int argc, char** argv)
clear_all = false; clear_all = false;
else if (string(argv[arg]) == string("savemacro")) else if (string(argv[arg]) == string("savemacro"))
save_macro = true; save_macro = true;
else if (string(argv[arg]) == string("notmpterms"))
no_tmp_terms = true;
} }
cout << "Starting Dynare ..." << endl cout << "Starting Dynare ..." << endl
@ -86,7 +89,7 @@ main(int argc, char** argv)
} }
// Do the rest // Do the rest
main2(macro_output, basename, debug, clear_all); main2(macro_output, basename, debug, clear_all, no_tmp_terms);
return 0; return 0;
} }

View File

@ -25,7 +25,7 @@ using namespace std;
#include "ModFile.hh" #include "ModFile.hh"
void 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; ParsingDriver p;
@ -36,7 +36,7 @@ main2(stringstream &in, string &basename, bool debug, bool clear_all)
mod_file->checkPass(); mod_file->checkPass();
// Do computations // Do computations
mod_file->computingPass(); mod_file->computingPass(no_tmp_terms);
// Write outputs // Write outputs
mod_file->writeOutputFiles(basename, clear_all); mod_file->writeOutputFiles(basename, clear_all);

View File

@ -91,7 +91,7 @@ ModFile::checkPass()
} }
void void
ModFile::computingPass() ModFile::computingPass(bool no_tmp_terms)
{ {
// Mod file may have no equation (for example in a standalone BVAR estimation) // Mod file may have no equation (for example in a standalone BVAR estimation)
if (model_tree.equation_number() > 0) if (model_tree.equation_number() > 0)
@ -113,7 +113,7 @@ ModFile::computingPass()
model_tree.computeThirdDerivatives = true; model_tree.computeThirdDerivatives = true;
} }
model_tree.computingPass(global_eval_context); model_tree.computingPass(global_eval_context, no_tmp_terms);
} }
for(vector<Statement *>::iterator it = statements.begin(); for(vector<Statement *>::iterator it = statements.begin();

View File

@ -3140,7 +3140,7 @@ ModelTree::BlockLinear(Model_Block *ModelBlock)
} }
void 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; 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); block_triangular.Normalize_and_BlockDecompose_Static_0_Model(j_m);
BlockLinear(block_triangular.ModelBlock); BlockLinear(block_triangular.ModelBlock);
computeTemporaryTermsOrdered(order, block_triangular.ModelBlock); if (!no_tmp_terms)
computeTemporaryTermsOrdered(order, block_triangular.ModelBlock);
} }
else else
computeTemporaryTerms(order); if (!no_tmp_terms)
computeTemporaryTerms(order);
} }
void void

View File

@ -434,6 +434,7 @@ public:
/*! \todo check there are only endogenous variables at the current period in the objective /*! \todo check there are only endogenous variables at the current period in the objective
(no exogenous, no lead/lag) */ (no exogenous, no lead/lag) */
virtual void checkPass(ModFileStructure &mod_file_struct); virtual void checkPass(ModFileStructure &mod_file_struct);
/*! \todo allow for the possibility of disabling temporary terms */
virtual void computingPass(); virtual void computingPass();
virtual void writeOutput(ostream &output, const string &basename) const; virtual void writeOutput(ostream &output, const string &basename) const;
}; };

View File

@ -63,7 +63,8 @@ public:
/*! \todo add check for number of equations and endogenous if ramsey_policy is present */ /*! \todo add check for number of equations and endogenous if ramsey_policy is present */
void checkPass(); void checkPass();
//! Execute computations //! 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 //! 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 \param basename The base name used for writing output files. Should be the name of the mod file without its extension

View File

@ -157,8 +157,9 @@ public:
//! Whether dynamic third order derivatives (w.r. to endogenous and exogenous) should be written //! Whether dynamic third order derivatives (w.r. to endogenous and exogenous) should be written
bool computeThirdDerivatives; bool computeThirdDerivatives;
//! Execute computations (variable sorting + derivation) //! Execute computations (variable sorting + derivation)
/*! You must set computeJacobian, computeJacobianExo, computeHessian, computeStaticHessian and computeThirdDerivatives to correct values before calling this function */ /*! You must set computeJacobian, computeJacobianExo, computeHessian, computeStaticHessian and computeThirdDerivatives to correct values before calling this function
void computingPass(const eval_context_type &eval_context); \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 //! Writes model initialization and lead/lag incidence matrix to output
void writeOutput(ostream &output) const; void writeOutput(ostream &output) const;
//! Writes static model file //! Writes static model file