Sébastien Villemot
0284b249f5
Remove unused “bytecode” argument in {Static,Dynamic}Model::computingPass()
2022-05-19 14:10:22 +02:00
Sébastien Villemot
3e94250582
C++17 modernization: use std::optional in ExprNode::getPacOptimizingShareAndExprNodes()
2022-05-16 19:10:16 +02:00
Sébastien Villemot
0eb11d3323
C++17 modernization: use std::optional in expression matching functions
2022-05-16 19:10:16 +02:00
Sébastien Villemot
3496d77eb4
C++17 modernization: use std::optional to store orig diff vars in VAR and TCM
...
By the way, remove the unused TrendComponentModelTable::getOrigDiffVar() method.
2022-05-16 19:10:16 +02:00
Sébastien Villemot
06d05e9a8d
C++17 modernization: use std::optional for SymbolTable::getEquationNumberForMultiplier()
2022-05-16 19:10:16 +02:00
Sébastien Villemot
fa7a926143
C++17 modernization: use std::optional for the storage of orig_symb_id and orig_lead_lag in SymbolTable
...
For the diff and unaryOp auxvar types, these value may be set or unset
depending on the complexity of the expression represented by the auxvar.
2022-05-16 19:10:15 +02:00
Sébastien Villemot
fc037a4352
Simplify printing of booleans using std::boolalpha
2022-05-16 19:10:15 +02:00
Sébastien Villemot
92d3b8166a
C++17 modernization: use std::optional for equation line numbers
2022-05-16 19:10:15 +02:00
Sébastien Villemot
0b51294994
C++17 modernization: use std::optional for trend variables in TCM
2022-05-16 19:10:15 +02:00
Sébastien Villemot
b42ee40b55
C++20 modernization: use contains() method on containers
2022-05-04 17:37:57 +02:00
Sébastien Villemot
54ca5d9cc0
Improve messages during model normalization
...
– Indicate whether we are trying to normalize the static or dynamic model
– If failed to normalize the static model, suggest to use the “no_static”
option
– Remove a superfluous error message
2022-04-19 17:11:13 +02:00
Sébastien Villemot
bfdcc546ec
Julia: adapt DynamicSetAuxiliarySeries.jl for TimeDataFrame objects
2022-04-01 17:34:37 +02:00
Sébastien Villemot
71edfd05e4
Add new “log” option to “var” statement
...
When an endogenous is declared with “var(log)”, say “y”:
– creates an auxiliary named “LOG_y”
– replaces “y(±l)” everywhere by “exp(LOG_y(±l))”
– adds a new auxiliary equation “y=exp(LOG_y)”
– adds a new definition “LOG_y=log(y)” in set_auxiliary_variables.m and
dynamic_set_auxiliary_series.m files
This option also works in conjunction with “deflator=…”, such as “var(log,
deflator=…)” (the “log” must appear befor “deflator”). There are no provisions
for combining “log” with “log_deflator”, because that would not make much sense
from an economic point of view (amounts to taking the log two times).
Ref. dynare#349
2022-03-30 17:46:07 +02:00
Sébastien Villemot
b78ac1d31f
Bytecode: fix temporary terms for dynamic derivatives in “evaluate” mode
...
The temporary terms for dynamic derivatives were only computed in the
“simulate” mode.
2022-02-18 12:38:06 +01:00
Sébastien Villemot
01bea3f5e7
TCM: remove useless 3rd dimension of A0 and A0star (supposedly for lags)
2022-01-28 16:38:50 +01:00
Sébastien Villemot
1e77f7c5a7
SymbolTable::getOrigSymbIdForAuxVar() now also works on unaryOp and diffForward auxvars
...
This is a more natural semantics.
Incidentally, this fixes a bug in the variable mapping (M_.mapping) where some
endogenous, appearing in a log() in a VAR or TCM, would not be mentioned (e.g.
in the var-expectations/7/example1.mod test, and many others).
2022-01-28 16:30:11 +01:00
Sébastien Villemot
289b4773d7
Fix matching of diff leads/lags in TCM and PAC models
...
The logic was flawed in several ways. In particular, the test files
pac/trend-component-{3,10,11}/example1.mod would return A0 and A0star matrices
where the (2,2) element was incorrectly zero.
2022-01-28 15:53:41 +01:00
Sébastien Villemot
b709da7f17
Fix SymbolTable’s getOrigSymbIdForAuxVar() and getUltimateOrigSymbID() so that they never return -1
...
The case of a diff aux var corresponding to a complex expression was not
correctly handled, and could lead to a value -1 being returned by these
methods.
2022-01-28 15:53:39 +01:00
Sébastien Villemot
5e8b478ccf
Add check to ensure that column indices in derivative matrices do not overflow
...
Closes : #89
2022-01-21 14:31:29 +01:00
Sébastien Villemot
6c7c2bc321
Simplification using std::set range constructor
2022-01-21 11:05:17 +01:00
Sébastien Villemot
aa0e06bc7d
Refactor handling of var_expectation_model statements
...
Creates a VarExpectationModelTable analogous to PacModelTable.
2022-01-20 16:26:15 +01:00
Sébastien Villemot
e1e5118373
Refactor the code that substitutes unary ops in model equations
...
In particular, make it more visible that the substitution also occurs in PAC
equations (and not only in VAR and TCM equations).
2022-01-19 15:56:44 +01:00
Sébastien Villemot
d149d3a76c
PAC: substitute unary ops in “growth” expressions (in “pac_model” and “pac_target_info”)
...
Ref. dynare#1837
2022-01-18 12:40:15 +01:00
Sébastien Villemot
5572e478f1
Indentation fix
2022-01-06 14:46:38 +01:00
Sébastien Villemot
a8fce06dc4
PAC: new options “auxname” and “kind” to “pac_model”
2021-12-16 15:40:47 +01:00
Sébastien Villemot
ea6fb40db7
PAC: new “pac_target_info” block and “pac_target_nonstationary” operator
...
Ref. Madysson/estimation-codes#5
2021-12-16 15:40:47 +01:00
Sébastien Villemot
1f004584e9
New model_remove statement and model_replace block
...
Factorize the implementation with the existing code for the include_eqs and
exclude_eqs options (which has been refactored by the way).
Ref. #19
2021-12-15 12:11:25 +01:00
Sébastien Villemot
b356b8d5fa
Substitute out adl() operators in equations marked [static]
2021-12-06 17:17:38 +01:00
Sébastien Villemot
dc99d81c45
Explain why expectation() operators need not be substituted in equations marked [static]
...
By the way, also perform a small code simplification.
2021-12-06 17:17:38 +01:00
Sébastien Villemot
214f0db4db
Add comment about predetermined variables and equations marked [static]
...
By the way, also perform a small code simplification.
2021-12-06 17:17:38 +01:00
Sébastien Villemot
5fe94ed606
Simplify constant equations also in equations marked [static]
...
The simplifyEquations() methods had to be moved to DynamicModel, in order to
access the static_only_equations member.
2021-12-06 17:17:37 +01:00
Sébastien Villemot
fe974c4c31
When looking for unused endos/exos, also search in equations marked [static]
2021-12-06 17:17:37 +01:00
Sébastien Villemot
8d4cab6fe3
Substitute model-local variables in equations marked [static]
2021-12-06 17:17:27 +01:00
Sébastien Villemot
7b8fc8edb7
Symbolic detrending engine: correctly handle equations marked [static]
...
Incidentally, this also fixes a detrending bug in the Occbin engine (since the
latter internally generates a [static] equation).
Ref. dynare#1827
By the way, perform a small code simplification.
2021-12-06 12:59:21 +01:00
Sébastien Villemot
a210a8fd59
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).
2021-11-24 11:27:17 +01:00
Sébastien Villemot
2282d4773c
PAC: new auxiliary variable type for pac_expectation operator
...
Also add the new equation to auxiliary equations in the backward case (but not
in the MCE case, since that equation is recursive).
2021-11-23 14:31:03 +01:00
Sébastien Villemot
ae242770f9
PAC: in the backward case, unify h0 and h1 parameters vector into a single vector
...
There is no reason to keep this distinction.
Additionally, since the data structure is now symmetric with the MCE case,
unify this “h” parameter vector with the “α” parameter vector.
2021-11-23 14:31:03 +01:00
Sébastien Villemot
0f89569f7e
PAC: in the backward case, create an aux. var. for the pac_expectation expression
...
By the way, refactor the MCE case by merging two routines related to the Z₁ aux. var.
This restores the symmetry with the backward case, now that the latter also has
an aux. var. for the pac_expectation operator. Also store the aux. var. IDs in a
structure common to the backward and MCE cases.
2021-11-23 14:31:03 +01:00
Sébastien Villemot
0e62206203
PAC: drop support for multiple PAC equations associated to a given PAC model
2021-11-23 14:31:02 +01:00
Sébastien Villemot
1041f205ea
PAC: trap a few more cases when an auxiliary param conflicts with a declared one
2021-11-09 15:48:59 +01:00
Sébastien Villemot
37a6ed6261
PAC: rethink the relation between PacModelTable and DynamicModel classes
2021-10-29 14:11:30 +02:00
Sébastien Villemot
127361971f
PAC: refactor with new PacModelTable that replaces PacModelStatement(s)
...
Incidentally, the auxiliary endogenous variable representing Z₁ and created for
PAC MCE models no longer necessarily appear as the first auxiliary variable (so
this is effectively a revert of 64f55e4a5e
).
2021-10-29 14:11:30 +02:00
Sébastien Villemot
5bef185370
PAC: add growth correction term for definition of Z₁ in the MCE case
2021-10-25 17:28:01 +02:00
MichelJuillard
561bee0790
add NNZderivatives to JSON + use AbstractVector for Julia functions
2021-10-06 17:45:11 +02:00
Sébastien Villemot
78e295115a
PAC: better error message in case of name conflict for the growth neutrality correction parameter
2021-10-06 16:41:09 +02:00
Sébastien Villemot
784dd4122a
PAC: generate the “growth_neutrality_param_index” MATLAB field for MCE models
...
Previously it was only generated in the case of backward PAC models.
2021-08-31 17:54:20 +02:00
Sébastien Villemot
e1f7d8c735
VAR models: add a parameter representing the constant in the development of the pac_expectation operator
2021-07-21 17:53:55 +02:00
Sébastien Villemot
a6add6127b
VAR models: output vector of constants in varmatrices.m
2021-07-21 17:53:54 +02:00
Sébastien Villemot
1cf03a5f07
Cosmetic improvement
2021-07-21 17:53:54 +02:00
Sébastien Villemot
ebd9954d33
Occbin: new syntax for constructing multi-regime equations
...
Ref. #68
2021-07-20 18:18:24 +02:00
Sébastien Villemot
08ac455fcd
Implement “occbin_constraints” block
...
Consequently drop “occbin” option to “model”.
Incidentally, allow more values in equation tag names (previously some keywords
such as “alpha” were disallowed).
Ref. #68
2021-07-16 11:34:27 +02:00
Sébastien Villemot
365fb27f3d
New “structural” option to “var_model”
...
As the name implies, this option allows contemporaneous variables on the RHS.
The A0 matrix for contemporaneous variables is added as a second (optional)
output to the generated var_ar.m file. Note that for reduced-form VAR, this
matrix will be the identity.
Also, the user is now allowed to write the VAR models in a more flexible form:
the LHS must still be a single variable, but the RHS can be an arbitrary
expression (as long as it is linear, obviously). Internally, the preprocessor
now uses derivation to compute the coefficients of the AR and A0. This change
applies to both reduced-form and structural VAR models.
Ref. dynare#1785
2021-07-08 12:55:47 +02:00
Sébastien Villemot
67f4777ac3
Remove support for obsolete syntax: var_model(order = 2) X Y Z;
2021-07-07 18:26:09 +02:00
Sébastien Villemot
4cc22897b7
Cosmetic improvements
2021-07-06 19:09:25 +02:00
Sébastien Villemot
8df34c1ca5
VAR and trend component models: improve sanity checks on lead/lags on RHS
...
In particular, forbid lagged exogenous.
2021-07-06 18:52:38 +02:00
Sébastien Villemot
5a33699f03
VAR / trend component models: cosmetic changes
2021-07-01 17:52:05 +02:00
Sébastien Villemot
74ef3457b4
Use secure URL for link to GNU licenses
2021-06-09 17:21:00 +02:00
Sébastien Villemot
c5f9ae89e7
Implement new “occbin” option to “model” block
...
For the time being, the preprocessor will refuse that this option be used with
any command other than estimation.
By the way, remove occbin_likelihood and occbin_smoother options to estimation.
Ref. dynare#569
2021-05-31 10:00:59 +02:00
MichelJuillard
9773bafc5b
Julia: write definition of get_power_deriv inside generated static/dynamic files
2021-04-26 10:52:18 +00:00
Sébastien Villemot
dca294de3a
Julia: refactor the auxiliary variable/series files
...
— rename the files with camel case
— encapsulate the functions with modules
— change the signature of function <MODFILE>_dynamic_set_series!, by removing
the output argument and appending the exclamation mark, since this function
modifies one of its arguments, and for symmetry with the static version
Ref. DynareJulia/Dynare.jl#1
2021-04-23 17:57:33 +02:00
Sébastien Villemot
4354d8a578
Julia: do not overwrite steady state / auxiliary variables/series files if contents has not changed
...
Ref. DynareJulia/Dynare.jl#1
2021-04-23 17:56:54 +02:00
Sébastien Villemot
4cfc7a563b
Julia: do not overwrite Static/Dynamic files if contents has not changed
...
Ref. DynareJulia/Dynare.jl#1
2021-04-22 18:03:47 +02:00
Sébastien Villemot
81b1d02748
Julia: fix typo in StatsFuns package name
...
Ref. DynareJulia/Dynare.jl#1
2021-04-22 15:48:25 +02:00
Sébastien Villemot
1f17528383
Julia: update dependencies of Static/Dynamic modules
...
Ref. DynareJulia/Dynare.jl#1
2021-04-19 17:02:46 +02:00
Sébastien Villemot
c2d47fb48e
Julia: remove driver file
...
The Julia code now uses the JSON output for retrieving the information that
previously was in the driver file.
2021-04-19 17:02:41 +02:00
Michel Juillard
fd979f625a
add maximum lead and lag to modfile.json
2021-04-01 17:05:13 +02:00
Sébastien Villemot
4798a5e2bc
Cosmetic change
2021-02-19 20:09:48 +01:00
Sébastien Villemot
d3e115194b
Fix output write_latex_original_model for model-local variables
...
Those variables were substituted out by early substitution methods (which are
also called on the original model, for an unknown reason).
Closes : #65
2021-02-19 17:45:02 +01:00
Sébastien Villemot
2781e3e6f6
A few modernizations using clang-tidy
2021-02-10 16:48:46 +01:00
Sébastien Villemot
89e2daf7c7
C++17 modernization: convert the remaining enums to enum classes
2021-02-01 12:05:06 +01:00
Sébastien Villemot
af9bd8f109
Remove the unfinished decomposition in linear and nonlinear blocks
...
Also remove the det_cond_forecast interface, that was related to it.
Ref. dynare!1626
Closes : #39
2021-01-25 18:03:37 +01:00
Sébastien Villemot
bf1da3c6fb
JSON output: fix logic in “variable_mapping” that could lead to invalid JSON formatting
...
Ref. dynare#1755
2020-12-09 16:47:55 +01:00
Sébastien Villemot
cfb41d291c
Substitute out model-local variables early in the model transform pass
...
Incidentally, this makes it possible to use model-local variables with either
the “block” or “bytecode” option. (Ref: dynare#1243)
2020-11-10 18:07:57 +01:00
Sébastien Villemot
1e419a48e4
Remove unused function
2020-11-10 18:02:06 +01:00
Stéphane Adjemian (Charybdis)
abf5a6553b
Removed useless subfield (only julia output).
...
TODO: Check that we can do the same in the matlab version…
2020-10-21 18:16:07 +02:00
Sébastien Villemot
d2cbe2a19e
PAC model: fixes to M_.pac.MODEL.ar (information about autoregressive part)
...
– Fix order of items in this structure. Previously, items were ordered
according to the declaration order of parameters. Now, items are order
according to lag order (first lag appears first)
– Gracefully handle the case where there is no autoregressive part
(Closes : #52 )
2020-10-16 16:31:51 +02:00
Sébastien Villemot
740ea833f6
Block decomposition: bugfix for solve one boundary blocks with mfs>0
...
Ref. dynare#1726
2020-10-07 18:55:19 +02:00
Sébastien Villemot
4560639eb4
Block decomposition: fix evaluation of recursive variables in solved blocks
...
Ref. dynare#1726
2020-10-06 18:30:34 +02:00
Sébastien Villemot
5979885714
Block decomposition, chain rule derivation: code improvement
2020-10-02 18:31:55 +02:00
Sébastien Villemot
feee0ffa12
PAC model: better error message when pac_expectation refers to a non-existent pac_model
...
Closes : #53
2020-09-10 14:24:20 +02:00
Sébastien Villemot
de65e74c8f
use_dll: add the “restrict” C99 keyword to all pointers to double in computation functions
...
This greatly facilitates the job of the compiler during the optimization pass,
since we promise that the various pointers do not overlap each other. It may
now be possible to reenable some of the optimization flags that were disabled
without sacrificing compilation time, but this needs more investigation.
For the gory details, see:
https://en.cppreference.com/w/c/language/restrict
https://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html
2020-09-03 18:09:06 +02:00
Sébastien Villemot
ecf6d67e1c
PAC/MCE model: fix timing of target in PAC expectation term
...
Also be more strict on the form of the target (must now be X(-1) or log(X(-1))
where X is *not* an auxiliary variable).
By the way, improve some comments in SymbolTable.
2020-07-24 18:26:16 +02:00
Sébastien Villemot
3b3589b958
PAC model: rewrite the algorithm for detecting the target, to make it more robust
...
Closes : #54
2020-07-23 17:19:16 +02:00
Sébastien Villemot
86ac7d5bbc
PAC/MCE: improve informative message about # of aux. vars/eqs by adding the model name
...
This makes the output more useful when there are multiple PAC models.
2020-07-22 16:09:12 +02:00
Sébastien Villemot
2b25ab3e85
Fix handling of multiple PAC models
2020-07-22 12:21:05 +02:00
Sébastien Villemot
16f9168fda
PAC MCE: fix incorrect detection of the target variable
...
The detection of the target EC variable to be used when constructing the
forward-looking expectation variable is rather fragile.
When the PAC model is written with an (non-)optimizing share of agents,
restrict the identification of the target variable to the optimizing
expression, to minimize the risk of wrong identification.
By the way, add a few comments, and a small simplification.
2020-07-13 17:52:42 +02:00
Stéphane Adjemian (Charybdis)
51b3d5c68f
Do not print aux. var. for PAC expectation in dynamic_set_auxiliary_series routine.
...
It is useless in the backward looking version, and it cannot be
evaluated in the MCE case (because of the forward looking recursion).
2020-07-08 22:51:35 +02:00
Sébastien Villemot
3a9b0fc9ce
PAC MCE expectations: add corresponding auxiliary variables in dynamic_set_auxiliary_series.m and set_auxiliary_variables.m
2020-07-08 22:49:51 +02:00
Sébastien Villemot
4b3f010bc6
Simplify DynamicModel::writeAuxVarRecursiveDefinitions()
2020-07-08 18:48:45 +02:00
Sébastien Villemot
5b80a4db59
Unary ops substitution: bugfix, actually restrict the substitution to the chosen equations
...
By default, the preprocessor is supposed to only do the “unary ops”
transformation in the equations of VAR/PAC/trend component models.
However, the implementation was slightly different so far. It would detect
candidates to this transformation in the chosen equations, but it would then
perform the substitution in *all* equations.
This could lead for crashes, for example if the chosen equation contains
log(X(-1)), but another (non-chosen) equation has log(X(-2)). Then this latter
expression, even though it belongs to the same lag-equivalence class, is not
properly handled, causing a segfault.
Also do a few related cosmetic changes.
2020-07-08 15:13:14 +02:00
Sébastien Villemot
59bda04d8b
Block decomposition + use_dll: fix bug in timing of exogenous variables
2020-06-25 15:19:49 +02:00
Sébastien Villemot
db8c5439f7
use_dll: higher order derivatives are now returned as sparse matrices by static/dynamic files
...
Previously they were returned as 3-column matrices. But this was inconsistent
with the M-file mode.
2020-06-23 17:50:50 +02:00
Sébastien Villemot
95bdfcee8c
use_dll: better safeguards on the number of input/output argument to static/dynamic MEX files
2020-06-23 16:30:21 +02:00
Sébastien Villemot
fd13c03401
use_dll: use fmax() and fmin() from C99 to compute max and min operators
2020-06-23 15:59:35 +02:00
Sébastien Villemot
ad5e196d30
Block decomposition now compatible with 'use_dll' option
2020-06-23 15:13:04 +02:00
Sébastien Villemot
479c2c029f
Block decomposition: move core of the routine for writing per-block files in separate function
...
This is a preparatory step to allow use_dll with block decomposition.
2020-06-22 14:18:21 +02:00
Sébastien Villemot
f098329c74
Block decomposition: static and dynamic files are now pure wrappers around the per-block files
2020-06-19 18:45:42 +02:00
Sébastien Villemot
f4d2ce70da
Block decomposition: move logic for Jacobians in stochastic mode outside the dynamic file
2020-06-19 17:44:05 +02:00
Sébastien Villemot
92aff91066
Block decomposition: in per-block files, construct sparse Jacobians more efficiently
...
Use 3-column format before calling sparse().
Ensure that the 3-column matrix is constructed in column-major order: data
locality will greatly improve performance once we implement use_dll.
2020-06-19 16:42:32 +02:00
Sébastien Villemot
93c18d514b
Block decomposition: in per-block dynamic files, fix nonzero elements for deterministic Jacobians
2020-06-19 15:26:19 +02:00
Sébastien Villemot
8ec43b1fb2
Block decomposition: small simplification in per-block dynamic files
2020-06-19 12:39:54 +02:00
Sébastien Villemot
79763911b2
Block decomposition: in the dynamic file, y and T are now vectors as in non-block mode
2020-06-17 16:49:12 +02:00
Sébastien Villemot
91d5be3b8c
Block decomposition: fix value of M_.block_structure.dyn_tmp_nbr
2020-06-17 16:04:49 +02:00
Sébastien Villemot
257b399a94
Block decomposition: in dynamic files, rename “jacobian_eval” to “stochastic_mode”
...
This is much more explicit.
2020-06-16 15:54:51 +02:00
Sébastien Villemot
379be6ccef
Block decomposition: for “solve two-boundaries” blocks, move the iteration loop outside the dynamic file
2020-06-16 15:34:45 +02:00
Sébastien Villemot
85b900363d
Block decomposition: for “solve two boundaries” block, no longer compute “b” (-residuals+g1*y) in the dynamic function
2020-06-16 13:49:23 +02:00
Sébastien Villemot
8496979375
Block decomposition: remove useless “y” output for static/dynamic files of solved blocks
2020-06-16 10:38:16 +02:00
Sébastien Villemot
ad583adcd4
Block decomposition: for evaluate blocks, move the iteration loop outside the dynamic file
2020-06-15 18:13:17 +02:00
Sébastien Villemot
f022c0e16e
Block decomposition: remove duplicate “periods” arg. to dynamic file of complete two-boundaries blocks
2020-06-15 16:54:11 +02:00
Sébastien Villemot
b402e35683
In the driver file, provide mapping between model local variables and indices in the temporary terms vector
...
The structures are M_.model_local_variables_{dynamic,static}_tt_idxs.
Ref. dynare#1722
2020-06-05 17:12:15 +02:00
Sébastien Villemot
90b9b6a1e4
JSON output: write model local variables in parsed model (modfile.json)
...
Ref. dynare#1723
2020-06-05 16:10:38 +02:00
Sébastien Villemot
050f1cdd74
Block decomposition: remove unused 2nd and 3rd derivatives in output of dynamic functions
2020-06-03 16:59:04 +02:00
Sébastien Villemot
f0c8a14551
Block decomposition: no longer compute deterministic simulation from dynamic.m file
2020-06-02 17:42:00 +02:00
Sébastien Villemot
2caad3ee84
Block decomposition: simplify DynamicModel::writeDynamicBlockMFile()
2020-05-29 16:48:38 +02:00
Sébastien Villemot
7b11898689
use_dll: merge the two generated C source files into a single one
...
Also, do various other cosmetic/simplification changes.
2020-05-29 16:12:01 +02:00
Sébastien Villemot
3ca1914e03
Block decomposition: fix simulation of blocks of type "evaluate backward" (without bytecode)
...
Ref. dynare#1727
2020-05-26 17:00:21 +02:00
Sébastien Villemot
faa6666abe
Block decomposition: no longer use global variables for temporary terms in the dynamic M-file
...
Rather use a single vector as in non-block mode.
By the way, change the order of output arguments in static functions, to be
closer to the dynamic ones.
2020-05-26 16:21:11 +02:00
Sébastien Villemot
04b7d4386d
Block decomposition: no longer use global variables for temporary terms in the static M-file
...
Rather use a single vector as in non-block mode.
2020-05-25 18:35:36 +02:00
Sébastien Villemot
a5abbae46a
use_dll: remove workaround for char16_t type
...
Should no longer be needed now that the minimal MATLAB version is R2014a.
2020-05-25 16:06:17 +02:00
Sébastien Villemot
7b1a77ca47
Block decomposition: use logical values for some inputs to solve_{one_boundary,two_boundaries}
2020-05-25 15:12:43 +02:00
Sébastien Villemot
a6d9ba6e55
Rename EquationType::evaluate_s to evaluateRenormalized, for clarity
2020-05-20 11:49:32 +02:00
Sébastien Villemot
c6a17913b4
Rename {Static,Dynamic}Model::writeOutput() to ::writeDriverOutput() for clarity
2020-05-20 11:44:40 +02:00
Sébastien Villemot
becc433d56
Rename byte_code to bytecode for consistency with user option name
2020-05-20 11:39:59 +02:00
Sébastien Villemot
96657b4974
Block decomposition: refactor code that writes the block structure to the driver file
2020-05-20 11:35:14 +02:00
Sébastien Villemot
2944484442
Bytecode: rename output methods for better consistency
2020-05-19 17:45:33 +02:00
Sébastien Villemot
1d838e96ff
Block decomposition: simplify routines for writing output dynamic/static M files
2020-05-19 17:33:58 +02:00
Sébastien Villemot
a2bea00fee
Block decomposition: another fix related to temporary terms refactoring
...
Temporary terms need to be computed per equation (as was done previously), and
not simply per block.
It’s necessary to track temporary terms per equation, because some equations
are evaluated instead of solved, and an equation E1 may depend on the value of
an endogenous Y computed by a previously evaluated equation E2; in this case,
if some temporary term TT of equation E2 contains Y, then TT needs to be
computed after E1, but before E2.
2020-05-13 16:58:19 +02:00
Sébastien Villemot
c9388da649
Bytecode: still another fix for temporary terms
2020-05-13 15:16:38 +02:00
Sébastien Villemot
2e6bc7ecaa
Bytecode: fix handling of temporary terms
...
They were broken by 49036f166d
2020-05-13 12:53:47 +02:00
Sébastien Villemot
49036f166d
Block decomposition: refactor code for computing temporary terms
...
In particular, in dynamic models, temporary terms are now computed for
derivatives w.r.t. exogenous, and also w.r.t. endogenous variables that do not
belong to the block.
2020-05-12 18:39:13 +02:00
Sébastien Villemot
928aa977b6
Block decomposition: replace expr_t by BinaryOpNode * in a couple of places
2020-05-07 15:24:35 +02:00
Sébastien Villemot
c699d57308
Block decomposition: no longer compute static Jacobian, it’s not used
...
Also remove a message about elements below the cutoff that was no longer
correct (elements below the cutoff have no impact on the incidence matrix
outside of normalization).
2020-05-06 18:11:11 +02:00
Sébastien Villemot
a1b37288f9
Block decomposition: do not write unnecessary zeros in dynamic Jacobian
...
Also do cosmetic change in the corresponding code for static Jacobian.
2020-05-06 14:22:04 +02:00
Sébastien Villemot
9f361e9e37
Block decomposition: simplify code for ordering dynamic Jacobian columns
2020-05-06 14:21:24 +02:00
Sébastien Villemot
38ccd5e0cf
Block decomposition: remove unneeded code for bytecode
2020-05-05 17:15:08 +02:00
Sébastien Villemot
5f22f00436
PAC models: handle PAC data in DynamicModel copy constructor and assignment operator
2020-05-05 16:34:51 +02:00
Sébastien Villemot
4f453320d1
Block decomposition: remove unneeded code for exogenous
2020-05-05 16:17:22 +02:00
Sébastien Villemot
cb61ee8506
Block decomposition: make structures storing derivatives w.r.t. other endo/exo symmetric with those for endos belonging to the block
2020-04-30 18:24:24 +02:00
Sébastien Villemot
b1a739c56a
DynamicModel: add missing members in copy constructor/assignment operator
2020-04-30 14:57:50 +02:00
Sébastien Villemot
a8c2defe26
Block decomposition: compute simulation types into separate function; prologue and epilogue are no longer class members
...
By the way, remove the BlockType stuff which was purely informative (and it’s
not worth carrying over prologue and epilogue information just for that).
2020-04-30 12:48:16 +02:00
Sébastien Villemot
26fc71ffa7
Block decomposition: store max lead/lag of all variables in the “blocks” structure
...
By the way, regroup all code that computes the dynamic structure of a block
into a single function.
2020-04-30 12:03:14 +02:00
Sébastien Villemot
4948adf2cd
Block decomposition: remove unused data structure
2020-04-29 17:47:48 +02:00
Sébastien Villemot
f39c687d85
Block decomposition: store mapping between endos/eqs and their block
...
Previously this computation was done at several places.
2020-04-29 17:42:46 +02:00
Sébastien Villemot
39407083be
Block decomposition: ensure that the cutoff option only impacts normalization
...
Previously, the cutoff option would also impact the block decomposition itself,
since it would had an influence on the incidence matrix used for computing the
blocks and their derivatives.
The problem is that, in the general case, it’s quite possible that an element
of the numerical Jacobian be zero at the evaluation point, while being quite
different from zero along the simulation path. A typical example is an
expression of the type x*y, where y is an endogenous and x is an exogenous not
present in the initval block (and hence initialized to zero).
2020-04-29 12:41:39 +02:00
Sébastien Villemot
470cb5fcb0
Block decomposition: remove mostly unused structure ModelTree::derivative_endo
...
It has been superseded by ModelTree::blocks_derivatives.
By the way, fix the initial number of non-zero elements in sparse Jacobian.
Also avoid computing suboptimal temporary terms.
2020-04-28 14:12:29 +02:00
Sébastien Villemot
2e136cae56
Block decomposition: simplify computation of block derivatives
...
— use a std::map for storing block derivatives
— remove redundant ModelTree::first_chain_rule_derivatives structure
— remove unused codepaths in StaticModel
— DynamicModel: simplify code that determines the type of derivatives in a
block. We now use a slightly different categorization.
— by the way, fix the max lead/lag information for blocks that are obtained via
merging. A workaround was previously implemented in
DynamicModel::get_Derivative(), but it is no longer needed with this fix.
2020-04-28 12:26:51 +02:00
Sébastien Villemot
5ee45f5bd4
Block decomposition: remove helpers that are no longer needed since data structure are cleaner
...
Add a new helper for getting the number of recursive variables in a block.
2020-04-23 16:31:57 +02:00
Sébastien Villemot
118ceab85b
Block decomposition: reorganize data structures storing block information
2020-04-21 18:25:33 +02:00
Sébastien Villemot
8eafd9ab4f
Block decomposition: various refactorings
2020-04-17 19:23:52 +02:00
Sébastien Villemot
7327fb9f17
Block decomposition: give more explicit names to ModelTree::{inv_,}{equation,variable}_reordered
2020-04-17 15:09:22 +02:00