diff --git a/ComputingTasks.cc b/ComputingTasks.cc index 38b0e8ba..e5fbb474 100644 --- a/ComputingTasks.cc +++ b/ComputingTasks.cc @@ -629,6 +629,12 @@ OsrParamsStatement::OsrParamsStatement(const SymbolList &symbol_list_arg) : { } +void +OsrParamsStatement::checkPass(ModFileStructure &mod_file_struct) +{ + mod_file_struct.osr_params_present = true; +} + void OsrParamsStatement::writeOutput(ostream &output, const string &basename) const { @@ -681,6 +687,12 @@ OptimWeightsStatement::OptimWeightsStatement(const var_weights_t &var_weights_ar { } +void +OptimWeightsStatement::checkPass(ModFileStructure &mod_file_struct) +{ + mod_file_struct.optim_weights_present = true; +} + void OptimWeightsStatement::writeOutput(ostream &output, const string &basename) const { diff --git a/ComputingTasks.hh b/ComputingTasks.hh index fd23cdd5..e265e958 100644 --- a/ComputingTasks.hh +++ b/ComputingTasks.hh @@ -185,6 +185,7 @@ private: const SymbolList symbol_list; public: OsrParamsStatement(const SymbolList &symbol_list_arg); + virtual void checkPass(ModFileStructure &mod_file_struct); virtual void writeOutput(ostream &output, const string &basename) const; }; @@ -308,6 +309,7 @@ public: OptimWeightsStatement(const var_weights_t &var_weights_arg, const covar_weights_t &covar_weights_arg, const SymbolTable &symbol_table_arg); + virtual void checkPass(ModFileStructure &mod_file_struct); virtual void writeOutput(ostream &output, const string &basename) const; }; diff --git a/ModFile.cc b/ModFile.cc index 1499e8dc..2138c7e2 100644 --- a/ModFile.cc +++ b/ModFile.cc @@ -130,6 +130,14 @@ ModFile::checkPass() exit(EXIT_FAILURE); } + if ((mod_file_struct.osr_present && (!mod_file_struct.osr_params_present || !mod_file_struct.optim_weights_present)) + || ((!mod_file_struct.osr_present || !mod_file_struct.osr_params_present) && mod_file_struct.optim_weights_present) + || ((!mod_file_struct.osr_present || !mod_file_struct.optim_weights_present) && mod_file_struct.osr_params_present)) + { + cerr << "ERROR: The osr statement must be used with osr_params and optim_weights." << endl; + exit(EXIT_FAILURE); + } + if (mod_file_struct.simul_present && stochastic_statement_present) { cerr << "ERROR: A .mod file cannot contain both a simul command and one of {stoch_simul, estimation, osr, ramsey_policy}" << endl; diff --git a/Statement.cc b/Statement.cc index c9b29452..f8b4936b 100644 --- a/Statement.cc +++ b/Statement.cc @@ -26,6 +26,8 @@ ModFileStructure::ModFileStructure() : stoch_simul_present(false), estimation_present(false), osr_present(false), + osr_params_present(false), + optim_weights_present(false), ramsey_policy_present(false), planner_objective_present(false), order_option(0), diff --git a/Statement.hh b/Statement.hh index 2778771b..a16f1646 100644 --- a/Statement.hh +++ b/Statement.hh @@ -44,6 +44,10 @@ public: bool estimation_present; //! Whether an osr statement is present bool osr_present; + //! Whether an osr params statement is present + bool osr_params_present; + //! Whether an optim weight statement is present + bool optim_weights_present; //! Whether a ramsey_policy statement is present bool ramsey_policy_present; //! Whether a planner_objective statement is present