diff --git a/ComputingTasks.cc b/ComputingTasks.cc index 0aa27b6dca28f4cf16690f0cbc153fecd2430adc..2954c023810dc6d62cd36675371054ef81ebe97f 100644 --- a/ComputingTasks.cc +++ b/ComputingTasks.cc @@ -73,8 +73,8 @@ void ModelInfoStatement::writeOutput(ostream &output, const string &basename) co } -SimulStatement::SimulStatement(const OptionsList &options_list_arg) : - options_list(options_list_arg) +SimulStatement::SimulStatement(const OptionsList &options_list_arg, ModelTreeMode mode_arg) : + options_list(options_list_arg), mode(mode_arg) { } @@ -88,48 +88,32 @@ void SimulStatement::writeOutput(ostream &output, const string &basename) const { options_list.writeOutput(output); - output << "simul(oo_.dr);\n"; -} - -SimulSparseStatement::SimulSparseStatement(const OptionsList &options_list_arg, - int mode_arg) : - options_list(options_list_arg), - mode(mode_arg) -{ -} - -void -SimulSparseStatement::checkPass(ModFileStructure &mod_file_struct) -{ - mod_file_struct.simul_present = true; -} - -void -SimulSparseStatement::writeOutput(ostream &output, const string &basename) const -{ - options_list.writeOutput(output); - output << "if (~ options_.initval_file) & (size(oo_.endo_simul,2)<options_.periods)\n"; - output << " if ~isfield(options_,'datafile')\n"; - output << " make_y_;\n"; - output << " make_ex_;\n"; - output << " else\n"; - output << " read_data_;\n"; - output << " end\n"; - output << "end\n"; - if(mode==eSparseDLLMode) - output << "oo_.endo_simul=simulate;\n"; + if (mode == eStandardMode || mode == eDLLMode) + output << "simul(oo_.dr);\n"; else { - //output << "oo_.endo_simul=" << basename << "_dynamic();\n"; - output << basename << "_dynamic;\n"; + output << "if (~ options_.initval_file) & (size(oo_.endo_simul,2)<options_.periods)" << endl + << " if ~isfield(options_,'datafile')" << endl + << " make_y_;" << endl + << " make_ex_;" << endl + << " else" << endl + << " read_data_;" << endl + << " end" << endl + << "end" << endl; + if (mode == eSparseDLLMode) + output << "oo_.endo_simul=simulate;" << endl; + else + output << basename << "_dynamic;" << endl; + output << "dyn2vec;" << endl; } - output << "dyn2vec;\n"; } StochSimulStatement::StochSimulStatement(const SymbolList &symbol_list_arg, - const OptionsList &options_list_arg) : + const OptionsList &options_list_arg, + ModelTreeMode mode_arg) : symbol_list(symbol_list_arg), - options_list(options_list_arg) + options_list(options_list_arg), + mode(mode_arg) { } @@ -157,11 +141,10 @@ StochSimulStatement::writeOutput(ostream &output, const string &basename) const { options_list.writeOutput(output); symbol_list.writeOutput("var_list_", output); - output << "if (options_.model_mode == 1 || options_.model_mode == 3)\n"; - output << " info = stoch_simul_sparse(var_list_);\n"; - output << "else\n"; - output << " info = stoch_simul(var_list_);\n"; - output << "end\n"; + if (mode == eStandardMode || mode == eDLLMode) + output << "info = stoch_simul(var_list_);" << endl; + else + output << "info = stoch_simul_sparse(var_list_);" << endl; } ForecastStatement::ForecastStatement(const SymbolList &symbol_list_arg, diff --git a/ComputingTasks.hh b/ComputingTasks.hh index 6cd9581f5fb17df9a9e9c0d61c823bfd3ff4b019..bbc09f69c82711516588dee5b1374d9af71f93ae 100644 --- a/ComputingTasks.hh +++ b/ComputingTasks.hh @@ -50,19 +50,9 @@ class SimulStatement : public Statement { private: const OptionsList options_list; + const ModelTreeMode mode; public: - SimulStatement(const OptionsList &options_list_arg); - virtual void checkPass(ModFileStructure &mod_file_struct); - virtual void writeOutput(ostream &output, const string &basename) const; -}; - -class SimulSparseStatement : public Statement -{ -private: - const OptionsList options_list; - const int mode; -public: - SimulSparseStatement(const OptionsList &options_list_arg, int mode_arg); + SimulStatement(const OptionsList &options_list_arg, ModelTreeMode mode_arg); virtual void checkPass(ModFileStructure &mod_file_struct); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -82,9 +72,11 @@ class StochSimulStatement : public Statement private: const SymbolList symbol_list; const OptionsList options_list; + const ModelTreeMode mode; public: StochSimulStatement(const SymbolList &symbol_list_arg, - const OptionsList &options_list_arg); + const OptionsList &options_list_arg, + ModelTreeMode mode_arg); virtual void checkPass(ModFileStructure &mod_file_struct); virtual void writeOutput(ostream &output, const string &basename) const; }; diff --git a/DynareBison.yy b/DynareBison.yy index 59660e7c72a7e605b615ef49cb22ae661f4ad839..ef8ed73900740b77c92bb9bba671e40834906ff5 100644 --- a/DynareBison.yy +++ b/DynareBison.yy @@ -648,9 +648,9 @@ model_info : MODEL_INFO ';' ; simul : SIMUL ';' - { driver.simulate(); } + { driver.simul(); } | SIMUL '(' simul_options_list ')' ';' - { driver.simulate(); } + { driver.simul(); } ; simul_options_list : simul_options_list COMMA simul_options diff --git a/ParsingDriver.cc b/ParsingDriver.cc index 26fe3942e9ee1d4b04f45ef65fa05321f29e3a4d..20f2f254f7ba0ddd4884c7ccfbb2c78dddff33e0 100644 --- a/ParsingDriver.cc +++ b/ParsingDriver.cc @@ -676,34 +676,18 @@ void ParsingDriver::rplot() void ParsingDriver::stoch_simul() { - mod_file->addStatement(new StochSimulStatement(symbol_list, options_list)); + mod_file->addStatement(new StochSimulStatement(symbol_list, options_list, mod_file->dynamic_model.mode)); symbol_list.clear(); options_list.clear(); } -void ParsingDriver::simulate() -{ - if (mod_file->dynamic_model.mode == eSparseDLLMode || mod_file->dynamic_model.mode == eSparseMode) - simul_sparse(); - else - simul(); -} - -void -ParsingDriver::simul_sparse() -{ - mod_file->addStatement(new SimulSparseStatement(options_list, mod_file->dynamic_model.mode)); - options_list.clear(); -} - void ParsingDriver::simul() { - mod_file->addStatement(new SimulStatement(options_list)); + mod_file->addStatement(new SimulStatement(options_list, mod_file->dynamic_model.mode)); options_list.clear(); } - void ParsingDriver::model_info() { @@ -711,7 +695,6 @@ ParsingDriver::model_info() options_list.clear(); } - void ParsingDriver::check() { diff --git a/ParsingDriver.hh b/ParsingDriver.hh index 9976a463191a59d18a0acf85ffffa3750d70af7b..1f3864d13c5c0a06bcfcfd2a3beada2cfd97a892 100644 --- a/ParsingDriver.hh +++ b/ParsingDriver.hh @@ -282,10 +282,6 @@ public: void rplot(); //! Writes a stock_simul command void stoch_simul(); - //! Determine whether to write simul command or simul_sparse command - void simulate(); - //! Writes a simul_sparse command - void simul_sparse(); //! Writes a simul command void simul(); //! Writes check command