From 1ddd75f3300c7d0fb2f8b5b9af8d170502629a28 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Wed, 6 May 2020 14:21:33 +0200
Subject: [PATCH] Block decomposition: do not write unnecessary zeros in
 dynamic Jacobian

Also do cosmetic change in the corresponding code for static Jacobian.
---
 src/DynamicModel.cc | 3 ++-
 src/StaticModel.cc  | 6 ++----
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index 6b3a84bb..53cb39ad 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -4746,7 +4746,8 @@ DynamicModel::computeChainRuleJacobian()
               break;
             }
 
-          blocks_derivatives[blk][{ eq, var, lag }] = d;
+          if (d != Zero)
+            blocks_derivatives[blk][{ eq, var, lag }] = d;
         }
     }
 }
diff --git a/src/StaticModel.cc b/src/StaticModel.cc
index 205b1fd5..d7a07050 100644
--- a/src/StaticModel.cc
+++ b/src/StaticModel.cc
@@ -2060,10 +2060,8 @@ StaticModel::computeChainRuleJacobian()
             {
               int var_orig = getBlockVariableID(blk, var);
               expr_t d1 = equations[eq_orig]->getChainRuleDerivative(getDerivID(symbol_table.getID(SymbolType::endogenous, var_orig), 0), recursive_vars);
-              if (d1 == Zero)
-                continue;
-
-              blocks_derivatives[blk][{ eq, var, 0 }] = d1;
+              if (d1 != Zero)
+                blocks_derivatives[blk][{ eq, var, 0 }] = d1;
             }
         }
     }
-- 
GitLab