Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Dynare
preprocessor
Commits
d733f3fb
Verified
Commit
d733f3fb
authored
Nov 23, 2018
by
Sébastien Villemot
Browse files
Various simplifications and modernizations of the block/bytecode part
parent
fc9cc2dc
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
src/DynamicModel.cc
View file @
d733f3fb
This diff is collapsed.
Click to expand it.
src/DynamicModel.hh
View file @
d733f3fb
...
...
@@ -99,8 +99,8 @@ private:
vector
<
temporary_terms_inuse_t
>
v_temporary_terms_inuse
;
//! Store the derivatives or the chainrule derivatives:map<
pair<
equation,
pair<
variable, lead_lag
>, expr_t>
using
first_chain_rule_derivatives_t
=
map
<
pair
<
int
,
pair
<
int
,
int
>
>
,
expr_t
>
;
//! Store the derivatives or the chainrule derivatives:map<
tuple<
equation, variable, lead_lag>, expr_t>
using
first_chain_rule_derivatives_t
=
map
<
tuple
<
int
,
int
,
int
>
,
expr_t
>
;
first_chain_rule_derivatives_t
first_chain_rule_derivatives
;
//! Writes dynamic model file (Matlab version)
...
...
@@ -135,7 +135,7 @@ private:
//void evaluateJacobian(const eval_context_t &eval_context, jacob_map *j_m, bool dynamic);
//! return a map on the block jacobian
map
<
pair
<
pair
<
int
,
pair
<
int
,
int
>>
,
pair
<
int
,
int
>
>
,
int
>
get_Derivatives
(
int
block
);
map
<
tuple
<
int
,
int
,
int
,
int
,
int
>
,
int
>
get_Derivatives
(
int
block
);
//! Computes chain rule derivatives of the Jacobian w.r. to endogenous variables
void
computeChainRuleJacobian
(
blocks_derivatives_t
&
blocks_derivatives
);
...
...
@@ -163,7 +163,7 @@ private:
//! Computes derivatives of the Jacobian w.r. to trend vars and tests that they are equal to zero
void
testTrendDerivativesEqualToZero
(
const
eval_context_t
&
eval_context
);
//! Collect only the first derivatives
map
<
pair
<
int
,
pair
<
int
,
int
>
>
,
expr_t
>
collect_first_order_derivatives_endogenous
();
map
<
tuple
<
int
,
int
,
int
>
,
expr_t
>
collect_first_order_derivatives_endogenous
();
//! Allocates the derivation IDs for all dynamic variables of the model
/*! Also computes max_{endo,exo}_{lead_lag}, and initializes dynJacobianColsNbr to the number of dynamic endos */
...
...
@@ -200,8 +200,8 @@ private:
//! Vector indicating if the block is linear in endogenous variable (true) or not (false)
vector
<
bool
>
blocks_linear
;
//! Map the derivatives for a block
pair
<lag,
make_pair(make_pair(eq, var)), expr_t
>
using
derivative_t
=
map
<
pair
<
int
,
pair
<
int
,
int
>
>
,
expr_t
>
;
//! Map the derivatives for a block
tuple
<lag,
eq, var
>
using
derivative_t
=
map
<
tuple
<
int
,
int
,
int
>
,
expr_t
>
;
//! Vector of derivative for each blocks
vector
<
derivative_t
>
derivative_endo
,
derivative_other_endo
,
derivative_exo
,
derivative_exo_det
;
...
...
@@ -216,8 +216,8 @@ private:
map
<
int
,
map
<
int
,
int
>>
block_exo_index
,
block_det_exo_index
,
block_other_endo_index
;
//! for each block described the number of static, forward, backward and mixed variables in the block
/*!
pair< pair
<static, forward
>
,
pair<
backward,mixed>
>
*/
vector
<
pair
<
pair
<
int
,
int
>
,
pair
<
int
,
int
>>
>
block_col_type
;
/*!
tuple
<static, forward, backward,
mixed> */
vector
<
tuple
<
int
,
int
,
int
,
int
>>
block_col_type
;
//! Help computeXrefs to compute the reverse references (i.e. param->eqs, endo->eqs, etc)
void
computeRevXref
(
map
<
pair
<
int
,
int
>
,
set
<
int
>>
&
xrefset
,
const
set
<
pair
<
int
,
int
>>
&
eiref
,
int
eqn
);
...
...
@@ -226,7 +226,7 @@ private:
void
writeRevXrefs
(
ostream
&
output
,
const
map
<
pair
<
int
,
int
>
,
set
<
int
>>
&
xrefmap
,
const
string
&
type
)
const
;
//! List for each variable its block number and its maximum lag and lead inside the block
vector
<
pair
<
int
,
pair
<
int
,
int
>>
>
variable_block_lead_lag
;
vector
<
tuple
<
int
,
int
,
int
>>
variable_block_lead_lag
;
//! List for each equation its block number
vector
<
int
>
equation_block
;
...
...
@@ -481,19 +481,19 @@ public:
BlockSimulationType
getBlockSimulationType
(
int
block_number
)
const
override
{
return
(
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
first
);
return
(
get
<
0
>
(
block_type_firstequation_size_mfs
[
block_number
]
)
);
};
//! Return the first equation number of a block
unsigned
int
getBlockFirstEquation
(
int
block_number
)
const
override
{
return
(
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
second
);
return
(
get
<
1
>
(
block_type_firstequation_size_mfs
[
block_number
]
)
);
};
//! Return the size of the block block_number
unsigned
int
getBlockSize
(
int
block_number
)
const
override
{
return
(
block_type_firstequation_size_mfs
[
block_number
]
.
second
.
first
);
return
(
get
<
2
>
(
block_type_firstequation_size_mfs
[
block_number
]
)
);
};
//! Return the number of exogenous variable in the block block_number
unsigned
int
...
...
@@ -511,7 +511,7 @@ public:
unsigned
int
getBlockMfs
(
int
block_number
)
const
override
{
return
(
block_type_firstequation_size_mfs
[
block_number
]
.
second
.
second
);
return
(
get
<
3
>
(
block_type_firstequation_size_mfs
[
block_number
]
)
);
};
//! Return the maximum lag in a block
unsigned
int
...
...
@@ -529,37 +529,37 @@ public:
EquationType
getBlockEquationType
(
int
block_number
,
int
equation_number
)
const
override
{
return
(
equation_type_and_normalized_equation
[
equation_reordered
[
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
second
+
equation_number
]].
first
);
return
(
equation_type_and_normalized_equation
[
equation_reordered
[
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
[
equation_reordered
[
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
second
+
equation_number
]].
first
==
E_EVALUATE_S
);
return
(
equation_type_and_normalized_equation
[
equation_reordered
[
get
<
1
>
(
block_type_firstequation_size_mfs
[
block_number
]
)
+
equation_number
]].
first
==
E_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
[
equation_reordered
[
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
second
+
equation_number
]]);
return
(
equations
[
equation_reordered
[
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
[
equation_reordered
[
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
second
+
equation_number
]].
second
);
return
(
equation_type_and_normalized_equation
[
equation_reordered
[
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
(
equation_reordered
[
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
second
+
equation_number
]);
return
(
equation_reordered
[
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
(
variable_reordered
[
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
second
+
variable_number
]);
return
(
variable_reordered
[
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
...
...
@@ -572,19 +572,19 @@ public:
int
getBlockInitialEquationID
(
int
block_number
,
int
equation_number
)
const
override
{
return
((
int
)
inv_equation_reordered
[
equation_number
]
-
(
int
)
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
second
);
return
((
int
)
inv_equation_reordered
[
equation_number
]
-
(
int
)
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
((
int
)
inv_variable_reordered
[
variable_number
]
-
(
int
)
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
second
);
return
((
int
)
inv_variable_reordered
[
variable_number
]
-
(
int
)
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
(
variable_block_lead_lag
[
variable_number
]
.
first
);
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
...
...
src/ModelTree.cc
View file @
d733f3fb
This diff is collapsed.
Click to expand it.
src/ModelTree.hh
View file @
d733f3fb
...
...
@@ -46,16 +46,16 @@ auto vectorToTuple(const vector<T>& v) {
}
//! Vector describing equations: BlockSimulationType, if BlockSimulationType == EVALUATE_s then a expr_t on the new normalized equation
using
equation_type_and_normalized_equation_t
=
vector
<
pair
<
EquationType
,
expr_t
>>
;
using
equation_type_and_normalized_equation_t
=
vector
<
pair
<
EquationType
,
expr_t
>>
;
//! Vector describing variables: max_lag in the block, max_lead in the block
using
lag_lead_vector_t
=
vector
<
pair
<
int
,
int
>>
;
//! for each block contains
pair< pair
<Simulation_Type, first_equation
>
,
pair <
Block_Size, Recursive_part_Size
>
>
using
block_type_firstequation_size_mfs_t
=
vector
<
pair
<
pair
<
BlockSimulationType
,
int
>
,
pair
<
int
,
int
>>
>
;
//! for each block contains
tuple
<Simulation_Type, first_equation, Block_Size, Recursive_part_Size>
using
block_type_firstequation_size_mfs_t
=
vector
<
tuple
<
BlockSimulationType
,
int
,
int
,
int
>>
;
//! for a block contains derivatives
pair< pair
<block_equation_number, block_variable_number
> , pair<
lead_lag, expr_t>
>
using
block_derivatives_equation_variable_laglead_nodeid_t
=
vector
<
pair
<
pair
<
int
,
int
>
,
pair
<
int
,
expr_t
>
>>
;
//! for a block contains derivatives
tuple
<block_equation_number, block_variable_number
,
lead_lag, expr_t>
using
block_derivatives_equation_variable_laglead_nodeid_t
=
vector
<
tuple
<
int
,
int
,
int
,
expr_t
>>
;
//! for all blocks derivatives description
using
blocks_derivatives_t
=
vector
<
block_derivatives_equation_variable_laglead_nodeid_t
>
;
...
...
@@ -194,7 +194,7 @@ protected:
//! Sparse matrix of double to store the values of the Jacobian
/*! First index is lag, second index is equation number, third index is endogenous type specific ID */
using
dynamic_jacob_map_t
=
map
<
pair
<
int
,
pair
<
int
,
int
>
>
,
expr_t
>
;
using
dynamic_jacob_map_t
=
map
<
tuple
<
int
,
int
,
int
>
,
expr_t
>
;
//! Normalization of equations
/*! Maps endogenous type specific IDs to equation numbers */
...
...
@@ -234,15 +234,15 @@ protected:
//! Search the equations and variables belonging to the prologue and the epilogue of the model
void
computePrologueAndEpilogue
(
const
jacob_map_t
&
static_jacobian
,
vector
<
int
>
&
equation_reordered
,
vector
<
int
>
&
variable_reordered
);
//! Determine the type of each equation of model and try to normalized the unnormalized equation using computeNormalizedEquations
equation_type_and_normalized_equation_t
equationTypeDetermination
(
const
map
<
pair
<
int
,
pair
<
int
,
int
>
>
,
expr_t
>
&
first_order_endo_derivatives
,
const
vector
<
int
>
&
Index_Var_IM
,
const
vector
<
int
>
&
Index_Equ_IM
,
int
mfs
)
const
;
equation_type_and_normalized_equation_t
equationTypeDetermination
(
const
map
<
tuple
<
int
,
int
,
int
>
,
expr_t
>
&
first_order_endo_derivatives
,
const
vector
<
int
>
&
Index_Var_IM
,
const
vector
<
int
>
&
Index_Equ_IM
,
int
mfs
)
const
;
//! Compute the block decomposition and for a non-recusive block find the minimum feedback set
void
computeBlockDecompositionAndFeedbackVariablesForEachBlock
(
const
jacob_map_t
&
static_jacobian
,
const
dynamic_jacob_map_t
&
dynamic_jacobian
,
vector
<
int
>
&
equation_reordered
,
vector
<
int
>
&
variable_reordered
,
vector
<
pair
<
int
,
int
>>
&
blocks
,
const
equation_type_and_normalized_equation_t
&
Equation_Type
,
bool
verbose_
,
bool
select_feedback_variable
,
int
mfs
,
vector
<
int
>
&
inv_equation_reordered
,
vector
<
int
>
&
inv_variable_reordered
,
lag_lead_vector_t
&
equation_lag_lead
,
lag_lead_vector_t
&
variable_lag_lead_t
,
vector
<
unsigned
int
>
&
n_static
,
vector
<
unsigned
int
>
&
n_forward
,
vector
<
unsigned
int
>
&
n_backward
,
vector
<
unsigned
int
>
&
n_mixed
)
const
;
//! Reduce the number of block merging the same type equation in the prologue and the epilogue and determine the type of each block
block_type_firstequation_size_mfs_t
reduceBlocksAndTypeDetermination
(
const
dynamic_jacob_map_t
&
dynamic_jacobian
,
vector
<
pair
<
int
,
int
>>
&
blocks
,
const
equation_type_and_normalized_equation_t
&
Equation_Type
,
const
vector
<
int
>
&
variable_reordered
,
const
vector
<
int
>
&
equation_reordered
,
vector
<
unsigned
int
>
&
n_static
,
vector
<
unsigned
int
>
&
n_forward
,
vector
<
unsigned
int
>
&
n_backward
,
vector
<
unsigned
int
>
&
n_mixed
,
vector
<
pair
<
pair
<
int
,
int
>
,
pair
<
int
,
int
>>
>
&
block_col_type
,
bool
linear_decomposition
);
block_type_firstequation_size_mfs_t
reduceBlocksAndTypeDetermination
(
const
dynamic_jacob_map_t
&
dynamic_jacobian
,
vector
<
pair
<
int
,
int
>>
&
blocks
,
const
equation_type_and_normalized_equation_t
&
Equation_Type
,
const
vector
<
int
>
&
variable_reordered
,
const
vector
<
int
>
&
equation_reordered
,
vector
<
unsigned
int
>
&
n_static
,
vector
<
unsigned
int
>
&
n_forward
,
vector
<
unsigned
int
>
&
n_backward
,
vector
<
unsigned
int
>
&
n_mixed
,
vector
<
tuple
<
int
,
int
,
int
,
int
>>
&
block_col_type
,
bool
linear_decomposition
);
//! Determine the maximum number of lead and lag for the endogenous variable in a bloc
void
getVariableLeadLagByBlock
(
const
dynamic_jacob_map_t
&
dynamic_jacobian
,
const
vector
<
int
>
&
components_set
,
int
nb_blck_sim
,
lag_lead_vector_t
&
equation_lead_lag
,
lag_lead_vector_t
&
variable_lead_lag
,
const
vector
<
int
>
&
equation_reordered
,
const
vector
<
int
>
&
variable_reordered
)
const
;
//! For each equation determine if it is linear or not
vector
<
bool
>
equationLinear
(
map
<
pair
<
int
,
pair
<
int
,
int
>
>
,
expr_t
>
first_order_endo_derivatives
)
const
;
vector
<
bool
>
equationLinear
(
map
<
tuple
<
int
,
int
,
int
>
,
expr_t
>
first_order_endo_derivatives
)
const
;
//! Print an abstract of the block structure of the model
void
printBlockDecomposition
(
const
vector
<
pair
<
int
,
int
>>
&
blocks
)
const
;
//! Determine for each block if it is linear or not
...
...
src/StaticModel.cc
View file @
d733f3fb
This diff is collapsed.
Click to expand it.
src/StaticModel.hh
View file @
d733f3fb
...
...
@@ -42,7 +42,7 @@ private:
vector
<
temporary_terms_inuse_t
>
v_temporary_terms_inuse
;
using
first_chain_rule_derivatives_t
=
map
<
pair
<
int
,
pair
<
int
,
int
>
>
,
expr_t
>
;
using
first_chain_rule_derivatives_t
=
map
<
tuple
<
int
,
int
,
int
>
,
expr_t
>
;
first_chain_rule_derivatives_t
first_chain_rule_derivatives
;
//! Writes static model file (standard Matlab version)
...
...
@@ -99,11 +99,11 @@ private:
//! Compute the column indices of the static Jacobian
void
computeStatJacobianCols
();
//! return a map on the block jacobian
map
<
pair
<
pair
<
int
,
pair
<
int
,
int
>>
,
pair
<
int
,
int
>
>
,
int
>
get_Derivatives
(
int
block
);
map
<
tuple
<
int
,
int
,
int
,
int
,
int
>
,
int
>
get_Derivatives
(
int
block
);
//! Computes chain rule derivatives of the Jacobian w.r. to endogenous variables
void
computeChainRuleJacobian
(
blocks_derivatives_t
&
blocks_derivatives
);
//! Collect only the first derivatives
map
<
pair
<
int
,
pair
<
int
,
int
>
>
,
expr_t
>
collect_first_order_derivatives_endogenous
();
map
<
tuple
<
int
,
int
,
int
>
,
expr_t
>
collect_first_order_derivatives_endogenous
();
//! Collecte the derivatives w.r. to endogenous of the block, to endogenous of previouys blocks and to exogenous
void
collect_block_first_order_derivatives
();
...
...
@@ -126,24 +126,18 @@ private:
//! Vector indicating if the block is linear in endogenous variable (true) or not (false)
vector
<
bool
>
blocks_linear
;
//! Map the derivatives for a block
pair
<lag,
make_pair(make_pair(eq, var)), expr_t
>
using
derivative_t
=
map
<
pair
<
int
,
pair
<
int
,
int
>
>
,
expr_t
>
;
//! Map the derivatives for a block
tuple
<lag,
eq, var
>
using
derivative_t
=
map
<
tuple
<
int
,
int
,
int
>
,
expr_t
>
;
//! Vector of derivative for each blocks
vector
<
derivative_t
>
derivative_endo
,
derivative_other_endo
,
derivative_exo
,
derivative_exo_det
;
//!List for each block and for each lag-leag all the other endogenous variables and exogenous variables
using
var_t
=
set
<
int
>
;
using
lag_var_t
=
map
<
int
,
var_t
>
;
vector
<
lag_var_t
>
other_endo_block
,
exo_block
,
exo_det_block
;
//! for each block described the number of static, forward, backward and mixed variables in the block
/*! pair< pair<static, forward>, pair<backward,mixed>> */
vector
<
pair
<
pair
<
int
,
int
>
,
pair
<
int
,
int
>>>
block_col_type
;
//! List for each variable its block number and its maximum lag and lead inside the block
vector
<
pair
<
int
,
pair
<
int
,
int
>>>
variable_block_lead_lag
;
//! List for each equation its block number
vector
<
int
>
equation_block
;
/*! tuple<static, forward, backward, mixed> */
vector
<
tuple
<
int
,
int
,
int
,
int
>>
block_col_type
;
//!Maximum lead and lag for each block on endogenous of the block, endogenous of the previous blocks, exogenous and deterministic exogenous
vector
<
pair
<
int
,
int
>>
endo_max_leadlag_block
,
other_endo_max_leadlag_block
,
exo_max_leadlag_block
,
exo_det_max_leadlag_block
,
max_leadlag_block
;
...
...
@@ -246,19 +240,19 @@ public:
BlockSimulationType
getBlockSimulationType
(
int
block_number
)
const
override
{
return
(
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
first
);
return
(
get
<
0
>
(
block_type_firstequation_size_mfs
[
block_number
]
)
);
};
//! Return the first equation number of a block
unsigned
int
getBlockFirstEquation
(
int
block_number
)
const
override
{
return
(
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
second
);
return
(
get
<
1
>
(
block_type_firstequation_size_mfs
[
block_number
]
)
);
};
//! Return the size of the block block_number
unsigned
int
getBlockSize
(
int
block_number
)
const
override
{
return
(
block_type_firstequation_size_mfs
[
block_number
]
.
second
.
first
);
return
(
get
<
2
>
(
block_type_firstequation_size_mfs
[
block_number
]
)
);
};
//! Return the number of exogenous variable in the block block_number
unsigned
int
...
...
@@ -276,7 +270,7 @@ public:
unsigned
int
getBlockMfs
(
int
block_number
)
const
override
{
return
(
block_type_firstequation_size_mfs
[
block_number
]
.
second
.
second
);
return
(
get
<
3
>
(
block_type_firstequation_size_mfs
[
block_number
]
)
);
};
//! Return the maximum lag in a block
unsigned
int
...
...
@@ -294,37 +288,37 @@ public:
EquationType
getBlockEquationType
(
int
block_number
,
int
equation_number
)
const
override
{
return
(
equation_type_and_normalized_equation
[
equation_reordered
[
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
second
+
equation_number
]].
first
);
return
(
equation_type_and_normalized_equation
[
equation_reordered
[
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
[
equation_reordered
[
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
second
+
equation_number
]].
first
==
E_EVALUATE_S
);
return
(
equation_type_and_normalized_equation
[
equation_reordered
[
get
<
1
>
(
block_type_firstequation_size_mfs
[
block_number
]
)
+
equation_number
]].
first
==
E_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
[
equation_reordered
[
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
second
+
equation_number
]]);
return
(
equations
[
equation_reordered
[
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
[
equation_reordered
[
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
second
+
equation_number
]].
second
);
return
(
equation_type_and_normalized_equation
[
equation_reordered
[
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
(
equation_reordered
[
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
second
+
equation_number
]);
return
(
equation_reordered
[
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
(
variable_reordered
[
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
second
+
variable_number
]);
return
(
variable_reordered
[
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
...
...
@@ -336,13 +330,13 @@ public:
int
getBlockInitialEquationID
(
int
block_number
,
int
equation_number
)
const
override
{
return
((
int
)
inv_equation_reordered
[
equation_number
]
-
(
int
)
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
second
);
return
((
int
)
inv_equation_reordered
[
equation_number
]
-
(
int
)
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
((
int
)
inv_variable_reordered
[
variable_number
]
-
(
int
)
block_type_firstequation_size_mfs
[
block_number
]
.
first
.
second
);
return
((
int
)
inv_variable_reordered
[
variable_number
]
-
(
int
)
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
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment