Commit Graph

804 Commits (d24ad5ac99e5595f7472fe59cf16900f38545f1e)

Author SHA1 Message Date
Sébastien Villemot fe0fdf2ccb
Fix Fortran flags under MEX for MATLAB
There was a typo in fedeeaad9f.

By the way, use the modern Fortran compiler when trying to detect slicot.
2019-12-03 18:48:19 +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 fedeeaad9f
Add support for Fortran 2008 in MEX files
By the same token, remove unused support for Fortran 77.
2019-12-03 16:17:00 +01:00
Sébastien Villemot 5cae192487
Build system: really error out if some dependency is missing
The changes in 8065e9d439 were not working as
intended, because AC_CHECK_PROG expect values and not actions. Hence
AC_MSG_ERROR was not properly executed.

By the way, simplify some test conditions using && instead of if/then/fi
blocks.
2019-11-28 14:43:44 +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 8065e9d439
Build system: by default, error out if some dependency is missing
In particular, if either MATLAB or Octave is missing, one needs to pass either
--disable-matlab or --disable-octave.

Moreover, several new configure flags have been introduced for disabling some
components:
--disable-doc
--disable-dynare++
--disable-mex-dynare++
--disable-mex-ms-sbvar
--disable-mex-kalman-steady-state
2019-11-26 13:53:42 +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
Houtan Bastani f8eb982767
octave configure: remove unnecessary library linking for macOS 2019-09-24 15:22:36 +02:00
Sébastien Villemot 6ff7d4c56c
C++17: use structured bindings instead of std::tie 2019-09-11 16:06:35 +02:00
Sébastien Villemot 0d0a0a9bbb
Bump to C++17
This means we now require GCC 8.

Boost filesystem library is no longer needed.

Ref preprocessor#16
2019-09-11 15:06:12 +02:00
Sébastien Villemot 8b0d5f4b86
Windows: ensure that libgomp is statically linked 2019-09-10 15:17:15 +02:00
Sébastien Villemot 35acc111ff
Windows package: fix random build failure due to race condition
The MEX files are built out-of-tree (because we want to do them in parallel).
This would create a potential race condition if several builds want to create
the symlinks under mex/matlab/ or mex/octave/.

The solution is to disable those symlinks for out-of-tree builds.
2019-09-04 11:39:52 +02:00
Sébastien Villemot bae1fa255a
Add scripts and CI job for building Windows package
The scripts are based the former “dynare-build” project. They have been
overhauled and simplified.

Building a Windows package (both installer and zip archive) is as easy as
running “make -C windows” (provided the right Debian packages are installed,
use the “windows/install-packages.sh” script for that purpose).

The layout of MEX files for Octave in the package has been
changed (mex/octave/win32/ and mex/octave/win64/ instead of mex/octave32/ and
mex/octave/), for consistency with MATLAB MEX.
2019-09-03 21:36:47 +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
Sébastien Villemot 7d9b2a557b
perfect_foresight_problem MEX: number of threads is now configurable 2019-06-27 17:00:12 +02:00
Sébastien Villemot 9557061fa3
Add new num_procs MEX file for getting number of available processing units 2019-06-27 14:34:09 +02:00
Sébastien Villemot e96f180c50
Implement mxIsScalar() for MATLAB < R2015a (8.5) 2019-06-25 20:31:13 +02:00
Sébastien Villemot 7c39b12b7b
Always compile MEX files with OpenMP (when they can take advantage of it)
As a consequence, remove the --enable-openmp option of the configure script.
2019-06-25 17:26:17 +02:00
Sébastien Villemot 82cef48eb4
A_times_B_kronecker_C MEX: remove the OpenMP codepath
Testing shows that it is slower than the BLAS path.
2019-06-25 17:26:14 +02:00
Sébastien Villemot c6a09a65e9
kronecker MEX: improve comments using UTF-8 2019-06-25 14:34:18 +02:00
Sébastien Villemot 7347554db5
perfect_foresight_problem MEX: fix compilation under Windows 2019-06-25 11:14:01 +02:00
Sébastien Villemot 5b591fac42
New perfect_foresight_problem MEX file
It constructs the stacked residuals and jacobian of the perfect foresight
problem.

It is an almost perfect replacement for the perfect_foresight_problem.m
routine, while being much more efficient.

Note however that the DLL never return complex numbers (it instead puts NaNs at
the place where there would have been complex). This may create problems for
some MOD files; the algorithms will need to be adapted to use a more
line-search method.
2019-06-24 17:53:59 +02:00
Sébastien Villemot ec05451d1a
Remove symmetric elements in 3rd model derivatives 2019-06-17 16:18:07 +02:00
Sébastien Villemot 1d22536bc5
Add back workaround for MKL with DGGES and VSL
The workaround was removed in de159c0480, but it
is still needed for MATLAB R2009b.
2019-05-21 17:28:11 +02:00
Sébastien Villemot 4d17c8b10d
Dynare++: move multithreading abstraction to the "utils" module 2019-05-02 12:38:56 +02:00
Sébastien Villemot faa3185bdf
local state space iterations 2 DLL: various modernizations and simplifications 2019-04-30 15:54:49 +02:00
Sébastien Villemot 1199d4abae
kronecker DLLs: various modernizations and simplifications 2019-04-30 15:54:48 +02:00
Sébastien Villemot de159c0480
mjdgges DLL: convert to C++ (for consistency with other DLLs)
Various modernizations and simplifications.

Also remove a workaround for a LAPACK bug in DGGES (the VSL argument was
apparently referenced even though JOBVSL="N"). Hopefully the bug has been fixed
everywhere now.
2019-04-30 15:54:45 +02:00
Sébastien Villemot b115b76e0d
Kalman steady state DLL: various modernizations and simplifications 2019-04-30 15:54:43 +02:00
Sébastien Villemot 80267f56e5
Block kalman filter DLL: various modernizations and simplifications 2019-04-30 15:54:40 +02:00
Sébastien Villemot f5e2bfc30a
Ask GCC to warn about C-style casts (-Wold-style-cast)
Adapt the code accordingly.
2019-04-23 13:03:20 +02:00
Sébastien Villemot 76e7acab7c
block_kalman_filter DLL: fix header file extension 2019-04-23 09:33:28 +02:00
Sébastien Villemot f953374dba
More Unicode copyright symbol 2019-04-16 14:34:05 +02:00
Sébastien Villemot c9bdc2c885
Dynare++: simplify methods for getting number of columns and rows of a matrix
Previously there were GeneralMatrix::numRows() and TwoDMatrix::nrows() for doing
the same thing (and same for columns and Const versions).

Merge these two into GeneralMatrix::nrows().
2019-04-16 12:44:02 +02:00
Sébastien Villemot be170f131c
k-order DLL: fix compilation error on Windows introduced by b1ba53ce0
Ref #217
2019-04-16 12:13:30 +02:00
Sébastien Villemot 57848930c6
Use Unicode copyright symbol (in UTF-8 encoding)
Do not use it in MATLAB source files, since unfortunately the MATLAB editor
does not support UTF-8.
2019-04-16 11:42:16 +02:00
Sébastien Villemot e281f35213
Lift upper restriction on approximation order
Ref #217
2019-04-15 17:34:01 +02:00
Sébastien Villemot b1ba53ce05
dynare_simul_ DLL: adapt for an arbitrary approximation order
The last input argument is now a struct containing matrices g_0, g_1,…
Typically one can pass oo_.dr for this argument.

Ref #217
2019-04-15 17:34:01 +02:00
Sébastien Villemot 68aa1ace8f
k-order DLL: in use_dll mode, get model derivatives from preprocessor at an arbitrary order
Ref #217
2019-04-15 17:34:01 +02:00