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