From 87aacc0f1ed2725327acc7ddfad2a5a31c0a5d10 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Tue, 26 May 2020 17:00:21 +0200
Subject: [PATCH] Block decomposition: fix simulation of blocks of type
 "evaluate backward" (without bytecode)

Ref. dynare#1727

(manually cherry picked from commit 3ca1914e033ce4c9cf9be0e3bb078a839dd2fa30)
---
 src/DynamicModel.cc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index 49f9dd90..9077c5e5 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -599,7 +599,7 @@ DynamicModel::writeModelEquationsOrdered_M(const string &basename) const
       else if (simulation_type == SOLVE_TWO_BOUNDARIES_COMPLETE || simulation_type == SOLVE_TWO_BOUNDARIES_SIMPLE)
         output << "  residual=zeros(" << block_mfs << ",y_kmin+periods);" << endl;
       if (simulation_type == EVALUATE_BACKWARD)
-        output << "  for it_ = (y_kmin+periods):y_kmin+1" << endl;
+        output << "  for it_ = (y_kmin+periods):-1:y_kmin+1" << endl;
       if (simulation_type == EVALUATE_FORWARD)
         output << "  for it_ = y_kmin+1:(y_kmin+periods)" << endl;
 
@@ -2148,7 +2148,7 @@ DynamicModel::writeSparseDynamicMFile(const string &basename) const
                             << "  oo_.deterministic_simulation.block(blck_num).error = 0;" << endl
                             << "  oo_.deterministic_simulation.block(blck_num).iterations = 0;" << endl
                             << "  g1=[];g2=[];g3=[];" << endl
-                            << "  " << basename << ".block.dynamic_" << block + 1 << "(y, x, params, steady_state, 0, y_kmin, periods);" << endl
+                            << "  y = " << basename << ".block.dynamic_" << block + 1 << "(y, x, params, steady_state, 0, y_kmin, periods);" << endl
                             << "  tmp = y(:,M_.block_structure.block(" << block + 1 << ").variable);" << endl
                             << "  if any(isnan(tmp) | isinf(tmp))" << endl
                             << "    disp(['Inf or Nan value during the evaluation of block " << block <<"']);" << endl
-- 
GitLab