Commit 6bee53c6 authored by MichelJuillard's avatar MichelJuillard
Browse files

extended_preprocessor: fixed computation of steady state out of

steady_state_model
parent 1cfaddcd
...@@ -86,7 +86,10 @@ enum ExprNodeOutputType ...@@ -86,7 +86,10 @@ enum ExprNodeOutputType
|| (output_type) == oMatlabDynamicSparseSteadyStateOperator \ || (output_type) == oMatlabDynamicSparseSteadyStateOperator \
|| (output_type) == oSteadyStateFile) || (output_type) == oSteadyStateFile)
#define IS_C(output_type) ((output_type) == oCDynamicModel || (output_type) == oCStaticModel || (output_type) == oCDynamicSteadyStateOperator) #define IS_C(output_type) ((output_type) == oCDynamicModel \
|| (output_type) == oCStaticModel \
|| (output_type) == oCDynamicSteadyStateOperator \
|| (output_type) == oCSteadyStateFile)
#define IS_LATEX(output_type) ((output_type) == oLatexStaticModel \ #define IS_LATEX(output_type) ((output_type) == oLatexStaticModel \
|| (output_type) == oLatexDynamicModel \ || (output_type) == oLatexDynamicModel \
......
...@@ -158,14 +158,16 @@ SteadyStateModel::writeSteadyStateFileCC(const string &basename, bool ramsey_pol ...@@ -158,14 +158,16 @@ SteadyStateModel::writeSteadyStateFileCC(const string &basename, bool ramsey_pol
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
output << "#include <math.h>" << endl;
if (cuda) if (cuda)
output << "__global__ "; output << "__global__ ";
output << "void steadystate(" output << "void steadystate("
<< "const double *exo_, const double *params_, double *ys_, int *info)" << endl << "const double *exo_, const double *params, double *ys_, int *info)" << endl
<< "// Steady state file generated by Dynare preprocessor" << endl << "// Steady state file generated by Dynare preprocessor" << endl
<< "{" << endl << "{" << endl
<< " info = 0;" << endl; << " *info = 0;" << endl;
if (recursive_order.size() == 0) if (recursive_order.size() == 0)
{ {
...@@ -179,24 +181,18 @@ SteadyStateModel::writeSteadyStateFileCC(const string &basename, bool ramsey_pol ...@@ -179,24 +181,18 @@ SteadyStateModel::writeSteadyStateFileCC(const string &basename, bool ramsey_pol
const vector<int> &symb_ids = recursive_order[i]; const vector<int> &symb_ids = recursive_order[i];
output << " "; output << " ";
if (symb_ids.size() > 1) if (symb_ids.size() > 1)
output << "["; std::cout << "Error: in C, multiple returns are not permitted in steady_state_model" << std::endl;
for (size_t j = 0; j < symb_ids.size(); j++) variable_node_map_t::const_iterator it = variable_node_map.find(make_pair(symb_ids[0], 0));
{ assert(it != variable_node_map.end());
variable_node_map_t::const_iterator it = variable_node_map.find(make_pair(symb_ids[j], 0)); if (it->second->get_type() == eModFileLocalVariable)
assert(it != variable_node_map.end()); output << "double ";
dynamic_cast<ExprNode *>(it->second)->writeOutput(output, oSteadyStateFile); dynamic_cast<ExprNode *>(it->second)->writeOutput(output, oCSteadyStateFile);
if (j < symb_ids.size()-1)
output << ",";
}
if (symb_ids.size() > 1)
output << "]";
output << "="; output << "=";
def_table.find(symb_ids)->second->writeOutput(output, oSteadyStateFile); def_table.find(symb_ids)->second->writeOutput(output, oCSteadyStateFile);
output << ";" << endl; output << ";" << endl;
} }
output << " // Auxiliary equations" << endl; output << " // Auxiliary equations" << endl;
static_model.writeAuxVarInitval(output, oSteadyStateFile); static_model.writeAuxVarInitval(output, oCSteadyStateFile);
output << "}" << endl; output << "}" << endl;
} }
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment