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