Commit Graph

1019 Commits (62f608eb805822dbc166d579a54dda9ec2e2288a)

Author SHA1 Message Date
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 dd1e4d238b
Build system: remove useless rules for preprocessed Fortran 2008 files
Automake actually provides such rules.
2020-01-08 18:37:26 +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 47e4649026
Add support for Fortran 2008 in MEX files
By the same token, remove unused support for Fortran 77.
2020-01-06 18:29:47 +01:00
Sébastien Villemot 4e314a529b
Bump minimal required Octave version to 4.4 2020-01-06 18:29:47 +01:00
Sébastien Villemot 39ed7c6742
Bump version number to 4.7-unstable 2019-12-20 17:20:07 +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
Houtan Bastani 0c77f7e92f
macOS packaging: compile against the version of Octave distributed via https://octave-app.org (currently 4.4.1) 2019-12-10 15:14:16 +01:00
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
Sébastien Villemot a101457cf0
k-order DLL: fix wrong assertion in MATLAB mode
Bug introduced in 4c6e911d6 (only apparent under Octave, since under MATLAB
assertions are skipped).

Ref #217
2019-04-15 17:34:01 +02:00
Sébastien Villemot 2169341639
Move source code of gensylv and dynare_simul_ MEX to the same place as other MEX 2019-04-15 17:34:01 +02:00
Sébastien Villemot 4c6e911d69
k-order DLL: in MATLAB mode, get model derivatives from preprocessor at an arbitrary order
We no longer use the old ‘modfile.dynamic’ compatibility layer. We directly
call the ‘modfile.dynamic_g*’ functions.

Ref #217
2019-04-12 18:26:31 +02:00
Sébastien Villemot c31ba8bebf
k-order DLL: in ‘use_dll’ mode, compute # of temp. terms. using M_.dynamic_tmp_nbr
The preprocessor no longer exports the ‘ntt’ symbol in the MEX.

Ref #217
2019-04-12 18:26:31 +02:00
Sébastien Villemot d7dd7214c7
k-order DLL: convert model derivatives from Dynare to Dynare++ format at an arbitrary order
Ref #217
2019-04-12 18:26:30 +02:00
Sébastien Villemot 2dc988b69d
k-order DLL: make model derivatives storage ready for an arbitrary order 2019-04-10 19:00:49 +02:00
Sébastien Villemot 85f472c74b
Dynare++: new helpers for constructing {Const,}{TwoD,General}Matrix from mxArray* 2019-04-10 19:00:49 +02:00
Sébastien Villemot d0b4429fb6
k-order DLL: misc minor improvements 2019-04-10 09:41:58 +02:00
Sébastien Villemot b556290d60
k-order DLL: simplify and better document correspondence between Dynare and Dynare++ variable orderings 2019-04-10 09:23:32 +02:00
Sébastien Villemot efa1f39e71
k-order DLL: finally adapt for M_.{endo,exo}_names as cell arrays 2019-04-08 18:47:49 +02:00
Sébastien Villemot 86a607a4fc
k-order DLL: make the output arguments ready for arbitrary order 2019-04-08 18:47:49 +02:00
Sébastien Villemot bdc95f23aa
Make MEX build system forward-compatible with Automake 2.0
We now use a symbolic link farm to make source file accessible from build
directories.

