From 5546658b4df8ec255cdbfa74b05cb8358f925386 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien.villemot@ens.fr>
Date: Tue, 27 Apr 2010 17:04:52 +0200
Subject: [PATCH] Preprocessor: with 'steady_state_model' command, write
 auxiliary equations in the steady state file

---
 ModFile.cc          | 6 +++---
 ModFile.hh          | 4 ++--
 StaticModel.cc      | 4 ++--
 StaticModel.hh      | 4 ++--
 SteadyStateModel.cc | 6 ++++--
 SteadyStateModel.hh | 6 +++++-
 6 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/ModFile.cc b/ModFile.cc
index bc754f00..561645b3 100644
--- a/ModFile.cc
+++ b/ModFile.cc
@@ -24,9 +24,9 @@
 #include "ModFile.hh"
 
 ModFile::ModFile() : expressions_tree(symbol_table, num_constants, external_functions_table),
-                     steady_state_model(symbol_table, num_constants, external_functions_table),
                      dynamic_model(symbol_table, num_constants, external_functions_table),
                      static_model(symbol_table, num_constants, external_functions_table),
+                     steady_state_model(symbol_table, num_constants, external_functions_table, static_model),
                      linear(false), block(false), byte_code(false),
                      use_dll(false), no_static(false)
 {
@@ -402,14 +402,14 @@ ModFile::writeOutputFiles(const string &basename, bool clear_all
       InitValStatement *ivs = dynamic_cast<InitValStatement *>(*it);
       if (ivs != NULL)
         {
-          static_model.writeAuxVarInitval(mOutputFile);
+          static_model.writeAuxVarInitval(mOutputFile, oMatlabOutsideModel);
           ivs->writeOutputPostInit(mOutputFile);
         }
 
       // Special treatment for load params and steady state statement: insert initial values for the auxiliary variables
       LoadParamsAndSteadyStateStatement *lpass = dynamic_cast<LoadParamsAndSteadyStateStatement *>(*it);
       if (lpass && !no_static)
-        static_model.writeAuxVarInitval(mOutputFile);
+        static_model.writeAuxVarInitval(mOutputFile, oMatlabOutsideModel);
     }
 
   // Remove path for block option with M-files
diff --git a/ModFile.hh b/ModFile.hh
index 57612a3e..bfa12f9d 100644
--- a/ModFile.hh
+++ b/ModFile.hh
@@ -48,12 +48,12 @@ public:
   NumericalConstants num_constants;
   //! Expressions outside model block
   DataTree expressions_tree;
-  //! Static model, as declared in the "steady_state_model" block if present
-  SteadyStateModel steady_state_model;
   //! Dynamic model, as declared in the "model" block
   DynamicModel dynamic_model;
   //! Static model, as derived from the "model" block when leads and lags have been removed
   StaticModel static_model;
+  //! Static model, as declared in the "steady_state_model" block if present
+  SteadyStateModel steady_state_model;
   //! Option linear
   bool linear;
 
diff --git a/StaticModel.cc b/StaticModel.cc
index 483df5d2..a22a3ffc 100644
--- a/StaticModel.cc
+++ b/StaticModel.cc
@@ -1362,11 +1362,11 @@ StaticModel::hessianHelper(ostream &output, int row_nb, int col_nb, ExprNodeOutp
 }
 
 void
-StaticModel::writeAuxVarInitval(ostream &output) const
+StaticModel::writeAuxVarInitval(ostream &output, ExprNodeOutputType output_type) const
 {
   for (int i = 0; i < (int) aux_equations.size(); i++)
     {
-      dynamic_cast<ExprNode *>(aux_equations[i])->writeOutput(output);
+      dynamic_cast<ExprNode *>(aux_equations[i])->writeOutput(output, output_type);
       output << ";" << endl;
     }
 }
diff --git a/StaticModel.hh b/StaticModel.hh
index b806bd76..09d6ea28 100644
--- a/StaticModel.hh
+++ b/StaticModel.hh
@@ -187,8 +187,8 @@ public:
   //! Writes LaTeX file with the equations of the static model
   void writeLatexFile(const string &basename) const;
 
-  //! Writes initializations in oo_.steady_state for the auxiliary variables
-  void writeAuxVarInitval(ostream &output) const;
+  //! Writes initializations in oo_.steady_state or steady state file for the auxiliary variables
+  void writeAuxVarInitval(ostream &output, ExprNodeOutputType output_type) const;
 
   //! Initialize equation_reordered & variable_reordered
   void initializeVariablesAndEquations();
diff --git a/SteadyStateModel.cc b/SteadyStateModel.cc
index b71c94e0..f8960a71 100644
--- a/SteadyStateModel.cc
+++ b/SteadyStateModel.cc
@@ -22,8 +22,8 @@
 
 #include "SteadyStateModel.hh"
 
-SteadyStateModel::SteadyStateModel(SymbolTable &symbol_table_arg, NumericalConstants &num_constants, ExternalFunctionsTable &external_functions_table_arg) :
-  DataTree(symbol_table_arg, num_constants, external_functions_table)
+SteadyStateModel::SteadyStateModel(SymbolTable &symbol_table_arg, NumericalConstants &num_constants, ExternalFunctionsTable &external_functions_table_arg, const StaticModel &static_model_arg) :
+  DataTree(symbol_table_arg, num_constants, external_functions_table), static_model(static_model_arg)
 {
 }
 
@@ -81,6 +81,8 @@ SteadyStateModel::writeSteadyStateFile(const string &basename) const
       it->second->writeOutput(output, oSteadyStateFile);
       output << ";" << endl;
     }
+  output << "    % Auxiliary equations" << endl;
+  static_model.writeAuxVarInitval(output, oSteadyStateFile);
   output << "    check_=0;" << endl
          << "end" << endl;
 }
diff --git a/SteadyStateModel.hh b/SteadyStateModel.hh
index 9c609cf5..09b7277e 100644
--- a/SteadyStateModel.hh
+++ b/SteadyStateModel.hh
@@ -21,6 +21,7 @@
 #define _STEADY_STATE_MODEL_HH
 
 #include "DataTree.hh"
+#include "StaticModel.hh"
 
 class SteadyStateModel : public DataTree
 {
@@ -29,6 +30,9 @@ private:
   map<int, NodeID> def_table;
   vector<int> recursive_order;
 
+  //! Reference to static model (for writing auxiliary equations)
+  const StaticModel &static_model;
+
 public:
   class AlreadyDefinedException
   {
@@ -43,7 +47,7 @@ public:
     UndefinedVariableException(const string &varname_arg) : varname(varname_arg) {}
   };
 
-  SteadyStateModel(SymbolTable &symbol_table_arg, NumericalConstants &num_constants, ExternalFunctionsTable &external_functions_table_arg);
+  SteadyStateModel(SymbolTable &symbol_table_arg, NumericalConstants &num_constants, ExternalFunctionsTable &external_functions_table_arg, const StaticModel &static_model_arg);
   //! Add an expression of the form "var = expr;"
   void addDefinition(int symb_id, NodeID expr) throw (UndefinedVariableException, AlreadyDefinedException);
   //! Write the steady state file
-- 
GitLab