From d3da9eb9906949e9da63f8cae3bc14d2c16c81f2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Adjemian=20=28Hermes=29?=
 <stephane.adjemian@univ-lemans.fr>
Date: Thu, 19 May 2016 22:41:26 +0200
Subject: [PATCH] Assign parameter values in main julia module.

See PR #1102 by spencerlyon2.

Added support for filling in the model.params Vector.
---
 ModFile.cc                 |  5 +++++
 NumericalInitialization.cc | 12 ++++++++++++
 NumericalInitialization.hh |  1 +
 Statement.cc               |  4 ++++
 Statement.hh               |  1 +
 5 files changed, 23 insertions(+)

diff --git a/ModFile.cc b/ModFile.cc
index 290b9f71..4fc4ce1c 100644
--- a/ModFile.cc
+++ b/ModFile.cc
@@ -1174,6 +1174,11 @@ ModFile::writeExternalFilesJulia(const string &basename, FileOutputType output)
     }
   steady_state_model.writeSteadyStateFile(basename, mod_file_struct.ramsey_model_present, true);
 
+  // Print statements (includes parameter values)
+    for (vector<Statement *>::const_iterator it = statements.begin();
+         it != statements.end(); it++)
+        (*it)->writeJuliaOutput(jlOutputFile, basename);
+
   jlOutputFile << "model_.static = " << basename << "Static.static!" << endl
                << "model_.dynamic = " << basename << "Dynamic.dynamic!" << endl
                << "if isfile(\"" << basename << "SteadyState.jl"  "\")" << endl
diff --git a/NumericalInitialization.cc b/NumericalInitialization.cc
index 48fc02ff..07e0d581 100644
--- a/NumericalInitialization.cc
+++ b/NumericalInitialization.cc
@@ -51,6 +51,18 @@ InitParamStatement::writeOutput(ostream &output, const string &basename, bool mi
     output << symbol_table.getName(symb_id) << " = M_.params( " << id << " );" << endl;
 }
 
+void
+InitParamStatement::writeJuliaOutput(ostream &output, const string &basename)
+{
+  int id = symbol_table.getTypeSpecificID(symb_id) + 1;
+  output << "model_.params[ " << id << " ] = ";
+  param_value->writeOutput(output);
+  output << endl;
+  // Do we really need this?
+  // if (!minimal_workspace)
+  //   output << symbol_table.getName(symb_id) << " = model_.params[ " << id << " ]" << endl;
+}
+
 void
 InitParamStatement::writeCOutput(ostream &output, const string &basename)
 {
diff --git a/NumericalInitialization.hh b/NumericalInitialization.hh
index 142838f7..ccc67794 100644
--- a/NumericalInitialization.hh
+++ b/NumericalInitialization.hh
@@ -41,6 +41,7 @@ public:
                      const SymbolTable &symbol_table_arg);
   virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
   virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
+  virtual void writeJuliaOutput(ostream &output, const string &basename);
   virtual void writeCOutput(ostream &output, const string &basename);
   //! Fill eval context with parameter value
   void fillEvalContext(eval_context_t &eval_context) const;
diff --git a/Statement.cc b/Statement.cc
index 2ec5b031..ee7b5b44 100644
--- a/Statement.cc
+++ b/Statement.cc
@@ -69,6 +69,10 @@ Statement::writeCOutput(ostream &output, const string &basename)
 {
 }
 
+void Statement::writeJuliaOutput(ostream &output, const string &basename)
+{
+}
+
 void
 Statement::computingPass()
 {
diff --git a/Statement.hh b/Statement.hh
index 050d182a..311260b0 100644
--- a/Statement.hh
+++ b/Statement.hh
@@ -143,6 +143,7 @@ public:
   */
   virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const = 0;
   virtual void writeCOutput(ostream &output, const string &basename);
+  virtual void writeJuliaOutput(ostream &output, const string &basename);
 };
 
 class NativeStatement : public Statement
-- 
GitLab