Closes #466
2019-04-05 16:55:11 +02:00
Sébastien Villemot dee230bf32
Minor shell modernization 2019-04-05 12:12:24 +02:00
Sébastien Villemot fa64a25825
qmc_sequence DLL: various modernizations and simplifications 2019-04-03 19:04:36 +02:00
Sébastien Villemot dd09264b03
k-order DLL: return unfolded matrices in 5th output argument
Thus we can remove unfolding code from k_order_pert.m.
2019-04-02 19:16:13 +02:00
Sébastien Villemot 20cbc30450
k-order DLL: various simplifications 2019-04-02 19:16:10 +02:00
Houtan Bastani 7e46d8267c
mac: make build system work with clang and gcc 2019-04-01 17:38:42 +02:00
Houtan Bastani a93c6681c7
clang: can’t print non POD type through variadic function 2019-04-01 16:05:47 +02:00
Sébastien Villemot fb4d14c0a2
Fix build failure with MATLAB ≤ R2011a with recent GCC 2019-03-25 18:47:50 +01:00
Sébastien Villemot c46023ad56
POSIX shell stylistic improvements 2019-03-25 18:47:49 +01:00
Sébastien Villemot 4c11e9e9ec
Dynare++ kord and MEX: various modernizations and improvements 2019-03-07 19:46:15 +01:00
Sébastien Villemot 14f85cf448
Dynare++ kord library: various modernizations and improvements
Note that I removed several #define whose purpose was to avoid typing "typename
ctraits<t>::…". Even though this tends to complicates the code, this is
probably safer, especially since the #define was capturing a free variable (t).
2019-03-06 18:43:04 +01:00
Sébastien Villemot 6d99b6d120
Dynare++ kord library: various modernizations and simplifications 2019-03-05 18:35:35 +01:00
Sébastien Villemot 7fd95a6b72
Dynare++ kord library: use modern pseudo-random number generators 2019-03-05 12:29:17 +01:00
Sébastien Villemot 58bdee12c3
Dynare++ tensor library: refactor static stuff
- encapsulate it more clearly
- make it thread safe
- put back the Pascal triangle initialization stuff removed in 9512a32ad0
2019-02-21 19:00:50 +01:00
Sébastien Villemot b72857d4ce
Dynare++: the get() method of tensor containers now return a reference
Previously it was returning a pointer, which is non-standard for containers,
and was leading to ugly dereferencing everywhere.
2019-02-20 18:06:58 +01:00
Sébastien Villemot b5793ddd22
Dynare++: use std::unique_ptr for storage inside tensor containers 2019-02-20 17:04:34 +01:00
Sébastien Villemot 9f4986e90e
Add missing Dynare++ header file to MEX builds 2019-02-19 18:53:21 +01:00
Sébastien Villemot 9512a32ad0
Dynare++: remove duplicate implementation of the Pascal triangle
As a consequence, the singleton implementation has to be made thread-safe.

Also implement the singleton pattern using a namespace, rather than a static
instance.
2019-02-19 16:46:04 +01:00
Sébastien Villemot 5fcf563c61
Dynare++: factorize and optimize code for integer exponentiation
There were two implementations of integer exponentiation. Merge them into a new
file under utils/cc/.

By the way, optimize it using exponentiation by squaring.
2019-02-19 15:50:07 +01:00
Sébastien Villemot 9dfb556740
k-order DLL: fix bug introduced in 1f7d3beddc
For the IntSequence class, the initialization with {} and () are no longer
equivalent.
2019-02-12 19:09:28 +01:00
Sébastien Villemot 1f7d3beddc
Dynare++ tensor library: modernize the Symmetry class
We now use a initializer list constructor for creating symmetries of the form
$y^n$, $y^n u^m$, $y^nu^m\sigma^k$.

The constructor taking a single integer is used to initialize a symmetry of a
given length.

Similar changes are made to IntSequence.

This behavior is similar to std::vector.
2019-02-11 16:45:07 +01:00
Sébastien Villemot af722f438f
Dynare++: drop remaining "using namespace std" 2019-02-06 19:00:46 +01:00
Sébastien Villemot 733308807d
Dynare++: by default, use as many threads as there are logical CPUs
The former default was 2 threads, since Dynare++ was written at a time when
hyper-threading was being generalized (but multiple cores were not).
2019-01-29 16:34:25 +01:00
Sébastien Villemot 752a02a36c
Dynare++: use C++11 threads (instead of POSIX threads API)
On Windows, this means that a POSIX threads implementation is no longer needed,
since C++11 threads are implemented using native Windows threads.

On GNU/Linux and macOS, POSIX threads are still used under the hood.

A new m4 macro (AX_CXX11_THREAD) is used to add the proper compilation
flags (instead of AX_PTHREAD).
2019-01-28 18:44:24 +01:00
Sébastien Villemot a9e51ac4c0
Dynare++ sylvester equation solver: remove the SylvMemory class, not actually used 2019-01-25 18:43:21 +01:00
Sébastien Villemot 1ef1dedc65
Refactor GeneralMatrix and ConstGeneralMatrix classes
- Remove the GeneralMatrix(const ConstVector &) constructor, since it is hides
  a memory allocation (copying the ConstVector into a fresh Vector). This
  helped detecting and fixing several unneeded memory allocations. Some other
  memory allocations are now more visible (with an explicit Vector{}
  constructor).

- Add checks in GeneralMatrix(Vector, …) and ConstGeneralMatrix(ConstVector, …)
  constructors for verifying that the {Const,}Vector has unit-stride (this was
  an implicit assumption so far) and is large enough for storing rows*cols
  elements.

- Add GeneralMatrix::operator=(const ConstGeneralMatrix &).

- Delete ConstGeneralMatrix::operator=().
2019-01-24 15:27:23 +01:00
Sébastien Villemot c711d34d1d
Dynare++ / sylvester equation solver: refactor Vector and ConstVector classes
- these classes now encapsulate a std::shared_ptr<{const, }double>, so that
  they do not perform memory management, and several {Const,}Vector instances
  can transparently share the same underlying data

