diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index 6fe3301d18e3542490cea52fae422fddf726315c..9ed5a3ba468483100b1b93982e95c047f9e6a78a 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 7c47f0c7d57bd5cd26ca7e236f402a5bd2b9a1d0..6d3dedfffeb472d9693b7fee01a4748f23ed41a3 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;