From 1c813a1cf91fecf29f3575f7cf730077ed2a28d0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Tue, 24 Jan 2023 14:11:27 +0100
Subject: [PATCH] =?UTF-8?q?Run=20detrending=20engine=20if=20trend=20variab?=
 =?UTF-8?q?les=20are=20present,=20even=20if=20unused=20in=20a=20var(deflat?=
 =?UTF-8?q?or=3D=E2=80=A6)=20statement?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes: #113
---
 src/DynamicModel.cc  | 2 +-
 src/ParsingDriver.cc | 4 ++++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index fe6bdda8..459810de 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -2879,7 +2879,7 @@ DynamicModel::computeDynJacobianCols()
   for (const auto &[symb_lag, deriv_id] : deriv_id_table)
     {
       int symb_id{symb_lag.first};
-      int tsid{symbol_table.getTypeSpecificID(symb_id)};
+      int tsid{symbol_table.getTypeSpecificID(symb_id)}; // At this point, there is no trend_var
       if (SymbolType type{symbol_table.getType(symb_id)};
           type == SymbolType::exogenous)
         dyn_jacobian_cols_table[deriv_id] = ordered_dyn_endo.size() + tsid;
diff --git a/src/ParsingDriver.cc b/src/ParsingDriver.cc
index 0ca6faff..83192410 100644
--- a/src/ParsingDriver.cc
+++ b/src/ParsingDriver.cc
@@ -272,6 +272,10 @@ ParsingDriver::set_planner_discount_latex_name(string tex_name)
 void
 ParsingDriver::end_trend_var(bool log_trend, expr_t growth_factor, const vector<pair<string, string>> &symbol_list)
 {
+  /* Run detrending engine if trend variables are present, even if unused in
+     a var(deflator=…) statement (see #113). */
+  mod_file->nonstationary_variables = true;
+
   vector<int> declared_trend_vars;
   for (auto &[name, tex_name] : symbol_list)
     {
-- 
GitLab