- make converting constructor from ConstVector to Vector explicit, since that
  entails memory allocation (but the reverse conversion is almost costless, so
  keep it implicit); do the same for GeneralMatrix/ConstGeneralMatrix,
  TwoDMatrix/ConstTwoDMatrix

- remove the constructors that were extracting a row/column from a matrix, and
  replace them by getRow() and getCol() methods on {Const,}GeneralMatrix

- rename and change the API of the complex version Vector::add(), so that it is
  explicit that it deals with complex numbers

- add constructors that take a MATLAB mxArray
2019-01-22 16:13:22 +01:00
Sébastien Villemot 3c5afded8e
k-order DLL: fix build failure 2019-01-10 19:45:11 +01:00
Sébastien Villemot e45d230a3d
Rename .dat file to standard .hh extension 2019-01-10 14:29:58 +01:00
Sébastien Villemot 188d6296d7
Dynare++: finish to apply Dynare C++ coding style and extensions (.cc/.hh) 2019-01-08 17:12:05 +01:00
Sébastien Villemot ce1ef47093
dynare++ / tensor library (TL): move away from CWEB
By the way apply Dynare C++ coding style and extensions (.cc/.hh).
2019-01-08 16:09:25 +01:00
Sébastien Villemot 84255f9e9a
dynare++/integ: move away from CWEB
By the way apply Dynare C++ coding style and extensions (.cc/.hh).
2019-01-04 17:28:20 +01:00
Sébastien Villemot df772325a2
dynare++/kord: move away from CWEB
By the way apply Dynare C++ coding style and extensions (.cc/.hh).
2019-01-04 16:32:05 +01:00
Sébastien Villemot dcac799289
Fix check for QZ eigenvalue criterium
The criterium was previously incorrectly applied to the square absolute value of
eigenvalues. Rather apply it to the absolute value itself (as done in
mjdgges.m and the AIM solver).

