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