Commit Graph

705 Commits (8ad8bf05b3d57643ce082bf76048dd33b4b129a6)

Author SHA1 Message Date
Sébastien Villemot bc053018a0
Remove risky steady state (unfinished) code
Incidently, remove the possibility of passing model derivatives as arguments to
the k_order_perturbation. That possibility was only used by the risky steady
state code.

Closes: #1338
2021-01-22 11:32:36 +01:00
Stéphane Adjemian (Odysseus) 0e1c9312e2
Merge remote-tracking branch 'Dynare/master' into enterprise 2021-01-11 11:06:55 +01:00
Sébastien Villemot 55e25bcb7f
perfect_foresight_problem MEX: check the return code of mexCallMATLAB() 2020-12-07 15:03:35 +01:00
Sébastien Villemot 4e16ffcda2
Fortran MEX interface: minor fix for interface to dgemv 2020-10-21 18:17:41 +02:00
Sébastien Villemot ce5aa33a33
k-order DLL: no longer write journal file on-disk, unless options_.debug = true
Closes: #1735
2020-10-15 17:19:30 +02:00
Stéphane Adjemian (Charybdis) e690c5de5a
Merge Enterprise/block_trust_region into enterprise. 2020-09-24 16:05:55 +02:00
Stéphane Adjemian (Charybdis) 17e6421ea3
Merged master into enterprise.
Fixed conflict in
 - doc/manual/source/running-dynare.rst
2020-09-23 15:28:19 +02:00
Sébastien Villemot 73253a0620
Bytecode + Block decomposition: fix crash with purely forward variables
After simulating a block containing purely forward variables (thus of type
“evaluate backward”), the it_ variable of the evaluator would be left in an
inconsistent state (typically 0, which means that taking the value of a lagged
variable would lead to an invalid read).

By the way, fix a symmetric problem for backward blocks (which could
potentially create a invalid read for purely backward models).

Ref. #1727
2020-09-22 16:45:44 +02:00
Sébastien Villemot 8803bc1479
Bytecode: minor improvement to debugging information 2020-09-22 16:42:33 +02:00
Sébastien Villemot 865ab47fa9
Provide block_trust_region MEX under solve_algo 13 and 14
- block trust region solver now available under solve_algo=13
  It is essentially the same as solve_algo=4, except that Jacobian by finite
  difference is not handled. A test file is added for that case
- block trust region solver with shortcut for equations that can be evaluated
  is now available under solve_algo=14 (in replacement of the pure-MATLAB solver)

Closes: Enterprise/dynare#3
2020-09-18 18:01:56 +02:00
Sébastien Villemot 7e21bf2a10
Block trust region MEX: use MATLAB’s dmperm for the Dulmage-Mendelsohn decomposition
It turns out that MATLAB’s implementation is significantly faster than my own
Fortran implementation.
2020-09-18 17:55:58 +02:00
Sébastien Villemot 35a162c6a6
Block trust region MEX: fix memory leak in MATLAB function closure 2020-09-18 17:55:58 +02:00
Sébastien Villemot adf1fdb009
Block trust region MEX: add safety check for squareness of blocks 2020-09-18 17:55:58 +02:00
Sébastien Villemot 9430b4e9ca
Block trust region MEX: add debugging information 2020-09-18 17:55:57 +02:00
Stéphane Adjemian (Odysseus) 248ad18846 Merge remote-tracking branch 'Dynare/master' into enterprise
Fixed conflicts in:

 - .gitlab-ci.yml
 - matlab/dynare_config.m
 - matlab/dynare_solve.m
 - matlab/initvalf.m
 - matlab/perfect-foresight-models/make_ex_.m
 - matlab/perfect-foresight-models/perfect_foresight_setup.m
 - mex/build/matlab/Makefile.am
 - mex/build/matlab/configure.ac
 - mex/build/octave/Makefile.am
 - mex/build/octave/configure.ac
 - mex/sources/Makefile.am
 - preprocessor
 - tests/Makefile.am
2020-09-17 14:53:32 +02:00
Sébastien Villemot f6c2471eef
New MEX for solving discrete Lyapunov equations with doubling algorithm
This is a Fortran 2008 rewrite of disclyap_fast.m.