Closes #1632
2019-01-02 16:37:30 +01:00
Sébastien Villemot 736d43c4e6
Bump minimal MATLAB version requirement to 7.9 (R2009b) 2018-11-13 15:59:16 +01:00
Sébastien Villemot c6f5c804d9
Gensylv MEX also needs MatIO (because Dynare++ code does) 2018-11-12 12:56:01 +01:00
Sébastien Villemot 331a27398a
Fix another memory leak in k-order DLL
Re Dynare/dynare#1490.
2018-11-08 17:30:48 +01:00
Sébastien Villemot 50a09a687e
C++11 modernization
Incidentally, fix a memory leak related to DynamicModelAC instantiation, using
a std::unique_ptr (see Dynare/dynare#1490).
2018-11-08 17:24:19 +01:00
Sébastien Villemot afc9f94854
On Windows, statically link the pthread library
Otherwise the DLL is dynamically linked against libwinpthread. This regression
was introduced by commit 671fe4bcd.
2018-11-07 14:38:04 +01:00
Sébastien Villemot 671fe4bcd4
Build system improvements on Windows (MinGW / MSYS2)
- Use the -static flag when linking Dynare++, so that shipping libquadmath and
  libgcc DLL in the installer is no longer needed.

- Use AM_CXXFLAGS and AM_LDFLAGS variables for changing flags, since CXXFLAGS
  and LDFLAGS are user variables. Also, this avoids passing these flags down to
  configure scripts in subdirectories.

- Check for the SZIP library in the configure test for the MatIO, this is
  needed under MSYS2.

- Statically link MatIO and GSL in MEX files for MATLAB, this is needed under
  MSYS2.
2018-11-06 12:17:56 +01:00
Sébastien Villemot ffb36e5713 Remove obsolete kludges for MinGW 2018-10-02 17:10:36 +02:00
Sébastien Villemot 59642c3312 C output of preprocessor now splits generated fcts into several smaller fcts
Adapt the k-order DLL as a consequence.
2018-10-01 16:13:12 +02:00
Sébastien Villemot feeda74dfb Remove spurious executable permission 2018-09-27 12:24:57 +02:00
Sébastien Villemot d03cc56587 solve_algo=7 and stack_solve_algo=2 are now allowed under Octave
The gmres() function has been implemented (actually since Octave 3.4.1!).
2018-08-02 15:20:39 +02:00
Sébastien Villemot 932e5f946c Update preprocessor submodule
Adapt bytecode DLL as a consequence.
2018-07-18 17:52:44 +02:00
Sébastien Villemot cb46a2697e Fix invalid memory write in k-order DLL
The bug would show at order 3 when the last output argument (derivs) is not
requested (in practice every 3rd order solution without pruning). The DLL would
still attempt to write into it, causing an invalid memory access.
2018-07-02 16:37:46 +02:00
Sébastien Villemot b2c554623f Various fixes related to the new layout of generated files 2018-06-28 18:14:40 +02:00
Sébastien Villemot a1b8bd39b2 Move the location of various generated files on the filesystem
- M and MEX files are now under +${MODELNAME}/
- bytecode, C source and JSON now under ${MODELNAME}/model/
2018-06-27 17:03:39 +02:00
Houtan Bastani f5bf76deb5 fix mex build system for macOS 2018-06-27 15:04:33 +02:00
Sébastien Villemot a71e0ebee4 Add a compile-time check for MATLAB version, as we already do for Octave 2018-06-06 14:31:25 +02:00
Sébastien Villemot e1a3c40ef0 Fix compilation of MS-SBVAR DLL under Octave 4.4 2018-06-05 17:07:45 +02:00
Sébastien Villemot e669321eec Require C++14 for MEX files
Needed because bytecode DLL uses some preprocessor code which is C++14.
2018-06-05 11:34:41 +02:00
Sébastien Villemot 02084ce310 Remove qzcomplex Oct-file
It's actually not needed. The QZ complex decomposition can be obtained in
Octave on real matrices by casting them to the complex type.
2018-05-17 12:11:15 +02:00
Sébastien Villemot 3f674f0f26 Enforce minimal Octave version in the configure script 2018-05-16 10:50:27 +02:00
Sébastien Villemot e2c2f2d966 Remove fallbacks for ilu, linsolve and ordschur under Octave
These functions are all included in Octave 4.2.
2018-05-16 10:48:44 +02:00
Sébastien Villemot f665379fcc Kludge for bug in MinGW, that defines __STDC_UTF_16__ but not char16_t
This breaks the matrix.h of older MATLABs (e.g. R2009a). Also see <uchar.h>.
2018-05-15 19:29:17 +02:00
Sébastien Villemot fbddfc0aae Require C99 when compiling MEX files, since mjdgges now uses C99 features 2018-05-15 14:53:56 +02:00
Sébastien Villemot 7a2aa211bf Make mjdgges DLL compatible with MATLAB interleaved complex API
This API was introduced in MATLAB 9.4 (R2018a), because the internal
representation of complex numbers has changed.
2018-05-14 15:16:09 +02:00
Houtan Bastani fdf9a8a453 move preprocessor to submodule 2018-02-16 16:44:16 +01:00
Houtan Bastani fb6a11f544 move estimation-dll to its own repository: https://github.com/DynareTeam/estimation-dll.git 2017-09-22 15:31:23 +02:00
Sébastien Villemot 1ff5c3f571 Fix various typos (thanks lintian). 2017-06-28 15:06:54 +02:00
Ferhat Mihoubi 119e5b4dfa Corrects bugs in bytecode related to the use of finite instead of isfinite and to mxMalloc tests 2017-06-05 18:51:43 +02:00
Stéphane Adjemian (Charybdis) e3769670df Updated AC_INIT 2017-05-19 18:54:32 +02:00
Stéphane Adjemian (Charybdis) 1bf81c9f5a Fixed copyright notices. 2017-05-18 18:36:38 +02:00
Stéphane Adjemian (Charybdis) b4448937cc Fixed indentation of c/h/cc/hh files. 2017-05-16 16:30:27 +02:00
Stéphane Adjemian (Charybdis) a53636e24e Fixed copyright notices. 2017-05-16 14:11:15 +02:00
Ferhat Mihoubi 981e31c8c3 Fix issues in bytecode with option extended_path related to the size of endo_simul and exo_simul
(cherry picked from commit ab7acc49e30fbcb292d63d58281581a308716b4c)
2017-05-08 18:40:18 +02:00
Ferhat Mihoubi e248d8bf59 Fix memory and periods issues in bytecode
(cherry picked from commit fa5dd681abcb3243a5ee9be1f71fdfc51bced1cd)
2017-05-08 18:39:44 +02:00
Ferhat Mihoubi 857fc3c4f4 Corrects several bugs related to bytecode:
- Memory allocation is checked
- The amount of memory allocated for conditional forecast is corrected
2017-04-05 11:48:40 +02:00
Stéphane Adjemian (Charybdis) 8925e7ca1f Cosmetic patch (remove some warnings about potentially uninitialized variables in bytecode). 2017-02-13 19:22:26 +01:00
Stéphane Adjemian (Charybdis) 537e384122 Fixed make parallel mode (missing dependency in automake). 2016-12-01 23:25:01 +01:00
Stéphane Adjemian (Charybdis) 1229372a6c Defines M_PI (cross compilation for Octave). 2016-12-01 13:32:54 +01:00
Stéphane Adjemian (Charybdis) 23642b3b6b Defines M_PI, M_SQRT2 and finite() in bytecode...
... Which are not in standard C/C++ (otherwise compilation of the mex for Octave
with -std=c++11 fails).
2016-12-01 13:32:54 +01:00
Houtan Bastani e3fbefc616 mjdgges: fix bug where qz_criterium was not taken into account if a threshold argument is also passed 2016-10-27 11:19:34 +02:00
Houtan Bastani 8b17af05d5 bytecode: work around for isnan and isinf bug in C++ standard, glibc <= 2.23.
Fixed by https://sourceware.org/bugzilla/show_bug.cgi?id=19439
2016-10-11 16:01:27 +02:00
Michel Juillard 5d38280f27 remove one instance of dynamic exception specification
closes issue #1250
2016-07-16 00:13:47 +02:00
ferhat ac2e5cfd52 - In extended path
- fix an error with results print out
  - fix an error withe exogenous initialization
2015-11-19 17:03:05 +01:00
ferhat 77f5d572de Fix the output arguments in case of bytecode failure 2015-11-06 15:06:17 +01:00
Stéphane Adjemian (Charybdis) 2ec1579cd0 Fixed warnings in bytecode compilation.
Removed unused variables.
2015-10-19 18:01:38 +02:00
ferhat 7c5272d852 Allows to compute the extended path and the conditional forecasts with bytecode 2015-09-22 15:39:49 +02:00
Sébastien Villemot d0628af1f2 No longer compile ordschur.oct for Octave >= 4.0.
The function is now an Octave builtin.
2015-03-17 17:53:11 +01:00
Houtan Bastani 1b869b26a7 fix dates for changes in 86c3c0fb1b and a40323d2fb 2015-01-08 18:39:04 +01:00
ferhat 86c3c0fb1b Checks that fields endo_names, exo_names and param_names exist 2015-01-06 10:30:52 +01:00
ferhat 24b2993f50 Solves issues in deterministic simulation:
- replaces maximum_endo_(lead|lag) by maximum_(lead|lag) to determine the maximum number of lead and lag in deterministic simulation
- allows to use bytecode in solve_perfect_foresight_model.m
- Adds model information in bytecode
2014-12-17 09:37:43 +01:00
Houtan Bastani cf910cb64f build system: add flag for mex compilation on OS X 10.9 2014-07-24 12:18:38 +02:00
Sébastien Villemot 9b5a09958c Fixes to make install.
- fix DESTDIR for preprocessor and MEX files (it was duplicated)
- don't install libdynare++.a
2014-07-18 12:15:36 +02:00
Houtan Bastani 8d2b79a224 make install, closes #576 2014-07-16 16:18:06 +02:00
Sébastien Villemot 41295ad602 Minor cleanups in k_order_perturbation DLL. 2014-03-21 17:26:55 +01:00
Sébastien Villemot 050b495a52 Fix an invalid memory access in k_order_perturbation DLL.
In the case where a 2nd/3rd derivative is symbolically not zero but numerically
zero at the evaluation point, the last lines of the g2/g3 matrices (in
KordpDynare::calcDerivativesAtSteady()) where uninitialized (these matrices
store the sparse hessian/3rd-deriv in coordinate list form, i.e. with 3 columns
and as many rows as non-zero elements). When reconstructing the dense
hessian/3rd-deriv matrix out of g2/g3, this would result in invalid memory
accesses.
2014-03-21 17:26:48 +01:00
Sébastien Villemot 9d32204790 Ensure that -lpthread is statically linked under MinGW. 2014-03-10 17:25:39 +01:00
Sébastien Villemot 75ae191d33 Upgrade to a newer version of the AX_BOOST_BASE macro.
Our workaround for cross-compilation has been incorporated upstream.
2014-03-03 11:13:27 +01:00
Michel Juillard 45f7de33e8 sobol qmc_sequence MEX: dimension larger than 1111 returns a proper
Matlab error message instead of crashing
2014-02-15 21:11:42 +01:00
Sébastien Villemot 5308da2cad Upgrade the minimum requirement to MATLAB 7.5 (R2007b). 2014-02-03 15:52:54 +01:00
Sébastien Villemot e5d4defb41 Fix handling of qz_criterium in k_order_perturbation MEX.
If the MEX file was called with options_.qz_criterium=[], it would not use a
correct default value (but would use NaN).

Closes #574
2014-01-27 15:33:37 +01:00
Sébastien Villemot 66d48f5917 Compatibility fixes for Octave 3.8.
- no longer use OCTAVE_QUIT in MEX files; this seems now only possible in
  oct-files. (Ref #304)
- do not build linsolve.oct on Octave >= 3.8, it is available natively.
- do not add strjoin.m to the patch on Octave >= 3.8, it is available natively.
- default_save_options has been renamed save_default_options.
2014-01-03 11:05:39 +01:00
Sébastien Villemot 85f001885e Estimation DLL: fix bug with creating MAT files
Similar problem to #446
2013-12-06 14:46:44 +01:00
Houtan Bastani a8d07308a9 ms-sbvar: support ctrl-c changes in submodule, #304 2013-12-05 16:13:58 +01:00
Sébastien Villemot 7ada720e7b Bump version number 2013-12-02 17:55:10 +01:00
Houtan Bastani 830c09760e preprocessor: remove clang warning on declaration of const static double in class definition 2013-11-22 14:59:34 +01:00
Houtan Bastani 3c75923e2d revert £ change as 156 is an extended ascii code 2013-11-05 19:06:20 +01:00
Houtan Bastani 0e4bb3f8e9 fix typo 2013-11-05 18:06:24 +01:00
Houtan Bastani 5352fb4d16 preprocessor and matlab mex fixes for clang compilation 2013-11-05 18:04:57 +01:00
ferhat f4cee9d5e5 Corrects a bug in the way to test for the presence of the global variables 2013-10-28 14:26:42 +01:00
Stéphane Adjemian (Charybdis) 399b6d2615 Specialized maxit in bytecode mex (dynamic simulation vs steady state). 2013-10-09 16:55:46 +02:00
Stéphane Adjemian (Charybdis) d8052342f3 Fixed bug introduced in cc0d9b42f0 (bytecode.cc).
Problem when reading nested structures.
2013-10-09 16:26:29 +02:00
Stéphane Adjemian (Charybdis) cc0d9b42f0 Changed name of options_.maxit as options_.simul.maxit. 2013-10-09 13:06:06 +02:00
Sébastien Villemot 82edf48256 No longer consider automake warnings as fatal
With automake 1.14 there are a lot of new warnings related to the way we deal
with MEX files (they are compiled from source files located in a different
tree). Automake wants us to use the 'subdir-objects' option, but it breaks in
our case.

In automake 2.0, the 'subdir-objects' option will be activated by default, so
we will have to refactor the build system for MEX files. But for now we can
live with the automake warnings.
2013-09-09 14:50:32 +02:00
Sébastien Villemot d8e9bc978d Revert "Compatibility fix with automake 1.14"
This reverts commit 7541bb52f5.

This commit was breaking compilation of MEX files: the subdir-objects option
does not deal well with source files that are under a distinct tree.
2013-09-09 14:47:29 +02:00
Sébastien Villemot 7541bb52f5 Compatibility fix with automake 1.14 2013-09-06 15:00:37 +02:00
Sébastien Villemot c34c90e8cb Fix bug in linsolve when second argument is a zero-column matrix
Fixes crash of 1st-order purely forward models under Octave
2013-08-15 12:19:51 +02:00
Stéphane Adjemian (Charybdis) 5a4399e9b3 Removed openmp pragmas in bytecode.
This commit fixes #420, so that bytecode doesn't crash when Dynare is compiled with --enable-openmp flag.
2013-07-11 15:12:41 +02:00
Stéphane Adjemian (Charybdis) cb2228acad Merge branch 'master' into experimental-mjdgges-threshold 2013-06-12 17:27:25 +02:00
Sébastien Villemot 61485ab809 Fix copyright notices 2013-06-12 17:04:46 +02:00
Sébastien Villemot f1c8ec60c7 Remove various compilation warnings 2013-06-12 16:05:35 +02:00
Sébastien Villemot 555fc98673 Fix bug in gemv binding 2013-06-12 16:05:35 +02:00
Stéphane Adjemian (Charybdis) 7fc92c96d9 Fixed bug related to the test on the number of input arguments. 2013-06-12 10:21:27 +02:00
Stéphane Adjemian (Charybdis) b81fcbeeb1 Added an option for the threshold level of the 0/0 generalized eigenvalue test.
The option is passed in the fourth input argument of mjdgges. If the
mex is called with less than four arguments, then the threshold level
takes its previous (hardcoded) default value: 1e-6.
2013-06-12 09:46:32 +02:00
Ferhat Mihoubi b1da2f2b7d "slowc" option is now available to solve a simple equation in bytecode 2013-06-10 16:46:54 +02:00
Ferhat Mihoubi bdee6d14ec Fix the problems related to the initialization of ilu preconditioner using BiCGStab and also a bug in the BiCGStab in case of block (without bytecode) model options. 2013-06-08 17:16:20 +02:00
ferhat 4e7050baf9 Use ilu with type=ilutp instead of nofill
Contrary to luinc command ilu with nofill option doesn't not allow for partial
pivoting
2013-05-23 11:44:29 +02:00
Sébastien Villemot 2670be408e Bug fix in steady state solver 2013-04-19 18:01:19 +02:00
Sébastien Villemot 7495668ef2 Minor simplification and improvements 2013-04-19 18:01:19 +02:00
Sébastien Villemot e1f702f83a Various fixes to steady state computation in estimation DLL
Still not working… Valgrind detects unitialized values during the call to
hybridjs…
2013-04-18 18:28:34 +02:00
Stéphane Adjemian (Charybdis) 8eed899f92 Fixed bug. Compilation of bytecode was crashing with USE_OMP. 2013-04-18 11:20:35 +02:00
Houtan Bastani 47b53dbeea build system: osx fix for bytecode mex in octave 2013-04-17 17:45:28 +02:00
Sébastien Villemot 8dbf195422 Compatibility fix with GCC 4.8 2013-04-15 17:18:38 +02:00
Sébastien Villemot c8e59f1361 Do not put -lumfpack in LIBS, rather use a special variable for it 2013-03-29 15:30:31 +01:00
Sébastien Villemot 513ae741e3 Build system for MEX/Octave: use Octave's LDFLAGS in the configure script
This will facilitate the detection of UMFPACK under Windows
2013-03-29 15:07:58 +01:00
Sébastien Villemot 3025a14ed9 Adapt for removal of luinc in MATLAB R2013a 2013-03-25 12:05:56 +01:00
Sébastien Villemot 37592309fb Distribute dynumfpack.h in tarball 2013-03-24 09:42:45 +01:00
Sébastien Villemot 86db8d805c Add configure test for UMFPACK 2013-03-23 17:09:00 +01:00
Sébastien Villemot 1db892efc4 Fix compilation problems of bytecode with UMFPACK and MATLAB's libut 2013-03-23 13:02:07 +01:00
Ferhat Mihoubi 19032f4b07 Adds an umfpack definition file for matlab on windows 2013-03-22 16:38:34 +01:00
Ferhat Mihoubi 43a50dd395 - adds the kernel CUDA file for SparseMatrix 2013-03-22 16:36:30 +01:00
Ferhat Mihoubi dfa744fcb3 - adds new files: Evaluate.cc and Evaluate.hh to bytecode 2013-03-22 16:34:50 +01:00
Ferhat Mihoubi 2a51248832 Adds a block Kalman filter using GPU 2013-03-22 15:47:57 +01:00
Ferhat Mihoubi 03e487a092 Major update of bytecode:
- Iterative linear solvers using CUDA
 - interpreter.cc decomposed
2013-03-22 15:44:34 +01:00
Sébastien Villemot ba889e853c Preprocessor interface and documentation for endogenous_prior option
Closes #321
2013-03-18 11:12:49 +01:00
Sébastien Villemot f89edf476e Start refactoring of penalty handling
Handle all events that lead to a penalty through an exception.
Next steps:
- make all exceptions derive from a common class containing info code and
  penalty value
- catch these exceptions at the top-level, and construct the penalty-adjusted
  likelihood
2013-03-06 17:55:15 +01:00
Sébastien Villemot 82930ee29a Implementation of steady state computation in estim DLL, using the GSL
Does not seem very robust (fails on fs2000), need to investigate why.
2013-03-06 16:58:22 +01:00
Sébastien Villemot 871cbbe448 Construct the filename of the dynamic MEX file only at the deepest level
In the calling chain, only pass the basename of the MOD file.
2013-03-05 14:45:47 +01:00
Sébastien Villemot 325a2ea90e Remove unused field n_exog of DynamicModelDLL class 2013-03-05 13:00:57 +01:00
Sébastien Villemot 75fbd38524 Handle constant in Kalman filter
Previously, the filter was only working with options_.noconstant, i.e. when the
data are centered.
2013-02-07 18:34:17 +01:00
Sébastien Villemot be2764520a Estimation DLL: explicitly fail with option loglinear or observation trends 2013-02-07 17:00:48 +01:00
Sébastien Villemot 6fc94a12d0 C++ DecisionRules: support models with no static variables 2013-02-07 16:03:11 +01:00
Sébastien Villemot ea3d2cd1ed Include right header in definition of LogLikelihoodSubSample 2013-02-05 15:49:47 +01:00
Sébastien Villemot da046d378e Fix typos 2013-02-05 15:49:27 +01:00
Sébastien Villemot a06e3d9714 Clarify error message of logposterior DLL for purely backward/forward models 2013-02-05 14:57:38 +01:00
Sébastien Villemot 21055da526 Remove incorrect use of static keyword
This leads to a crash when the DLL is called several times in the same
Octave/MATLAB session.
2013-01-30 18:39:18 +01:00
Sébastien Villemot deb9ece36d Fix MOD-file name in Kalman tests 2013-01-30 16:44:10 +01:00
Sébastien Villemot f60acd4366 Relax criterion for decision rules test
Otherwise it fails with on Karaba
2013-01-30 16:43:35 +01:00
Sébastien Villemot b3acdc0836 Make various functions more generic, using templates
This was necessary to make some tests work again
2013-01-30 16:43:02 +01:00
Sébastien Villemot 02fee79fc7 Add some sanity checks 2013-01-30 16:27:13 +01:00
Sébastien Villemot 5beec53458 Remove unused function prototype 2013-01-30 16:26:56 +01:00
Sébastien Villemot c121aa14b1 Remove oo_.dr.{nstatic,npred,nboth,nfwrd,nspred,nsfwrd}
Replace them by equivalents in M_ (and an extra one: M_.dynamic).

IMPORTANT POINT: oo_.dr.npred used to count both purely backward and mixed/both
variables. This was the cause of lots of confusion. The new M_.npred only
counts purely backward variables.

We now have the following indentities:

M_.npred + M_.nboth + M_.nfwrd + M_.nstatic = M_.endo_nbr
M_.nspred = M_.npred + M_.nboth
M_.nsfwrd = M_.nfwrd + M_.nboth
M_.ndynamic = M_.npred + M_.nboth + M_.nfwrd
2012-11-16 20:05:13 +01:00
Sébastien Villemot 31a13db66a Remove duplicate information in M_.blocksMFS 2012-11-16 17:39:03 +01:00
Sébastien Villemot bc1872625b Fix typo in previous commit 2012-11-06 14:44:29 +01:00
Ferhat 50fd1a4c0d In the two boundaries solver, gives up the symbolic solver if a stable computation solution could not be found on the first third of the simulation period 2012-11-06 14:38:51 +01:00
Sébastien Villemot 18af0655a3 More spurious executable perms 2012-10-13 22:08:56 +02:00
Sébastien Villemot 3d39d77917 Remove spurious executable permissions 2012-10-13 16:10:01 +02:00
Sébastien Villemot c031b463ff Use my @dynare.org address 2012-10-01 16:41:18 +02:00
Sébastien Villemot 3e612e0211 Fix build system with Automake 1.12 2012-09-28 17:31:39 +02:00
Sébastien Villemot 5d5771a823 Another typo 2012-09-25 19:58:03 +02:00
Sébastien Villemot 6cfec3f6ad More CPPFLAGS_MATIO fun 2012-09-25 19:53:20 +02:00
Sébastien Villemot 08f7c61e89 Add missing CPPFLAGS_MATIO 2012-09-25 14:25:02 +02:00
Sébastien Villemot 3589c04f49 Add missing CPPFLAGS_MATIO 2012-09-21 07:29:11 +02:00
Sébastien Villemot 4d98c2007f Rename CFLAGS_MATIO to CPPFLAGS_MATIO 2012-09-20 22:53:47 +02:00
Houtan Bastani 4f54391e94 add --with-matio option to configure 2012-09-19 12:11:57 +02:00
Houtan Bastani fd66086c38 bug fix: configure output should be no for k-order if matlab is not present 2012-09-19 12:11:57 +02:00
Houtan Bastani e48f535004 bug fix: ms_sbvar requires matio under octave but configure output doesn't state that it's missing. 2012-09-19 12:11:57 +02:00
Houtan Bastani a54af094f2 bug fix: slicot configuration (allow path specification using --with-slicot flag) 2012-09-18 14:45:32 +02:00
Houtan Bastani 469a1d2c25 fix slicot configuration on OS X 2012-09-17 11:58:18 +02:00
Sébastien Villemot c07ffd8705 Merge branch 'slicot' 2012-09-13 11:11:46 +02:00
Sébastien Villemot 0332309647 Remove embedded SLICOT, rely on external binary 2012-09-13 11:08:42 +02:00