diff --git a/DynamicModel.cc b/DynamicModel.cc index 78be858b095ac706b75e7880ec543f343fefa96b..51ca2bebb571d73c89ff324c6e61eb7c0a52dcf2 100644 --- a/DynamicModel.cc +++ b/DynamicModel.cc @@ -1595,7 +1595,7 @@ DynamicModel::writeSparseDynamicMFile(const string &dynamic_basename, const stri mDynamicModelFile << " y = solve_one_boundary('" << dynamic_basename << "_" << i + 1 << "'" << ", y, x, params, y_index, " << nze << ", options_.periods, " << block_triangular.ModelBlock->Block_List[i].is_linear << - ", blck_num, y_kmin, options_.maxit_, options_.solve_tolf, options_.slowc, options_.cutoff, options_.stack_solve_algo, 1, 1, 0);\n"; + ", blck_num, y_kmin, options_.maxit_, options_.solve_tolf, options_.slowc, " << cutoff << ", options_.stack_solve_algo, 1, 1, 0);\n"; mDynamicModelFile << " tmp = y(:,M_.block_structure.block(" << i + 1 << ").variable);\n"; mDynamicModelFile << " if(isnan(tmp) | isinf(tmp))\n"; mDynamicModelFile << " disp(['Inf or Nan value during the resolution of block " << i <<"']);\n"; @@ -1626,7 +1626,7 @@ DynamicModel::writeSparseDynamicMFile(const string &dynamic_basename, const stri mDynamicModelFile << " y = solve_one_boundary('" << dynamic_basename << "_" << i + 1 << "'" << ", y, x, params, y_index, " << nze << ", options_.periods, " << block_triangular.ModelBlock->Block_List[i].is_linear << - ", blck_num, y_kmin, options_.maxit_, options_.solve_tolf, options_.slowc, options_.cutoff, options_.stack_solve_algo, 1, 1, 0);\n"; + ", blck_num, y_kmin, options_.maxit_, options_.solve_tolf, options_.slowc, " << cutoff << ", options_.stack_solve_algo, 1, 1, 0);\n"; mDynamicModelFile << " tmp = y(:,M_.block_structure.block(" << i + 1 << ").variable);\n"; mDynamicModelFile << " if(isnan(tmp) | isinf(tmp))\n"; mDynamicModelFile << " disp(['Inf or Nan value during the resolution of block " << i <<"']);\n"; @@ -1658,7 +1658,7 @@ DynamicModel::writeSparseDynamicMFile(const string &dynamic_basename, const stri ", options_.periods, " << block_triangular.ModelBlock->Block_List[i].Max_Lag << ", " << block_triangular.ModelBlock->Block_List[i].Max_Lead << ", " << block_triangular.ModelBlock->Block_List[i].is_linear << - ", blck_num, y_kmin, options_.maxit_, options_.solve_tolf, options_.slowc, options_.cutoff, options_.stack_solve_algo);\n"; + ", blck_num, y_kmin, options_.maxit_, options_.solve_tolf, options_.slowc, " << cutoff << ", options_.stack_solve_algo);\n"; mDynamicModelFile << " tmp = y(:,M_.block_structure.block(" << i + 1 << ").variable);\n"; mDynamicModelFile << " if(isnan(tmp) | isinf(tmp))\n"; mDynamicModelFile << " disp(['Inf or Nan value during the resolution of block " << i <<"']);\n"; diff --git a/DynareBison.yy b/DynareBison.yy index d978d5fd02f906863a08b61e2e40b78b34441b6f..79b67bbe017a1e5378185ba2e7ef779874a7d901 100644 --- a/DynareBison.yy +++ b/DynareBison.yy @@ -1495,9 +1495,9 @@ o_hp_filter : HP_FILTER EQUAL INT_NUMBER { driver.option_num("hp_filter", $3); } o_hp_ngrid : HP_NGRID EQUAL INT_NUMBER { driver.option_num("hp_ngrid", $3); }; o_periods : PERIODS EQUAL INT_NUMBER { driver.option_num("periods", $3); driver.option_num("simul", "1"); }; -o_cutoff : CUTOFF EQUAL number { driver.option_num("cutoff", $3); } +o_cutoff : CUTOFF EQUAL number { driver.cutoff($3); } o_markowitz : MARKOWITZ EQUAL number { driver.option_num("markowitz", $3); }; -o_mfs : MFS EQUAL number { driver.option_num("mfs", $3); }; +o_mfs : MFS EQUAL INT_NUMBER { driver.mfs($3); }; o_simul : SIMUL { driver.option_num("simul", "1"); }; o_simul_seed : SIMUL_SEED EQUAL INT_NUMBER { driver.option_num("simul_seed", $3); } ; o_qz_criterium : QZ_CRITERIUM EQUAL number { driver.option_num("qz_criterium", $3); }; diff --git a/ParsingDriver.cc b/ParsingDriver.cc index e3e4b2a805b14ec58dc8ad714e4a7c45304c51a0..9c2aa7409d42aa1261db8d6e4baf55f69011a154 100644 --- a/ParsingDriver.cc +++ b/ParsingDriver.cc @@ -355,6 +355,24 @@ ParsingDriver::byte_code() mod_file->byte_code = true; } +void +ParsingDriver::cutoff(string *value) +{ + double val = atof(value->c_str()); + mod_file->dynamic_model.cutoff = val; + mod_file->static_dll_model.cutoff = val; + delete value; +} + +void +ParsingDriver::mfs(string *value) +{ + int val = atoi(value->c_str()); + mod_file->dynamic_model.mfs = val; + mod_file->static_dll_model.mfs = val; + delete value; +} + void ParsingDriver::end_initval() { @@ -612,16 +630,6 @@ ParsingDriver::option_num(const string &name_option, const string &opt) if ((name_option == "periods") && mod_file->block) mod_file->dynamic_model.block_triangular.periods = atoi(opt.c_str()); - else if (name_option == "cutoff") - { - mod_file->dynamic_model.cutoff = atof(opt.c_str()); - mod_file->static_dll_model.cutoff = atof(opt.c_str()); - } - else if (name_option == "mfs") - { - mod_file->dynamic_model.mfs = atoi(opt.c_str()); - mod_file->static_dll_model.mfs = atoi(opt.c_str()); - } options_list.num_options[name_option] = opt; } diff --git a/ParsingDriver.hh b/ParsingDriver.hh index 07fdb9f5115f9ca91f6b021f87804eae52812b4d..7bc0752d4588806dc8942274fb016cf76b2fb28e 100644 --- a/ParsingDriver.hh +++ b/ParsingDriver.hh @@ -179,6 +179,10 @@ public: void block(); //! the model is stored in a binary file void byte_code(); + //! cutoff option of model block + void cutoff(string *value); + //! mfs option of model block + void mfs(string *value); //! Sets the FILENAME for the initial value in initval void initval_file(string *filename); //! Declares an endogenous variable