Commit e19a1486 authored by Sébastien Villemot's avatar Sébastien Villemot
Browse files

Convert ExprNodeOutputType into a class enum

Incidentally, replace the IS_* macros by inline functions.
parent c6d4cb88
...@@ -225,7 +225,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const ...@@ -225,7 +225,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
ExprNodeOutputType local_output_type; ExprNodeOutputType local_output_type;
Ufoss.str(""); Ufoss.str("");
local_output_type = oMatlabDynamicModelSparse; local_output_type = ExprNodeOutputType::matlabDynamicModelSparse;
if (global_temporary_terms) if (global_temporary_terms)
local_temporary_terms = temporary_terms; local_temporary_terms = temporary_terms;
...@@ -246,7 +246,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const ...@@ -246,7 +246,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
unsigned int block_mfs = getBlockMfs(block); unsigned int block_mfs = getBlockMfs(block);
unsigned int block_recursive = block_size - block_mfs; unsigned int block_recursive = block_size - block_mfs;
deriv_node_temp_terms_t tef_terms; deriv_node_temp_terms_t tef_terms;
local_output_type = oMatlabDynamicModelSparse; local_output_type = ExprNodeOutputType::matlabDynamicModelSparse;
if (global_temporary_terms) if (global_temporary_terms)
local_temporary_terms = temporary_terms; local_temporary_terms = temporary_terms;
...@@ -415,7 +415,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const ...@@ -415,7 +415,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
{ {
output << " "; output << " ";
// In the following, "Static" is used to avoid getting the "(it_)" subscripting // In the following, "Static" is used to avoid getting the "(it_)" subscripting
it->writeOutput(output, oMatlabStaticModelSparse, local_temporary_terms, {}); it->writeOutput(output, ExprNodeOutputType::matlabStaticModelSparse, local_temporary_terms, {});
output << " = T_zeros;" << endl; output << " = T_zeros;" << endl;
} }
} }
...@@ -1803,7 +1803,7 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const ...@@ -1803,7 +1803,7 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const
else else
tmp_output << " "; tmp_output << " ";
// In the following, "Static" is used to avoid getting the "(it_)" subscripting // In the following, "Static" is used to avoid getting the "(it_)" subscripting
temporary_term->writeOutput(tmp_output, oMatlabStaticModelSparse, temporary_terms, {}); temporary_term->writeOutput(tmp_output, ExprNodeOutputType::matlabStaticModelSparse, temporary_terms, {});
} }
if (tmp_output.str().length() > 0) if (tmp_output.str().length() > 0)
mDynamicModelFile << " global " << tmp_output.str() << ";\n"; mDynamicModelFile << " global " << tmp_output.str() << ";\n";
...@@ -1814,7 +1814,7 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const ...@@ -1814,7 +1814,7 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const
{ {
tmp_output << " "; tmp_output << " ";
// In the following, "Static" is used to avoid getting the "(it_)" subscripting // In the following, "Static" is used to avoid getting the "(it_)" subscripting
temporary_term->writeOutput(tmp_output, oMatlabStaticModelSparse, temporary_terms, {}); temporary_term->writeOutput(tmp_output, ExprNodeOutputType::matlabStaticModelSparse, temporary_terms, {});
tmp_output << "=T_init;\n"; tmp_output << "=T_init;\n";
} }
if (tmp_output.str().length() > 0) if (tmp_output.str().length() > 0)
...@@ -2298,8 +2298,8 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput, ...@@ -2298,8 +2298,8 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput,
ostringstream third_derivatives_tt_output; // Used for storing third order derivatives temp terms ostringstream third_derivatives_tt_output; // Used for storing third order derivatives temp terms
ostringstream third_derivatives_output; // Used for storing third order derivatives equations ostringstream third_derivatives_output; // Used for storing third order derivatives equations
ExprNodeOutputType output_type = (use_dll ? oCDynamicModel : ExprNodeOutputType output_type = (use_dll ? ExprNodeOutputType::CDynamicModel :
julia ? oJuliaDynamicModel : oMatlabDynamicModel); julia ? ExprNodeOutputType::juliaDynamicModel : ExprNodeOutputType::matlabDynamicModel);
deriv_node_temp_terms_t tef_terms; deriv_node_temp_terms_t tef_terms;
temporary_terms_t temp_term_union; temporary_terms_t temp_term_union;
...@@ -2366,7 +2366,7 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput, ...@@ -2366,7 +2366,7 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput,
int col_nb_sym = id2 * dynJacobianColsNbr + id1; int col_nb_sym = id2 * dynJacobianColsNbr + id1;
ostringstream for_sym; ostringstream for_sym;
if (output_type == oJuliaDynamicModel) if (output_type == ExprNodeOutputType::juliaDynamicModel)
{ {
for_sym << "g2[" << eq + 1 << "," << col_nb + 1 << "]"; for_sym << "g2[" << eq + 1 << "," << col_nb + 1 << "]";
hessian_output << " @inbounds " << for_sym.str() << " = "; hessian_output << " @inbounds " << for_sym.str() << " = ";
...@@ -2391,7 +2391,7 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput, ...@@ -2391,7 +2391,7 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput,
// Treating symetric elements // Treating symetric elements
if (id1 != id2) if (id1 != id2)
if (output_type == oJuliaDynamicModel) if (output_type == ExprNodeOutputType::juliaDynamicModel)
hessian_output << " @inbounds g2[" << eq + 1 << "," << col_nb_sym + 1 << "] = " hessian_output << " @inbounds g2[" << eq + 1 << "," << col_nb_sym + 1 << "] = "
<< for_sym.str() << endl; << for_sym.str() << endl;
else else
...@@ -2436,7 +2436,7 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput, ...@@ -2436,7 +2436,7 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput,
int ref_col = id1 * hessianColsNbr + id2 * dynJacobianColsNbr + id3; int ref_col = id1 * hessianColsNbr + id2 * dynJacobianColsNbr + id3;
ostringstream for_sym; ostringstream for_sym;
if (output_type == oJuliaDynamicModel) if (output_type == ExprNodeOutputType::juliaDynamicModel)
{ {
for_sym << "g3[" << eq + 1 << "," << ref_col + 1 << "]"; for_sym << "g3[" << eq + 1 << "," << ref_col + 1 << "]";
third_derivatives_output << " @inbounds " << for_sym.str() << " = "; third_derivatives_output << " @inbounds " << for_sym.str() << " = ";
...@@ -2469,7 +2469,7 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput, ...@@ -2469,7 +2469,7 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput,
int k2 = 1; // Keeps the offset of the permutation relative to k int k2 = 1; // Keeps the offset of the permutation relative to k
for (int col : cols) for (int col : cols)
if (col != ref_col) if (col != ref_col)
if (output_type == oJuliaDynamicModel) if (output_type == ExprNodeOutputType::juliaDynamicModel)
third_derivatives_output << " @inbounds g3[" << eq + 1 << "," << col + 1 << "] = " third_derivatives_output << " @inbounds g3[" << eq + 1 << "," << col + 1 << "] = "
<< for_sym.str() << endl; << for_sym.str() << endl;
else else
...@@ -2491,7 +2491,7 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput, ...@@ -2491,7 +2491,7 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput,
} }
} }
if (output_type == oMatlabDynamicModel) if (output_type == ExprNodeOutputType::matlabDynamicModel)
{ {
// Check that we don't have more than 32 nested parenthesis because Matlab does not suppor this. See Issue #1201 // Check that we don't have more than 32 nested parenthesis because Matlab does not suppor this. See Issue #1201
map<string, string> tmp_paren_vars; map<string, string> tmp_paren_vars;
...@@ -2565,7 +2565,7 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput, ...@@ -2565,7 +2565,7 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput,
writeDynamicMatlabCompatLayer(basename); writeDynamicMatlabCompatLayer(basename);
} }
else if (output_type == oCDynamicModel) else if (output_type == ExprNodeOutputType::CDynamicModel)
{ {
DynamicOutput << "void Dynamic(double *y, double *x, int nb_row_x, double *params, double *steady_state, int it_, double *residual, double *g1, double *v2, double *v3)" << endl DynamicOutput << "void Dynamic(double *y, double *x, int nb_row_x, double *params, double *steady_state, int it_, double *residual, double *g1, double *v2, double *v3)" << endl
<< "{" << endl << "{" << endl
...@@ -3428,7 +3428,7 @@ DynamicModel::writeOutput(ostream &output, const string &basename, bool block_de ...@@ -3428,7 +3428,7 @@ DynamicModel::writeOutput(ostream &output, const string &basename, bool block_de
// Write PacExpectationInfo // Write PacExpectationInfo
for (auto it : pac_expectation_info) for (auto it : pac_expectation_info)
it->ExprNode::writeOutput(output, oMatlabDynamicModel); it->ExprNode::writeOutput(output, ExprNodeOutputType::matlabDynamicModel);
} }
map<pair<int, pair<int, int >>, expr_t> map<pair<int, pair<int, int >>, expr_t>
...@@ -4652,7 +4652,7 @@ void ...@@ -4652,7 +4652,7 @@ void
DynamicModel::writeSetAuxiliaryVariables(const string &basename, const bool julia) const DynamicModel::writeSetAuxiliaryVariables(const string &basename, const bool julia) const
{ {
ostringstream output_func_body; ostringstream output_func_body;
writeAuxVarRecursiveDefinitions(output_func_body, oMatlabDseries); writeAuxVarRecursiveDefinitions(output_func_body, ExprNodeOutputType::matlabDseries);
if (output_func_body.str().empty()) if (output_func_body.str().empty())
return; return;
...@@ -5185,7 +5185,7 @@ DynamicModel::writeParamsDerivativesFile(const string &basename, bool julia) con ...@@ -5185,7 +5185,7 @@ DynamicModel::writeParamsDerivativesFile(const string &basename, bool julia) con
&& !hessian_params_derivatives.size()) && !hessian_params_derivatives.size())
return; return;
ExprNodeOutputType output_type = (julia ? oJuliaDynamicModel : oMatlabDynamicModel); ExprNodeOutputType output_type = (julia ? ExprNodeOutputType::juliaDynamicModel : ExprNodeOutputType::matlabDynamicModel);
ostringstream model_local_vars_output; // Used for storing model local vars ostringstream model_local_vars_output; // Used for storing model local vars
ostringstream model_output; // Used for storing model temp vars and equations ostringstream model_output; // Used for storing model temp vars and equations
ostringstream jacobian_output; // Used for storing jacobian equations ostringstream jacobian_output; // Used for storing jacobian equations
...@@ -5422,13 +5422,13 @@ DynamicModel::writeParamsDerivativesFile(const string &basename, bool julia) con ...@@ -5422,13 +5422,13 @@ DynamicModel::writeParamsDerivativesFile(const string &basename, bool julia) con
void void
DynamicModel::writeLatexFile(const string &basename, const bool write_equation_tags) const DynamicModel::writeLatexFile(const string &basename, const bool write_equation_tags) const
{ {
writeLatexModelFile(basename + "_dynamic", oLatexDynamicModel, write_equation_tags); writeLatexModelFile(basename + "_dynamic", ExprNodeOutputType::latexDynamicModel, write_equation_tags);
} }
void void
DynamicModel::writeLatexOriginalFile(const string &basename, const bool write_equation_tags) const DynamicModel::writeLatexOriginalFile(const string &basename, const bool write_equation_tags) const
{ {
writeLatexModelFile(basename + "_original", oLatexDynamicModel, write_equation_tags); writeLatexModelFile(basename + "_original", ExprNodeOutputType::latexDynamicModel, write_equation_tags);
} }
void void
...@@ -5908,7 +5908,7 @@ DynamicModel::isChecksumMatching(const string &basename) const ...@@ -5908,7 +5908,7 @@ DynamicModel::isChecksumMatching(const string &basename) const
<< equation_tag.second.first << equation_tag.second.first
<< equation_tag.second.second; << equation_tag.second.second;
ExprNodeOutputType buffer_type = oCDynamicModel; ExprNodeOutputType buffer_type = ExprNodeOutputType::CDynamicModel;
for (int eq = 0; eq < (int) equations.size(); eq++) for (int eq = 0; eq < (int) equations.size(); eq++)
{ {
......
This diff is collapsed.
...@@ -67,65 +67,81 @@ using deriv_node_temp_terms_t = map<pair<int, vector<expr_t>>, int>; ...@@ -67,65 +67,81 @@ using deriv_node_temp_terms_t = map<pair<int, vector<expr_t>>, int>;
using diff_table_t = map<expr_t, map<int, expr_t>>; using diff_table_t = map<expr_t, map<int, expr_t>>;
//! Possible types of output when writing ExprNode(s) //! Possible types of output when writing ExprNode(s)
enum ExprNodeOutputType enum class ExprNodeOutputType
{ {
oMatlabStaticModel, //!< Matlab code, static model matlabStaticModel, //!< Matlab code, static model
oMatlabDynamicModel, //!< Matlab code, dynamic model matlabDynamicModel, //!< Matlab code, dynamic model
oMatlabStaticModelSparse, //!< Matlab code, static block decomposed model matlabStaticModelSparse, //!< Matlab code, static block decomposed model
oMatlabDynamicModelSparse, //!< Matlab code, dynamic block decomposed model matlabDynamicModelSparse, //!< Matlab code, dynamic block decomposed model
oCDynamicModel, //!< C code, dynamic model CDynamicModel, //!< C code, dynamic model
oCStaticModel, //!< C code, static model CStaticModel, //!< C code, static model
oJuliaStaticModel, //!< Julia code, static model juliaStaticModel, //!< Julia code, static model
oJuliaDynamicModel, //!< Julia code, dynamic model juliaDynamicModel, //!< Julia code, dynamic model
oMatlabOutsideModel, //!< Matlab code, outside model block (for example in initval) matlabOutsideModel, //!< Matlab code, outside model block (for example in initval)
oLatexStaticModel, //!< LaTeX code, static model latexStaticModel, //!< LaTeX code, static model
oLatexDynamicModel, //!< LaTeX code, dynamic model latexDynamicModel, //!< LaTeX code, dynamic model
oLatexDynamicSteadyStateOperator, //!< LaTeX code, dynamic model, inside a steady state operator latexDynamicSteadyStateOperator, //!< LaTeX code, dynamic model, inside a steady state operator
oMatlabDynamicSteadyStateOperator, //!< Matlab code, dynamic model, inside a steady state operator matlabDynamicSteadyStateOperator, //!< Matlab code, dynamic model, inside a steady state operator
oMatlabDynamicSparseSteadyStateOperator, //!< Matlab code, dynamic block decomposed model, inside a steady state operator matlabDynamicSparseSteadyStateOperator, //!< Matlab code, dynamic block decomposed model, inside a steady state operator
oCDynamicSteadyStateOperator, //!< C code, dynamic model, inside a steady state operator CDynamicSteadyStateOperator, //!< C code, dynamic model, inside a steady state operator
oJuliaDynamicSteadyStateOperator, //!< Julia code, dynamic model, inside a steady state operator juliaDynamicSteadyStateOperator, //!< Julia code, dynamic model, inside a steady state operator
oSteadyStateFile, //!< Matlab code, in the generated steady state file steadyStateFile, //!< Matlab code, in the generated steady state file
oJuliaSteadyStateFile, //!< Julia code, in the generated steady state file juliaSteadyStateFile, //!< Julia code, in the generated steady state file
oMatlabDseries, //!< Matlab code for dseries matlabDseries, //!< Matlab code for dseries
oEpilogueFile //!< Matlab code, in the generated epilogue file epilogueFile //!< Matlab code, in the generated epilogue file
}; };
#define IS_MATLAB(output_type) ((output_type) == oMatlabStaticModel \ inline bool
|| (output_type) == oMatlabDynamicModel \ isMatlabOutput(ExprNodeOutputType output_type)
|| (output_type) == oMatlabOutsideModel \ {
|| (output_type) == oMatlabStaticModelSparse \ return output_type == ExprNodeOutputType::matlabStaticModel
|| (output_type) == oMatlabDynamicModelSparse \ || output_type == ExprNodeOutputType::matlabDynamicModel
|| (output_type) == oMatlabDynamicSteadyStateOperator \ || output_type == ExprNodeOutputType::matlabOutsideModel
|| (output_type) == oMatlabDynamicSparseSteadyStateOperator \ || output_type == ExprNodeOutputType::matlabStaticModelSparse
|| (output_type) == oSteadyStateFile \ || output_type == ExprNodeOutputType::matlabDynamicModelSparse
|| (output_type) == oMatlabDseries \ || output_type == ExprNodeOutputType::matlabDynamicSteadyStateOperator
|| (output_type) == oEpilogueFile) || output_type == ExprNodeOutputType::matlabDynamicSparseSteadyStateOperator
|| output_type == ExprNodeOutputType::steadyStateFile
#define IS_JULIA(output_type) ((output_type) == oJuliaStaticModel \ || output_type == ExprNodeOutputType::matlabDseries
|| (output_type) == oJuliaDynamicModel \ || output_type == ExprNodeOutputType::epilogueFile;
|| (output_type) == oJuliaDynamicSteadyStateOperator \ }
|| (output_type) == oJuliaSteadyStateFile)
inline bool
#define IS_C(output_type) ((output_type) == oCDynamicModel \ isJuliaOutput(ExprNodeOutputType output_type)
|| (output_type) == oCStaticModel \ {
|| (output_type) == oCDynamicSteadyStateOperator) return output_type == ExprNodeOutputType::juliaStaticModel
|| output_type == ExprNodeOutputType::juliaDynamicModel
#define IS_LATEX(output_type) ((output_type) == oLatexStaticModel \ || output_type == ExprNodeOutputType::juliaDynamicSteadyStateOperator
|| (output_type) == oLatexDynamicModel \ || output_type == ExprNodeOutputType::juliaSteadyStateFile;
|| (output_type) == oLatexDynamicSteadyStateOperator) }
inline bool
isCOutput(ExprNodeOutputType output_type)
{
return output_type == ExprNodeOutputType::CDynamicModel
|| output_type == ExprNodeOutputType::CStaticModel
|| output_type == ExprNodeOutputType::CDynamicSteadyStateOperator;
}
inline bool
isLatexOutput(ExprNodeOutputType output_type)
{
return output_type == ExprNodeOutputType::latexStaticModel
|| output_type == ExprNodeOutputType::latexDynamicModel
|| output_type == ExprNodeOutputType::latexDynamicSteadyStateOperator;
}
/* Equal to 1 for Matlab langage or Julia, or to 0 for C language. Not defined for LaTeX. /* Equal to 1 for Matlab langage or Julia, or to 0 for C language. Not defined for LaTeX.
In Matlab and Julia, array indexes begin at 1, while they begin at 0 in C */ In Matlab and Julia, array indexes begin at 1, while they begin at 0 in C */
#define ARRAY_SUBSCRIPT_OFFSET(output_type) ((int) (IS_MATLAB(output_type) || IS_JULIA(output_type))) #define ARRAY_SUBSCRIPT_OFFSET(output_type) ((int) (isMatlabOutput(output_type) || isJuliaOutput(output_type)))
// Left and right array subscript delimiters: '(' and ')' for Matlab, '[' and ']' for C // Left and right array subscript delimiters: '(' and ')' for Matlab, '[' and ']' for C
#define LEFT_ARRAY_SUBSCRIPT(output_type) (IS_MATLAB(output_type) ? '(' : '[') #define LEFT_ARRAY_SUBSCRIPT(output_type) (isMatlabOutput(output_type) ? '(' : '[')
#define RIGHT_ARRAY_SUBSCRIPT(output_type) (IS_MATLAB(output_type) ? ')' : ']') #define RIGHT_ARRAY_SUBSCRIPT(output_type) (isMatlabOutput(output_type) ? ')' : ']')
// Left and right parentheses // Left and right parentheses
#define LEFT_PAR(output_type) (IS_LATEX(output_type) ? "\\left(" : "(") #define LEFT_PAR(output_type) (isLatexOutput(output_type) ? "\\left(" : "(")
#define RIGHT_PAR(output_type) (IS_LATEX(output_type) ? "\\right)" : ")") #define RIGHT_PAR(output_type) (isLatexOutput(output_type) ? "\\right)" : ")")
//! Base class for expression nodes //! Base class for expression nodes
class ExprNode class ExprNode
......
...@@ -1009,19 +1009,19 @@ ModFile::writeOutputFiles(const string &basename, bool clear_all, bool clear_glo ...@@ -1009,19 +1009,19 @@ ModFile::writeOutputFiles(const string &basename, bool clear_all, bool clear_glo
auto ivs = dynamic_cast<InitValStatement *>(statement.get()); auto ivs = dynamic_cast<InitValStatement *>(statement.get());
if (ivs != nullptr) if (ivs != nullptr)
{ {
static_model.writeAuxVarInitval(mOutputFile, oMatlabOutsideModel); static_model.writeAuxVarInitval(mOutputFile, ExprNodeOutputType::matlabOutsideModel);
ivs->writeOutputPostInit(mOutputFile); ivs->writeOutputPostInit(mOutputFile);
} }
// Special treatment for endval block: insert initial values for the auxiliary variables // Special treatment for endval block: insert initial values for the auxiliary variables
auto evs = dynamic_cast<EndValStatement *>(statement.get()); auto evs = dynamic_cast<EndValStatement *>(statement.get());
if (evs != nullptr) if (evs != nullptr)
static_model.writeAuxVarInitval(mOutputFile, oMatlabOutsideModel); static_model.writeAuxVarInitval(mOutputFile, ExprNodeOutputType::matlabOutsideModel);
// Special treatment for load params and steady state statement: insert initial values for the auxiliary variables // Special treatment for load params and steady state statement: insert initial values for the auxiliary variables
auto lpass = dynamic_cast<LoadParamsAndSteadyStateStatement *>(statement.get()); auto lpass = dynamic_cast<LoadParamsAndSteadyStateStatement *>(statement.get());
if (lpass && !no_static) if (lpass && !no_static)
static_model.writeAuxVarInitval(mOutputFile, oMatlabOutsideModel); static_model.writeAuxVarInitval(mOutputFile, ExprNodeOutputType::matlabOutsideModel);
} }
mOutputFile << "save('" << basename << "_results.mat', 'oo_', 'M_', 'options_');" << endl mOutputFile << "save('" << basename << "_results.mat', 'oo_', 'M_', 'options_');" << endl
......
...@@ -147,7 +147,7 @@ SteadyStateModel::writeLatexSteadyStateFile(const string &basename) const ...@@ -147,7 +147,7 @@ SteadyStateModel::writeLatexSteadyStateFile(const string &basename) const
expr_t value = it.second; expr_t value = it.second;
content_output << "\\begin{dmath}" << endl content_output << "\\begin{dmath}" << endl
<< symbol_table.getTeXName(id) << " = "; << symbol_table.getTeXName(id) << " = ";
value->writeOutput(content_output, oLatexStaticModel); value->writeOutput(content_output, ExprNodeOutputType::latexStaticModel);
content_output << endl << "\\end{dmath}" << endl; content_output << endl << "\\end{dmath}" << endl;
} }
...@@ -175,7 +175,7 @@ SteadyStateModel::writeSteadyStateFile(const string &basename, bool ramsey_model ...@@ -175,7 +175,7 @@ SteadyStateModel::writeSteadyStateFile(const string &basename, bool ramsey_model
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
ExprNodeOutputType output_type = (julia ? oJuliaSteadyStateFile : oSteadyStateFile); ExprNodeOutputType output_type = (julia ? ExprNodeOutputType::juliaSteadyStateFile : ExprNodeOutputType::steadyStateFile);
if (!julia) if (!julia)
output << "function [ys_, params, info] = steadystate(" output << "function [ys_, params, info] = steadystate("
...@@ -328,7 +328,7 @@ Epilogue::writeEpilogueFile(const string &basename) const ...@@ -328,7 +328,7 @@ Epilogue::writeEpilogueFile(const string &basename) const
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
ExprNodeOutputType output_type = oEpilogueFile; ExprNodeOutputType output_type = ExprNodeOutputType::epilogueFile;
output << "function ds = epilogue(params, ds)" << endl output << "function ds = epilogue(params, ds)" << endl
<< "% function ds = epilogue(params, ds)" << endl << "% function ds = epilogue(params, ds)" << endl
<< "% Epilogue file generated by Dynare preprocessor" << endl << endl << "% Epilogue file generated by Dynare preprocessor" << endl << endl
......
...@@ -279,7 +279,7 @@ ModelTree::evaluateAndReduceJacobian(const eval_context_t &eval_context, jacob_m ...@@ -279,7 +279,7 @@ ModelTree::evaluateAndReduceJacobian(const eval_context_t &eval_context, jacob_m
catch (ExprNode::EvalException &e) catch (ExprNode::EvalException &e)
{ {
cerr << "ERROR: evaluation of Jacobian failed for equation " << eq+1 << " (line " << equations_lineno[eq] << ") and variable " << symbol_table.getName(symb) << "(" << lag << ") [" << symb << "] !" << endl; cerr << "ERROR: evaluation of Jacobian failed for equation " << eq+1 << " (line " << equations_lineno[eq] << ") and variable " << symbol_table.getName(symb) << "(" << lag << ") [" << symb << "] !" << endl;
Id->writeOutput(cerr, oMatlabDynamicModelSparse, temporary_terms, {}); Id->writeOutput(cerr, ExprNodeOutputType::matlabDynamicModelSparse, temporary_terms, {});
cerr << endl; cerr << endl;
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
...@@ -1193,16 +1193,16 @@ ModelTree::writeModelLocalVariableTemporaryTerms(const temporary_terms_t &tto, c ...@@ -1193,16 +1193,16 @@ ModelTree::writeModelLocalVariableTemporaryTerms(const temporary_terms_t &tto, c
temporary_terms_t tt2; temporary_terms_t tt2;
for (auto it : tt) for (auto it : tt)
{ {
if (IS_C(output_type)) if (isCOutput(output_type))
output << "double "; output << "double ";
else if (IS_JULIA(output_type)) else if (isJuliaOutput(output_type))
output << " @inbounds const "; output << " @inbounds const ";
it.first->writeOutput(output, output_type, tto, temporary_terms_idxs, tef_terms); it.first->writeOutput(output, output_type, tto, temporary_terms_idxs, tef_terms);
output << " = "; output << " = ";
it.second->writeOutput(output, output_type, tt2, temporary_terms_idxs, tef_terms); it.second->writeOutput(output, output_type, tt2, temporary_terms_idxs, tef_terms);
if (IS_C(output_type) || IS_MATLAB(output_type)) if (isCOutput(output_type) || isMatlabOutput(output_type))
output << ";"; output << ";";
output << endl; output << endl;
...@@ -1225,16 +1225,16 @@ ModelTree::writeTemporaryTerms(const temporary_terms_t &tt, ...@@ -1225,16 +1225,16 @@ ModelTree::writeTemporaryTerms(const temporary_terms_t &tt,
if (dynamic_cast<AbstractExternalFunctionNode *>(*it) != nullptr) if (dynamic_cast<AbstractExternalFunctionNode *>(*it) != nullptr)
(*it)->writeExternalFunctionOutput(output, output_type, tt2, tt_idxs, tef_terms); (*it)->writeExternalFunctionOutput(output, output_type, tt2, tt_idxs, tef_terms);
if (IS_C(output_type)) if (isCOutput(output_type))
output << "double "; output << "double ";
else if (IS_JULIA(output_type)) else if (isJuliaOutput(output_type))
output << " @inbounds "; output << " @inbounds ";
(*it)->writeOutput(output, output_type, tt, tt_idxs, tef_terms); (*it)->writeOutput(output, output_type, tt, tt_idxs, tef_terms);
output << " = "; output << " = ";
(*it)->writeOutput(output, output_type, tt2, tt_idxs, tef_terms); (*it)->writeOutput(output, output_type, tt2, tt_idxs, tef_terms);
if (IS_C(output_type) || IS_MATLAB(output_type)) if (isCOutput(output_type) || isMatlabOutput(output_type))
output << ";"; output << ";";
output << endl; output << endl;
...@@ -1527,7 +1527,7 @@ ModelTree::writeModelEquations(ostream &output, ExprNodeOutputType output_type, ...@@ -1527,7 +1527,7 @@ ModelTree::writeModelEquations(ostream &output, ExprNodeOutputType output_type,
} }
if (vrhs != 0) // The right hand side of the equation is not empty ==> residual=lhs-rhs; if (vrhs != 0) // The right hand side of the equation is not empty ==> residual=lhs-rhs;
if (IS_JULIA(output_type)) if (isJuliaOutput(output_type))
{ {
output << " @inbounds residual" << LEFT_ARRAY_SUBSCRIPT(output_type) output << " @inbounds residual" << LEFT_ARRAY_SUBSCRIPT(output_type)
<< eq + ARRAY_SUBSCRIPT_OFFSET(output_type) << eq + ARRAY_SUBSCRIPT_OFFSET(output_type)
...@@ -1553,7 +1553,7 @@ ModelTree::writeModelEquations(ostream &output, ExprNodeOutputType output_type, ...@@ -1553,7 +1553,7 @@ ModelTree::writeModelEquations(ostream &output, ExprNodeOutputType output_type,
} }
else // The right hand side of the equation is empty ==> residual=lhs; else // The right hand side of the equation is empty ==> residual=lhs;
{ {
if (IS_JULIA(output_type)) if (isJuliaOutput(output_type))
output << " @inbounds "; output << " @inbounds ";
output << "residual" << LEFT_ARRAY_SUBSCRIPT(output_type) output << "residual" << LEFT_ARRAY_SUBSCRIPT(output_type)
<< eq + ARRAY_SUBSCRIPT_OFFSET(output_type) << eq + ARRAY_SUBSCRIPT_OFFSET(output_type)
...@@ -1801,10 +1801,10 @@ ModelTree::set_cutoff_to_zero() ...@@ -1801,10 +1801,10 @@ ModelTree::set_cutoff_to_zero()
void void
ModelTree::jacobianHelper(ostream &output, int eq_nb, int col_nb, ExprNodeOutputType output_type) const ModelTree::jacobianHelper(ostream &output, int eq_nb, int col_nb, ExprNodeOutputType output_type) const
{ {
if (IS_JULIA(output_type)) if (isJuliaOutput(output_type))
output << " @inbounds "; output << " @inbounds ";
output << "g1" << LEFT_ARRAY_SUBSCRIPT(output_type); output << "g1" << LEFT_ARRAY_SUBSCRIPT(output_type);
if (IS_MATLAB(output_type) || IS_JULIA(output_type)) if (isMatlabOutput(output_type) || isJuliaOutput(output_type))
output << eq_nb + 1 << "," << col_nb + 1; output << eq_nb + 1 << "," << col_nb + 1;
else else
output << eq_nb + col_nb *equations.size(); output << eq_nb + col_nb *equations.size();
...@@ -1815,7 +1815,7 @@ void ...@@ -1815,7 +1815,7 @@ void
ModelTree::sparseHelper(int order, ostream &output, int row_nb, int col_nb, ExprNodeOutputType output_type) const ModelTree::sparseHelper(int order, ostream &output, int row_nb, int col_nb, ExprNodeOutputType output_type) const
{ {
output << "v" << order << LEFT_ARRAY_SUBSCRIPT(output_type); output << "v" << order << LEFT_ARRAY_SUBSCRIPT(output_type);
if (IS_MATLAB(output_type) || IS_JULIA(output_type)) if (isMatlabOutput(output_type) || isJuliaOutput(output_type))
output << row_nb + 1 << "," << col_nb + 1; output << row_nb + 1 << "," << col_nb + 1;
else else
output << row_nb + col_nb * NNZDerivatives[order-1]; output << row_nb + col_nb * NNZDerivatives[order-1];
......
...@@ -203,7 +203,7 @@ StaticModel::writeModelEquationsOrdered_M(const string &basename) const ...@@ -203,7 +203,7 @@ StaticModel::writeModelEquationsOrdered_M(const string &basename) const
deriv_node_temp_terms_t tef_terms; deriv_node_temp_terms_t tef_terms;
ExprNodeOutputType local_output_type; ExprNodeOutputType local_output_type;
local_output_type = oMatlabStaticModelSparse; local_output_type = ExprNodeOutputType::matlabStaticModelSparse;
if (global_temporary_terms) if (global_temporary_terms)
local_temporary_terms = temporary_terms; local_temporary_terms = temporary_terms;
...@@ -1343,8 +1343,8 @@ StaticModel::writeStaticModel(const string &basename, ...@@ -1343,8 +1343,8 @@ StaticModel::writeStaticModel(const string &basename,
ostringstream third_derivatives_output; // Used for storing third order derivatives equations ostringstream third_derivatives_output; // Used for storing third order derivatives equations
ostringstream for_sym; ostringstream for_sym;
ExprNodeOutputType output_type = (use_dll ? oCStaticModel : ExprNodeOutputType output_type = (use_dll ? ExprNodeOutputType::CStaticModel :
julia ? oJuliaStaticModel : oMatlabStaticModel); julia ? ExprNodeOutputType::juliaStaticModel : ExprNodeOutputType::matlabStaticModel);
deriv_node_temp_terms_t tef_terms; deriv_node_temp_terms_t tef_terms;
temporary_terms_t temp_term_union; temporary_terms_t temp_term_union;
...@@ -1415,7 +1415,7 @@ StaticModel::writeStaticModel(const string &basename, ...@@ -1415,7 +1415,7 @@ StaticModel::writeStaticModel(const string &basename,
int col_nb = tsid1*symbol_table.endo_nbr()+tsid2; int col_nb = tsid1*symbol_table.endo_nbr()+tsid2;
int col_nb_sym = tsid2*symbol_table.endo_nbr()+tsid1; int col_nb_sym = tsid2*symbol_table.endo_nbr()+tsid1;
if (output_type == oJuliaStaticModel) if (output_type == ExprNodeOutputType::juliaStaticModel)
{ {
for_sym << "g2[" << eq + 1 << "," << col_nb