From 9e6662737575c8e02eda5b0bddc0dce5fcf943b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org> Date: Thu, 20 Dec 2018 12:27:52 +0100 Subject: [PATCH] Fix for histval block in the presence of auxiliary lead variables Since 38152c34a478e2ecc1094d3d210dd4cf12a7edd4, the M_.endo_histval variable is generated via dynamic_set_auxiliary_dseries.m. The problem is that, for auxiliary variables corresponding to a lead, this will generate a NaN in M_.endo_histval. This is conceptually correct, since such variables are never used as initial conditions, but this is inconsistent with what we do with the "initval" block, and leads to crashes in some routines where we fail when there is a NaN. Therefore, replace these with a zero, as it used to be. --- src/NumericalInitialization.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/NumericalInitialization.cc b/src/NumericalInitialization.cc index 88a0a9cb..b7298cbe 100644 --- a/src/NumericalInitialization.cc +++ b/src/NumericalInitialization.cc @@ -380,7 +380,8 @@ HistValStatement::writeOutput(ostream &output, const string &basename, bool mini output << "if exist(['+' M_.fname '/dynamic_set_auxiliary_series'])" << endl << " eval(['M_.histval_dseries = ' M_.fname '.dynamic_set_auxiliary_series(M_.histval_dseries, []);']);" << endl << "end" << endl - << "M_.endo_histval = M_.histval_dseries{M_.endo_names{:}}(dates(sprintf('%dY', 1-M_.maximum_lag)):dates('0Y')).data';" << endl; + << "M_.endo_histval = M_.histval_dseries{M_.endo_names{:}}(dates(sprintf('%dY', 1-M_.maximum_lag)):dates('0Y')).data';" << endl + << "M_.endo_histval(isnan(M_.endo_histval)) = 0;" << endl; // Ensure that lead aux variables do not have a NaN if (symbol_table.exo_nbr() > 0) output << "M_.exo_histval = M_.histval_dseries{M_.exo_names{:}}(dates(sprintf('%dY', 1-M_.maximum_lag)):dates('0Y')).data';" << endl; -- GitLab