Closes: #1737
2020-07-30 16:34:35 +02:00
Sébastien Villemot 3f53a94981
Add dpotrf to Fortran 2008 BLAS/LAPACK bindings 2020-07-30 16:34:35 +02:00
Sébastien Villemot ea18431230
Various improvements to mjdgges MEX 2020-07-30 16:34:33 +02:00
Sébastien Villemot f4a31a0d1f
Various improvements to Fortran 2008 interface to MATLAB MEX functions
— add interface for more functions (cell, logical, struct)
— add new mexPrintf wrapper that trims and prints a newline
— functions that take indices of type mwIndex now 1-based indices
— improve the wrapper for mxArrayToString so that it returns a character scalar
2020-07-30 14:45:50 +02:00
Sébastien Villemot 49b35be90a
Preprocessor: various improvements to the use_dll mode
In particular, higher order derivatives are now returned as sparse matrices by
the static/dynamic files, instead of 3-column matrices (which was inconsistent
with the M-file mode).
2020-06-23 19:38:49 +02:00
Sébastien Villemot 31a9a5e9ab
Bytecode MEX: various fixes to debug mode 2020-05-13 12:22:20 +02:00
Sébastien Villemot f4f296edd6
Preprocessor update
— various refactoring and bugfixes in block decomposition
— small bugfix for PAC models
2020-05-06 18:17:25 +02:00
Sébastien Villemot 6e0f104d7e
Bump minimal MATLAB version to R2014a
Ref. #1713
2020-04-07 16:32:32 +02:00
Sébastien Villemot 43ed7b2b69
Merge remote-tracking branch 'community/master' into enterprise 2020-03-27 16:28:41 +01:00
Sébastien Villemot fbfff18378
Preprocessor: various refactorings of block decomposition
Adapt bytecode MEX accordingly.
2020-03-20 18:51:37 +01:00
Sébastien Villemot 144bdf34ba
k-order MEX: fix crash on Octave when higher-order derivatives have numerical zero
In Octave, when some values given to the sparse() function are numerically
zero, then the nzmax of the generated sparse matrix is shrinked accordingly;
while under MATLAB, the nzmax is the length of the vector of values, zeros
included.

The check at the top of
DynamicModelMFile::unpackSparseMatrixAndCopyIntoTwoDMatData() would then fail
under Octave if some higher-derivatives had an element which is symbolically
non-zero but numerically zero.

We therefore relax the check, and accordingly adapt the code that handles
numerical zeros.

This bug was uncovered by tests/pruning/AnSchorfheide_pruned_state_space.mod,
which was failing under Octave.
2020-02-18 12:18:39 +01:00
Sébastien Villemot ae3f150c99
MS-SBVAR MEX: various simplifications and modernizations 2020-02-10 16:25:03 +01:00
Sébastien Villemot 5f9b9db31e
Build system: add missing Fortran 2008 files to source tarball 2020-01-16 16:54:47 +01:00
Sébastien Villemot 7e770f69e7
Remove workaround for errors in MEX files
Because at some point throwing exceptions from MEX files (with mexErrMsgTxt())
was not working under Windows 64-bit, we had designed a workaround to avoid
using exceptions.

Most MEX files were returning an error code as their first (or sometimes last)
argument, and that code would have to be checked from the MATLAB code.

Since this workaround is no longer needed, this commit removes it. As a
consequence, the interface of many MEX files is modified.

For some background, see https://www.dynare.org/pipermail/dev/2010-September/000895.html
2020-01-10 18:33:11 +01:00
Sébastien Villemot 89dc67eb46
Convert mjdgges MEX to Fortran 2008 2020-01-09 09:23:07 +01:00
Sébastien Villemot c0c95e1ceb
Add Fortran 2008 interface for a subset of BLAS/LAPACK functions 2020-01-06 18:29:47 +01:00
Sébastien Villemot ce9eca366d
Add Fortran 2008 interface for a subset of MEX functions 2020-01-06 18:29:47 +01:00
Sébastien Villemot b901b7af86
Global reindentation of MEX sources 2019-12-20 16:30:24 +01:00
Sébastien Villemot 996bdd6c64 New local_state_space_iteration_k MEX, for nonlinear filters at k-order
It applies the approximated policy function to a set of particles, using
Dynare++ routines.

There is support for parallelization, using Dynare++ multithreading
model (itself based on C++11 threads; we don’t use OpenMP because it is
incompatible with MKL). For the time being, default to a single thread. This
should be later refined through empirical testing.
2019-12-20 11:31:56 +01:00
Sébastien Villemot 6a26926892
Add new block_trust_region MEX
This MEX solves nonlinear systems of equations using a trust region algorithm.
The problem is subdivided in smaller problems by doing a block
triangularisation of the Jacobian at the guess value, using the
Dulmage-Mendelsohn algorithm.

The interface of the MEX is simply:

  [x, info] = block_trust_region(f, guess_value);

Where f is either a function handle or a string designating a function.
f must take one argument (the evaluation point), and return either one or two
arguments (the residuals and, optionally, the Jacobian).

On success, info=0; on failure, info=1.
2019-12-03 16:17:16 +01:00
Sébastien Villemot 93bd817ccb
Add Fortran 2008 interface for a subset of BLAS/LAPACK functions 2019-12-03 16:17:12 +01:00
Sébastien Villemot ba466d22c8
Add Fortran 2008 interface for a subset of MEX functions 2019-12-03 16:17:08 +01:00
Sébastien Villemot 9e222734a8
Bytecode: fix logic in routine that substracts two sparse matrices
The logic of the dynSparseMatrix::Sparse_substract_SA_SB() routine was
incorrect.

In some cases, it would read past the last nonzero elements of the A matrix,
and consequently write past the number of allocated nonzero elements of the C
matrix.

This would lead to crashes and, probably, to wrong results under certain
circumstances.

Closes: #1652
2019-11-27 16:57:47 +01:00
Sébastien Villemot 42f172dec3
perfect_foresight_problem MEX: optimization for linear models
When the model is linear, there is no need to reevaluate the Jacobian for each
time period, since it is invariant.

Closes: #1662
2019-11-14 14:45:10 +01:00
Houtan Bastani afcdf46e80
capitalize Cepremap and Matlab, uncapitalize DYNARE 2019-10-02 14:09:21 +02:00
Sébastien Villemot 6ff7d4c56c
C++17: use structured bindings instead of std::tie 2019-09-11 16:06:35 +02:00
Houtan Bastani 1501032a3f
replace use of old-style casts 2019-07-30 15:15:23 -04:00
Sébastien Villemot 4030169db9
k_order_perturbation MEX: number of threads is now configurable 2019-07-09 17:33:14 +02:00
Sébastien Villemot 5b6c3bb452
k_order_perturbation MEX: small simplification in handling of NameLists 2019-07-09 17:33:14 +02:00
Sébastien Villemot aaaa897a2a
k_order_perturbation MEX: improve input handling and sanitization 2019-07-09 17:33:05 +02:00
Sébastien Villemot f8af21819e
Simplify the interface to perfect_foresight_problem MEX 2019-07-09 14:33:17 +02:00
Sébastien Villemot 984c60acb9
Various improvements related to the MEX R2018a API
— Use MX_HAS_INTERLEAVED_COMPLEX for testing for the new API

— Use the typed access functions under the new API, with one exception: we do
  not use mxGetDoubles() instead of mxGetPr(), because it would just complexif
  the code without any value added

For more details, see:
https://fr.mathworks.com/help/matlab/matlab_external/upgrade-mex-files-to-use-interleaved-complex.html
2019-07-09 11:54:12 +02:00
Sébastien Villemot f45738c09e
local_state_space_iteration_2 MEX: fix error message 2019-06-28 17:49:02 +02:00
Sébastien Villemot 67a49fc67b
k-order MEX: fix incorrect variable name in comment 2019-06-28 15:24:30 +02:00
Sébastien Villemot ca1a1ae0f2
local_state_space_iterations_2 MEX: minor stylistic improvement 2019-06-27 17:34:10 +02:00