Commit Graph

993 Commits (20511495de448671328cbe890248f92896706240)

Author SHA1 Message Date
Sébastien Villemot 4f6d8a198a
k_order_perturbation MEX: convert complex elements of residuals or derivatives matrices to NaNs 2022-03-18 16:45:33 +01:00
Sébastien Villemot 2d73ae2971
Bytecode: fix typo 2022-03-16 15:00:09 +01:00
Sébastien Villemot 96fb676be7
Bytecode: fix stack_solve_algo=4 when a “solve backward/forward” block follows a “solve two boundaries” block
When solving a “Solve two boundarise” block with stack_solve_algo=4, the
“slowc” variable is modified. This would affect the resolution of further
“solve backward/forward” blocks, which would yield results.

The fix consists in saving and restoring “slowc”.
2022-03-15 17:42:03 +01:00
Sébastien Villemot 65e18fe883
Bytecode: fix stack_solve_algo=4 on linear blocks
Only one iteration is performed on linear blocks. But in the case of
stack_solve_algo=4 it is not enough, since it will not find the right optimal
path lenght at the first iteration (even though that optimal path length is
ufnitary).
2022-03-01 11:29:29 +01:00
Sébastien Villemot dbbbb75874
Bytecode: fix typo, replace “substract” by “subtract” 2022-02-28 18:47:20 +01:00
Sébastien Villemot 67a003aa73
Bytecode: fix stack_solve_algo=1 (relaxation method)
There were various issues with the construction of sparse submatrices.

By the way, refactor and document the code to make it more readable.
2022-02-28 18:47:20 +01:00
Sébastien Villemot 811e53f9ad
Bytecode: document matrix computation routines 2022-02-28 18:47:20 +01:00
Sébastien Villemot 59b8ee9c33
Bytecode: remove unused matrix subtraction routine 2022-02-28 18:47:20 +01:00
Sébastien Villemot a7cc466285
Bytecode: fix bug in sparse matrix multiplication routines
Since those routines compute Aᵀ·B, the number of rows of the output is equal to
the number of columns of A.
2022-02-28 12:18:58 +01:00
Sébastien Villemot 8536b63827
Bytecode: remove superfluous debug information 2022-02-18 14:17:37 +01:00
Sébastien Villemot 972461c326
Bytecode: add debugging information about input arguments 2022-02-17 17:41:10 +01:00
Sébastien Villemot a376d8c9fe
Fix steady state computation with bytecode+block and solve_algo ⩽ 4 or ⩾ 9
– Temporary terms were not correctly passed between blocks
– solve_algo ⩾ 9 was incorrectly passed through bytecode own’s solver instead
  of through dynare_solve
2022-02-17 17:28:37 +01:00
Sébastien Villemot ceb3ec2487
Bytecode: remove unused constructors 2022-02-15 16:54:41 +01:00
Sébastien Villemot 863fa2de1c
Bytecode: perfect foresight simulation of *linear* “Solve forward simple/complete” blocks was giving was results 2022-02-15 16:54:41 +01:00
Sébastien Villemot 803e3721ec
Bytecode: correctly handle M_.{endo_names,exo_names,param_names}, which are now cell arrays 2022-02-14 15:06:07 +01:00
Sébastien Villemot 92e82cfa0a
Bytecode: remove unused function prototype 2022-02-14 14:40:34 +01:00
Sébastien Villemot 188df7711d
Bytecode: fix simulation of blocks “Solve forward/backward complete” with stack_solve_algo={0,1,4}
The problem would also manifest at steady state computation with solve_algo=6.

