From 6947c977d48aae85f6cfa437608e6a2bc889a60c Mon Sep 17 00:00:00 2001
From: Marco Ratto <marco.ratto@ec.europa.eu>
Date: Thu, 6 Jan 2022 15:01:35 +0100
Subject: [PATCH] bug fixes with occbin smoother: reset nested waitbars and fix
 names of outut structure of solver

(cherry picked from commit 06a7e6c7bebc0ed8b9bb5c03058d534a45730d7b)
---
 matlab/DsgeSmoother.m                      | 9 +++++++--
 matlab/missing_DiffuseKalmanSmootherH3_Z.m | 5 +++--
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/matlab/DsgeSmoother.m b/matlab/DsgeSmoother.m
index e6942561c3..722b80959d 100644
--- a/matlab/DsgeSmoother.m
+++ b/matlab/DsgeSmoother.m
@@ -423,13 +423,14 @@ else
                 tmp(oo_.dr.restrict_var_list,1)=aahat(:,k-1);
                 opts_simul.endo_init = tmp(oo_.dr.inv_order_var,1);
                 opts_simul.init_regime = []; %regimes_(k);
+                opts_simul.waitbar=0;
                 options_.occbin.simul=opts_simul;
                 [~, out] = occbin.solver(M_,oo_,options_);
                 % regime in out should be identical to regimes_(k-2) moved one
                 % period ahead (so if regimestart was [1 5] it should be [1 4]
                 % in out
                 %         end
-                bbb(oo_.dr.inv_order_var,k) = out.zpiece(1,:);
+                bbb(oo_.dr.inv_order_var,k) = out.piecewise(1,:);
             end
         end
         % do not overwrite accurate computations using reduced st. space
@@ -466,6 +467,7 @@ else
             tmp(oo_.dr.restrict_var_list,1)=ahat0(:,k-1);
             opts_simul.endo_init = tmp(oo_.dr.inv_order_var,1);
             opts_simul.init_regime = []; %regimes_(k);
+            opts_simul.waitbar=0;
             options_.occbin.simul=opts_simul;
             [~, out] = occbin.solver(M_,oo_,options_);
             % regime in out should be identical to regimes_(k-2) moved one
@@ -473,7 +475,7 @@ else
             % in out
             %         end
             for jnk=1:options_.nk
-                aaa(jnk,oo_.dr.inv_order_var,k+jnk-1) = out.zpiece(jnk,:);
+                aaa(jnk,oo_.dr.inv_order_var,k+jnk-1) = out.piecewise(jnk,:);
             end
         end
         aK=aaa;
@@ -525,6 +527,9 @@ else
         end
         ahat1=aaa;
         % reconstruct aK
+        if isempty(options_.nk)
+            options_.nk=1;
+        end
         aaa = zeros(options_.nk,M_.endo_nbr,gend+options_.nk);
         aaa(:,oo_.dr.restrict_var_list,:)=aK;
         for k=1:gend
diff --git a/matlab/missing_DiffuseKalmanSmootherH3_Z.m b/matlab/missing_DiffuseKalmanSmootherH3_Z.m
index 3f9850297a..a4d8e7e971 100644
--- a/matlab/missing_DiffuseKalmanSmootherH3_Z.m
+++ b/matlab/missing_DiffuseKalmanSmootherH3_Z.m
@@ -444,6 +444,7 @@ while notsteady && t<smpl
                 opts_simul.endo_init = a(oo_.dr.inv_order_var,t);
             end
             opts_simul.init_regime = []; %regimes_(t);
+            opts_simul.waitbar=0;
             options_.occbin.simul=opts_simul;
             [~, out, ss] = occbin.solver(M_,oo_,options_);
         end
@@ -456,9 +457,9 @@ while notsteady && t<smpl
             end
             if isoccbin 
                 if smoother_redux
-                    aK(jnk,:,t+jnk) = out.zpiece(jnk,oo_.dr.order_var(oo_.dr.restrict_var_list));
+                    aK(jnk,:,t+jnk) = out.piecewise(jnk,oo_.dr.order_var(oo_.dr.restrict_var_list));
                 else
-                    aK(jnk,oo_.dr.inv_order_var,t+jnk) = out.zpiece(jnk,:);
+                    aK(jnk,oo_.dr.inv_order_var,t+jnk) = out.piecewise(jnk,:);
                 end
             elseif jnk>1
                 aK(jnk,:,t+jnk) = T*dynare_squeeze(aK(jnk-1,:,t+jnk-1));
-- 
GitLab