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