It could crash or give incorrect results.
2022-02-11 12:00:25 +01:00
Sébastien Villemot d74cb031d2
Bytecode: fix error message about convergence failure that can happen in Solve Backward Complete as well 2022-02-10 17:27:07 +01:00
Sébastien Villemot cdb4f872b2
Bytecode: fix crash with stack_solve_algo=1 on “Solve forward/backward” blocks 2022-02-10 17:15:24 +01:00
Sébastien Villemot ef6e4c7745
Bytecode: remove unused code 2022-02-10 16:58:39 +01:00
Sébastien Villemot 0caefa1593
Bytecode: exit gracefully when M_ does not exist 2022-02-09 14:32:25 +01:00
Sébastien Villemot 8d3e0587dc
k_order_mean MEX: check number of output arguments
Incidentally, this fixes a gfortran warning
2022-02-04 14:38:30 +01:00
Sébastien Villemot 964763ef4d
pthread Fortran interface: fix internal type for representing pthread_t structure 2022-02-04 12:33:19 +01:00
Sébastien Villemot 39f47dc957
local_state_space_iteration_k MEX now uses the Fortran code (instead of the C++ code)
Closes: #1802
2022-02-04 11:49:46 +01:00
NormannR 5f828e241f Parallelizes local_state_space_iteration_fortran 2022-01-31 18:44:48 +01:00
Sébastien Villemot 79132ebe55
Build system: no longer use deprecated LFLAGS from mkoctfile
By the way, drop the -static-* flags from LDFLAGS in Windows mkoctfile stub. It
is no more needed and creates duplicates in the link command line (since those
flags are already in DL_LDFLAGS).
2022-01-24 12:52:24 +01:00
Sébastien Villemot 0c68e7336b
perfect_foresight_problem MEX: error out properly when called MATLAB function triggers an exception
Closes: #1832
2022-01-03 18:11:31 +01:00
Sébastien Villemot ae5be8d717
Build system: add provisions for k_order_mean MEX under Octave 2021-12-16 10:42:37 +01:00
Sébastien Villemot 1144de4167
Bump version number 2021-12-08 14:23:26 +01:00
Sébastien Villemot 5f675eee18
Add erfc() primitive 2021-12-07 17:00:59 +01:00
Normann Rion cf829fb28e
A few fixes for k-order welfare assesment in `evaluate_planner_objective`
As suggested in !1962
2021-12-07 12:19:30 +01:00
Sébastien Villemot 10698ba896
Fix building of source package
Bug introduced in 06fd42c19b.
2021-11-26 19:15:27 +01:00
Sébastien Villemot 06fd42c19b
Drop the dynare_simul_ MEX in favour of the new Fortran k_order_simul MEX 2021-11-26 17:37:53 +01:00
NormannR f889a25e86 Amend the k_order_welfare routine for it to return the adequate output variables 2021-11-24 17:16:03 +01:00
NormannR 45aad05670 Implements a Fortran routine `k_order_moment` to compute the k-order unconditional moment of the vector of endogenous variables using simulation 2021-11-24 17:09:12 +01:00
NormannR cb5971d60f Fix typo in local_state_space_iteration_fortran 2021-11-24 14:32:37 +01:00
Sébastien Villemot e155c5cbb2
macOS: fix compilation of MEX files against Homebrew’s octave
It is necessary to link MEX files against Octave libraries, as under Windows.
2021-10-25 18:02:46 +02:00
Sébastien Villemot ebec02c6e4
local_state_space_iteration_2 MEX: yet more fixes to comments
In particular, use ε instead of u in mathematical expressions for consistency
with the C++ variable name.
2021-10-22 17:57:29 +02:00
Sébastien Villemot 0be7e0a0d7
local_state_space_iteration_2 MEX: more fixes to comments 2021-10-21 16:34:57 +02:00
Sébastien Villemot 05ea09eee9
local_state_space_iteration_2 MEX: error out properly when trying to use with BLAS+MATLAB+parallelization
By the way, rename the C preprocessor symbol so that it is undefined by
default.
2021-10-20 15:50:34 +02:00
Sébastien Villemot e3b1f9e79a
local_state_space_iteration_2 MEX: various fixes to comments 2021-10-20 15:39:58 +02:00
Sébastien Villemot ce282dc29c
local_state_space_iteration_2 MEX: fix bug when there are more shocks that states
The code that computes ghx·yhat+ghu·u (both with and without pruning) was
making the implicit assumption that q⩽n, i.e. that the number of shocks is less
than or equal to the number of states. If q>n, it would try to read invalid
memory references in ghx and yhat, and would thus either crash or return dummy
results.

Closes: #1820
2021-10-14 16:18:17 +02:00
Sébastien Villemot f1a0bdb8e5
Build system: fix several warnings with Autoconf 2.70 2021-09-28 18:21:17 +02:00
Sébastien Villemot e722e908e5
k_order_simul+local_state_space_iteration_fortran MEX: fix gfortran warnings 2021-09-24 16:44:40 +02:00
Normann Rion 6475c52b3d Implements k-order simulation routine in Fortran (Ref: #1802)
`k_order_simul` may replace `dynare_simul_` in the long run
2021-09-24 09:11:15 +02:00
Normann Rion a576bdd03f Fixing the header doc and automake files for the local state space iteration Fortran MEX 2021-09-24 09:11:06 +02:00
Sébastien Villemot 7083f1d692 Merge branch 'local_state_space_it' into 'master'
Implements the Fortran replacement of local_state_space_iteration_k (Ref #1802)

See merge request Dynare/dynare!1918
2021-09-22 15:54:17 +00:00
NormannR cab65dabb5 Implements `local_state_space_iteration_fortran`, the Fortran replacement of `local_state_space_iteration_k` (Ref #1802)
- Creates the library `libkordersim` with all the relevant Fortran routines to `folded_to_unfolded_dr` and `local_state_space_iteration_fortran`
   - Implements `folded_to_unfolded_dr`, which converts folded decision rule matrices to their unfolded counterparts
2021-09-22 16:28:46 +02:00
Sébastien Villemot 91e3348806
Windows package: fix bug introduced in c5120e1278 2021-09-21 18:40:54 +02:00
Sébastien Villemot c5120e1278
Build system: no longer link MEX for Octave against liboctave and other libraries
Since Octave 5, mkoctfile no longer links MEX files against shared
libraries (other than libc/libstdc++/libgfortran), so we now mimick that
behaviour.
2021-09-21 15:19:49 +02:00
Sébastien Villemot 271d80abee
Bytecode: release the lock on dynamic.bin when an exception occurs
Closes: #1815
2021-09-20 17:28:43 +02:00
Sébastien Villemot 67c205e0a4
Fortran 2008: add interface for mxCreateStructMatrix
Needed by Normann.
2021-09-14 17:05:07 +02:00
Sébastien Villemot 3d6f86c234
Build system: fix detection of SLICOT for MATLAB on RHEL
The MATLAB_CFLAGS variable was not injected when testing for the presence of
libslicot64_pic. In particular, on GNU/Linux system, this means that the -fPIC
flag was not injected when doing the test. This was not a problem on Debian,
where GCC now enables -fPIC by default. But this would fail on RHEL, where
-fPIC is not enabled by default.

By the way:
— rename ac_save_* variables to my_save_*, to avoid conflicts with internal
  autoconf variables;
— do not inject “$(mkoctfile -p LFLAGS)” into LDFLAGS when testing for SLICOT
  under Octave; this is no longer necessary, since those flags are already
  injected at the beginning of mex/build/octave/configure.ac.
2021-09-02 17:14:01 +02:00
Stéphane Adjemian (Ryûk) e72dde69d3
Add option for trust region algorithm (mex).
trust_region_initial_step_bound_factor is determinining thye initial
step bound. Default value is 100 (previous hard coded value was 1).
2021-07-23 19:44:16 +02:00
Sébastien Villemot 5d5fefca25
Bump version numbers 2021-07-23 15:57:19 +02:00
Johannes Pfeifer 66dcef2754 k_order_welfare.cc: remove gratuitous screen output 2021-07-22 15:12:59 +02:00
Normann Rion 3d27672c58
kth-order approximation of conditional welfare
Partially addresses issue #1680:
- unconditional welfare resorts to dynare++ simulation tools, which shall be updated very soon
TO DO:
- implement a function computing kth-order approximation of simulated moments of y
2021-06-15 15:04:31 +02:00
Sébastien Villemot a7203095db
A_times_B_kronecker_C MEX: don’t bother adding “only” clauses to “use” directive 2021-06-14 15:28:34 +02:00
Sébastien Villemot 766fff88f6
Use secure URL for link to GNU licenses 2021-06-09 17:35:05 +02:00
Sébastien Villemot a40a9b079c
sparse_hessian_times_B_kronecker_C MEX: bugfix relating to number of rows of B and C
In practice however, it seems that this bug never hits, because B and C always
have the same number of rows when the MEX is called.
2021-06-08 17:58:40 +02:00
Sébastien Villemot 3bd3c78e0e
A_times_B_kronecker_C MEX: rewrite in Fortran 2021-06-04 12:58:39 +02:00
Sébastien Villemot c4ca0ef0b2
Fortran MEX: remove useless return statements after calls to mexErrMsgTxt() 2021-06-04 12:58:39 +02:00
Sébastien Villemot f90a8ab070
Fortran MEX: mark array pointers returned by MEX functions as contiguous
This can make a difference when the return value of those function is directly
passed to a BLAS/LAPACK function.

On the other hand, if the return value is first stored in a pointer variable,
then it seems necessary to explicitly say that this pointer is also contiguous.
2021-06-04 12:58:39 +02:00
Sébastien Villemot dc2695a11f
mjdgges and block_trust_region MEX: optimise by marking some function arguments as contiguous
This avoids unnecessary array copies before calling BLAS/LAPACK functions.
2021-06-04 12:58:36 +02:00
Sébastien Villemot 3a2335975a
Fortran MEX: add missing “implicit none” in blas and lapack modules 2021-06-04 12:57:47 +02:00
Sébastien Villemot 2a1183e1fa
Fortran MEX: add -Wimplicit-interface to compiler flags
This warns about hard-to-detect bugs where a function is called with an
implicit interface, thus possibly having mismatches in the calling sequence.
2021-06-04 12:57:39 +02:00
Sébastien Villemot 45181cfd97
Fortran MEX: add interface for dgemm 2021-06-04 12:57:32 +02:00
Sébastien Villemot 0741963ca5
Build system: streamline handling of compilation flags for MEX
— allow the user to override compilation flags for MATLAB MEX (it was already
  working for the preprocessor, the MEX for Octave and Dynare++)
— increase the symmetry of MEX build infrastructure between MATLAB and Octave
— when linking MEX for Octave, do not add the output of “mkoctfile -p FLIBS”.
  It is unneeded, and it can create a conflict between the system compiler and
  a user-supplied compiler

By the way:
— restore optimization on macOS for C/C++ MEX (it had been removed in
  5df2392a09)
— remove -fno-omit-frame-pointer on MATLAB/Linux, since it would be cancelled
  by subsequent -O2 and should not be needed anyways
— remove FFLAGS under Octave, unused
2021-05-10 14:39:41 +02:00
Sébastien Villemot 47477e152a
Bump minimal Octave version to 6.2.0 2021-03-12 16:21:57 +01:00
Sébastien Villemot c0ccca26cb
macOS package: drop support for Octave
The current Octave support is utterly broken (both in stable and unstable), it
crashes Octave. It relies on an unofficial Octave app for
macOS (https://octave-app.org), which is infrequently updated.

This commits drop support for Octave in the macOS package. We will now tell our
macOS+octave users to use the Homebrew Dynare package (which is maintained by
the Homebrew team, and is in reasonably good shape).
2021-03-12 16:21:57 +01:00
Sébastien Villemot c9eb6920c9
local_state_space_iteration_k MEX: fix bug in output
In its output, the MEX was returning values for all endogenous variables, but
it was used in a context where only the variables from oo_.dr.restrict_var_list
were expected (as is done with local_state_space_iteration_2 MEX).

This commit fixes this discrepancy, and also fixes the test that was checking
that both MEX are returning the same output.

Closes: #1768
2021-03-10 13:45:29 +01:00
Sébastien Villemot 1a0ee5f055
Bytecode / sparse transpose: bug fix
The Jc vector has n+1 elements, where n is the number of columns. Moreover, the
size passed to memset() was wrong.
2021-02-09 16:05:11 +01:00
Sébastien Villemot c9f6d3a626
Bytecode: more simplifications and modernizations 2021-02-09 16:00:53 +01:00
Sébastien Villemot 4a1dbc5ca4
Bytecode: fix bug introduced in previous commit
map::at() does bound checking, and throws an exception if out-of-range,
contrary to [] operator which returns a new element.
2021-02-03 19:52:25 +01:00
Sébastien Villemot 4893f0e82c
Bytecode: various simplifications and modernizations 2021-02-03 18:10:31 +01:00
Sébastien Villemot 30cfb0b03c
Bytecode: bugfix in conditional forecast 2021-02-01 17:54:36 +01:00
Sébastien Villemot 967966876f
Bytecode: remove obsolete LINBCG stuff 2021-02-01 15:26:33 +01:00
Sébastien Villemot 743469bfd7
Bytecode: remove stuff for creating a standalone debugging executable
This code no longer compiles. And it’s possible to debug the MEX directly.
2021-02-01 15:26:33 +01:00
Sébastien Villemot bb5f58f55f
Bytecode: remove useless constant redefinition 2021-02-01 15:26:33 +01:00
Sébastien Villemot eb29dc003a
Bytecode: remove CUDA-specific stuff 2021-02-01 15:26:31 +01:00
Sébastien Villemot 5ef440ad9b
Bytecode: remove MSVC++ specific portions 2021-02-01 14:50:46 +01:00
Sébastien Villemot f9f50ff19a
Bytecode: port to C++11 using keyword
Performed using modernize-use-using from clang-tidy.

https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-using.html
2021-02-01 14:50:46 +01:00
Sébastien Villemot 47357bb432
Bytecode: port to C++11 nullptr keyword
Performed using modernize-use-nullptr from clang-tidy.

Manual intervention to remove old-style C casts to nullptr.

https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-nullptr.html
2021-02-01 14:50:42 +01:00
Sébastien Villemot a2186b06b8
Bytecode: port to C++11 syntax for default constructors
Performed using modernize-use-equals-default from clang-tidy.

https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-equals-default.html
2021-02-01 14:50:42 +01:00
Sébastien Villemot 1aa0286f6d
Bytecode: port to C++11 emplace_back() method on containers
Performed using modernize-use-emplace from clang-tidy.

https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-emplace.html
2021-02-01 14:50:42 +01:00
Sébastien Villemot 93c6cb1c3c
Bytecode: use bool literals
Performed using modernize-use-bool-literals from clang-tidy

https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-bool-literals.html
2021-02-01 14:50:42 +01:00
Sébastien Villemot 1a4340cb80
Bytecode: port to C++11 auto keyword
Performed using modernize-use-auto from clang-tidy.

https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-auto.html
2021-02-01 14:50:39 +01:00
Sébastien Villemot 63e922f637
Bytecode: port some constructors to pass-by-value using C++11 move semantics
Performed using modernize-pass-by-value from clang-tidy.

https://clang.llvm.org/extra/clang-tidy/checks/modernize-pass-by-value.html
2021-02-01 14:50:10 +01:00
Sébastien Villemot 7840d1396e
Bytecode: port to C++11 range-based for loops
Performed using modernize-loop-convert from clang-tidy.

https://clang.llvm.org/extra/clang-tidy/checks/modernize-loop-convert.html
2021-02-01 14:50:07 +01:00
Sébastien Villemot 2f587cf5c3
Bytecode: use C++ headers
Performed using modernize-deprecated-headers from clang-tidy.

https://clang.llvm.org/extra/clang-tidy/checks/modernize-deprecated-headers.html
2021-02-01 12:28:50 +01:00
Sébastien Villemot c050325e3d
Bytecode: C++17 modernization / convert the remaining enums to enum classes 2021-02-01 12:10:47 +01:00
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 93a8e60265
Build system: various macOS cleanups
– remove clang support
– we no longer support 32-bit
– simplify Darwin specific hacks for Octave MEX files
2020-12-18 15:40:48 +01:00
Sébastien Villemot e8d01abdca
Build system: remove obsolete comments 2020-12-18 15:40:48 +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 d06ae350c5
Build system: add --with-octave configure option to specify non-default install path
(cherry picked from commit bd97fdc1d5)
2020-12-02 18:52:36 +01:00
Sébastien Villemot bd97fdc1d5
Build system: add --with-octave configure option to specify non-default install path 2020-12-02 18:26:49 +01:00
Sébastien Villemot f104b9d517
Windows package: statically link MatIO and GSL in Octave MEX files
Closes: #1750
2020-11-18 15:31:06 +01:00
Sébastien Villemot a922505bbe
Another fix for Fedora, needed for building MEX for Octave 2020-11-13 10:05:40 +01:00