From 1f7f6c8580de3cb5446d62ff21af966b84d38138 Mon Sep 17 00:00:00 2001 From: Houtan Bastani <houtan@dynare.org> Date: Mon, 30 May 2016 16:58:57 +0200 Subject: [PATCH] preprocessor: remove auxiliary equations from static model. change in response to #1201 --- preprocessor/DynamicModel.cc | 11 +++-------- preprocessor/StaticModel.cc | 16 ---------------- 2 files changed, 3 insertions(+), 24 deletions(-) diff --git a/preprocessor/DynamicModel.cc b/preprocessor/DynamicModel.cc index 2d53e19aa0..38aff37b63 100644 --- a/preprocessor/DynamicModel.cc +++ b/preprocessor/DynamicModel.cc @@ -3681,7 +3681,7 @@ DynamicModel::toStatic(StaticModel &static_model) const // Convert equations int static_only_index = 0; - for (int i = 0; i < (int) equations.size(); i++) + for (int i = 0; i < (int) equations.size() - aux_equations.size(); i++) { // Detect if equation is marked [dynamic] bool is_dynamic_only = false; @@ -3698,11 +3698,11 @@ DynamicModel::toStatic(StaticModel &static_model) const // If yes, replace it by an equation marked [static] if (is_dynamic_only) { - static_model.addEquation(static_only_equations[static_only_index]->toStatic(static_model), static_only_equations_lineno[static_only_index]); + static_model.addEquation(static_only_equations[static_only_index]->substituteStaticAuxiliaryVariable()->toStatic(static_model), static_only_equations_lineno[static_only_index]); static_only_index++; } else - static_model.addEquation(equations[i]->toStatic(static_model), equations_lineno[i]); + static_model.addEquation(equations[i]->substituteStaticAuxiliaryVariable()->toStatic(static_model), equations_lineno[i]); } catch (DataTree::DivisionByZeroException) { @@ -3710,11 +3710,6 @@ DynamicModel::toStatic(StaticModel &static_model) const exit(EXIT_FAILURE); } } - - // Convert auxiliary equations - for (deque<BinaryOpNode *>::const_iterator it = aux_equations.begin(); - it != aux_equations.end(); it++) - static_model.addAuxEquation((*it)->toStatic(static_model)); } bool diff --git a/preprocessor/StaticModel.cc b/preprocessor/StaticModel.cc index d43c09a85a..f0e688a6ab 100644 --- a/preprocessor/StaticModel.cc +++ b/preprocessor/StaticModel.cc @@ -1050,22 +1050,6 @@ void StaticModel::computingPass(const eval_context_t &eval_context, bool no_tmp_terms, bool hessian, bool thirdDerivatives, int paramsDerivsOrder, bool block, bool bytecode) { initializeVariablesAndEquations(); - - vector<BinaryOpNode *> neweqs; - for (unsigned int eq = 0; eq < equations.size() - aux_equations.size(); eq++) - { - expr_t eq_tmp = equations[eq]->substituteStaticAuxiliaryVariable(); - neweqs.push_back(dynamic_cast<BinaryOpNode *>(eq_tmp->toStatic(*this))); - } - - for (unsigned int eq = 0; eq < aux_equations.size(); eq++) - { - expr_t eq_tmp = aux_equations[eq]->substituteStaticAuxiliaryDefinition(); - neweqs.push_back(dynamic_cast<BinaryOpNode *>(eq_tmp->toStatic(*this))); - } - - equations.clear(); - copy(neweqs.begin(),neweqs.end(),back_inserter(equations)); // Compute derivatives w.r. to all endogenous, and possibly exogenous and exogenous deterministic set<int> vars; -- GitLab