From 4f9241442c367420945efd1702aea56983447234 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org> Date: Thu, 19 Jan 2023 10:59:36 +0100 Subject: [PATCH] =?UTF-8?q?Fix=20size=20of=20dynamic=20derivatives=20(lega?= =?UTF-8?q?cy=20representation)=20when=20there=20are=20unused=20exogenous?= =?UTF-8?q?=20and=20=E2=80=9Cnostrict=E2=80=9D=20option=20is=20given?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DynamicModel.cc | 6 ++++++ src/DynamicModel.hh | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index 6fe3301d..9ed5a3ba 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -60,6 +60,7 @@ DynamicModel::DynamicModel(const DynamicModel &m) : deriv_id_table{m.deriv_id_table}, inv_deriv_id_table{m.inv_deriv_id_table}, dyn_jacobian_cols_table{m.dyn_jacobian_cols_table}, + dyn_jacobian_ncols{m.dyn_jacobian_ncols}, max_lag{m.max_lag}, max_lead{m.max_lead}, max_endo_lag{m.max_endo_lag}, @@ -104,6 +105,7 @@ DynamicModel::operator=(const DynamicModel &m) deriv_id_table = m.deriv_id_table; inv_deriv_id_table = m.inv_deriv_id_table; dyn_jacobian_cols_table = m.dyn_jacobian_cols_table; + dyn_jacobian_ncols = m.dyn_jacobian_ncols; max_lag = m.max_lag; max_lead = m.max_lead; max_endo_lag = m.max_endo_lag; @@ -2931,6 +2933,10 @@ DynamicModel::computeDynJacobianCols() else if (type == SymbolType::exogenousDet) dyn_jacobian_cols_table[deriv_id] = ordered_dyn_endo.size() + symbol_table.exo_nbr() + tsid; } + + /* NB: the following could differ from dyn_jacobian_cols_table.size() if + there are unused exogenous (and “nostrict” option is given) */ + dyn_jacobian_ncols = ordered_dyn_endo.size() + symbol_table.exo_nbr() + symbol_table.exo_det_nbr(); } void diff --git a/src/DynamicModel.hh b/src/DynamicModel.hh index 7c47f0c7..6d3dedff 100644 --- a/src/DynamicModel.hh +++ b/src/DynamicModel.hh @@ -67,6 +67,8 @@ private: representation. Contains only endogenous, exogenous and exogenous deterministic */ map<int, int> dyn_jacobian_cols_table; + // Number of columns of the dynamic Jacobian (legacy representation) + int dyn_jacobian_ncols; //! Maximum lag and lead over all types of variables (positive values) /*! Set by computeDerivIDs() */ @@ -471,7 +473,7 @@ public: { return sparse ? 3*symbol_table.endo_nbr() + symbol_table.exo_nbr() + symbol_table.exo_det_nbr() : - dyn_jacobian_cols_table.size(); + dyn_jacobian_ncols; } void addAllParamDerivId(set<int> &deriv_id_set) override; -- GitLab