Commit Graph

732 Commits (bf60795e8e70ee76e417cb4a8bc0ad6a50c391af)

Author SHA1 Message Date
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