From 1628f01fdb414f0f3ba0674927e563ae7338a9a2 Mon Sep 17 00:00:00 2001
From: Michel Juillard <michel.juillard@mjui.fr>
Date: Mon, 4 Apr 2016 17:11:03 +0200
Subject: [PATCH] fixing problems with Ramsey policy and auxiliary variables

---
 matlab/dyn_ramsey_static.m       |  4 ++--
 preprocessor/StaticModel.cc      | 14 +++++++++++---
 preprocessor/StaticModel.hh      |  3 ++-
 preprocessor/SteadyStateModel.cc |  2 +-
 4 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/matlab/dyn_ramsey_static.m b/matlab/dyn_ramsey_static.m
index 8f2ccea912..dc19a6817c 100644
--- a/matlab/dyn_ramsey_static.m
+++ b/matlab/dyn_ramsey_static.m
@@ -143,8 +143,8 @@ end
 % the auxiliary variables before the Lagrange multipliers are treated
 % as ordinary endogenous variables
 aux_eq = [1:orig_endo_aux_nbr, orig_endo_aux_nbr+orig_eq_nbr+1:size(fJ,1)];
-A = fJ(1:orig_endo_nbr,orig_endo_nbr+find(aux_vars_type==6));
-y = res(1:orig_endo_nbr);
+A = fJ(1:orig_endo_aux_nbr,orig_endo_nbr+find(aux_vars_type==6));
+y = res(1:orig_endo_aux_nbr);
 mult = -A\y;
 
 resids1 = y+A*mult;
diff --git a/preprocessor/StaticModel.cc b/preprocessor/StaticModel.cc
index dbd636d5fa..d6bef86d0d 100644
--- a/preprocessor/StaticModel.cc
+++ b/preprocessor/StaticModel.cc
@@ -1739,7 +1739,7 @@ StaticModel::writeStaticFile(const string &basename, bool block, bool bytecode,
     writeStaticJuliaFile(basename);
   else
     writeStaticMFile(basename);
-  writeAuxVarRecursiveDefinitions(basename, julia);
+  writeSetAuxiliaryVariables(basename, julia);
 }
 
 void
@@ -2099,8 +2099,9 @@ StaticModel::writeAuxVarInitval(ostream &output, ExprNodeOutputType output_type)
     }
 }
 
-void StaticModel::writeAuxVarRecursiveDefinitions(const string &basename, const bool julia) const
+void StaticModel::writeSetAuxiliaryVariables(const string &basename, const bool julia) const
 {
+  
   string func_name = basename + "_set_auxiliary_variables";
   string filename = julia ? func_name + ".jl" : func_name + ".m";
   string comment = julia ? "#" : "%";
@@ -2127,10 +2128,17 @@ void StaticModel::writeAuxVarRecursiveDefinitions(const string &basename, const
     if (dynamic_cast<ExprNode *>(aux_equations[i])->containsExternalFunction())
       dynamic_cast<ExprNode *>(aux_equations[i])->writeExternalFunctionOutput(output, oMatlabStaticModel,
                                                                               temporary_terms, tef_terms);
+  writeAuxVarRecursiveDefinitions(output, oMatlabStaticModel);
+}
 
+void
+StaticModel::writeAuxVarRecursiveDefinitions(ostream &output, ExprNodeOutputType output_type) const
+{
+  deriv_node_temp_terms_t tef_terms;
+  temporary_terms_t temporary_terms;
   for (int i = 0; i < (int) aux_equations.size(); i++)
     {
-      dynamic_cast<ExprNode *>(aux_equations[i]->substituteStaticAuxiliaryDefinition())->writeOutput(output, oMatlabStaticModel, temporary_terms, tef_terms);
+      dynamic_cast<ExprNode *>(aux_equations[i]->substituteStaticAuxiliaryDefinition())->writeOutput(output, output_type, temporary_terms, tef_terms);
       output << ";" << endl;
     }
 }
diff --git a/preprocessor/StaticModel.hh b/preprocessor/StaticModel.hh
index 90a3aebb79..5dfc5dda72 100644
--- a/preprocessor/StaticModel.hh
+++ b/preprocessor/StaticModel.hh
@@ -183,7 +183,8 @@ public:
   void writeAuxVarInitval(ostream &output, ExprNodeOutputType output_type) const;
 
   //! Writes definition of the auxiliary variables in a .m or .jl file
-  void writeAuxVarRecursiveDefinitions(const string &basename, const bool julia) const;
+  void writeSetAuxiliaryVariables(const string &basename, const bool julia) const;
+  void writeAuxVarRecursiveDefinitions(ostream &output, ExprNodeOutputType output_type) const;
 
   virtual int getDerivID(int symb_id, int lag) const throw (UnknownDerivIDException);
   virtual void addAllParamDerivId(set<int> &deriv_id_set);
diff --git a/preprocessor/SteadyStateModel.cc b/preprocessor/SteadyStateModel.cc
index 4533c41f27..61220a8050 100644
--- a/preprocessor/SteadyStateModel.cc
+++ b/preprocessor/SteadyStateModel.cc
@@ -161,7 +161,7 @@ SteadyStateModel::writeSteadyStateFile(const string &basename, bool ramsey_model
     output << "    % Auxiliary equations" << endl;
   else
     output << "    # Auxiliary equations" << endl;
-  static_model.writeAuxVarInitval(output, output_type);
+  static_model.writeAuxVarRecursiveDefinitions(output, output_type);
 
   if (!julia)
     output << "    check_=0;" << endl;
-- 
GitLab