diff --git a/DynareBison.yy b/DynareBison.yy index 98274dc7fd13e68a04bf7b7ddb720031b65b635a..9a3bca1b7cbbae97d1075a4c034d78e9d7055f7d 100644 --- a/DynareBison.yy +++ b/DynareBison.yy @@ -118,7 +118,7 @@ class ParsingDriver; %token NAN_CONSTANT NO_STATIC NOBS NOCONSTANT NODISPLAY NOCORR NODIAGNOSTIC NOFUNCTIONS %token NOGRAPH NOMOMENTS NOPRINT NORMAL_PDF %token OBSERVATION_TRENDS OPTIM OPTIM_WEIGHTS ORDER OSR OSR_PARAMS MAX_DIM_COVA_GROUP ADVANCED -%token PARAMETERS PARAMETER_SET PARTIAL_INFORMATION PERFECT_FORESIGHT PERIODS PLANNER_OBJECTIVE PLOT_CONDITIONAL_FORECAST PLOT_PRIORS PREFILTER PRESAMPLE +%token PARALLEL_LOCAL_FILES PARAMETERS PARAMETER_SET PARTIAL_INFORMATION PERFECT_FORESIGHT PERIODS PLANNER_OBJECTIVE PLOT_CONDITIONAL_FORECAST PLOT_PRIORS PREFILTER PRESAMPLE %token PRINT PRIOR_MC PRIOR_TRUNC PRIOR_MODE PRIOR_MEAN POSTERIOR_MODE POSTERIOR_MEAN POSTERIOR_MEDIAN PRUNING %token <string_val> QUOTED_STRING %token QZ_CRITERIUM FULL DSGE_VAR DSGE_VARLAG DSGE_PRIOR_WEIGHT TRUNCATE @@ -571,6 +571,7 @@ model_options : BLOCK { driver.block(); } | DIFFERENTIATE_FORWARD_VARS { driver.differentiate_forward_vars_all(); } | DIFFERENTIATE_FORWARD_VARS EQUAL '(' symbol_list ')' { driver.differentiate_forward_vars_some(); } | o_linear + | PARALLEL_LOCAL_FILES EQUAL '(' parallel_local_filename_list ')' ; model_options_list : model_options_list COMMA model_options @@ -1678,6 +1679,12 @@ filename : symbol | QUOTED_STRING ; +parallel_local_filename_list : filename + { driver.add_parallel_local_file($1); } + | parallel_local_filename_list COMMA filename + { driver.add_parallel_local_file($3); } + ; + mc_filename_list : filename { driver.add_mc_filename($1); } | filename '(' non_negative_number ')' diff --git a/DynareFlex.ll b/DynareFlex.ll index 4ac323d81f62adcf031ad6a885d5a91e3b6e9a6f..626d4b13ae0d7a465b6eeeff1d3e597cb567bbd5 100644 --- a/DynareFlex.ll +++ b/DynareFlex.ll @@ -570,6 +570,7 @@ string eofbuff; <DYNARE_BLOCK>all_values_required {return token::ALL_VALUES_REQUIRED;} <DYNARE_BLOCK>no_static {return token::NO_STATIC;} <DYNARE_BLOCK>differentiate_forward_vars {return token::DIFFERENTIATE_FORWARD_VARS;} +<DYNARE_BLOCK>parallel_local_files {return token::PARALLEL_LOCAL_FILES;} <DYNARE_STATEMENT,DYNARE_BLOCK>linear {return token::LINEAR;} diff --git a/ModFile.cc b/ModFile.cc index 86296273fccf48d5c178e049a4f213f193cc55b0..d8a6e2c1ef23d929735c8e17fd49c66b49ac37ca 100644 --- a/ModFile.cc +++ b/ModFile.cc @@ -531,6 +531,21 @@ ModFile::writeOutputFiles(const string &basename, bool clear_all, bool no_log, b << "options_.bytecode=" << byte_code << ";" << endl << "options_.use_dll=" << use_dll << ";" << endl; + if (parallel_local_files.size() > 0) + { + mOutputFile << "options_.parallel_info.local_files = {" << endl; + for (size_t i = 0; i < parallel_local_files.size(); i++) + { + size_t j = parallel_local_files[i].find_last_of("/\\"); + if (j == string::npos) + mOutputFile << "'', '" << parallel_local_files[i] << "';" << endl; + else + mOutputFile << "'" << parallel_local_files[i].substr(0, j+1) << "', '" + << parallel_local_files[i].substr(j+1, string::npos) << "';" << endl; + } + mOutputFile << "};" << endl; + } + config_file.writeCluster(mOutputFile); if (byte_code) diff --git a/ModFile.hh b/ModFile.hh index d2784d1a436e9cd4280027aef4987afca8a21379..aa7ccc61657a37bcc4ed53dea0f16b47651eef27 100644 --- a/ModFile.hh +++ b/ModFile.hh @@ -94,6 +94,10 @@ public: //! Stores the original number of equations in the model_block int ramsey_policy_orig_eqn_nbr; + //! Stores the list of extra files to be transefered during a parallel run + /*! (i.e. option parallel_local_files of model block) */ + vector<string> parallel_local_files; + private: //! List of statements vector<Statement *> statements; diff --git a/ParsingDriver.cc b/ParsingDriver.cc index 9747b6408c7fea571314d43f34c1e4d774f42602..a5f345634a5a2930ae5c724cb6714ddc6d8db230 100644 --- a/ParsingDriver.cc +++ b/ParsingDriver.cc @@ -2541,3 +2541,11 @@ ParsingDriver::model_diagnostics() { mod_file->addStatement(new ModelDiagnosticsStatement()); } + +void +ParsingDriver::add_parallel_local_file(string *filename) +{ + mod_file->parallel_local_files.push_back(*filename); + delete filename; +} + diff --git a/ParsingDriver.hh b/ParsingDriver.hh index 6d3fda9f09309234fbb20ac3b2df0eaf23dcca89..1ab71514d4872d3f56359a090e9cce5f4c0126e3 100644 --- a/ParsingDriver.hh +++ b/ParsingDriver.hh @@ -117,7 +117,7 @@ private: OptionsList options_list; //! Temporary storage for trend elements ObservationTrendsStatement::trend_elements_t trend_elements; - //! Temporary storage for filename list of ModelComparison + //! Temporary storage for filename list of ModelComparison (contains weights) ModelComparisonStatement::filename_list_t filename_list; //! Temporary storage for list of EstimationParams (from estimated_params* statements) vector<EstimationParams> estim_params_list; @@ -648,6 +648,8 @@ public: void process_graph_format_option(); //! Model diagnostics void model_diagnostics(); + //! Processing the parallel_local_files option + void add_parallel_local_file(string *filename); }; #endif // ! PARSING_DRIVER_HH