From a741799f906953913706aebcce057cddeb75eaec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org> Date: Fri, 17 Apr 2020 16:04:19 +0200 Subject: [PATCH] Block decomposition: factorize various helper functions Should have been done in 76c2e87c3bdb40ac7c46e37b467a37be9d310627. --- src/DynamicModel.hh | 102 -------------------------------------------- src/ModelTree.hh | 92 ++++++++++++++++++++++++++++++++------- src/StaticModel.hh | 96 ----------------------------------------- 3 files changed, 76 insertions(+), 214 deletions(-) diff --git a/src/DynamicModel.hh b/src/DynamicModel.hh index b16422d5..af64ca2b 100644 --- a/src/DynamicModel.hh +++ b/src/DynamicModel.hh @@ -553,121 +553,21 @@ public: return tuple(static_only_equations, static_only_equations_lineno, static_only_equations_equation_tags); }; - //! Return the number of blocks - int - getNbBlocks() const override - { - return block_type_firstequation_size_mfs.size(); - }; - //! Determine the simulation type of each block - BlockSimulationType - getBlockSimulationType(int block_number) const override - { - return get<0>(block_type_firstequation_size_mfs[block_number]); - }; - //! Return the first equation number of a block - int - getBlockFirstEquation(int block_number) const override - { - return get<1>(block_type_firstequation_size_mfs[block_number]); - }; - //! Return the size of the block block_number - int - getBlockSize(int block_number) const override - { - return get<2>(block_type_firstequation_size_mfs[block_number]); - }; - //! Return the number of exogenous variable in the block block_number int getBlockExoSize(int block_number) const override { return block_var_exo[block_number].first.size(); }; - //! Return the number of colums in the jacobian matrix for exogenous variable in the block block_number int getBlockExoColSize(int block_number) const override { return block_var_exo[block_number].second; }; - //! Return the number of feedback variable of the block block_number - int - getBlockMfs(int block_number) const override - { - return get<3>(block_type_firstequation_size_mfs[block_number]); - }; - //! Return the maximum lag in a block - int - getBlockMaxLag(int block_number) const override - { - return block_lag_lead[block_number].first; - }; - //! Return the maximum lead in a block - int - getBlockMaxLead(int block_number) const override - { - return block_lag_lead[block_number].second; - }; - //! Return the type of equation (equation_number) belonging to the block block_number - EquationType - getBlockEquationType(int block_number, int equation_number) const override - { - return equation_type_and_normalized_equation[eq_idx_block2orig[get<1>(block_type_firstequation_size_mfs[block_number])+equation_number]].first; - }; - //! Return true if the equation has been normalized - bool - isBlockEquationRenormalized(int block_number, int equation_number) const override - { - return equation_type_and_normalized_equation[eq_idx_block2orig[get<1>(block_type_firstequation_size_mfs[block_number])+equation_number]].first == EquationType::evaluate_s; - }; - //! Return the expr_t of the equation equation_number belonging to the block block_number - expr_t - getBlockEquationExpr(int block_number, int equation_number) const override - { - return equations[eq_idx_block2orig[get<1>(block_type_firstequation_size_mfs[block_number])+equation_number]]; - }; - //! Return the expr_t of the renormalized equation equation_number belonging to the block block_number - expr_t - getBlockEquationRenormalizedExpr(int block_number, int equation_number) const override - { - return equation_type_and_normalized_equation[eq_idx_block2orig[get<1>(block_type_firstequation_size_mfs[block_number])+equation_number]].second; - }; - //! Return the original number of equation equation_number belonging to the block block_number - int - getBlockEquationID(int block_number, int equation_number) const override - { - return eq_idx_block2orig[get<1>(block_type_firstequation_size_mfs[block_number])+equation_number]; - }; - //! Return the original number of variable variable_number belonging to the block block_number - int - getBlockVariableID(int block_number, int variable_number) const override - { - return endo_idx_block2orig[get<1>(block_type_firstequation_size_mfs[block_number])+variable_number]; - }; - //! Return the original number of the exogenous variable varexo_number belonging to the block block_number int getBlockVariableExoID(int block_number, int variable_number) const override { return exo_block[block_number].find(variable_number)->first; }; - //! Return the position of equation_number in the block number belonging to the block block_number - int - getBlockInitialEquationID(int block_number, int equation_number) const override - { - return eq_idx_orig2block[equation_number] - get<1>(block_type_firstequation_size_mfs[block_number]); - }; - //! Return the position of variable_number in the block number belonging to the block block_number - int - getBlockInitialVariableID(int block_number, int variable_number) const override - { - return endo_idx_orig2block[variable_number] - get<1>(block_type_firstequation_size_mfs[block_number]); - }; - //! Return the block number containing the endogenous variable variable_number - int - getBlockVariableID(int variable_number) const - { - return get<0>(variable_block_lead_lag[variable_number]); - }; - //! Return the position of the exogenous variable_number in the block number belonging to the block block_number int getBlockInitialExogenousID(int block_number, int variable_number) const override { @@ -683,7 +583,6 @@ public: else return -1; }; - //! Return the position of the deterministic exogenous variable_number in the block number belonging to the block block_number int getBlockInitialDetExogenousID(int block_number, int variable_number) const override { @@ -699,7 +598,6 @@ public: else return -1; }; - //! Return the position of the other endogenous variable_number in the block number belonging to the block block_number int getBlockInitialOtherEndogenousID(int block_number, int variable_number) const override { diff --git a/src/ModelTree.hh b/src/ModelTree.hh index 37cdeaa8..99127e3d 100644 --- a/src/ModelTree.hh +++ b/src/ModelTree.hh @@ -329,24 +329,52 @@ protected: vector<BinaryOpNode *> &equations, vector<int> &equations_lineno, EquationTags &equation_tags, bool static_equations) const; - //! Determine the simulation type of each block - virtual BlockSimulationType getBlockSimulationType(int block_number) const = 0; //! Return the number of blocks - virtual int getNbBlocks() const = 0; + int + getNbBlocks() const + { + return block_type_firstequation_size_mfs.size(); + }; + //! Determine the simulation type of each block + BlockSimulationType + getBlockSimulationType(int block_number) const + { + return get<0>(block_type_firstequation_size_mfs[block_number]); + }; //! Return the first equation number of a block - virtual int getBlockFirstEquation(int block_number) const = 0; + int + getBlockFirstEquation(int block_number) const + { + return get<1>(block_type_firstequation_size_mfs[block_number]); + }; //! Return the size of the block block_number - virtual int getBlockSize(int block_number) const = 0; + int + getBlockSize(int block_number) const + { + return get<2>(block_type_firstequation_size_mfs[block_number]); + }; //! Return the number of exogenous variable in the block block_number virtual int getBlockExoSize(int block_number) const = 0; //! Return the number of colums in the jacobian matrix for exogenous variable in the block block_number virtual int getBlockExoColSize(int block_number) const = 0; //! Return the number of feedback variable of the block block_number - virtual int getBlockMfs(int block_number) const = 0; + int + getBlockMfs(int block_number) const + { + return get<3>(block_type_firstequation_size_mfs[block_number]); + }; //! Return the maximum lag in a block - virtual int getBlockMaxLag(int block_number) const = 0; + int + getBlockMaxLag(int block_number) const + { + return block_lag_lead[block_number].first; + }; //! Return the maximum lead in a block - virtual int getBlockMaxLead(int block_number) const = 0; + int + getBlockMaxLead(int block_number) const + { + return block_lag_lead[block_number].second; + }; inline void setBlockLeadLag(int block, int max_lag, int max_lead) { @@ -354,23 +382,55 @@ protected: }; //! Return the type of equation (equation_number) belonging to the block block_number - virtual EquationType getBlockEquationType(int block_number, int equation_number) const = 0; + EquationType + getBlockEquationType(int block_number, int equation_number) const + { + return equation_type_and_normalized_equation[eq_idx_block2orig[get<1>(block_type_firstequation_size_mfs[block_number])+equation_number]].first; + }; //! Return true if the equation has been normalized - virtual bool isBlockEquationRenormalized(int block_number, int equation_number) const = 0; + bool + isBlockEquationRenormalized(int block_number, int equation_number) const + { + return equation_type_and_normalized_equation[eq_idx_block2orig[get<1>(block_type_firstequation_size_mfs[block_number])+equation_number]].first == EquationType::evaluate_s; + }; //! Return the expr_t of the equation equation_number belonging to the block block_number - virtual expr_t getBlockEquationExpr(int block_number, int equation_number) const = 0; + expr_t + getBlockEquationExpr(int block_number, int equation_number) const + { + return equations[eq_idx_block2orig[get<1>(block_type_firstequation_size_mfs[block_number])+equation_number]]; + }; //! Return the expr_t of the renormalized equation equation_number belonging to the block block_number - virtual expr_t getBlockEquationRenormalizedExpr(int block_number, int equation_number) const = 0; + expr_t + getBlockEquationRenormalizedExpr(int block_number, int equation_number) const + { + return equation_type_and_normalized_equation[eq_idx_block2orig[get<1>(block_type_firstequation_size_mfs[block_number])+equation_number]].second; + }; //! Return the original number of equation equation_number belonging to the block block_number - virtual int getBlockEquationID(int block_number, int equation_number) const = 0; + int + getBlockEquationID(int block_number, int equation_number) const + { + return eq_idx_block2orig[get<1>(block_type_firstequation_size_mfs[block_number])+equation_number]; + }; //! Return the original number of variable variable_number belonging to the block block_number - virtual int getBlockVariableID(int block_number, int variable_number) const = 0; + int + getBlockVariableID(int block_number, int variable_number) const + { + return endo_idx_block2orig[get<1>(block_type_firstequation_size_mfs[block_number])+variable_number]; + }; //! Return the original number of the exogenous variable varexo_number belonging to the block block_number virtual int getBlockVariableExoID(int block_number, int variable_number) const = 0; //! Return the position of equation_number in the block number belonging to the block block_number - virtual int getBlockInitialEquationID(int block_number, int equation_number) const = 0; + int + getBlockInitialEquationID(int block_number, int equation_number) const + { + return eq_idx_orig2block[equation_number] - get<1>(block_type_firstequation_size_mfs[block_number]); + }; //! Return the position of variable_number in the block number belonging to the block block_number - virtual int getBlockInitialVariableID(int block_number, int variable_number) const = 0; + int + getBlockInitialVariableID(int block_number, int variable_number) const + { + return endo_idx_orig2block[variable_number] - get<1>(block_type_firstequation_size_mfs[block_number]); + }; //! Return the position of variable_number in the block number belonging to the block block_number virtual int getBlockInitialExogenousID(int block_number, int variable_number) const = 0; //! Return the position of the deterministic exogenous variable_number in the block number belonging to the block block_number diff --git a/src/StaticModel.hh b/src/StaticModel.hh index 9c2f0c5a..8414e68d 100644 --- a/src/StaticModel.hh +++ b/src/StaticModel.hh @@ -190,127 +190,31 @@ public: int getDerivID(int symb_id, int lag) const noexcept(false) override; void addAllParamDerivId(set<int> &deriv_id_set) override; - //! Return the number of blocks - int - getNbBlocks() const override - { - return (block_type_firstequation_size_mfs.size()); - }; - //! Determine the simulation type of each block - BlockSimulationType - getBlockSimulationType(int block_number) const override - { - return (get<0>(block_type_firstequation_size_mfs[block_number])); - }; - //! Return the first equation number of a block - int - getBlockFirstEquation(int block_number) const override - { - return (get<1>(block_type_firstequation_size_mfs[block_number])); - }; - //! Return the size of the block block_number - int - getBlockSize(int block_number) const override - { - return (get<2>(block_type_firstequation_size_mfs[block_number])); - }; - //! Return the number of exogenous variable in the block block_number int getBlockExoSize(int block_number) const override { return 0; }; - //! Return the number of colums in the jacobian matrix for exogenous variable in the block block_number int getBlockExoColSize(int block_number) const override { return 0; } - //! Return the number of feedback variable of the block block_number - int - getBlockMfs(int block_number) const override - { - return (get<3>(block_type_firstequation_size_mfs[block_number])); - }; - //! Return the maximum lag in a block - int - getBlockMaxLag(int block_number) const override - { - return (block_lag_lead[block_number].first); - }; - //! Return the maximum lead in a block - int - getBlockMaxLead(int block_number) const override - { - return (block_lag_lead[block_number].second); - }; - //! Return the type of equation (equation_number) belonging to the block block_number - EquationType - getBlockEquationType(int block_number, int equation_number) const override - { - return (equation_type_and_normalized_equation[eq_idx_block2orig[get<1>(block_type_firstequation_size_mfs[block_number])+equation_number]].first); - }; - //! Return true if the equation has been normalized - bool - isBlockEquationRenormalized(int block_number, int equation_number) const override - { - return (equation_type_and_normalized_equation[eq_idx_block2orig[get<1>(block_type_firstequation_size_mfs[block_number])+equation_number]].first == EquationType::evaluate_s); - }; - //! Return the expr_t of the equation equation_number belonging to the block block_number - expr_t - getBlockEquationExpr(int block_number, int equation_number) const override - { - return (equations[eq_idx_block2orig[get<1>(block_type_firstequation_size_mfs[block_number])+equation_number]]); - }; - //! Return the expr_t of the renormalized equation equation_number belonging to the block block_number - expr_t - getBlockEquationRenormalizedExpr(int block_number, int equation_number) const override - { - return (equation_type_and_normalized_equation[eq_idx_block2orig[get<1>(block_type_firstequation_size_mfs[block_number])+equation_number]].second); - }; - //! Return the original number of equation equation_number belonging to the block block_number - int - getBlockEquationID(int block_number, int equation_number) const override - { - return (eq_idx_block2orig[get<1>(block_type_firstequation_size_mfs[block_number])+equation_number]); - }; - //! Return the original number of variable variable_number belonging to the block block_number - int - getBlockVariableID(int block_number, int variable_number) const override - { - return (endo_idx_block2orig[get<1>(block_type_firstequation_size_mfs[block_number])+variable_number]); - }; - //! Return the original number of the exogenous variable varexo_number belonging to the block block_number int getBlockVariableExoID(int block_number, int variable_number) const override { return 0; }; - //! Return the position of equation_number in the block number belonging to the block block_number - int - getBlockInitialEquationID(int block_number, int equation_number) const override - { - return eq_idx_orig2block[equation_number] - get<1>(block_type_firstequation_size_mfs[block_number]); - }; - //! Return the position of variable_number in the block number belonging to the block block_number - int - getBlockInitialVariableID(int block_number, int variable_number) const override - { - return endo_idx_orig2block[variable_number] - get<1>(block_type_firstequation_size_mfs[block_number]); - }; - //! Return the position of variable_number in the block number belonging to the block block_number int getBlockInitialExogenousID(int block_number, int variable_number) const override { return -1; }; - //! Return the position of the deterministic exogenous variable_number in the block number belonging to the block block_number int getBlockInitialDetExogenousID(int block_number, int variable_number) const override { return -1; }; - //! Return the position of the other endogenous variable_number in the block number belonging to the block block_number int getBlockInitialOtherEndogenousID(int block_number, int variable_number) const override { -- GitLab