From a210a8fd59a052abf2c67d264f0889ba2213043d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= Date: Tue, 23 Nov 2021 12:35:43 +0100 Subject: [PATCH] Add several types of auxiliary variables to M_.mapping In practice, only those auxiliary variables which do not have an orig_symb_id will be listed (in addition to unary ops, due to an implementation bug). --- src/DynamicModel.cc | 12 +++++------- src/DynamicModel.hh | 2 +- src/ModFile.cc | 4 +--- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index 9dfec6b1..192e436b 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -4546,19 +4546,17 @@ DynamicModel::ParamUsedWithLeadLag() const } void -DynamicModel::createVariableMapping(int orig_eq_nbr) +DynamicModel::createVariableMapping() { - for (int ii = 0; ii < orig_eq_nbr; ii++) + for (size_t ii = 0; ii < equations.size(); ii++) { set eqvars; equations[ii]->collectVariables(SymbolType::endogenous, eqvars); equations[ii]->collectVariables(SymbolType::exogenous, eqvars); for (auto eqvar : eqvars) - { - eqvar = symbol_table.getUltimateOrigSymbID(eqvar); - if (eqvar >= 0 && !symbol_table.isAuxiliaryVariable(eqvar)) - variableMapping[eqvar].emplace(ii); - } + if (int orig_symb_id = symbol_table.getUltimateOrigSymbID(eqvar); + orig_symb_id >= 0) + variableMapping[orig_symb_id].emplace(ii); } } diff --git a/src/DynamicModel.hh b/src/DynamicModel.hh index 7f004475..8f7e2dac 100644 --- a/src/DynamicModel.hh +++ b/src/DynamicModel.hh @@ -396,7 +396,7 @@ public: void writeDynamicJacobianNonZeroElts(const string &basename) const; //! Creates mapping for variables and equations they are present in - void createVariableMapping(int orig_eq_nbr); + void createVariableMapping(); //! Expands equation tags with default equation names (available "name" tag or LHS variable or equation ID) void expandEqTags(); diff --git a/src/ModFile.cc b/src/ModFile.cc index 8c4f43b8..902f0563 100644 --- a/src/ModFile.cc +++ b/src/ModFile.cc @@ -559,9 +559,7 @@ ModFile::transformPass(bool nostrict, bool stochastic, bool compute_xrefs, bool } // And finally perform the substitutions dynamic_model.substituteVarExpectation(var_expectation_subst_table); - dynamic_model.createVariableMapping(mod_file_struct.orig_eq_nbr + - (mod_file_struct.ramsey_model_present ? - mod_file_struct.ramsey_eq_nbr : 0)); + dynamic_model.createVariableMapping(); /* Create auxiliary vars for leads and lags greater than 2, on both endos and exos. The transformation is not exactly the same on stochastic and