diff --git a/matlab/DsgeSmoother.m b/matlab/DsgeSmoother.m
index 793afa561..ee1546af5 100644
--- a/matlab/DsgeSmoother.m
+++ b/matlab/DsgeSmoother.m
@@ -58,7 +58,7 @@ function [alphahat,etahat,epsilonhat,ahat,SteadyState,trend_coeff,aK,T,R,P,PK,de
% SPECIAL REQUIREMENTS
% None
-% Copyright (C) 2006-2018 Dynare Team
+% Copyright (C) 2006-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -185,8 +185,7 @@ elseif options_.lik_init == 3 % Diffuse Kalman filter
end
[Pstar,Pinf] = compute_Pinf_Pstar(mf,T,R,Q,options_.qz_criterium);
elseif options_.lik_init == 4 % Start from the solution of the Riccati equation.
- [err, Pstar] = kalman_steady_state(transpose(T),R*Q*transpose(R),transpose(build_selection_matrix(mf,np,vobs)),H);
- mexErrCheck('kalman_steady_state',err);
+ Pstar = kalman_steady_state(transpose(T),R*Q*transpose(R),transpose(build_selection_matrix(mf,np,vobs)),H);
Pinf = [];
if kalman_algo~=2
kalman_algo = 1;
diff --git a/matlab/block_bytecode_mfs_steadystate.m b/matlab/block_bytecode_mfs_steadystate.m
index a34b15c19..ba0bef861 100644
--- a/matlab/block_bytecode_mfs_steadystate.m
+++ b/matlab/block_bytecode_mfs_steadystate.m
@@ -2,7 +2,7 @@ function [r, g1] = block_bytecode_mfs_steadystate(y, b, y_all, exo, params, M)
% Wrapper around the *_static.m file, for use with dynare_solve,
% when block_mfs option is given to steady.
-% Copyright (C) 2009-2012 Dynare Team
+% Copyright (C) 2009-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -21,4 +21,4 @@ function [r, g1] = block_bytecode_mfs_steadystate(y, b, y_all, exo, params, M)
indx = M.block_structure_stat.block(b).variable;
y_all(indx) = y;
-[chk, r, g1] = bytecode( y_all, exo, params, y_all, 1, y_all, 'evaluate', 'static', ['block = ' int2str(b) ]);
+[r, g1] = bytecode( y_all, exo, params, y_all, 1, y_all, 'evaluate', 'static', ['block = ' int2str(b) ]);
diff --git a/matlab/bytecode_steadystate.m b/matlab/bytecode_steadystate.m
index 4c3e2f46f..dff35373f 100644
--- a/matlab/bytecode_steadystate.m
+++ b/matlab/bytecode_steadystate.m
@@ -2,7 +2,7 @@ function [r, g1] = bytecode_steadystate(y, exo, params)
% Wrapper around the *_static.m file, for use with dynare_solve,
% when block_mfs option is given to steady.
-% Copyright (C) 2009-2011 Dynare Team
+% Copyright (C) 2009-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -19,4 +19,4 @@ function [r, g1] = bytecode_steadystate(y, exo, params)
% You should have received a copy of the GNU General Public License
% along with Dynare. If not, see .
-eval('[chk, r, g1] = bytecode( y, exo, params, y, 1, exo, ''evaluate'', ''static'');');
+eval('[r, g1] = bytecode( y, exo, params, y, 1, exo, ''evaluate'', ''static'');');
diff --git a/matlab/dr_block.m b/matlab/dr_block.m
index 0328c1048..d65248b77 100644
--- a/matlab/dr_block.m
+++ b/matlab/dr_block.m
@@ -34,7 +34,7 @@ function [dr,info,M_,options_,oo_] = dr_block(dr,task,M_,options_,oo_,varargin)
% none.
%
-% Copyright (C) 2010-2017 Dynare Team
+% Copyright (C) 2010-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -71,12 +71,10 @@ else
Size = 1;
end
if (options_.bytecode)
- [chck, zz, data]= bytecode('dynamic','evaluate', z, zx, M_.params, dr.ys, 1, data);
+ [zz, data]= bytecode('dynamic','evaluate', z, zx, M_.params, dr.ys, 1, data);
else
[r, data] = feval([M_.fname '.dynamic'], options_, M_, oo_, z', zx, M_.params, dr.ys, M_.maximum_lag+1, data);
- chck = 0;
end
-mexErrCheck('bytecode', chck);
dr.full_rank = 1;
dr.eigval = [];
dr.nd = 0;
@@ -440,7 +438,7 @@ for i = 1:Size
D = [[aa(row_indx,index_0m) zeros(n_dynamic,n_both) aa(row_indx,index_p)] ; [zeros(n_both, n_pred) eye(n_both) zeros(n_both, n_both + n_fwrd)]];
E = [-aa(row_indx,[index_m index_0p]) ; [zeros(n_both, n_both + n_pred) eye(n_both, n_both + n_fwrd) ] ];
- [err, ss, tt, w, sdim, data(i).eigval, info1] = mjdgges(E,D,options_.qz_criterium,options_.qz_zero_threshold);
+ [ss, tt, w, sdim, data(i).eigval, info1] = mjdgges(E,D,options_.qz_criterium,options_.qz_zero_threshold);
if (verbose)
disp('eigval');
@@ -591,7 +589,7 @@ for i = 1:Size
elseif options_.sylvester_fp
ghx_other = gensylv_fp(A_, B_, C_, D_, i, options_.sylvester_fixed_point_tol);
else
- [err, ghx_other] = gensylv(1, A_, B_, C_, -D_);
+ ghx_other = gensylv(1, A_, B_, C_, -D_);
end
if options_.aim_solver ~= 1
% Necessary when using Sims' routines for QZ
diff --git a/matlab/dsge_likelihood.m b/matlab/dsge_likelihood.m
index 40a7203c4..ddcdf33f4 100644
--- a/matlab/dsge_likelihood.m
+++ b/matlab/dsge_likelihood.m
@@ -115,7 +115,7 @@ function [fval,info,exit_flag,DLIK,Hess,SteadyState,trend_coeff,Model,DynareOpti
%! @end deftypefn
%@eod:
-% Copyright (C) 2004-2019 Dynare Team
+% Copyright (C) 2004-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -150,7 +150,9 @@ if DynareOptions.estimation_dll
[fval,exit_flag,SteadyState,trend_coeff,info,params,H,Q] ...
= logposterior(xparam1,DynareDataset, DynareOptions,Model, ...
EstimatedParameters,BayesInfo,DynareResults);
- mexErrCheck('logposterior', exit_flag);
+ if exit_flag
+ error("Error encountered in logposterior")
+ end
Model.params = params;
if ~isequal(Model.H,0)
Model.H = H;
@@ -455,12 +457,14 @@ switch DynareOptions.lik_init
if kalman_algo ~= 2
kalman_algo = 1;
end
- if isequal(H,0)
- [err,Pstar] = kalman_steady_state(transpose(T),R*Q*transpose(R),transpose(build_selection_matrix(Z,mm,length(Z))));
- else
- [err,Pstar] = kalman_steady_state(transpose(T),R*Q*transpose(R),transpose(build_selection_matrix(Z,mm,length(Z))),H);
- end
- if err
+ try
+ if isequal(H,0)
+ Pstar = kalman_steady_state(transpose(T),R*Q*transpose(R),transpose(build_selection_matrix(Z,mm,length(Z))));
+ else
+ Pstar = kalman_steady_state(transpose(T),R*Q*transpose(R),transpose(build_selection_matrix(Z,mm,length(Z))),H);
+ end
+ catch ME
+ disp(ME.message)
disp(['dsge_likelihood:: I am not able to solve the Riccati equation, so I switch to lik_init=1!']);
DynareOptions.lik_init = 1;
Pstar=lyapunov_solver(T,R,Q,DynareOptions);
@@ -647,8 +651,7 @@ singularity_has_been_detected = false;
if ((kalman_algo==1) || (kalman_algo==3))% Multivariate Kalman Filter
if no_missing_data_flag
if DynareOptions.block
- [err, LIK] = block_kalman_filter(T,R,Q,H,Pstar,Y,start,Z,kalman_tol,riccati_tol, Model.nz_state_var, Model.n_diag, Model.nobs_non_statevar);
- mexErrCheck('block_kalman_filter', err);
+ LIK = block_kalman_filter(T,R,Q,H,Pstar,Y,start,Z,kalman_tol,riccati_tol, Model.nz_state_var, Model.n_diag, Model.nobs_non_statevar);
elseif DynareOptions.fast_kalman_filter
if diffuse_periods
%kalman_algo==3 requires no diffuse periods (stationary
@@ -677,8 +680,8 @@ if ((kalman_algo==1) || (kalman_algo==3))% Multivariate Kalman Filter
end
else
if 0 %DynareOptions.block
- [err, LIK,lik] = block_kalman_filter(DatasetInfo.missing.aindex,DatasetInfo.missing.number_of_observations,DatasetInfo.missing.no_more_missing_observations,...
- T,R,Q,H,Pstar,Y,start,Z,kalman_tol,riccati_tol, Model.nz_state_var, Model.n_diag, Model.nobs_non_statevar);
+ [LIK,lik] = block_kalman_filter(DatasetInfo.missing.aindex,DatasetInfo.missing.number_of_observations,DatasetInfo.missing.no_more_missing_observations,...
+ T,R,Q,H,Pstar,Y,start,Z,kalman_tol,riccati_tol, Model.nz_state_var, Model.n_diag, Model.nobs_non_statevar);
else
[LIK,lik] = missing_observations_kalman_filter(DatasetInfo.missing.aindex,DatasetInfo.missing.number_of_observations,DatasetInfo.missing.no_more_missing_observations,Y,diffuse_periods+1,size(Y,2), ...
a, Pstar, ...
diff --git a/matlab/dyn_first_order_solver.m b/matlab/dyn_first_order_solver.m
index 63cb4f9da..101a33700 100644
--- a/matlab/dyn_first_order_solver.m
+++ b/matlab/dyn_first_order_solver.m
@@ -21,7 +21,7 @@ function [dr, info] = dyn_first_order_solver(jacobia, DynareModel, dr, DynareOpt
% info=5 -> Blanchard and Kahn conditions are not satisfied: indeterminacy due to rank failure,
% info=7 -> One of the eigenvalues is close to 0/0 (infinity of complex solutions)
-% Copyright (C) 2001-2018 Dynare Team
+% Copyright (C) 2001-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -187,8 +187,7 @@ else
E(row_indx_de_1,index_e1) = -aa(row_indx,index_e);
E(row_indx_de_2,index_e2) = eye(nboth);
- [err, ss, tt, w, sdim, dr.eigval, info1] = mjdgges(E, D, DynareOptions.qz_criterium, DynareOptions.qz_zero_threshold);
- mexErrCheck('mjdgges', err);
+ [ss, tt, w, sdim, dr.eigval, info1] = mjdgges(E, D, DynareOptions.qz_criterium, DynareOptions.qz_zero_threshold);
if info1
if info1 == -30
diff --git a/matlab/dyn_ramsey_static.m b/matlab/dyn_ramsey_static.m
index e94deb504..6ea85e7d6 100644
--- a/matlab/dyn_ramsey_static.m
+++ b/matlab/dyn_ramsey_static.m
@@ -18,7 +18,7 @@ function [steady_state,params,check] = dyn_ramsey_static(ys_init,M,options_,oo)
% SPECIAL REQUIREMENTS
% none
-% Copyright (C) 2003-2018 Dynare Team
+% Copyright (C) 2003-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -156,8 +156,8 @@ Uyy = reshape(Uyy,endo_nbr,endo_nbr);
% set multipliers and auxiliary variables that
% depends on multipliers to 0 to compute residuals
if (options_.bytecode)
- [chck, res, junk] = bytecode('static',xx,[oo.exo_steady_state oo.exo_det_steady_state], ...
- params, 'evaluate');
+ [res, junk] = bytecode('static',xx,[oo.exo_steady_state oo.exo_det_steady_state], ...
+ params, 'evaluate');
fJ = junk.g1;
else
[res,fJ] = feval([fname '.static'],xx,[oo.exo_steady_state oo.exo_det_steady_state], ...
@@ -194,8 +194,8 @@ end
function result = check_static_model(ys,M,options_,oo)
result = false;
if (options_.bytecode)
- [chck, res, ~] = bytecode('static',ys,[oo.exo_steady_state oo.exo_det_steady_state], ...
- M.params, 'evaluate');
+ [res, ~] = bytecode('static',ys,[oo.exo_steady_state oo.exo_det_steady_state], ...
+ M.params, 'evaluate');
else
res = feval([M.fname '.static'],ys,[oo.exo_steady_state oo.exo_det_steady_state], ...
M.params);
diff --git a/matlab/dyn_risky_steadystate_solver.m b/matlab/dyn_risky_steadystate_solver.m
index d8fe2ede1..93c75da4d 100644
--- a/matlab/dyn_risky_steadystate_solver.m
+++ b/matlab/dyn_risky_steadystate_solver.m
@@ -341,8 +341,7 @@ if nargout > 1
nu2 = exo_nbr*(exo_nbr+1)/2;
nu3 = exo_nbr*(exo_nbr+1)*(exo_nbr+2)/3;
M_np.NZZDerivatives = [nnz(d1_np); nnz(d2_np); nnz(d3_np)];
- [err, dynpp_derivs] = k_order_perturbation(dr_np,M_np,options,d1_np,d2_np,d3_np);
- mexErrCheck('k_order_perturbation', err);
+ dynpp_derivs = k_order_perturbation(dr_np,M_np,options,d1_np,d2_np,d3_np);
g_0 = dynpp_derivs.g_0;
g_1 = dynpp_derivs.g_1;
g_2 = dynpp_derivs.g_2;
diff --git a/matlab/dyn_second_order_solver.m b/matlab/dyn_second_order_solver.m
index 4e3151497..bd5c37a9f 100644
--- a/matlab/dyn_second_order_solver.m
+++ b/matlab/dyn_second_order_solver.m
@@ -36,7 +36,7 @@ function dr = dyn_second_order_solver(jacobia,hessian_mat,dr,M,threads_BC)
%! @end deftypefn
%@eod:
-% Copyright (C) 2001-2019 Dynare Team
+% Copyright (C) 2001-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -85,29 +85,23 @@ zu = [zeros(length(ic),M.exo_nbr);
dr.ghx(klead~=0,:)*dr.ghu(ic,:);
eye(M.exo_nbr);
zeros(M.exo_det_nbr,M.exo_nbr)];
-[rhs, err] = sparse_hessian_times_B_kronecker_C(hessian_mat(:,kk2(kk1,kk1)),zx,threads_BC); %hessian_mat: reordering to DR order
-mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
+rhs = sparse_hessian_times_B_kronecker_C(hessian_mat(:,kk2(kk1,kk1)),zx,threads_BC); %hessian_mat: reordering to DR order
rhs = -rhs;
-[err, dr.ghxx] = gensylv(2,A,B,C,rhs);
-mexErrCheck('gensylv', err);
+dr.ghxx = gensylv(2,A,B,C,rhs);
%% ghxu
%rhs
-[rhs, err] = sparse_hessian_times_B_kronecker_C(hessian_mat(:,kk2(kk1,kk1)),zx,zu,threads_BC); %hessian_mat: reordering to DR order
-mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
-[abcOut,err] = A_times_B_kronecker_C(dr.ghxx, dr.ghx(ic,:), dr.ghu(ic,:));
-mexErrCheck('A_times_B_kronecker_C', err);
+rhs = sparse_hessian_times_B_kronecker_C(hessian_mat(:,kk2(kk1,kk1)),zx,zu,threads_BC); %hessian_mat: reordering to DR order
+abcOut = A_times_B_kronecker_C(dr.ghxx, dr.ghx(ic,:), dr.ghu(ic,:));
rhs = -rhs-B*abcOut;
%lhs
dr.ghxu = A\rhs;
%% ghuu
%rhs
-[rhs, err] = sparse_hessian_times_B_kronecker_C(hessian_mat(:,kk2(kk1,kk1)),zu,threads_BC); %hessian_mat: reordering to DR order
-mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
-[B1, err] = A_times_B_kronecker_C(B*dr.ghxx,dr.ghu(ic,:));
-mexErrCheck('A_times_B_kronecker_C', err);
+rhs = sparse_hessian_times_B_kronecker_C(hessian_mat(:,kk2(kk1,kk1)),zu,threads_BC); %hessian_mat: reordering to DR order
+B1 = A_times_B_kronecker_C(B*dr.ghxx,dr.ghu(ic,:));
rhs = -rhs-B1;
%lhs
dr.ghuu = A\rhs;
@@ -120,8 +114,7 @@ LHS = zeros(M.endo_nbr,M.endo_nbr);
LHS(:,kcurr~=0) = jacobia(:,nonzeros(kcurr));
RHS = zeros(M.endo_nbr,M.exo_nbr^2);
E = eye(M.endo_nbr);
-[B1, err] = sparse_hessian_times_B_kronecker_C(hessian_mat(:,kk2(nonzeros(klead),nonzeros(klead))), dr.ghu(klead~=0,:),threads_BC); %hessian_mat:focus only on forward variables and reorder to DR order
-mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
+B1 = sparse_hessian_times_B_kronecker_C(hessian_mat(:,kk2(nonzeros(klead),nonzeros(klead))), dr.ghu(klead~=0,:),threads_BC); %hessian_mat:focus only on forward variables and reorder to DR order
RHS = RHS + jacobia(:,nonzeros(klead))*dr.ghuu(klead~=0,:)+B1;
% LHS
LHS = LHS + jacobia(:,nonzeros(klead))*(E(klead~=0,:)+[O1(klead~=0,:) dr.ghx(klead~=0,:) O2(klead~=0,:)]);
diff --git a/matlab/dynare_solve_block_or_bytecode.m b/matlab/dynare_solve_block_or_bytecode.m
index c995c93c7..f991f54f5 100644
--- a/matlab/dynare_solve_block_or_bytecode.m
+++ b/matlab/dynare_solve_block_or_bytecode.m
@@ -1,5 +1,5 @@
function [x,info] = dynare_solve_block_or_bytecode(y, exo, params, options, M)
-% Copyright (C) 2010-2017 Dynare Team
+% Copyright (C) 2010-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -51,9 +51,10 @@ if options.block && ~options.bytecode
end
elseif options.bytecode
if options.solve_algo > 4
- [check, x] = bytecode('static', x, exo, params);
- % mexErrCheck('bytecode', check);
- if check
+ try
+ x = bytecode('static', x, exo, params);
+ catch ME
+ disp(ME.message);
info = 1;
return
end
@@ -73,10 +74,12 @@ elseif options.bytecode
end
x(M.block_structure_stat.block(b).variable) = y;
else
- [chk, nulldev, nulldev1, x] = bytecode( x, exo, params, ...
- x, 1, x, 'evaluate', 'static', ...
- ['block = ' int2str(b)]);
- if chk
+ try
+ [nulldev, nulldev1, x] = bytecode(x, exo, params, ...
+ x, 1, x, 'evaluate', 'static', ...
+ ['block = ' int2str(b)]);
+ catch ME
+ disp(ME.message);
info = 1;
return
end
diff --git a/matlab/ep/extended_path_core.m b/matlab/ep/extended_path_core.m
index 1768c0bbd..eb8b2454d 100644
--- a/matlab/ep/extended_path_core.m
+++ b/matlab/ep/extended_path_core.m
@@ -4,7 +4,7 @@ function [y, info_convergence, endogenousvariablespaths] = extended_path_core(pe
debug,bytecode_flag,order,M,pfm,algo,solve_algo,stack_solve_algo,...
olmmcp,options,oo,initialguess)
-% Copyright (C) 2016-2019 Dynare Team
+% Copyright (C) 2016-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -41,7 +41,13 @@ if debug
end
if bytecode_flag && ~ep.stochastic.order
- [flag, tmp] = bytecode('dynamic', endo_simul, exo_simul, M_.params, endo_simul, periods);
+ try
+ tmp = bytecode('dynamic', endo_simul, exo_simul, M_.params, endo_simul, periods);
+ flag = false;
+ catch ME
+ disp(ME.message);
+ flag = true;
+ end
else
flag = true;
end
@@ -86,4 +92,4 @@ else
y = NaN(size(endo_nbr,1));
end
-endogenousvariablespaths = tmp.endo_simul;
\ No newline at end of file
+endogenousvariablespaths = tmp.endo_simul;
diff --git a/matlab/evaluate_planner_objective.m b/matlab/evaluate_planner_objective.m
index 198d65ccd..63ec0ab6a 100644
--- a/matlab/evaluate_planner_objective.m
+++ b/matlab/evaluate_planner_objective.m
@@ -11,7 +11,7 @@ function planner_objective_value = evaluate_planner_objective(M,options,oo)
% SPECIAL REQUIREMENTS
% none
-% Copyright (C) 2007-2018 Dynare Team
+% Copyright (C) 2007-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -57,21 +57,16 @@ ys = oo.dr.ys;
%second order terms
Uyy = full(Uyy);
-[Uyygygy, err] = A_times_B_kronecker_C(Uyy,gy,gy);
-mexErrCheck('A_times_B_kronecker_C', err);
-[Uyygugu, err] = A_times_B_kronecker_C(Uyy,gu,gu);
-mexErrCheck('A_times_B_kronecker_C', err);
-[Uyygygu, err] = A_times_B_kronecker_C(Uyy,gy,gu);
-mexErrCheck('A_times_B_kronecker_C', err);
+Uyygygy = A_times_B_kronecker_C(Uyy,gy,gy);
+Uyygugu = A_times_B_kronecker_C(Uyy,gu,gu);
+Uyygygu = A_times_B_kronecker_C(Uyy,gy,gu);
Wbar =U/(1-beta); %steady state welfare
Wy = Uy*gy/(eye(nspred)-beta*Gy);
Wu = Uy*gu+beta*Wy*Gu;
Wyy = Uyygygy/(eye(nspred*nspred)-beta*kron(Gy,Gy));
-[Wyygugu, err] = A_times_B_kronecker_C(Wyy,Gu,Gu);
-mexErrCheck('A_times_B_kronecker_C', err);
-[Wyygygu,err] = A_times_B_kronecker_C(Wyy,Gy,Gu);
-mexErrCheck('A_times_B_kronecker_C', err);
+Wyygugu = A_times_B_kronecker_C(Wyy,Gu,Gu);
+Wyygygu = A_times_B_kronecker_C(Wyy,Gy,Gu);
Wuu = Uyygugu+beta*Wyygugu;
Wyu = Uyygygu+beta*Wyygygu;
Wss = beta*Wuu*M.Sigma_e(:)/(1-beta); % at period 0, we are in steady state, so the deviation term only starts in period 1, thus the beta in front
@@ -93,20 +88,15 @@ end
yhat1 = yhat1(dr.order_var(nstatic+(1:nspred)),1)-dr.ys(dr.order_var(nstatic+(1:nspred)));
u = oo.exo_simul(1,:)';
-[Wyyyhatyhat1, err] = A_times_B_kronecker_C(Wyy,yhat1,yhat1);
-mexErrCheck('A_times_B_kronecker_C', err);
-[Wuuuu, err] = A_times_B_kronecker_C(Wuu,u,u);
-mexErrCheck('A_times_B_kronecker_C', err);
-[Wyuyhatu1, err] = A_times_B_kronecker_C(Wyu,yhat1,u);
-mexErrCheck('A_times_B_kronecker_C', err);
+Wyyyhatyhat1 = A_times_B_kronecker_C(Wyy,yhat1,yhat1);
+Wuuuu = A_times_B_kronecker_C(Wuu,u,u);
+Wyuyhatu1 = A_times_B_kronecker_C(Wyu,yhat1,u);
planner_objective_value(1) = Wbar+Wy*yhat1+Wu*u+Wyuyhatu1 ...
+ 0.5*(Wyyyhatyhat1 + Wuuuu+Wss);
if options.ramsey_policy
yhat2 = yhat2(dr.order_var(nstatic+(1:nspred)),1)-dr.ys(dr.order_var(nstatic+(1:nspred)));
- [Wyyyhatyhat2, err] = A_times_B_kronecker_C(Wyy,yhat2,yhat2);
- mexErrCheck('A_times_B_kronecker_C', err);
- [Wyuyhatu2, err] = A_times_B_kronecker_C(Wyu,yhat2,u);
- mexErrCheck('A_times_B_kronecker_C', err);
+ Wyyyhatyhat2 = A_times_B_kronecker_C(Wyy,yhat2,yhat2);
+ Wyuyhatu2 = A_times_B_kronecker_C(Wyu,yhat2,u);
planner_objective_value(2) = Wbar+Wy*yhat2+Wu*u+Wyuyhatu2 ...
+ 0.5*(Wyyyhatyhat2 + Wuuuu+Wss);
end
diff --git a/matlab/evaluate_static_model.m b/matlab/evaluate_static_model.m
index d15005aa2..fbcfa235c 100644
--- a/matlab/evaluate_static_model.m
+++ b/matlab/evaluate_static_model.m
@@ -20,7 +20,7 @@ function [residuals,check1,jacob] = evaluate_static_model(ys,exo_ss,params,M,opt
% SPECIAL REQUIREMENTS
% none
-% Copyright (C) 2001-2017 Dynare Team
+% Copyright (C) 2001-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -39,9 +39,8 @@ function [residuals,check1,jacob] = evaluate_static_model(ys,exo_ss,params,M,opt
check1 = 0;
if options.bytecode
- [check1, residuals] = bytecode('evaluate','static',ys,...
- exo_ss, params, ys, 1);
- mexErrCheck('bytecode', check1);
+ residuals = bytecode('evaluate','static',ys,...
+ exo_ss, params, ys, 1);
else
fh_static = str2func([M.fname '.static']);
if options.block
diff --git a/matlab/evaluate_steady_state.m b/matlab/evaluate_steady_state.m
index 12507a2b4..8fc5826c8 100644
--- a/matlab/evaluate_steady_state.m
+++ b/matlab/evaluate_steady_state.m
@@ -22,7 +22,7 @@ function [ys,params,info] = evaluate_steady_state(ys_init,M,options,oo,steadysta
% SPECIAL REQUIREMENTS
% none
-% Copyright (C) 2001-2018 Dynare Team
+% Copyright (C) 2001-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -307,8 +307,7 @@ if M.static_and_dynamic_models_differ
z = repmat(ys,1,M.maximum_lead + M.maximum_lag + 1);
zx = repmat([exo_ss'], M.maximum_lead + M.maximum_lag + 1, 1);
if options.bytecode
- [chck, r, ~]= bytecode('dynamic','evaluate', z, zx, params, ys, 1);
- mexErrCheck('bytecode', chck);
+ [r, ~]= bytecode('dynamic','evaluate', z, zx, params, ys, 1);
elseif options.block
[r, oo.dr] = feval([M.fname '.dynamic'], z', zx, params, ys, M.maximum_lag+1, oo.dr);
else
diff --git a/matlab/get_perturbation_params_derivs.m b/matlab/get_perturbation_params_derivs.m
index 64c5a2e34..52b5f9cec 100644
--- a/matlab/get_perturbation_params_derivs.m
+++ b/matlab/get_perturbation_params_derivs.m
@@ -97,7 +97,7 @@ function DERIVS = get_perturbation_params_derivs(M, options, estim_params, oo, i
% * sylvester3a
% * get_perturbation_params_derivs_numerical_objective
% =========================================================================
-% Copyright (C) 2019 Dynare Team
+% Copyright (C) 2019-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -821,9 +821,9 @@ if order > 1
dghx(kcurr~=0,:,jp);
dghx(klead~=0,:,jp)*oo.dr.ghx(idx_states,:) + oo.dr.ghx(klead~=0,:)*dghx(idx_states,:,jp);
zeros(M.exo_nbr,M.nspred)];
- [dRHS_1, err] = sparse_hessian_times_B_kronecker_C(dg2(:,k2yy0ex0(kyy0,kyy0)+(jp-1)*yy0ex0_nbr^2),zx(1:yy0_nbr,:),threads_BC); mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
- [dRHS_2, err] = sparse_hessian_times_B_kronecker_C(g2(:,k2yy0ex0(kyy0,kyy0)),dzx(1:yy0_nbr,:,jp),zx(1:yy0_nbr,:),threads_BC); mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
- [dRHS_3, err] = sparse_hessian_times_B_kronecker_C(g2(:,k2yy0ex0(kyy0,kyy0)),zx(1:yy0_nbr,:),dzx(1:yy0_nbr,:,jp),threads_BC); mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
+ dRHS_1 = sparse_hessian_times_B_kronecker_C(dg2(:,k2yy0ex0(kyy0,kyy0)+(jp-1)*yy0ex0_nbr^2),zx(1:yy0_nbr,:),threads_BC);
+ dRHS_2 = sparse_hessian_times_B_kronecker_C(g2(:,k2yy0ex0(kyy0,kyy0)),dzx(1:yy0_nbr,:,jp),zx(1:yy0_nbr,:),threads_BC);
+ dRHS_3 = sparse_hessian_times_B_kronecker_C(g2(:,k2yy0ex0(kyy0,kyy0)),zx(1:yy0_nbr,:),dzx(1:yy0_nbr,:,jp),threads_BC);
dG_x_x(:,:,jp) = kron(dghx(idx_states,:,jp),oo.dr.ghx(idx_states,:)) + kron(oo.dr.ghx(idx_states,:),dghx(idx_states,:,jp));
dRHSghxx(:,:,jp) = -( (dRHS_1+dRHS_2+dRHS_3) + dA(:,:,jp)*oo.dr.ghxx + dB(:,:,jp)*oo.dr.ghxx*G_x_x + B*oo.dr.ghxx*dG_x_x(:,:,jp) );
end
@@ -838,9 +838,9 @@ if order > 1
oo.dr.ghu(kcurr~=0,:);
oo.dr.ghx(klead~=0,:)*oo.dr.ghu(idx_states,:);
eye(M.exo_nbr)];
- [abcOutxu,err] = A_times_B_kronecker_C(oo.dr.ghxx,oo.dr.ghx(idx_states,:),oo.dr.ghu(idx_states,:)); mexErrCheck('A_times_B_kronecker_C', err); %auxiliary expressions for dghxu
- [abcOutuu, err] = A_times_B_kronecker_C(oo.dr.ghxx,oo.dr.ghu(idx_states,:)); mexErrCheck('A_times_B_kronecker_C', err); %auxiliary expressions for dghuu
- [RHSs2, err] = sparse_hessian_times_B_kronecker_C(g2(:,k2yy0ex0(nonzeros(klead),nonzeros(klead))), oo.dr.ghu(klead~=0,:),threads_BC); mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
+ abcOutxu = A_times_B_kronecker_C(oo.dr.ghxx,oo.dr.ghx(idx_states,:),oo.dr.ghu(idx_states,:)); %auxiliary expressions for dghxu
+ abcOutuu = A_times_B_kronecker_C(oo.dr.ghxx,oo.dr.ghu(idx_states,:)); %auxiliary expressions for dghuu
+ RHSs2 = sparse_hessian_times_B_kronecker_C(g2(:,k2yy0ex0(nonzeros(klead),nonzeros(klead))), oo.dr.ghu(klead~=0,:),threads_BC);
RHSs2 = RHSs2 + g1(:,nonzeros(klead))*oo.dr.ghuu(klead~=0,:);
dzu = zeros(size(zu,1),size(zu,2),modparam_nbr);
dghxu = zeros(M.endo_nbr,M.nspred*M.exo_nbr,modparam_nbr);
@@ -852,25 +852,25 @@ if order > 1
dghx(klead~=0,:,jp)*oo.dr.ghu(idx_states,:) + oo.dr.ghx(klead~=0,:)*dghu(idx_states,:,jp);
zeros(M.exo_nbr,M.exo_nbr)];
%compute dghxu
- [dRHS_1, err] = sparse_hessian_times_B_kronecker_C(dg2(:,k2yy0ex0(kyy0ex0,kyy0ex0)+(jp-1)*yy0ex0_nbr^2),zx,zu,threads_BC); mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
- [dRHS_2, err] = sparse_hessian_times_B_kronecker_C(g2(:,k2yy0ex0(kyy0ex0,kyy0ex0)),dzx(:,:,jp),zu,threads_BC); mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
- [dRHS_3, err] = sparse_hessian_times_B_kronecker_C(g2(:,k2yy0ex0(kyy0ex0,kyy0ex0)),zx,dzu(:,:,jp),threads_BC); mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
- [dabcOut_1,err] = A_times_B_kronecker_C(dghxx(:,:,jp),oo.dr.ghx(idx_states,:),oo.dr.ghu(idx_states,:)); mexErrCheck('A_times_B_kronecker_C', err);
- [dabcOut_2,err] = A_times_B_kronecker_C(oo.dr.ghxx,dghx(idx_states,:,jp),oo.dr.ghu(idx_states,:)); mexErrCheck('A_times_B_kronecker_C', err);
- [dabcOut_3,err] = A_times_B_kronecker_C(oo.dr.ghxx,oo.dr.ghx(idx_states,:),dghu(idx_states,:,jp)); mexErrCheck('A_times_B_kronecker_C', err);
+ dRHS_1 = sparse_hessian_times_B_kronecker_C(dg2(:,k2yy0ex0(kyy0ex0,kyy0ex0)+(jp-1)*yy0ex0_nbr^2),zx,zu,threads_BC);
+ dRHS_2 = sparse_hessian_times_B_kronecker_C(g2(:,k2yy0ex0(kyy0ex0,kyy0ex0)),dzx(:,:,jp),zu,threads_BC);
+ dRHS_3 = sparse_hessian_times_B_kronecker_C(g2(:,k2yy0ex0(kyy0ex0,kyy0ex0)),zx,dzu(:,:,jp),threads_BC);
+ dabcOut_1 = A_times_B_kronecker_C(dghxx(:,:,jp),oo.dr.ghx(idx_states,:),oo.dr.ghu(idx_states,:));
+ dabcOut_2 = A_times_B_kronecker_C(oo.dr.ghxx,dghx(idx_states,:,jp),oo.dr.ghu(idx_states,:));
+ dabcOut_3 = A_times_B_kronecker_C(oo.dr.ghxx,oo.dr.ghx(idx_states,:),dghu(idx_states,:,jp));
dghxu(:,:,jp) = -invA * ( dA(:,:,jp)*oo.dr.ghxu + (dRHS_1+dRHS_2+dRHS_3) + dB(:,:,jp)*abcOutxu + B*(dabcOut_1+dabcOut_2+dabcOut_3) );
%compute dghuu
- [dRHS_1, err] = sparse_hessian_times_B_kronecker_C(dg2(:,k2yy0ex0(kyy0ex0,kyy0ex0)+(jp-1)*yy0ex0_nbr^2),zu,threads_BC); mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
- [dRHS_2, err] = sparse_hessian_times_B_kronecker_C(g2(:,k2yy0ex0(kyy0ex0,kyy0ex0)),dzu(:,:,jp),zu,threads_BC); mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
- [dRHS_3, err] = sparse_hessian_times_B_kronecker_C(g2(:,k2yy0ex0(kyy0ex0,kyy0ex0)),zu,dzu(:,:,jp),threads_BC); mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
- [dabcOut_1, err] = A_times_B_kronecker_C(dghxx(:,:,jp),oo.dr.ghu(idx_states,:)); mexErrCheck('A_times_B_kronecker_C', err);
- [dabcOut_2, err] = A_times_B_kronecker_C(oo.dr.ghxx,dghu(idx_states,:,jp),oo.dr.ghu(idx_states,:)); mexErrCheck('A_times_B_kronecker_C', err);
- [dabcOut_3, err] = A_times_B_kronecker_C(oo.dr.ghxx,oo.dr.ghu(idx_states,:),dghu(idx_states,:,jp)); mexErrCheck('A_times_B_kronecker_C', err);
+ dRHS_1 = sparse_hessian_times_B_kronecker_C(dg2(:,k2yy0ex0(kyy0ex0,kyy0ex0)+(jp-1)*yy0ex0_nbr^2),zu,threads_BC);
+ dRHS_2 = sparse_hessian_times_B_kronecker_C(g2(:,k2yy0ex0(kyy0ex0,kyy0ex0)),dzu(:,:,jp),zu,threads_BC);
+ dRHS_3 = sparse_hessian_times_B_kronecker_C(g2(:,k2yy0ex0(kyy0ex0,kyy0ex0)),zu,dzu(:,:,jp),threads_BC);
+ dabcOut_1 = A_times_B_kronecker_C(dghxx(:,:,jp),oo.dr.ghu(idx_states,:));
+ dabcOut_2 = A_times_B_kronecker_C(oo.dr.ghxx,dghu(idx_states,:,jp),oo.dr.ghu(idx_states,:));
+ dabcOut_3 = A_times_B_kronecker_C(oo.dr.ghxx,oo.dr.ghu(idx_states,:),dghu(idx_states,:,jp));
dghuu(:,:,jp) = -invA * ( dA(:,:,jp)*oo.dr.ghuu + (dRHS_1+dRHS_2+dRHS_3) + dB(:,:,jp)*abcOutuu + B*(dabcOut_1+dabcOut_2+dabcOut_3) );
%compute dghs2
- [dRHS_1, err] = sparse_hessian_times_B_kronecker_C(dg2(:,k2yy0ex0(nonzeros(klead),nonzeros(klead))+(jp-1)*yy0ex0_nbr^2), oo.dr.ghu(klead~=0,:),threads_BC); mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
- [dRHS_2, err] = sparse_hessian_times_B_kronecker_C(g2(:,k2yy0ex0(nonzeros(klead),nonzeros(klead))), dghu(klead~=0,:,jp), oo.dr.ghu(klead~=0,:),threads_BC); mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
- [dRHS_3, err] = sparse_hessian_times_B_kronecker_C(g2(:,k2yy0ex0(nonzeros(klead),nonzeros(klead))), oo.dr.ghu(klead~=0,:), dghu(klead~=0,:,jp),threads_BC); mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
+ dRHS_1 = sparse_hessian_times_B_kronecker_C(dg2(:,k2yy0ex0(nonzeros(klead),nonzeros(klead))+(jp-1)*yy0ex0_nbr^2), oo.dr.ghu(klead~=0,:),threads_BC);
+ dRHS_2 = sparse_hessian_times_B_kronecker_C(g2(:,k2yy0ex0(nonzeros(klead),nonzeros(klead))), dghu(klead~=0,:,jp), oo.dr.ghu(klead~=0,:),threads_BC);
+ dRHS_3 = sparse_hessian_times_B_kronecker_C(g2(:,k2yy0ex0(nonzeros(klead),nonzeros(klead))), oo.dr.ghu(klead~=0,:), dghu(klead~=0,:,jp),threads_BC);
dghs2(:,stderrparam_nbr+corrparam_nbr+jp) = -invS * ( dS(:,:,jp)*oo.dr.ghs2 + ( (dRHS_1+dRHS_2+dRHS_3) + dg1(:,nonzeros(klead),jp)*oo.dr.ghuu(klead~=0,:) + g1(:,nonzeros(klead))*dghuu(klead~=0,:,jp) )*M.Sigma_e(:) );
end
%add contributions by dSigma_e to dghs2
diff --git a/matlab/k_order_pert.m b/matlab/k_order_pert.m
index 7627970ce..beaa621b6 100644
--- a/matlab/k_order_pert.m
+++ b/matlab/k_order_pert.m
@@ -1,7 +1,7 @@
function [dr,info] = k_order_pert(dr,M,options)
% Compute decision rules using the k-order DLL from Dynare++
-% Copyright (C) 2009-2018 Dynare Team
+% Copyright (C) 2009-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -30,8 +30,9 @@ if M.maximum_endo_lead == 0 && order>1
'backward models'])
end
-[err, dynpp_derivs, dyn_derivs] = k_order_perturbation(dr,M,options);
-if err
+try
+ [dynpp_derivs, dyn_derivs] = k_order_perturbation(dr,M,options);
+catch
info(1)=9;
return
end
diff --git a/matlab/mex/k_order_perturbation.m b/matlab/mex/k_order_perturbation.m
index 2f4b1eec9..15e34a7ce 100644
--- a/matlab/mex/k_order_perturbation.m
+++ b/matlab/mex/k_order_perturbation.m
@@ -1,4 +1,4 @@
-% [err, dynpp_derivs, dyn_derivs] = k_order_perturbation(dr,DynareModel,DynareOptions,g1,g2,g3)
+% [dynpp_derivs, dyn_derivs] = k_order_perturbation(dr,DynareModel,DynareOptions,g1,g2,g3)
% computes a k_order_petrubation solution for k=1,2,3
%
% INPUTS
@@ -10,7 +10,6 @@
% g3: matrix Third order derivatives of the model (optional)
%
% OUTPUTS
-% err: double error code
% dynpp_derivs struct Derivatives of the decision rule in Dynare++ format.
% The tensors are folded and the Taylor coefficients (1/n!) are
% included.
@@ -29,7 +28,7 @@
% dynare/mex/sources/k_order_perturbation.cc and it uses code provided by
% dynare++
-% Copyright (C) 2013-2017 Dynare Team
+% Copyright (C) 2013-2020 Dynare Team
%
% This file is part of Dynare.
%
diff --git a/matlab/mexErrCheck.m b/matlab/mexErrCheck.m
deleted file mode 100644
index 708d4e505..000000000
--- a/matlab/mexErrCheck.m
+++ /dev/null
@@ -1,42 +0,0 @@
-function mexErrCheck(mexFunctionName, err)
-% function mexErrCheck(mexFunctionName, err)
-% this function halts processing if err is equal to 1.
-%
-% INPUTS
-% mexFunctionName [char] Name of the mexFunction
-% err [double] error code returned from mexFunction
-%
-% OUTPUTS
-% none.
-%
-% ALGORITHM
-% ...
-%
-% SPECIAL REQUIREMENTS
-% none.
-%
-
-% Copyright (C) 2010 Dynare Team
-%
-% This file is part of Dynare.
-%
-% Dynare is free software: you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation, either version 3 of the License, or
-% (at your option) any later version.
-%
-% Dynare is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with Dynare. If not, see .
-
-if ~ischar(mexFunctionName) || ~isscalar(err)
- error('The first argument must be a char and the second a scalar');
-end
-
-if err
- error(['Error encountered in: ' mexFunctionName '.']);
-end
\ No newline at end of file
diff --git a/matlab/missing/mex/gensylv/gensylv.m b/matlab/missing/mex/gensylv/gensylv.m
index 2920aca4d..462e7b1ea 100644
--- a/matlab/missing/mex/gensylv/gensylv.m
+++ b/matlab/missing/mex/gensylv/gensylv.m
@@ -1,5 +1,5 @@
-function [err, E] = gensylv(kron_prod,A,B,C0,D)
-%function [err, E] = gensylv(fake,A,B,C,D)
+function E = gensylv(kron_prod,A,B,C0,D)
+%function E = gensylv(fake,A,B,C,D)
% Solves a Sylvester equation.
%
% INPUTS
@@ -19,7 +19,7 @@ function [err, E] = gensylv(kron_prod,A,B,C0,D)
% SPECIAL REQUIREMENTS
% none.
-% Copyright (C) 1996-2017 Dynare Team
+% Copyright (C) 1996-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -42,4 +42,3 @@ end
x0 = sylvester3(A,B,C,D);
E = sylvester3a(x0,A,B,C,D);
-err = 0;
\ No newline at end of file
diff --git a/matlab/missing/mex/kronecker/A_times_B_kronecker_C.m b/matlab/missing/mex/kronecker/A_times_B_kronecker_C.m
index 7a8d09498..db615145a 100644
--- a/matlab/missing/mex/kronecker/A_times_B_kronecker_C.m
+++ b/matlab/missing/mex/kronecker/A_times_B_kronecker_C.m
@@ -1,4 +1,4 @@
-function [D, err] = A_times_B_kronecker_C(A,B,C)
+function D = A_times_B_kronecker_C(A,B,C)
%@info:
%! @deftypefn {Function File} {[@var{D}, @var{err}] =} A_times_B_kronecker_C (@var{A},@var{B},@var{C})
@@ -41,7 +41,7 @@ function [D, err] = A_times_B_kronecker_C(A,B,C)
%! @end deftypefn
%@eod:
-% Copyright (C) 1996-2012 Dynare Team
+% Copyright (C) 1996-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -109,4 +109,4 @@ else
D = A * kron(B,B);
end
end
-err = 0;
+
diff --git a/matlab/missing/mex/kronecker/sparse_hessian_times_B_kronecker_C.m b/matlab/missing/mex/kronecker/sparse_hessian_times_B_kronecker_C.m
index fd6059f84..7857e2571 100644
--- a/matlab/missing/mex/kronecker/sparse_hessian_times_B_kronecker_C.m
+++ b/matlab/missing/mex/kronecker/sparse_hessian_times_B_kronecker_C.m
@@ -1,7 +1,7 @@
-function [D, err] = sparse_hessian_times_B_kronecker_C(varargin)
+function D = sparse_hessian_times_B_kronecker_C(varargin)
%@info:
-%! @deftypefn {Function File} {[@var{D}, @var{err}] =} sparse_hessian_times_B_kronecker_C (@var{A},@var{B},@var{C},@var{fake})
+%! @deftypefn {Function File} {@var{D} =} sparse_hessian_times_B_kronecker_C (@var{A},@var{B},@var{C},@var{fake})
%! @anchor{kronecker/sparse_hessian_times_B_kronecker_C}
%! @sp 1
%! Computes A*kron(B,C) where A is hessian matrix in sparse format.
@@ -24,8 +24,6 @@ function [D, err] = sparse_hessian_times_B_kronecker_C(varargin)
%! @table @ @var
%! @item D
%! mA*(nC*nB) or mA*(nB*nB) matrix of doubles.
-%! @item err
-%! Integer scalar equal to zero (if all goes well).
%! @end table
%! @sp 2
%! @strong{Remarks}
@@ -45,7 +43,7 @@ function [D, err] = sparse_hessian_times_B_kronecker_C(varargin)
%! @end deftypefn
%@eod:
-% Copyright (C) 1996-2012 Dynare Team
+% Copyright (C) 1996-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -71,10 +69,9 @@ fake = varargin{nargin};
switch nargin
case 4
- [D, fake] = A_times_B_kronecker_C(A,B,C,fake);
+ D = A_times_B_kronecker_C(A,B,C,fake);
case 3
- [D, fake] = A_times_B_kronecker_C(A,B,C);
+ D = A_times_B_kronecker_C(A,B,C);
otherwise
error('Two or Three input arguments required!')
end
-err = 0;
\ No newline at end of file
diff --git a/matlab/missing/mex/mjdgges/mjdgges.m b/matlab/missing/mex/mjdgges/mjdgges.m
index 6bd345a57..11d51d62f 100644
--- a/matlab/missing/mex/mjdgges/mjdgges.m
+++ b/matlab/missing/mex/mjdgges/mjdgges.m
@@ -1,4 +1,4 @@
-function [err, ss, tt, zz, sdim, eigval, info] = mjdgges(e, d, qz_criterium, zhreshold)
+function [ss, tt, zz, sdim, eigval, info] = mjdgges(e, d, qz_criterium, zhreshold)
%
% INPUTS
% e [double] real square (n*n) matrix.
@@ -8,7 +8,6 @@ function [err, ss, tt, zz, sdim, eigval, info] = mjdgges(e, d, qz_criterium, zhr
% detecting eigenvalues too close to 0/0)
%
% OUTPUTS
-% err [integer] scalar: 1 indicates failure, 0 indicates success
% ss [double] (n*n) quasi-triangular matrix.
% tt [double] (n*n) quasi-triangular matrix.
% zz [double] (n*n) orthogonal matrix.
@@ -19,7 +18,7 @@ function [err, ss, tt, zz, sdim, eigval, info] = mjdgges(e, d, qz_criterium, zhr
% SPECIAL REQUIREMENTS
% none.
-% Copyright (C) 1996-2018 Dynare Team
+% Copyright (C) 1996-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -66,5 +65,3 @@ try
catch
info = 1; % Not as precise as lapack's info!
end
-
-err = 0;
diff --git a/matlab/model_diagnostics.m b/matlab/model_diagnostics.m
index 5696f7726..70b39fe70 100644
--- a/matlab/model_diagnostics.m
+++ b/matlab/model_diagnostics.m
@@ -16,7 +16,7 @@ function model_diagnostics(M,options,oo)
% none.
%
-% Copyright (C) 1996-2018 Dynare Team
+% Copyright (C) 1996-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -107,11 +107,11 @@ exo = [oo.exo_steady_state; oo.exo_det_steady_state];
for b=1:nb
if options.bytecode
if nb == 1
- [chk, res, jacob] = bytecode(dr.ys, exo, M.params, dr.ys, 1, exo, ...
- 'evaluate', 'static');
+ [res, jacob] = bytecode(dr.ys, exo, M.params, dr.ys, 1, exo, ...
+ 'evaluate', 'static');
else
- [chk, res, jacob] = bytecode(dr.ys, exo, M.params, dr.ys, 1, exo, ...
- 'evaluate', 'static',['block=' ...
+ [res, jacob] = bytecode(dr.ys, exo, M.params, dr.ys, 1, exo, ...
+ 'evaluate', 'static',['block=' ...
int2str(b)]);
end
else
@@ -204,8 +204,8 @@ z = repmat(dr.ys,1,klen);
if ~options.block
if options.order == 1
if (options.bytecode)
- [chck, ~, loc_dr] = bytecode('dynamic','evaluate', z,exo_simul, ...
- M.params, dr.ys, 1);
+ [~, loc_dr] = bytecode('dynamic','evaluate', z,exo_simul, ...
+ M.params, dr.ys, 1);
jacobia_ = [loc_dr.g1 loc_dr.g1_x loc_dr.g1_xd];
else
[~,jacobia_] = feval([M.fname '.dynamic'],z(iyr0),exo_simul, ...
@@ -213,8 +213,8 @@ if ~options.block
end
elseif options.order >= 2
if (options.bytecode)
- [chck, ~, loc_dr] = bytecode('dynamic','evaluate', z,exo_simul, ...
- M.params, dr.ys, 1);
+ [~, loc_dr] = bytecode('dynamic','evaluate', z,exo_simul, ...
+ M.params, dr.ys, 1);
jacobia_ = [loc_dr.g1 loc_dr.g1_x];
else
[~,jacobia_,hessian1] = feval([M.fname '.dynamic'],z(iyr0),...
diff --git a/matlab/ms-sbvar/ms_compute_mdd.m b/matlab/ms-sbvar/ms_compute_mdd.m
index 499baf6a5..43372a6e0 100644
--- a/matlab/ms-sbvar/ms_compute_mdd.m
+++ b/matlab/ms-sbvar/ms_compute_mdd.m
@@ -14,7 +14,7 @@ function [options_, oo_]=ms_compute_mdd(M_, options_, oo_)
% SPECIAL REQUIREMENTS
% none
-% Copyright (C) 2011-2013 Dynare Team
+% Copyright (C) 2011-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -51,8 +51,7 @@ if options_.ms.use_mean_center
end
% compute mdd
-[err] = ms_sbvar_command_line(opt);
-mexErrCheck('ms_compute_mdd',err);
+ms_sbvar_command_line(opt);
% grab the muller/bridge log mdd from the output file
mull_exp = 'Muller \w+\(\w+\) \= (\d+.\d+e\+\d+)';
diff --git a/matlab/ms-sbvar/ms_compute_probabilities.m b/matlab/ms-sbvar/ms_compute_probabilities.m
index 07b951f65..9a5b91de8 100644
--- a/matlab/ms-sbvar/ms_compute_probabilities.m
+++ b/matlab/ms-sbvar/ms_compute_probabilities.m
@@ -14,7 +14,7 @@ function [options_, oo_]=ms_compute_probabilities(M_, options_, oo_)
% SPECIAL REQUIREMENTS
% none
-% Copyright (C) 2011 Dynare Team
+% Copyright (C) 2011-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -53,8 +53,7 @@ else
end
% compute probabilities
-[err] = ms_sbvar_command_line(opt);
-mexErrCheck('ms_compute_probabilities',err);
+ms_sbvar_command_line(opt);
% now we want to plot the probabilities for each chain
if ischar(prob_out_file)
diff --git a/matlab/ms-sbvar/ms_estimation.m b/matlab/ms-sbvar/ms_estimation.m
index 495a483ee..2a8510a2a 100644
--- a/matlab/ms-sbvar/ms_estimation.m
+++ b/matlab/ms-sbvar/ms_estimation.m
@@ -14,7 +14,7 @@ function [options_, oo_]=ms_estimation(M_, options_, oo_)
% SPECIAL REQUIREMENTS
% none
-% Copyright (C) 2011-2017 Dynare Team
+% Copyright (C) 2011-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -73,8 +73,7 @@ opt = [opt ' -random_tol_obj ' num2str(options_.ms.random_function_convergence_c
opt = [opt ' -random_tol_parms ' num2str(options_.ms.random_parameter_convergence_criterion)];
% estimation
-[err] = ms_sbvar_command_line(opt);
-mexErrCheck('ms_estimation', err);
+ms_sbvar_command_line(opt);
[options_, oo_] = set_ms_estimation_file(options_.ms.output_file_tag, options_, oo_);
end
diff --git a/matlab/ms-sbvar/ms_forecast.m b/matlab/ms-sbvar/ms_forecast.m
index e8949c9ae..b6e25aa84 100644
--- a/matlab/ms-sbvar/ms_forecast.m
+++ b/matlab/ms-sbvar/ms_forecast.m
@@ -14,7 +14,7 @@ function [options_, oo_]=ms_forecast(M_, options_, oo_)
% SPECIAL REQUIREMENTS
% none
-% Copyright (C) 2011-2017 Dynare Team
+% Copyright (C) 2011-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -75,8 +75,7 @@ else
end
% forecast
-[err] = ms_sbvar_command_line(opt);
-mexErrCheck('ms_forecast',err);
+ms_sbvar_command_line(opt);
% Plot Forecasts
if options_.ms.regimes
diff --git a/matlab/ms-sbvar/ms_irf.m b/matlab/ms-sbvar/ms_irf.m
index 47d1a8490..d06a1149c 100644
--- a/matlab/ms-sbvar/ms_irf.m
+++ b/matlab/ms-sbvar/ms_irf.m
@@ -15,7 +15,7 @@ function [options_, oo_]=ms_irf(varlist, M_, options_, oo_)
% SPECIAL REQUIREMENTS
% none
-% Copyright (C) 2011-2017 Dynare Team
+% Copyright (C) 2011-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -77,8 +77,7 @@ else
end
% irf
-[err] = ms_sbvar_command_line(opt);
-mexErrCheck('ms_irf',err);
+ms_sbvar_command_line(opt);
% Plot IRFs
if options_.ms.regimes
diff --git a/matlab/ms-sbvar/ms_sbvar_setup.m b/matlab/ms-sbvar/ms_sbvar_setup.m
index a195cc491..062eaca72 100644
--- a/matlab/ms-sbvar/ms_sbvar_setup.m
+++ b/matlab/ms-sbvar/ms_sbvar_setup.m
@@ -11,7 +11,7 @@ function ms_sbvar_setup(options_)
% SPECIAL REQUIREMENTS
% none
-% Copyright (C) 2003-2017 Dynare Team
+% Copyright (C) 2003-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -428,6 +428,5 @@ fclose(fidForC);
%======================================================================
ms_write_markov_file(markov_file,options_)
create_init_file = [matlab_filename,' ',markov_file,' ',options_.ms.file_tag];
-[err] = ms_sbvar_create_init_file(create_init_file);
-mexErrCheck('ms_sbvar_create_init_file',err);
+ms_sbvar_create_init_file(create_init_file);
end
diff --git a/matlab/ms-sbvar/ms_simulation.m b/matlab/ms-sbvar/ms_simulation.m
index f7832e035..d311733b8 100644
--- a/matlab/ms-sbvar/ms_simulation.m
+++ b/matlab/ms-sbvar/ms_simulation.m
@@ -14,7 +14,7 @@ function [options_, oo_]=ms_simulation(M_, options_, oo_)
% SPECIAL REQUIREMENTS
% none
-% Copyright (C) 2011-2013 Dynare Team
+% Copyright (C) 2011-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -50,6 +50,5 @@ if options_.ms.save_draws
end
% simulation
-[err] = ms_sbvar_command_line(opt);
-mexErrCheck('ms_simulation',err);
+ms_sbvar_command_line(opt);
end
diff --git a/matlab/ms-sbvar/ms_variance_decomposition.m b/matlab/ms-sbvar/ms_variance_decomposition.m
index 1fe73ddbc..746facf2c 100644
--- a/matlab/ms-sbvar/ms_variance_decomposition.m
+++ b/matlab/ms-sbvar/ms_variance_decomposition.m
@@ -14,7 +14,7 @@ function [options_, oo_]=ms_variance_decomposition(M_, options_, oo_)
% SPECIAL REQUIREMENTS
% none
-% Copyright (C) 2011-2017 Dynare Team
+% Copyright (C) 2011-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -78,8 +78,7 @@ if options_.ms.error_bands
end
% variance_decomposition
-[err] = ms_sbvar_command_line(opt);
-mexErrCheck('ms_variance_decomposition',err);
+ms_sbvar_command_line(opt);
if options_.ms.regime || options_.ms.regimes
outfile = [outfile 'regime_'];
diff --git a/matlab/partial_information/add_auxiliary_variables_to_steadystate.m b/matlab/partial_information/add_auxiliary_variables_to_steadystate.m
index e1ffe4f19..35bd84bb3 100644
--- a/matlab/partial_information/add_auxiliary_variables_to_steadystate.m
+++ b/matlab/partial_information/add_auxiliary_variables_to_steadystate.m
@@ -2,7 +2,7 @@ function ys1 = add_auxiliary_variables_to_steadystate(ys,aux_vars,fname, ...
exo_steady_state, exo_det_steady_state,params, byte_code)
% Add auxiliary variables to the steady state vector
-% Copyright (C) 2009-2017 Dynare Team
+% Copyright (C) 2009-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -23,9 +23,9 @@ ys1 = [ys;zeros(n,1)];
for i=1:n+1
if byte_code
- [info, res] = bytecode('static','evaluate',ys1,...
- [exo_steady_state; ...
- exo_det_steady_state],params);
+ res = bytecode('static','evaluate',ys1,...
+ [exo_steady_state; ...
+ exo_det_steady_state],params);
else
res = feval([fname '.static'],ys1,...
[exo_steady_state; ...
diff --git a/matlab/perfect-foresight-models/det_cond_forecast.m b/matlab/perfect-foresight-models/det_cond_forecast.m
index 98875fb91..cdcbe24d7 100644
--- a/matlab/perfect-foresight-models/det_cond_forecast.m
+++ b/matlab/perfect-foresight-models/det_cond_forecast.m
@@ -12,7 +12,7 @@ function data_set = det_cond_forecast(varargin)
% dataset [dseries] Returns a dseries containing the forecasted endgenous variables and shocks
%
-% Copyright (C) 2013-2018 Dynare Team
+% Copyright (C) 2013-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -158,13 +158,12 @@ else
if options_.bytecode
save_options_dynatol_f = options_.dynatol.f;
options_.dynatol.f = 1e-7;
- [Info, endo, exo] = bytecode('extended_path', plan, oo_.endo_simul, oo_.exo_simul, M_.params, oo_.steady_state, options_.periods);
+ [endo, exo] = bytecode('extended_path', plan, oo_.endo_simul, oo_.exo_simul, M_.params, oo_.steady_state, options_.periods);
options_.dynatol.f = save_options_dynatol_f;
- if Info == 0
- oo_.endo_simul = endo;
- oo_.exo_simul = exo;
- end
+ oo_.endo_simul = endo;
+ oo_.exo_simul = exo;
+
endo = endo';
endo_l = size(endo(1+M_.maximum_lag:end,:),1);
jrng = dates(plan.date(1)):dates(plan.date(1)+endo_l);
@@ -473,14 +472,12 @@ if pf && ~surprise
end
data1 = M_;
if (options_.bytecode)
- [chck, zz, data1]= bytecode('dynamic','evaluate', z, zx, M_.params, oo_.steady_state, k, data1);
+ [zz, data1]= bytecode('dynamic','evaluate', z, zx, M_.params, oo_.steady_state, k, data1);
else
[zz, g1b] = feval([M_.fname '.dynamic'], z', zx, M_.params, oo_.steady_state, k);
data1.g1_x = g1b(:,end - M_.exo_nbr + 1:end);
data1.g1 = g1b(:,1 : end - M_.exo_nbr);
- chck = 0;
end
- mexErrCheck('bytecode', chck);
end
if k == 1
g1(1:M_.endo_nbr,-M_.endo_nbr + [cur_indx lead_indx]) = data1.g1(:,M_.nspred + 1:end);
@@ -745,14 +742,12 @@ else
end
data1 = M_;
if (options_.bytecode)
- [chck, zz, data1]= bytecode('dynamic','evaluate', z, zx, M_.params, oo_.steady_state, k, data1);
+ [zz, data1]= bytecode('dynamic','evaluate', z, zx, M_.params, oo_.steady_state, k, data1);
else
[zz, g1b] = feval([M_.fname '.dynamic'], z', zx, M_.params, oo_.steady_state, k);
data1.g1_x = g1b(:,end - M_.exo_nbr + 1:end);
data1.g1 = g1b(:,1 : end - M_.exo_nbr);
- chck = 0;
end
- mexErrCheck('bytecode', chck);
end
if k == 1
g1(1:M_.endo_nbr,-M_.endo_nbr + [cur_indx lead_indx]) = data1.g1(:,M_.nspred + 1:end);
diff --git a/matlab/perfect-foresight-models/perfect_foresight_solver_core.m b/matlab/perfect-foresight-models/perfect_foresight_solver_core.m
index 85b420cd4..267545d69 100644
--- a/matlab/perfect-foresight-models/perfect_foresight_solver_core.m
+++ b/matlab/perfect-foresight-models/perfect_foresight_solver_core.m
@@ -11,7 +11,7 @@ function [oo_, maxerror] = perfect_foresight_solver_core(M_, options_, oo_)
% - oo_ [struct] contains results
% - maxerror [double] contains the maximum absolute error
-% Copyright (C) 2015-2019 Dynare Team
+% Copyright (C) 2015-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -50,18 +50,14 @@ end
if options_.block
if options_.bytecode
try
- [info, tmp] = bytecode('dynamic', oo_.endo_simul, oo_.exo_simul, M_.params, repmat(oo_.steady_state,1, periods+2), periods);
- catch
- info = 1;
- end
- if info
- oo_.deterministic_simulation.status = false;
- else
- oo_.endo_simul = tmp;
+ oo_.endo_simul = bytecode('dynamic', oo_.endo_simul, oo_.exo_simul, M_.params, repmat(oo_.steady_state,1, periods+2), periods);
oo_.deterministic_simulation.status = true;
- end
- if options_.no_homotopy
- mexErrCheck('bytecode', info);
+ catch ME
+ disp(ME.message)
+ if options_.no_homotopy
+ error('Error in bytecode')
+ end
+ oo_.deterministic_simulation.status = false;
end
else
oo_ = feval([M_.fname '.dynamic'], options_, M_, oo_);
@@ -69,18 +65,14 @@ if options_.block
else
if options_.bytecode
try
- [info, tmp] = bytecode('dynamic', oo_.endo_simul, oo_.exo_simul, M_.params, repmat(oo_.steady_state, 1, periods+2), periods);
- catch
- info = 1;
- end
- if info
- oo_.deterministic_simulation.status = false;
- else
- oo_.endo_simul = tmp;
+ oo_.endo_simul = bytecode('dynamic', oo_.endo_simul, oo_.exo_simul, M_.params, repmat(oo_.steady_state, 1, periods+2), periods);
oo_.deterministic_simulation.status = true;
- end
- if options_.no_homotopy
- mexErrCheck('bytecode', info);
+ catch ME
+ disp(ME.message)
+ if options_.no_homotopy
+ error('Error in bytecode')
+ end
+ oo_.deterministic_simulation.status = false;
end
else
if M_.maximum_endo_lead == 0 % Purely backward model
@@ -128,7 +120,7 @@ if nargout>1
maxerror = oo_.deterministic_simulation.error;
else
if options_.bytecode
- [~, residuals]= bytecode('dynamic','evaluate', oo_.endo_simul, oo_.exo_simul, M_.params, oo_.steady_state, 1);
+ residuals = bytecode('dynamic','evaluate', oo_.endo_simul, oo_.exo_simul, M_.params, oo_.steady_state, 1);
else
if M_.maximum_lag > 0
y0 = oo_.endo_simul(:, M_.maximum_lag);
diff --git a/matlab/resid.m b/matlab/resid.m
index 716c9c5b3..1f3743a07 100644
--- a/matlab/resid.m
+++ b/matlab/resid.m
@@ -12,7 +12,7 @@ function z = resid(junk)
% SPECIAL REQUIREMENTS
% none
-% Copyright (C) 2001-2018 Dynare Team
+% Copyright (C) 2001-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -79,8 +79,7 @@ if options_.block && ~options_.bytecode
z(idx) = r;
end
elseif options_.bytecode
- [check, z] = bytecode('evaluate','static');
- mexErrCheck('bytecode', check);
+ z = bytecode('evaluate','static');
else
z = feval([M_.fname '.static'],...
oo_.steady_state,...
diff --git a/matlab/simult_.m b/matlab/simult_.m
index e3ec1ec31..508af26e4 100644
--- a/matlab/simult_.m
+++ b/matlab/simult_.m
@@ -17,7 +17,7 @@ function y_=simult_(M_,options_,y0,dr,ex_,iorder)
% SPECIAL REQUIREMENTS
% none
-% Copyright (C) 2001-2019 Dynare Team
+% Copyright (C) 2001-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -53,10 +53,9 @@ end
if options_.k_order_solver && ~options_.pruning % Call dynare++ routines.
ex_ = [zeros(M_.maximum_lag,M_.exo_nbr); ex_];
- [err, y_] = dynare_simul_(options_.order,M_.nstatic,M_.npred,M_.nboth,M_.nfwrd,exo_nbr, ...
- y_(dr.order_var,1),ex_',M_.Sigma_e,options_.DynareRandomStreams.seed, ...
- dr.ys(dr.order_var),dr);
- mexErrCheck('dynare_simul_', err);
+ y_ = dynare_simul_(options_.order,M_.nstatic,M_.npred,M_.nboth,M_.nfwrd,exo_nbr, ...
+ y_(dr.order_var,1),ex_',M_.Sigma_e,options_.DynareRandomStreams.seed, ...
+ dr.ys(dr.order_var),dr);
y_(dr.order_var,:) = y_;
else
if options_.block
@@ -98,12 +97,9 @@ else
yhat1 = y__(order_var(k2))-dr.ys(order_var(k2));
yhat2 = y_(order_var(k2),i-1)-dr.ys(order_var(k2));
epsilon = ex_(i-1,:)';
- [abcOut1, err] = A_times_B_kronecker_C(.5*dr.ghxx,yhat1);
- mexErrCheck('A_times_B_kronecker_C', err);
- [abcOut2, err] = A_times_B_kronecker_C(.5*dr.ghuu,epsilon);
- mexErrCheck('A_times_B_kronecker_C', err);
- [abcOut3, err] = A_times_B_kronecker_C(dr.ghxu,yhat1,epsilon);
- mexErrCheck('A_times_B_kronecker_C', err);
+ abcOut1 = A_times_B_kronecker_C(.5*dr.ghxx,yhat1);
+ abcOut2 = A_times_B_kronecker_C(.5*dr.ghuu,epsilon);
+ abcOut3 = A_times_B_kronecker_C(dr.ghxu,yhat1,epsilon);
y_(order_var,i) = constant + dr.ghx*yhat2 + dr.ghu*epsilon ...
+ abcOut1 + abcOut2 + abcOut3;
y__(order_var) = dr.ys(order_var) + dr.ghx*yhat1 + dr.ghu*epsilon;
@@ -112,12 +108,9 @@ else
for i = 2:iter+M_.maximum_lag
yhat = y_(order_var(k2),i-1)-dr.ys(order_var(k2));
epsilon = ex_(i-1,:)';
- [abcOut1, err] = A_times_B_kronecker_C(.5*dr.ghxx,yhat);
- mexErrCheck('A_times_B_kronecker_C', err);
- [abcOut2, err] = A_times_B_kronecker_C(.5*dr.ghuu,epsilon);
- mexErrCheck('A_times_B_kronecker_C', err);
- [abcOut3, err] = A_times_B_kronecker_C(dr.ghxu,yhat,epsilon);
- mexErrCheck('A_times_B_kronecker_C', err);
+ abcOut1 = A_times_B_kronecker_C(.5*dr.ghxx,yhat);
+ abcOut2 = A_times_B_kronecker_C(.5*dr.ghuu,epsilon);
+ abcOut3 = A_times_B_kronecker_C(dr.ghxu,yhat,epsilon);
y_(dr.order_var,i) = constant + dr.ghx*yhat + dr.ghu*epsilon ...
+ abcOut1 + abcOut2 + abcOut3;
end
@@ -150,30 +143,21 @@ else
u = ex_(i-1,:)';
%construct terms of order 2 from second order part, based
%on linear component yhat1
- [gyy, err] = A_times_B_kronecker_C(ghxx,yhat1);
- mexErrCheck('A_times_B_kronecker_C', err);
- [guu, err] = A_times_B_kronecker_C(ghuu,u);
- mexErrCheck('A_times_B_kronecker_C', err);
- [gyu, err] = A_times_B_kronecker_C(ghxu,yhat1,u);
- mexErrCheck('A_times_B_kronecker_C', err);
+ gyy = A_times_B_kronecker_C(ghxx,yhat1);
+ guu = A_times_B_kronecker_C(ghuu,u);
+ gyu = A_times_B_kronecker_C(ghxu,yhat1,u);
%construct terms of order 3 from second order part, based
%on order 2 component yhat2
- [gyy12, err] = A_times_B_kronecker_C(ghxx,yhat1,yhat2);
- mexErrCheck('A_times_B_kronecker_C', err);
- [gy2u, err] = A_times_B_kronecker_C(ghxu,yhat2,u);
- mexErrCheck('A_times_B_kronecker_C', err);
+ gyy12 = A_times_B_kronecker_C(ghxx,yhat1,yhat2);
+ gy2u = A_times_B_kronecker_C(ghxu,yhat2,u);
%construct terms of order 3, all based on first order component yhat1
y2a = kron(yhat1,yhat1);
- [gyyy, err] = A_times_B_kronecker_C(ghxxx,y2a,yhat1);
- mexErrCheck('A_times_B_kronecker_C', err);
+ gyyy = A_times_B_kronecker_C(ghxxx,y2a,yhat1);
u2a = kron(u,u);
- [guuu, err] = A_times_B_kronecker_C(ghuuu,u2a,u);
- mexErrCheck('A_times_B_kronecker_C', err);
+ guuu = A_times_B_kronecker_C(ghuuu,u2a,u);
yu = kron(yhat1,u);
- [gyyu, err] = A_times_B_kronecker_C(ghxxu,yhat1,yu);
- mexErrCheck('A_times_B_kronecker_C', err);
- [gyuu, err] = A_times_B_kronecker_C(ghxuu,yu,u);
- mexErrCheck('A_times_B_kronecker_C', err);
+ gyyu = A_times_B_kronecker_C(ghxxu,yhat1,yu);
+ gyuu = A_times_B_kronecker_C(ghxuu,yu,u);
%add all terms of order 3, linear component based on third
%order yhat3
yhat3 = ghx*yhat3 +gyy12 ... % prefactor is 1/2*2=1, see (65) Appendix Andreasen et al.
diff --git a/matlab/solve_perfect_foresight_model.m b/matlab/solve_perfect_foresight_model.m
index cedf3e060..93c5fb26f 100644
--- a/matlab/solve_perfect_foresight_model.m
+++ b/matlab/solve_perfect_foresight_model.m
@@ -1,6 +1,6 @@
function [flag,endo_simul,err] = solve_perfect_foresight_model(endo_simul,exo_simul,pfm)
-% Copyright (C) 2012-2017 Dynare Team
+% Copyright (C) 2012-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -33,7 +33,13 @@ if pfm.verbose
end
if pfm.use_bytecode
- [flag, endo_simul]=bytecode(Y, exo_simul, pfm.params);
+ try
+ endo_simul=bytecode(Y, exo_simul, pfm.params);
+ flag = 0;
+ catch ME
+ disp(ME.message);
+ flag = 1;
+ end
return
end
@@ -120,4 +126,4 @@ if nan_flag
end
if pfm.verbose
disp (['-----------------------------------------------------']) ;
-end
\ No newline at end of file
+end
diff --git a/matlab/stochastic_solvers.m b/matlab/stochastic_solvers.m
index 5aa9920b4..87d88bacf 100644
--- a/matlab/stochastic_solvers.m
+++ b/matlab/stochastic_solvers.m
@@ -24,7 +24,7 @@ function [dr, info] = stochastic_solvers(dr, task, M_, options_, oo_)
% info=6 -> The jacobian matrix evaluated at the steady state is complex.
% info=9 -> k_order_pert was unable to compute the solution
-% Copyright (C) 1996-2019 Dynare Team
+% Copyright (C) 1996-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -111,8 +111,8 @@ it_ = M_.maximum_lag + 1;
z = repmat(dr.ys,1,klen);
if local_order == 1
if (options_.bytecode)
- [chck, ~, loc_dr] = bytecode('dynamic','evaluate', z,exo_simul, ...
- M_.params, dr.ys, 1);
+ [~, loc_dr] = bytecode('dynamic','evaluate', z,exo_simul, ...
+ M_.params, dr.ys, 1);
jacobia_ = [loc_dr.g1 loc_dr.g1_x loc_dr.g1_xd];
else
[~,jacobia_] = feval([M_.fname '.dynamic'],z(iyr0),exo_simul, ...
@@ -120,8 +120,8 @@ if local_order == 1
end
elseif local_order == 2
if (options_.bytecode)
- [chck, ~, loc_dr] = bytecode('dynamic','evaluate', z,exo_simul, ...
- M_.params, dr.ys, 1);
+ [~, loc_dr] = bytecode('dynamic','evaluate', z,exo_simul, ...
+ M_.params, dr.ys, 1);
jacobia_ = [loc_dr.g1 loc_dr.g1_x];
else
[~,jacobia_,hessian1] = feval([M_.fname '.dynamic'],z(iyr0),...
diff --git a/mex/sources/block_kalman_filter/block_kalman_filter.cc b/mex/sources/block_kalman_filter/block_kalman_filter.cc
index 0f484b04f..0ad1f60c8 100644
--- a/mex/sources/block_kalman_filter/block_kalman_filter.cc
+++ b/mex/sources/block_kalman_filter/block_kalman_filter.cc
@@ -1,5 +1,5 @@
/*
- * Copyright © 2007-2019 Dynare Team
+ * Copyright © 2007-2020 Dynare Team
*
* This file is part of Dynare.
*
@@ -143,10 +143,10 @@ det(const double *F, int dim, const lapack_int *ipiv)
BlockKalmanFilter::BlockKalmanFilter(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
- if (nlhs > 3)
- DYN_MEX_FUNC_ERR_MSG_TXT("block_kalman_filter provides at most 3 output argument.");
+ if (nlhs > 2)
+ mexErrMsgTxt("block_kalman_filter provides at most 2 output argument.");
if (nrhs != 13 && nrhs != 16)
- DYN_MEX_FUNC_ERR_MSG_TXT("block_kalman_filter requires exactly \n 13 input arguments for standard Kalman filter \nor\n 16 input arguments for missing observations Kalman filter.");
+ mexErrMsgTxt("block_kalman_filter requires exactly \n 13 input arguments for standard Kalman filter \nor\n 16 input arguments for missing observations Kalman filter.");
if (nrhs == 16)
missing_observations = true;
else
@@ -154,13 +154,13 @@ BlockKalmanFilter::BlockKalmanFilter(int nlhs, mxArray *plhs[], int nrhs, const
if (missing_observations)
{
if (!mxIsCell(prhs[0]))
- DYN_MEX_FUNC_ERR_MSG_TXT("the first input argument of block_missing_observations_kalman_filter must be a Cell Array.");
+ mexErrMsgTxt("the first input argument of block_missing_observations_kalman_filter must be a Cell Array.");
pdata_index = prhs[0];
if (!mxIsDouble(prhs[1]))
- DYN_MEX_FUNC_ERR_MSG_TXT("the second input argument of block_missing_observations_kalman_filter must be a scalar.");
+ mexErrMsgTxt("the second input argument of block_missing_observations_kalman_filter must be a scalar.");
number_of_observations = ceil(mxGetScalar(prhs[1]));
if (!mxIsDouble(prhs[2]))
- DYN_MEX_FUNC_ERR_MSG_TXT("the third input argument of block_missing_observations_kalman_filter must be a scalar.");
+ mexErrMsgTxt("the third input argument of block_missing_observations_kalman_filter must be a scalar.");
no_more_missing_observations = ceil(mxGetScalar(prhs[2]));
pT = mxDuplicateArray(prhs[3]);
pR = mxDuplicateArray(prhs[4]);
@@ -218,7 +218,7 @@ BlockKalmanFilter::BlockKalmanFilter(int nlhs, mxArray *plhs[], int nrhs, const
if (missing_observations)
if (mxGetNumberOfElements(pdata_index) != static_cast(smpl))
- DYN_MEX_FUNC_ERR_MSG_TXT("the number of element in the cell array passed to block_missing_observation_kalman_filter as first argument has to be equal to the smpl size");
+ mexErrMsgTxt("the number of element in the cell array passed to block_missing_observation_kalman_filter as first argument has to be equal to the smpl size");
i_nz_state_var = std::make_unique(n);
for (int i = 0; i < n; i++)
@@ -436,7 +436,7 @@ BlockKalmanFilter::block_kalman_filter(int nlhs, mxArray *plhs[])
{
mexPrintf("error: F singular\n");
LIK = Inf;
- if (nlhs == 3)
+ if (nlhs == 2)
for (int i = t; i < smpl; i++)
lik[i] = Inf;
// info = 0
@@ -817,17 +817,15 @@ BlockKalmanFilter::block_kalman_filter(int nlhs, mxArray *plhs[])
void
BlockKalmanFilter::return_results_and_clean(int nlhs, mxArray *plhs[])
{
- plhs[0] = mxCreateDoubleScalar(0);
-
- if (nlhs >= 2)
+ if (nlhs >= 1)
{
- plhs[1] = mxCreateDoubleMatrix(1, 1, mxREAL);
- double *pind = mxGetPr(plhs[1]);
+ plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
+ double *pind = mxGetPr(plhs[0]);
pind[0] = LIK;
}
- if (nlhs == 3)
- plhs[2] = plik;
+ if (nlhs == 2)
+ plhs[1] = plik;
else
mxDestroyArray(plik);
diff --git a/mex/sources/bytecode/bytecode.cc b/mex/sources/bytecode/bytecode.cc
index ee81f0843..31efcd311 100644
--- a/mex/sources/bytecode/bytecode.cc
+++ b/mex/sources/bytecode/bytecode.cc
@@ -1,5 +1,5 @@
/*
- * Copyright © 2007-2017 Dynare Team
+ * Copyright © 2007-2020 Dynare Team
*
* This file is part of Dynare.
*
@@ -21,37 +21,6 @@
#include "ErrorHandling.hh"
#include
#include
-#ifdef DYN_MEX_FUNC_ERR_MSG_TXT
-# undef DYN_MEX_FUNC_ERR_MSG_TXT
-#endif // DYN_MEX_FUNC_ERR_MSG_TXT
-
-#define DYN_MEX_FUNC_ERR_MSG_TXT(str) \
- do { \
- mexPrintf("%s\n", str); \
- if (nlhs > 0) \
- { \
- plhs[0] = mxCreateDoubleScalar(1); \
- if (nlhs > 1) \
- { \
- double *pind; \
- plhs[1] = mxCreateDoubleMatrix(int (row_y), int (col_y), mxREAL); \
- pind = mxGetPr(plhs[1]); \
- if (evaluate) \
- { \
- for (unsigned int i = 0; i < row_y*col_y; i++) \
- pind[i] = 0; \
- } \
- else \
- { \
- for (unsigned int i = 0; i < row_y*col_y; i++) \
- pind[i] = yd[i]; \
- } \
- for (int i = 2; i < nlhs; i++) \
- plhs[i] = mxCreateDoubleScalar(1); \
- } \
- } \
- return; \
- } while (0)
#ifdef DEBUG_EX
@@ -492,13 +461,13 @@ main(int nrhs, const char *prhs[])
}
catch (GeneralExceptionHandling &feh)
{
- DYN_MEX_FUNC_ERR_MSG_TXT(feh.GetErrorMsg().c_str());
+ mexErrMsgTxt(feh.GetErrorMsg().c_str());
}
if (!count_array_argument)
{
int field = mxGetFieldNumber(M_, "params");
if (field < 0)
- DYN_MEX_FUNC_ERR_MSG_TXT("params is not a field of M_");
+ mexErrMsgTxt("params is not a field of M_");
params = mxGetPr(mxGetFieldByNumber(M_, 0, field));
}
@@ -510,14 +479,14 @@ main(int nrhs, const char *prhs[])
if (extended_path_struct == NULL)
{
string tmp = "The 'extended_path' option must be followed by the extended_path descriptor";
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
mxArray *date_str = mxGetField(extended_path_struct, 0, "date_str");
if (date_str == NULL)
{
string tmp = "date_str";
tmp.insert(0, "The extended_path description structure does not contain the member: ");
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
int nb_periods = mxGetM(date_str) * mxGetN(date_str);
@@ -526,28 +495,28 @@ main(int nrhs, const char *prhs[])
{
string tmp = "constrained_vars_";
tmp.insert(0, "The extended_path description structure does not contain the member: ");
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
mxArray *constrained_paths_ = mxGetField(extended_path_struct, 0, "constrained_paths_");
if (constrained_paths_ == NULL)
{
string tmp = "constrained_paths_";
tmp.insert(0, "The extended_path description structure does not contain the member: ");
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
mxArray *constrained_int_date_ = mxGetField(extended_path_struct, 0, "constrained_int_date_");
if (constrained_int_date_ == NULL)
{
string tmp = "constrained_int_date_";
tmp.insert(0, "The extended_path description structure does not contain the member: ");
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
mxArray *constrained_perfect_foresight_ = mxGetField(extended_path_struct, 0, "constrained_perfect_foresight_");
if (constrained_perfect_foresight_ == NULL)
{
string tmp = "constrained_perfect_foresight_";
tmp.insert(0, "The extended_path description structure does not contain the member: ");
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
mxArray *shock_var_ = mxGetField(extended_path_struct, 0, "shock_vars_");
@@ -555,28 +524,28 @@ main(int nrhs, const char *prhs[])
{
string tmp = "shock_vars_";
tmp.insert(0, "The extended_path description structure does not contain the member: ");
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
mxArray *shock_paths_ = mxGetField(extended_path_struct, 0, "shock_paths_");
if (shock_paths_ == NULL)
{
string tmp = "shock_paths_";
tmp.insert(0, "The extended_path description structure does not contain the member: ");
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
mxArray *shock_int_date_ = mxGetField(extended_path_struct, 0, "shock_int_date_");
if (shock_int_date_ == NULL)
{
string tmp = "shock_int_date_";
tmp.insert(0, "The extended_path description structure does not contain the member: ");
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
mxArray *shock_str_date_ = mxGetField(extended_path_struct, 0, "shock_str_date_");
if (shock_str_date_ == NULL)
{
string tmp = "shock_str_date_";
tmp.insert(0, "The extended_path description structure does not contain the member: ");
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
int nb_constrained = mxGetM(constrained_vars_) * mxGetN(constrained_vars_);
int nb_controlled = 0;
@@ -588,7 +557,7 @@ main(int nrhs, const char *prhs[])
nb_controlled = mxGetM(controlled_varexo) * mxGetN(controlled_varexo);
if (nb_controlled != nb_constrained)
{
- DYN_MEX_FUNC_ERR_MSG_TXT("The number of exogenized variables and the number of exogenous controlled variables should be equal.");
+ mexErrMsgTxt("The number of exogenized variables and the number of exogenous controlled variables should be equal.");
}
}
double *controlled_varexo_value = NULL;
@@ -637,7 +606,7 @@ main(int nrhs, const char *prhs[])
string tmp1 = oss.str();
tmp.append(tmp1);
tmp.append(")");
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
(sconditional_extended_path[i]).per_value.resize(nb_local_periods);
(sconditional_extended_path[i]).value.resize(nb_periods);
@@ -680,7 +649,7 @@ main(int nrhs, const char *prhs[])
string tmp1 = oss.str();
tmp.append(tmp1);
tmp.append(")");
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
(sextended_path[i]).per_value.resize(nb_local_periods);
(sextended_path[i]).value.resize(nb_periods);
@@ -702,7 +671,7 @@ main(int nrhs, const char *prhs[])
if (info)
{
string tmp = "Can not allocated memory to store the date_str in the extended path descriptor";
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
dates.push_back(string(buf)); //string(Dates[i]);
mxFree(buf);
@@ -715,7 +684,7 @@ main(int nrhs, const char *prhs[])
{
string tmp = plan;
tmp.insert(0, "Can't find the plan: ");
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
size_t n_plan = mxGetN(plan_struct);
splan.resize(n_plan);
@@ -738,7 +707,7 @@ main(int nrhs, const char *prhs[])
string tmp = name;
tmp.insert(0, "the variable '");
tmp.append("' defined as var in plan is not an exogenous or a deterministic exogenous\n");
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
}
tmp = mxGetField(plan_struct, i, "var");
@@ -756,7 +725,7 @@ main(int nrhs, const char *prhs[])
string tmp = name;
tmp.insert(0, "the variable '");
tmp.append("' defined as exo in plan is not an endogenous variable\n");
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
}
tmp = mxGetField(plan_struct, i, "per_value");
@@ -793,7 +762,7 @@ main(int nrhs, const char *prhs[])
{
string tmp = pfplan;
tmp.insert(0, "Can't find the pfplan: ");
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
size_t n_plan = mxGetN(pfplan_struct);
spfplan.resize(n_plan);
@@ -816,7 +785,7 @@ main(int nrhs, const char *prhs[])
string tmp = name;
tmp.insert(0, "the variable '");
tmp.append("' defined as var in pfplan is not an exogenous or a deterministic exogenous\n");
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
}
tmp = mxGetField(pfplan_struct, i, "exo");
@@ -834,7 +803,7 @@ main(int nrhs, const char *prhs[])
string tmp = name;
tmp.insert(0, "the variable '");
tmp.append("' defined as exo in pfplan is not an endogenous variable\n");
- DYN_MEX_FUNC_ERR_MSG_TXT(tmp.c_str());
+ mexErrMsgTxt(tmp.c_str());
}
}
tmp = mxGetField(pfplan_struct, i, "per_value");
@@ -866,20 +835,20 @@ main(int nrhs, const char *prhs[])
int field_steady_state = mxGetFieldNumber(oo_, "steady_state");
if (field_steady_state < 0)
- DYN_MEX_FUNC_ERR_MSG_TXT("steady_state is not a field of oo_");
+ mexErrMsgTxt("steady_state is not a field of oo_");
int field_exo_steady_state = mxGetFieldNumber(oo_, "exo_steady_state");
if (field_exo_steady_state < 0)
- DYN_MEX_FUNC_ERR_MSG_TXT("exo_steady_state is not a field of oo_");
+ mexErrMsgTxt("exo_steady_state is not a field of oo_");
if (!steady_state)
{
int field_endo_simul = mxGetFieldNumber(oo_, "endo_simul");
if (field_endo_simul < 0)
- DYN_MEX_FUNC_ERR_MSG_TXT("endo_simul is not a field of oo_");
+ mexErrMsgTxt("endo_simul is not a field of oo_");
int field_exo_simul = mxGetFieldNumber(oo_, "exo_simul");
if (field_exo_simul < 0)
- DYN_MEX_FUNC_ERR_MSG_TXT("exo_simul is not a field of oo_");
+ mexErrMsgTxt("exo_simul is not a field of oo_");
if (!count_array_argument)
{
@@ -897,17 +866,17 @@ main(int nrhs, const char *prhs[])
if (field >= 0)
y_kmin = int (floor(*(mxGetPr(mxGetFieldByNumber(M_, 0, field)))));
else
- DYN_MEX_FUNC_ERR_MSG_TXT("maximum_lag is not a field of M_");
+ mexErrMsgTxt("maximum_lag is not a field of M_");
field = mxGetFieldNumber(M_, "maximum_lead");
if (field >= 0)
y_kmax = int (floor(*(mxGetPr(mxGetFieldByNumber(M_, 0, field)))));
else
- DYN_MEX_FUNC_ERR_MSG_TXT("maximum_lead is not a field of M_");
+ mexErrMsgTxt("maximum_lead is not a field of M_");
field = mxGetFieldNumber(M_, "maximum_endo_lag");
if (field >= 0)
y_decal = max(0, y_kmin-int (floor(*(mxGetPr(mxGetFieldByNumber(M_, 0, field))))));
else
- DYN_MEX_FUNC_ERR_MSG_TXT("maximum_endo_lag is not a field of M_");
+ mexErrMsgTxt("maximum_endo_lag is not a field of M_");
if (!count_array_argument)
{
@@ -915,7 +884,7 @@ main(int nrhs, const char *prhs[])
if (field >= 0)
periods = int (floor(*(mxGetPr(mxGetFieldByNumber(options_, 0, field)))));
else
- DYN_MEX_FUNC_ERR_MSG_TXT("options_ is not a field of options_");
+ mexErrMsgTxt("options_ is not a field of options_");
}
if (!steady_yd)
@@ -948,7 +917,7 @@ main(int nrhs, const char *prhs[])
if (field >= 0)
verbose = int (*mxGetPr((mxGetFieldByNumber(options_, 0, field))));
else
- DYN_MEX_FUNC_ERR_MSG_TXT("verbosity is not a field of options_");
+ mexErrMsgTxt("verbosity is not a field of options_");
if (verbose)
print_it = true;
if (!steady_state)
@@ -961,34 +930,34 @@ main(int nrhs, const char *prhs[])
else
{
if (!steady_state)
- DYN_MEX_FUNC_ERR_MSG_TXT("simul is not a field of options_");
+ mexErrMsgTxt("simul is not a field of options_");
else
- DYN_MEX_FUNC_ERR_MSG_TXT("steady is not a field of options_");
+ mexErrMsgTxt("steady is not a field of options_");
}
field = mxGetFieldNumber(temporaryfield, "maxit");
if (field < 0)
{
if (!steady_state)
- DYN_MEX_FUNC_ERR_MSG_TXT("maxit is not a field of options_.simul");
+ mexErrMsgTxt("maxit is not a field of options_.simul");
else
- DYN_MEX_FUNC_ERR_MSG_TXT("maxit is not a field of options_.steady");
+ mexErrMsgTxt("maxit is not a field of options_.steady");
}
int maxit_ = int (floor(*(mxGetPr(mxGetFieldByNumber(temporaryfield, 0, field)))));
field = mxGetFieldNumber(options_, "slowc");
if (field < 0)
- DYN_MEX_FUNC_ERR_MSG_TXT("slows is not a field of options_");
+ mexErrMsgTxt("slows is not a field of options_");
double slowc = double (*(mxGetPr(mxGetFieldByNumber(options_, 0, field))));
field = mxGetFieldNumber(options_, "markowitz");
if (field < 0)
- DYN_MEX_FUNC_ERR_MSG_TXT("markowitz is not a field of options_");
+ mexErrMsgTxt("markowitz is not a field of options_");
double markowitz_c = double (*(mxGetPr(mxGetFieldByNumber(options_, 0, field))));
field = mxGetFieldNumber(options_, "minimal_solving_periods");
if (field < 0)
- DYN_MEX_FUNC_ERR_MSG_TXT("minimal_solving_periods is not a field of options_");
+ mexErrMsgTxt("minimal_solving_periods is not a field of options_");
int minimal_solving_periods = int (*(mxGetPr(mxGetFieldByNumber(options_, 0, field))));
field = mxGetFieldNumber(options_, "stack_solve_algo");
if (field < 0)
- DYN_MEX_FUNC_ERR_MSG_TXT("stack_solve_algo is not a field of options_");
+ mexErrMsgTxt("stack_solve_algo is not a field of options_");
int stack_solve_algo = int (*(mxGetPr(mxGetFieldByNumber(options_, 0, field))));
int solve_algo;
double solve_tolf;
@@ -999,12 +968,12 @@ main(int nrhs, const char *prhs[])
if (field >= 0)
solve_algo = int (*(mxGetPr(mxGetFieldByNumber(options_, 0, field))));
else
- DYN_MEX_FUNC_ERR_MSG_TXT("solve_algo is not a field of options_");
+ mexErrMsgTxt("solve_algo is not a field of options_");
field = mxGetFieldNumber(options_, "solve_tolf");
if (field >= 0)
solve_tolf = *(mxGetPr(mxGetFieldByNumber(options_, 0, field)));
else
- DYN_MEX_FUNC_ERR_MSG_TXT("solve_tolf is not a field of options_");
+ mexErrMsgTxt("solve_tolf is not a field of options_");
}
else
{
@@ -1014,19 +983,19 @@ main(int nrhs, const char *prhs[])
if (field >= 0)
dynatol = mxGetFieldByNumber(options_, 0, field);
else
- DYN_MEX_FUNC_ERR_MSG_TXT("dynatol is not a field of options_");
+ mexErrMsgTxt("dynatol is not a field of options_");
field = mxGetFieldNumber(dynatol, "f");
if (field >= 0)
solve_tolf = *mxGetPr((mxGetFieldByNumber(dynatol, 0, field)));
else
- DYN_MEX_FUNC_ERR_MSG_TXT("f is not a field of options_.dynatol");
+ mexErrMsgTxt("f is not a field of options_.dynatol");
}
field = mxGetFieldNumber(M_, "fname");
mxArray *mxa;
if (field >= 0)
mxa = mxGetFieldByNumber(M_, 0, field);
else
- DYN_MEX_FUNC_ERR_MSG_TXT("fname is not a field of M_");
+ mexErrMsgTxt("fname is not a field of M_");
size_t buflen = mxGetM(mxa) * mxGetN(mxa) + 1;
char *fname;
fname = static_cast(mxCalloc(buflen+1, sizeof(char)));
@@ -1044,11 +1013,11 @@ main(int nrhs, const char *prhs[])
}
catch (GeneralExceptionHandling &feh)
{
- DYN_MEX_FUNC_ERR_MSG_TXT(feh.GetErrorMsg().c_str());
+ mexErrMsgTxt(feh.GetErrorMsg().c_str());
}
#else
if (stack_solve_algo == 7 && !steady_state)
- DYN_MEX_FUNC_ERR_MSG_TXT("bytecode has not been compiled with CUDA option. Bytecode Can't use options_.stack_solve_algo=7\n");
+ mexErrMsgTxt("bytecode has not been compiled with CUDA option. Bytecode Can't use options_.stack_solve_algo=7\n");
#endif
size_t size_of_direction = col_y*row_y*sizeof(double);
double *y = static_cast(mxMalloc(size_of_direction));
@@ -1085,7 +1054,6 @@ main(int nrhs, const char *prhs[])
mxFree(fname);
int nb_blocks = 0;
double *pind;
- bool no_error = true;
if (extended_path)
{
@@ -1095,7 +1063,7 @@ main(int nrhs, const char *prhs[])
}
catch (GeneralExceptionHandling &feh)
{
- DYN_MEX_FUNC_ERR_MSG_TXT(feh.GetErrorMsg().c_str());
+ mexErrMsgTxt(feh.GetErrorMsg().c_str());
}
}
else
@@ -1106,7 +1074,7 @@ main(int nrhs, const char *prhs[])
}
catch (GeneralExceptionHandling &feh)
{
- DYN_MEX_FUNC_ERR_MSG_TXT(feh.GetErrorMsg().c_str());
+ mexErrMsgTxt(feh.GetErrorMsg().c_str());
}
}
@@ -1116,42 +1084,21 @@ main(int nrhs, const char *prhs[])
#endif
clock_t t1 = clock();
- if (!steady_state && !evaluate && no_error && print)
+ if (!steady_state && !evaluate && print)
mexPrintf("Simulation Time=%f milliseconds\n", 1000.0*(double (t1)-double (t0))/double (CLOCKS_PER_SEC));
#ifndef DEBUG_EX
bool dont_store_a_structure = false;
if (nlhs > 0)
{
- plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
- pind = mxGetPr(plhs[0]);
- if (no_error)
- pind[0] = 0;
- else
- pind[0] = 1;
- if (nlhs > 1)
+ if (block >= 0)
{
- if (block >= 0)
+ if (evaluate)
{
- if (evaluate)
- {
- vector residual = interprete.get_residual();
- plhs[1] = mxCreateDoubleMatrix(int (residual.size()/double (col_y)), int (col_y), mxREAL);
- pind = mxGetPr(plhs[1]);
- for (i = 0; i < residual.size(); i++)
- pind[i] = residual[i];
- }
- else
- {
- int out_periods;
- if (extended_path)
- out_periods = max_periods + y_kmin;
- else
- out_periods = row_y;
- plhs[1] = mxCreateDoubleMatrix(out_periods, int (col_y), mxREAL);
- pind = mxGetPr(plhs[1]);
- for (i = 0; i < out_periods*col_y; i++)
- pind[i] = y[i];
- }
+ vector residual = interprete.get_residual();
+ plhs[0] = mxCreateDoubleMatrix(int (residual.size()/double (col_y)), int (col_y), mxREAL);
+ pind = mxGetPr(plhs[0]);
+ for (i = 0; i < residual.size(); i++)
+ pind[i] = residual[i];
}
else
{
@@ -1159,99 +1106,111 @@ main(int nrhs, const char *prhs[])
if (extended_path)
out_periods = max_periods + y_kmin;
else
- out_periods = col_y;
- plhs[1] = mxCreateDoubleMatrix(int (row_y), out_periods, mxREAL);
- pind = mxGetPr(plhs[1]);
- if (evaluate)
+ out_periods = row_y;
+ plhs[0] = mxCreateDoubleMatrix(out_periods, int (col_y), mxREAL);
+ pind = mxGetPr(plhs[0]);
+ for (i = 0; i < out_periods*col_y; i++)
+ pind[i] = y[i];
+ }
+ }
+ else
+ {
+ int out_periods;
+ if (extended_path)
+ out_periods = max_periods + y_kmin;
+ else
+ out_periods = col_y;
+ plhs[0] = mxCreateDoubleMatrix(int (row_y), out_periods, mxREAL);
+ pind = mxGetPr(plhs[0]);
+ if (evaluate)
+ {
+ vector residual = interprete.get_residual();
+ for (i = 0; i < residual.size(); i++)
+ pind[i] = residual[i];
+ }
+ else
+ for (i = 0; i < row_y*out_periods; i++)
+ pind[i] = y[i];
+ }
+ if (nlhs > 1)
+ {
+ if (evaluate)
+ {
+ int jacob_field_number = 0, jacob_exo_field_number = 0, jacob_exo_det_field_number = 0, jacob_other_endo_field_number = 0;
+ if (!block_structur)
{
- vector residual = interprete.get_residual();
- for (i = 0; i < residual.size(); i++)
- pind[i] = residual[i];
+ const char *field_names[] = {"g1", "g1_x", "g1_xd", "g1_o"};
+ jacob_field_number = 0;
+ jacob_exo_field_number = 1;
+ jacob_exo_det_field_number = 2;
+ jacob_other_endo_field_number = 3;
+ mwSize dims[1] = {static_cast(nb_blocks) };
+ plhs[1] = mxCreateStructArray(1, dims, 4, field_names);
+ }
+ else if (!mxIsStruct(block_structur))
+ {
+ plhs[1] = interprete.get_jacob(0);
+ //mexCallMATLAB(0,NULL, 1, &plhs[1], "disp");
+ dont_store_a_structure = true;
}
else
- for (i = 0; i < row_y*out_periods; i++)
- pind[i] = y[i];
- }
- if (nlhs > 2)
- {
- if (evaluate)
{
- int jacob_field_number = 0, jacob_exo_field_number = 0, jacob_exo_det_field_number = 0, jacob_other_endo_field_number = 0;
- if (!block_structur)
+ plhs[1] = block_structur;
+ jacob_field_number = mxAddField(plhs[1], "g1");
+ if (jacob_field_number == -1)
+ mexErrMsgTxt("Fatal error in bytecode: in main, cannot add extra field jacob to the structArray\n");
+ jacob_exo_field_number = mxAddField(plhs[1], "g1_x");
+ if (jacob_exo_field_number == -1)
+ mexErrMsgTxt("Fatal error in bytecode: in main, cannot add extra field jacob_exo to the structArray\n");
+ jacob_exo_det_field_number = mxAddField(plhs[1], "g1_xd");
+ if (jacob_exo_det_field_number == -1)
+ mexErrMsgTxt("Fatal error in bytecode: in main, cannot add extra field jacob_exo_det to the structArray\n");
+ jacob_other_endo_field_number = mxAddField(plhs[1], "g1_o");
+ if (jacob_other_endo_field_number == -1)
+ mexErrMsgTxt("Fatal error in bytecode: in main, cannot add extra field jacob_other_endo to the structArray\n");
+ }
+ if (!dont_store_a_structure)
+ {
+ for (int i = 0; i < nb_blocks; i++)
{
- const char *field_names[] = {"g1", "g1_x", "g1_xd", "g1_o"};
- jacob_field_number = 0;
- jacob_exo_field_number = 1;
- jacob_exo_det_field_number = 2;
- jacob_other_endo_field_number = 3;
- mwSize dims[1] = {static_cast(nb_blocks) };
- plhs[2] = mxCreateStructArray(1, dims, 4, field_names);
- }
- else if (!mxIsStruct(block_structur))
- {
- plhs[2] = interprete.get_jacob(0);
- //mexCallMATLAB(0,NULL, 1, &plhs[2], "disp");
- dont_store_a_structure = true;
- }
- else
- {
- plhs[2] = block_structur;
- jacob_field_number = mxAddField(plhs[2], "g1");
- if (jacob_field_number == -1)
- DYN_MEX_FUNC_ERR_MSG_TXT("Fatal error in bytecode: in main, cannot add extra field jacob to the structArray\n");
- jacob_exo_field_number = mxAddField(plhs[2], "g1_x");
- if (jacob_exo_field_number == -1)
- DYN_MEX_FUNC_ERR_MSG_TXT("Fatal error in bytecode: in main, cannot add extra field jacob_exo to the structArray\n");
- jacob_exo_det_field_number = mxAddField(plhs[2], "g1_xd");
- if (jacob_exo_det_field_number == -1)
- DYN_MEX_FUNC_ERR_MSG_TXT("Fatal error in bytecode: in main, cannot add extra field jacob_exo_det to the structArray\n");
- jacob_other_endo_field_number = mxAddField(plhs[2], "g1_o");
- if (jacob_other_endo_field_number == -1)
- DYN_MEX_FUNC_ERR_MSG_TXT("Fatal error in bytecode: in main, cannot add extra field jacob_other_endo to the structArray\n");
- }
- if (!dont_store_a_structure)
- {
- for (int i = 0; i < nb_blocks; i++)
+ mxSetFieldByNumber(plhs[1], i, jacob_field_number, interprete.get_jacob(i));
+ if (!steady_state)
{
- mxSetFieldByNumber(plhs[2], i, jacob_field_number, interprete.get_jacob(i));
- if (!steady_state)
- {
- mxSetFieldByNumber(plhs[2], i, jacob_exo_field_number, interprete.get_jacob_exo(i));
- mxSetFieldByNumber(plhs[2], i, jacob_exo_det_field_number, interprete.get_jacob_exo_det(i));
- mxSetFieldByNumber(plhs[2], i, jacob_other_endo_field_number, interprete.get_jacob_other_endo(i));
- }
+ mxSetFieldByNumber(plhs[1], i, jacob_exo_field_number, interprete.get_jacob_exo(i));
+ mxSetFieldByNumber(plhs[1], i, jacob_exo_det_field_number, interprete.get_jacob_exo_det(i));
+ mxSetFieldByNumber(plhs[1], i, jacob_other_endo_field_number, interprete.get_jacob_other_endo(i));
}
}
}
- else
+ }
+ else
+ {
+ plhs[1] = mxCreateDoubleMatrix(int (row_x), int (col_x), mxREAL);
+ pind = mxGetPr(plhs[1]);
+ for (i = 0; i < row_x*col_x; i++)
{
- plhs[2] = mxCreateDoubleMatrix(int (row_x), int (col_x), mxREAL);
- pind = mxGetPr(plhs[2]);
- for (i = 0; i < row_x*col_x; i++)
- {
- pind[i] = x[i];
- }
-
- }
- if (nlhs > 3)
- {
- plhs[3] = mxCreateDoubleMatrix(int (row_y), int (col_y), mxREAL);
- pind = mxGetPr(plhs[3]);
- for (i = 0; i < row_y*col_y; i++)
- pind[i] = y[i];
- if (nlhs > 4)
- {
- mxArray *GlobalTemporaryTerms = interprete.get_Temporary_Terms();
- size_t nb_temp_terms = mxGetM(GlobalTemporaryTerms);
- plhs[4] = mxCreateDoubleMatrix(int (nb_temp_terms), 1, mxREAL);
- pind = mxGetPr(plhs[4]);
- double *tt = mxGetPr(GlobalTemporaryTerms);
- for (i = 0; i < nb_temp_terms; i++)
- pind[i] = tt[i];
- }
+ pind[i] = x[i];
}
}
+ if (nlhs > 2)
+ {
+ plhs[2] = mxCreateDoubleMatrix(int (row_y), int (col_y), mxREAL);
+ pind = mxGetPr(plhs[2]);
+ for (i = 0; i < row_y*col_y; i++)
+ pind[i] = y[i];
+ if (nlhs > 3)
+ {
+ mxArray *GlobalTemporaryTerms = interprete.get_Temporary_Terms();
+ size_t nb_temp_terms = mxGetM(GlobalTemporaryTerms);
+ plhs[3] = mxCreateDoubleMatrix(int (nb_temp_terms), 1, mxREAL);
+ pind = mxGetPr(plhs[3]);
+ double *tt = mxGetPr(GlobalTemporaryTerms);
+ for (i = 0; i < nb_temp_terms; i++)
+ pind[i] = tt[i];
+ }
+ }
+
}
}
#else
diff --git a/mex/sources/bytecode/testing/mex_interface.hh b/mex/sources/bytecode/testing/mex_interface.hh
index 9e8989189..b8b0dbfb0 100644
--- a/mex/sources/bytecode/testing/mex_interface.hh
+++ b/mex/sources/bytecode/testing/mex_interface.hh
@@ -1,5 +1,5 @@
/*
- * Copyright © 2007-2017 Dynare Team
+ * Copyright © 2007-2020 Dynare Team
*
* This file is part of Dynare.
*
@@ -29,13 +29,6 @@
#include
using namespace std;
-#if !defined(DYN_MEX_FUNC_ERR_MSG_TXT)
-# define DYN_MEX_FUNC_ERR_MSG_TXT(str) \
- do { \
- mexPrintf("%s\n", str); \
- } while (0)
-#endif
-
typedef unsigned int mwIndex;
typedef unsigned int mwSize;
diff --git a/mex/sources/dynare_simul_/dynare_simul_.cc b/mex/sources/dynare_simul_/dynare_simul_.cc
index 58a639609..faaf146b0 100644
--- a/mex/sources/dynare_simul_/dynare_simul_.cc
+++ b/mex/sources/dynare_simul_/dynare_simul_.cc
@@ -1,6 +1,6 @@
/*
* Copyright © 2005-2011 Ondra Kamenik
- * Copyright © 2019 Dynare Team
+ * Copyright © 2019-2020 Dynare Team
*
* This file is part of Dynare.
*
@@ -51,8 +51,8 @@ extern "C" {
mexFunction(int nlhs, mxArray *plhs[],
int nhrs, const mxArray *prhs[])
{
- if (nhrs != 12 || nlhs != 2)
- DYN_MEX_FUNC_ERR_MSG_TXT("dynare_simul_ must have at exactly 12 input parameters and 2 output arguments.\n");
+ if (nhrs != 12 || nlhs != 1)
+ mexErrMsgTxt("dynare_simul_ must have at exactly 12 input parameters and 1 output argument.");
int order = static_cast(mxGetScalar(prhs[0]));
int nstat = static_cast(mxGetScalar(prhs[1]));
@@ -74,22 +74,22 @@ extern "C" {
int ny = nstat + npred + nboth + nforw;
if (ny != static_cast(ystart_dim[0]))
- DYN_MEX_FUNC_ERR_MSG_TXT("ystart has wrong number of rows.\n");
+ mexErrMsgTxt("ystart has wrong number of rows.\n");
if (1 != ystart_dim[1])
- DYN_MEX_FUNC_ERR_MSG_TXT("ystart has wrong number of cols.\n");
+ mexErrMsgTxt("ystart has wrong number of cols.\n");
int nper = shocks_dim[1];
if (nexog != static_cast(shocks_dim[0]))
- DYN_MEX_FUNC_ERR_MSG_TXT("shocks has a wrong number of rows.\n");
+ mexErrMsgTxt("shocks has a wrong number of rows.\n");
if (nexog != static_cast(vcov_dim[0]))
- DYN_MEX_FUNC_ERR_MSG_TXT("vcov has a wrong number of rows.\n");
+ mexErrMsgTxt("vcov has a wrong number of rows.\n");
if (nexog != static_cast(vcov_dim[1]))
- DYN_MEX_FUNC_ERR_MSG_TXT("vcov has a wrong number of cols.\n");
+ mexErrMsgTxt("vcov has a wrong number of cols.\n");
if (ny != static_cast(ysteady_dim[0]))
- DYN_MEX_FUNC_ERR_MSG_TXT("ysteady has wrong number of rows.\n");
+ mexErrMsgTxt("ysteady has wrong number of rows.\n");
if (1 != ysteady_dim[1])
- DYN_MEX_FUNC_ERR_MSG_TXT("ysteady has wrong number of cols.\n");
+ mexErrMsgTxt("ysteady has wrong number of cols.\n");
- plhs[1] = mxCreateDoubleMatrix(ny, nper, mxREAL);
+ plhs[0] = mxCreateDoubleMatrix(ny, nper, mxREAL);
try
{
@@ -102,13 +102,13 @@ extern "C" {
{
const mxArray *gk_m = mxGetField(dr, 0, ("g_" + std::to_string(dim)).c_str());
if (!gk_m)
- DYN_MEX_FUNC_ERR_MSG_TXT(("Can't find field `g_" + std::to_string(dim) + "' in structured passed as last argument").c_str());
+ mexErrMsgTxt(("Can't find field `g_" + std::to_string(dim) + "' in structured passed as last argument").c_str());
ConstTwoDMatrix gk(gk_m);
FFSTensor ft(ny, npred+nboth+nexog, dim);
if (ft.ncols() != gk.ncols())
- DYN_MEX_FUNC_ERR_MSG_TXT(("Wrong number of columns for folded tensor: got " + std::to_string(gk.ncols()) + " but i want " + std::to_string(ft.ncols()) + '\n').c_str());
+ mexErrMsgTxt(("Wrong number of columns for folded tensor: got " + std::to_string(gk.ncols()) + " but i want " + std::to_string(ft.ncols()) + '\n').c_str());
if (ft.nrows() != gk.nrows())
- DYN_MEX_FUNC_ERR_MSG_TXT(("Wrong number of rows for folded tensor: got " + std::to_string(gk.nrows()) + " but i want " + std::to_string(ft.nrows()) + '\n').c_str());
+ mexErrMsgTxt(("Wrong number of rows for folded tensor: got " + std::to_string(gk.nrows()) + " but i want " + std::to_string(ft.nrows()) + '\n').c_str());
ft.zeros();
ft.add(1.0, gk);
pol.insert(std::make_unique(ft));
@@ -123,21 +123,20 @@ extern "C" {
// simulate and copy the results
TwoDMatrix res_mat{dr.simulate(DecisionRule::emethod::horner, nper,
ConstVector{ystart}, sr)};
- TwoDMatrix res_tmp_mat{plhs[1]};
+ TwoDMatrix res_tmp_mat{plhs[0]};
res_tmp_mat = const_cast(res_mat);
}
catch (const KordException &e)
{
- DYN_MEX_FUNC_ERR_MSG_TXT("Caught Kord exception.");
+ mexErrMsgTxt("Caught Kord exception.");
}
catch (const TLException &e)
{
- DYN_MEX_FUNC_ERR_MSG_TXT("Caught TL exception.");
+ mexErrMsgTxt("Caught TL exception.");
}
catch (SylvException &e)
{
- DYN_MEX_FUNC_ERR_MSG_TXT("Caught Sylv exception.");
+ mexErrMsgTxt("Caught Sylv exception.");
}
- plhs[0] = mxCreateDoubleScalar(0);
}
};
diff --git a/mex/sources/dynmex.h b/mex/sources/dynmex.h
index 52a71bef5..4bb0ca739 100644
--- a/mex/sources/dynmex.h
+++ b/mex/sources/dynmex.h
@@ -1,5 +1,5 @@
/*
- * Copyright © 2009-2019 Dynare Team
+ * Copyright © 2009-2020 Dynare Team
*
* This file is part of Dynare.
*
@@ -26,20 +26,6 @@
#include
-/*
- * Fix for trac ticket Ticket #137
- */
-#if !defined(DYN_MEX_FUNC_ERR_MSG_TXT)
-# define DYN_MEX_FUNC_ERR_MSG_TXT(str) \
- do { \
- mexPrintf("%s\n", str); \
- int i; \
- for (i = 0; i < nlhs; i++) \
- plhs[i] = mxCreateDoubleScalar(1); \
- return; \
- } while (0)
-#endif
-
#if defined(MATLAB_MEX_FILE) && MATLAB_VERSION < 0x0805
# define mxIsScalar(x) (mxGetM(x) == 1 && mxGetN(x) == 1)
#endif
diff --git a/mex/sources/gensylv/gensylv.cc b/mex/sources/gensylv/gensylv.cc
index 15a980ce7..c71f295f9 100644
--- a/mex/sources/gensylv/gensylv.cc
+++ b/mex/sources/gensylv/gensylv.cc
@@ -1,6 +1,6 @@
/*
* Copyright © 2005-2011 Ondra Kamenik
- * Copyright © 2019 Dynare Team
+ * Copyright © 2019-2020 Dynare Team
*
* This file is part of Dynare.
*
@@ -51,8 +51,8 @@ extern "C" {
mexFunction(int nlhs, mxArray *plhs[],
int nhrs, const mxArray *prhs[])
{
- if (nhrs != 5 || nlhs > 3 || nlhs < 2)
- DYN_MEX_FUNC_ERR_MSG_TXT("Gensylv: Must have exactly 5 input args and either 2 or 3 output args.");
+ if (nhrs != 5 || nlhs > 2 || nlhs < 1)
+ mexErrMsgTxt("Gensylv: Must have exactly 5 input args and either 1 or 2 output args.");
auto order = static_cast(mxGetScalar(prhs[0]));
const mxArray *const A = prhs[1];
@@ -65,17 +65,17 @@ extern "C" {
const mwSize *const Ddims = mxGetDimensions(D);
if (Adims[0] != Adims[1])
- DYN_MEX_FUNC_ERR_MSG_TXT("Matrix A must be a square matrix.");
+ mexErrMsgTxt("Matrix A must be a square matrix.");
if (Adims[0] != Bdims[0])
- DYN_MEX_FUNC_ERR_MSG_TXT("Matrix A and matrix B must have the same number of rows.");
+ mexErrMsgTxt("Matrix A and matrix B must have the same number of rows.");
if (Adims[0] != Ddims[0])
- DYN_MEX_FUNC_ERR_MSG_TXT("Matrix A and matrix B must have the same number of rows.");
+ mexErrMsgTxt("Matrix A and matrix B must have the same number of rows.");
if (Cdims[0] != Cdims[1])
- DYN_MEX_FUNC_ERR_MSG_TXT("Matrix C must be square.");
+ mexErrMsgTxt("Matrix C must be square.");
if (Bdims[0] < Bdims[1])
- DYN_MEX_FUNC_ERR_MSG_TXT("Matrix B must not have more columns than rows.");
+ mexErrMsgTxt("Matrix B must not have more columns than rows.");
if (Ddims[1] != static_cast(power(Cdims[0], order)))
- DYN_MEX_FUNC_ERR_MSG_TXT("Matrix D has wrong number of columns.");
+ mexErrMsgTxt("Matrix D has wrong number of columns.");
auto n = static_cast(Adims[0]);
auto m = static_cast(Cdims[0]);
@@ -88,16 +88,15 @@ extern "C" {
// solve (or solve and check)
try
{
- if (nlhs == 2)
+ if (nlhs == 1)
gen_sylv_solve(order, n, m, zero_cols, Avec, Bvec, Cvec, Xvec);
- else if (nlhs == 3)
- plhs[2] = gen_sylv_solve_and_check(order, n, m, zero_cols, Avec, Bvec, Cvec, Dvec, Xvec);
+ else if (nlhs == 2)
+ plhs[1] = gen_sylv_solve_and_check(order, n, m, zero_cols, Avec, Bvec, Cvec, Dvec, Xvec);
}
catch (const SylvException &e)
{
- DYN_MEX_FUNC_ERR_MSG_TXT(e.getMessage().c_str());
+ mexErrMsgTxt(e.getMessage().c_str());
}
- plhs[1] = X;
- plhs[0] = mxCreateDoubleScalar(0);
+ plhs[0] = X;
}
};
diff --git a/mex/sources/k_order_perturbation/k_order_perturbation.cc b/mex/sources/k_order_perturbation/k_order_perturbation.cc
index 0a44e8206..4ae1151db 100644
--- a/mex/sources/k_order_perturbation/k_order_perturbation.cc
+++ b/mex/sources/k_order_perturbation/k_order_perturbation.cc
@@ -1,5 +1,5 @@
/*
- * Copyright © 2008-2019 Dynare Team
+ * Copyright © 2008-2020 Dynare Team
*
* This file is part of Dynare.
*
@@ -82,8 +82,8 @@ extern "C" {
mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
- if (nrhs < 3 || nlhs < 2 || nlhs > 3)
- DYN_MEX_FUNC_ERR_MSG_TXT("Must have at least 3 input parameters and takes 2 or 3 output parameters.");
+ if (nrhs < 3 || nlhs < 1 || nlhs > 2)
+ mexErrMsgTxt("Must have at least 3 input parameters and takes 1 or 2 output parameters.");
// Give explicit names to input arguments
const mxArray *dr_mx = prhs[0];
@@ -101,11 +101,11 @@ extern "C" {
// Extract various fields from options_
const int kOrder = get_int_field(options_mx, "order");
if (kOrder < 1)
- DYN_MEX_FUNC_ERR_MSG_TXT("options_.order must be at least 1");
+ mexErrMsgTxt("options_.order must be at least 1");
const mxArray *use_dll_mx = mxGetField(options_mx, 0, "use_dll");
if (!(use_dll_mx && mxIsLogicalScalar(use_dll_mx)))
- DYN_MEX_FUNC_ERR_MSG_TXT("options_.use_dll should be a logical scalar");
+ mexErrMsgTxt("options_.use_dll should be a logical scalar");
bool use_dll = static_cast(mxGetScalar(use_dll_mx));
double qz_criterium = 1+1e-6;
@@ -115,31 +115,31 @@ extern "C" {
const mxArray *threads_mx = mxGetField(options_mx, 0, "threads");
if (!threads_mx)
- DYN_MEX_FUNC_ERR_MSG_TXT("Can't find field options_.threads");
+ mexErrMsgTxt("Can't find field options_.threads");
const mxArray *num_threads_mx = mxGetField(threads_mx, 0, "k_order_perturbation");
if (!(num_threads_mx && mxIsScalar(num_threads_mx) && mxIsNumeric(num_threads_mx)))
- DYN_MEX_FUNC_ERR_MSG_TXT("options_.threads.k_order_perturbation be a numeric scalar");
+ mexErrMsgTxt("options_.threads.k_order_perturbation be a numeric scalar");
int num_threads = static_cast(mxGetScalar(num_threads_mx));
// Extract various fields from M_
const mxArray *fname_mx = mxGetField(M_mx, 0, "fname");
if (!(fname_mx && mxIsChar(fname_mx) && mxGetM(fname_mx) == 1))
- DYN_MEX_FUNC_ERR_MSG_TXT("M_.fname should be a character string");
+ mexErrMsgTxt("M_.fname should be a character string");
std::string fname{mxArrayToString(fname_mx)};
const mxArray *params_mx = mxGetField(M_mx, 0, "params");
if (!(params_mx && mxIsDouble(params_mx)))
- DYN_MEX_FUNC_ERR_MSG_TXT("M_.params should be a double precision array");
+ mexErrMsgTxt("M_.params should be a double precision array");
Vector modParams{ConstVector{params_mx}};
if (!modParams.isFinite())
- DYN_MEX_FUNC_ERR_MSG_TXT("M_.params contains NaN or Inf");
+ mexErrMsgTxt("M_.params contains NaN or Inf");
const mxArray *sigma_e_mx = mxGetField(M_mx, 0, "Sigma_e");
if (!(sigma_e_mx && mxIsDouble(sigma_e_mx) && mxGetM(sigma_e_mx) == mxGetN(sigma_e_mx)))
- DYN_MEX_FUNC_ERR_MSG_TXT("M_.Sigma_e should be a double precision square matrix");
+ mexErrMsgTxt("M_.Sigma_e should be a double precision square matrix");
TwoDMatrix vCov{ConstTwoDMatrix{sigma_e_mx}};
if (!vCov.isFinite())
- DYN_MEX_FUNC_ERR_MSG_TXT("M_.Sigma_e contains NaN or Inf");
+ mexErrMsgTxt("M_.Sigma_e contains NaN or Inf");
const int nStat = get_int_field(M_mx, "nstatic");
const int nPred = get_int_field(M_mx, "npred");
@@ -153,42 +153,42 @@ extern "C" {
const mxArray *lead_lag_incidence_mx = mxGetField(M_mx, 0, "lead_lag_incidence");
if (!(lead_lag_incidence_mx && mxIsDouble(lead_lag_incidence_mx) && mxGetM(lead_lag_incidence_mx) == 3
&& mxGetN(lead_lag_incidence_mx) == static_cast(nEndo)))
- DYN_MEX_FUNC_ERR_MSG_TXT("M_.lead_lag_incidence should be a double precision matrix with 3 rows and M_.endo_nbr columns");
+ mexErrMsgTxt("M_.lead_lag_incidence should be a double precision matrix with 3 rows and M_.endo_nbr columns");
ConstTwoDMatrix llincidence{lead_lag_incidence_mx};
const mxArray *nnzderivatives_mx = mxGetField(M_mx, 0, "NNZDerivatives");
if (!(nnzderivatives_mx && mxIsDouble(nnzderivatives_mx)))
- DYN_MEX_FUNC_ERR_MSG_TXT("M_.NNZDerivatives should be a double precision array");
+ mexErrMsgTxt("M_.NNZDerivatives should be a double precision array");
ConstVector NNZD{nnzderivatives_mx};
if (NNZD.length() < kOrder || NNZD[kOrder-1] == -1)
- DYN_MEX_FUNC_ERR_MSG_TXT("The derivatives were not computed for the required order. Make sure that you used the right order option inside the `stoch_simul' command");
+ mexErrMsgTxt("The derivatives were not computed for the required order. Make sure that you used the right order option inside the `stoch_simul' command");
const mxArray *endo_names_mx = mxGetField(M_mx, 0, "endo_names");
if (!(endo_names_mx && mxIsCell(endo_names_mx) && mxGetNumberOfElements(endo_names_mx) == static_cast(nEndo)))
- DYN_MEX_FUNC_ERR_MSG_TXT("M_.endo_names should be a cell array of M_.endo_nbr elements");
+ mexErrMsgTxt("M_.endo_names should be a cell array of M_.endo_nbr elements");
std::vector endoNames = DynareMxArrayToString(endo_names_mx);
const mxArray *exo_names_mx = mxGetField(M_mx, 0, "exo_names");
if (!(exo_names_mx && mxIsCell(exo_names_mx) && mxGetNumberOfElements(exo_names_mx) == static_cast(nExog)))
- DYN_MEX_FUNC_ERR_MSG_TXT("M_.exo_names should be a cell array of M_.exo_nbr elements");
+ mexErrMsgTxt("M_.exo_names should be a cell array of M_.exo_nbr elements");
std::vector exoNames = DynareMxArrayToString(exo_names_mx);
const mxArray *dynamic_tmp_nbr_mx = mxGetField(M_mx, 0, "dynamic_tmp_nbr");
if (!(dynamic_tmp_nbr_mx && mxIsDouble(dynamic_tmp_nbr_mx) && mxGetNumberOfElements(dynamic_tmp_nbr_mx) >= static_cast(kOrder+1)))
- DYN_MEX_FUNC_ERR_MSG_TXT("M_.dynamic_tmp_nbr should be a double precision array with strictly more elements than the order of derivation");
+ mexErrMsgTxt("M_.dynamic_tmp_nbr should be a double precision array with strictly more elements than the order of derivation");
int ntt = std::accumulate(mxGetPr(dynamic_tmp_nbr_mx), mxGetPr(dynamic_tmp_nbr_mx)+kOrder+1, 0);
// Extract various fields from dr
const mxArray *ys_mx = mxGetField(dr_mx, 0, "ys"); // and not in order of dr.order_var
if (!(ys_mx && mxIsDouble(ys_mx)))
- DYN_MEX_FUNC_ERR_MSG_TXT("dr.ys should be a double precision array");
+ mexErrMsgTxt("dr.ys should be a double precision array");
Vector ySteady{ConstVector{ys_mx}};
if (!ySteady.isFinite())
- DYN_MEX_FUNC_ERR_MSG_TXT("dr.ys contains NaN or Inf");
+ mexErrMsgTxt("dr.ys contains NaN or Inf");
const mxArray *order_var_mx = mxGetField(dr_mx, 0, "order_var");
if (!(order_var_mx && mxIsDouble(order_var_mx) && mxGetNumberOfElements(order_var_mx) == static_cast(nEndo)))
- DYN_MEX_FUNC_ERR_MSG_TXT("dr.order_var should be a double precision array of M_.endo_nbr elements");
+ mexErrMsgTxt("dr.order_var should be a double precision array of M_.endo_nbr elements");
std::vector dr_order(nEndo);
std::transform(mxGetPr(order_var_mx), mxGetPr(order_var_mx)+nEndo, dr_order.begin(),
[](double x) { return static_cast(x)-1; });
@@ -241,7 +241,7 @@ extern "C" {
const char *g_fieldnames_c[kOrder+1];
for (int i = 0; i <= kOrder; i++)
g_fieldnames_c[i] = g_fieldnames[i].c_str();
- plhs[1] = mxCreateStructMatrix(1, 1, kOrder+1, g_fieldnames_c);
+ plhs[0] = mxCreateStructMatrix(1, 1, kOrder+1, g_fieldnames_c);
// Fill that structure
for (int i = 0; i <= kOrder; i++)
@@ -251,10 +251,10 @@ extern "C" {
const ConstVector &vec = t.getData();
assert(vec.skip() == 1);
std::copy_n(vec.base(), vec.length(), mxGetPr(tmp));
- mxSetField(plhs[1], 0, ("g_" + std::to_string(i)).c_str(), tmp);
+ mxSetField(plhs[0], 0, ("g_" + std::to_string(i)).c_str(), tmp);
}
- if (nlhs > 2)
+ if (nlhs > 1)
{
/* Return as 3rd argument a struct containing derivatives in Dynare
format (unfolded matrices, without Taylor coefficient) up to 3rd
@@ -264,51 +264,50 @@ extern "C" {
size_t nfields = (kOrder == 1 ? 2 : (kOrder == 2 ? 6 : 12));
const char *c_fieldnames[] = { "gy", "gu", "gyy", "gyu", "guu", "gss",
"gyyy", "gyyu", "gyuu", "guuu", "gyss", "guss" };
- plhs[2] = mxCreateStructMatrix(1, 1, nfields, c_fieldnames);
+ plhs[1] = mxCreateStructMatrix(1, 1, nfields, c_fieldnames);
- copy_derivatives(plhs[2], Symmetry{1, 0, 0, 0}, derivs, "gy");
- copy_derivatives(plhs[2], Symmetry{0, 1, 0, 0}, derivs, "gu");
+ copy_derivatives(plhs[1], Symmetry{1, 0, 0, 0}, derivs, "gy");
+ copy_derivatives(plhs[1], Symmetry{0, 1, 0, 0}, derivs, "gu");
if (kOrder >= 2)
{
- copy_derivatives(plhs[2], Symmetry{2, 0, 0, 0}, derivs, "gyy");
- copy_derivatives(plhs[2], Symmetry{0, 2, 0, 0}, derivs, "guu");
- copy_derivatives(plhs[2], Symmetry{1, 1, 0, 0}, derivs, "gyu");
- copy_derivatives(plhs[2], Symmetry{0, 0, 0, 2}, derivs, "gss");
+ copy_derivatives(plhs[1], Symmetry{2, 0, 0, 0}, derivs, "gyy");
+ copy_derivatives(plhs[1], Symmetry{0, 2, 0, 0}, derivs, "guu");
+ copy_derivatives(plhs[1], Symmetry{1, 1, 0, 0}, derivs, "gyu");
+ copy_derivatives(plhs[1], Symmetry{0, 0, 0, 2}, derivs, "gss");
}
if (kOrder >= 3)
{
- copy_derivatives(plhs[2], Symmetry{3, 0, 0, 0}, derivs, "gyyy");
- copy_derivatives(plhs[2], Symmetry{0, 3, 0, 0}, derivs, "guuu");
- copy_derivatives(plhs[2], Symmetry{2, 1, 0, 0}, derivs, "gyyu");
- copy_derivatives(plhs[2], Symmetry{1, 2, 0, 0}, derivs, "gyuu");
- copy_derivatives(plhs[2], Symmetry{1, 0, 0, 2}, derivs, "gyss");
- copy_derivatives(plhs[2], Symmetry{0, 1, 0, 2}, derivs, "guss");
+ copy_derivatives(plhs[1], Symmetry{3, 0, 0, 0}, derivs, "gyyy");
+ copy_derivatives(plhs[1], Symmetry{0, 3, 0, 0}, derivs, "guuu");
+ copy_derivatives(plhs[1], Symmetry{2, 1, 0, 0}, derivs, "gyyu");
+ copy_derivatives(plhs[1], Symmetry{1, 2, 0, 0}, derivs, "gyuu");
+ copy_derivatives(plhs[1], Symmetry{1, 0, 0, 2}, derivs, "gyss");
+ copy_derivatives(plhs[1], Symmetry{0, 1, 0, 2}, derivs, "guss");
}
}
}
catch (const KordException &e)
{
e.print();
- DYN_MEX_FUNC_ERR_MSG_TXT(("dynare:k_order_perturbation: Caught Kord exception: " + e.get_message()).c_str());
+ mexErrMsgTxt(("dynare:k_order_perturbation: Caught Kord exception: " + e.get_message()).c_str());
}
catch (const TLException &e)
{
e.print();
- DYN_MEX_FUNC_ERR_MSG_TXT("dynare:k_order_perturbation: Caught TL exception");
+ mexErrMsgTxt("dynare:k_order_perturbation: Caught TL exception");
}
catch (SylvException &e)
{
e.printMessage();
- DYN_MEX_FUNC_ERR_MSG_TXT("dynare:k_order_perturbation: Caught Sylv exception");
+ mexErrMsgTxt("dynare:k_order_perturbation: Caught Sylv exception");
}
catch (const DynareException &e)
{
- DYN_MEX_FUNC_ERR_MSG_TXT(("dynare:k_order_perturbation: Caught KordDynare exception: " + e.message()).c_str());
+ mexErrMsgTxt(("dynare:k_order_perturbation: Caught KordDynare exception: " + e.message()).c_str());
}
catch (const ogu::Exception &e)
{
- DYN_MEX_FUNC_ERR_MSG_TXT(("dynare:k_order_perturbation: Caught general exception: " + e.message()).c_str());
+ mexErrMsgTxt(("dynare:k_order_perturbation: Caught general exception: " + e.message()).c_str());
}
- plhs[0] = mxCreateDoubleScalar(0);
} // end of mexFunction()
} // end of extern C
diff --git a/mex/sources/kalman_steady_state/kalman_steady_state.cc b/mex/sources/kalman_steady_state/kalman_steady_state.cc
index 0a0db3181..14b61015b 100644
--- a/mex/sources/kalman_steady_state/kalman_steady_state.cc
+++ b/mex/sources/kalman_steady_state/kalman_steady_state.cc
@@ -1,5 +1,5 @@
/*
- * Copyright © 2009-2019 Dynare Team.
+ * Copyright © 2009-2020 Dynare Team.
*
* This file is part of Dynare.
*
@@ -76,10 +76,10 @@ mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
// Check the number of arguments and set some flags.
bool measurement_error_flag = true;
if (nrhs < 3 || 4 < nrhs)
- DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state accepts either 3 or 4 input arguments!");
+ mexErrMsgTxt("kalman_steady_state accepts either 3 or 4 input arguments!");
- if (nlhs < 1 || 2 < nlhs)
- DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state requires at least 1, but no more than 2, output arguments!");
+ if (nlhs != 1)
+ mexErrMsgTxt("kalman_steady_state accepts exactly one output argument!");
if (nrhs == 3)
measurement_error_flag = false;
@@ -87,30 +87,30 @@ mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
// Check the type of the input arguments and get the size of the matrices.
lapack_int n = mxGetM(prhs[0]);
if (static_cast(n) != mxGetN(prhs[0]))
- DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The first input argument (T) must be a square matrix!");
+ mexErrMsgTxt("kalman_steady_state: The first input argument (T) must be a square matrix!");
if (mxIsNumeric(prhs[0]) == 0 || mxIsComplex(prhs[0]) == 1)
- DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The first input argument (T) must be a real matrix!");
+ mexErrMsgTxt("kalman_steady_state: The first input argument (T) must be a real matrix!");
lapack_int q = mxGetM(prhs[1]);
if (static_cast(q) != mxGetN(prhs[1]))
- DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The second input argument (QQ) must be a square matrix!");
+ mexErrMsgTxt("kalman_steady_state: The second input argument (QQ) must be a square matrix!");
if (mxIsNumeric(prhs[1]) == 0 || mxIsComplex(prhs[1]) == 1)
- DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The second input argument (QQ) must be a real matrix!");
+ mexErrMsgTxt("kalman_steady_state: The second input argument (QQ) must be a real matrix!");
if (q != n)
- DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The size of the second input argument (QQ) must match the size of the first argument (T)!");
+ mexErrMsgTxt("kalman_steady_state: The size of the second input argument (QQ) must match the size of the first argument (T)!");
lapack_int p = mxGetN(prhs[2]);
if (mxGetM(prhs[2]) != static_cast(n))
- DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The number of rows of the third argument (Z) must match the number of rows of the first argument (T)!");
+ mexErrMsgTxt("kalman_steady_state: The number of rows of the third argument (Z) must match the number of rows of the first argument (T)!");
if (mxIsNumeric(prhs[2]) == 0 || mxIsComplex(prhs[2]) == 1)
- DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The third input argument (Z) must be a real matrix!");
+ mexErrMsgTxt("kalman_steady_state: The third input argument (Z) must be a real matrix!");
if (measurement_error_flag)
{
if (mxGetM(prhs[3]) != mxGetN(prhs[3]))
- DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The fourth input argument (H) must be a square matrix!");
+ mexErrMsgTxt("kalman_steady_state: The fourth input argument (H) must be a square matrix!");
if (mxGetM(prhs[3]) != static_cast(p))
- DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The number of rows of the fourth input argument (H) must match the number of rows of the third input argument!");
+ mexErrMsgTxt("kalman_steady_state: The number of rows of the fourth input argument (H) must match the number of rows of the third input argument!");
if (mxIsNumeric(prhs[3]) == 0 || mxIsComplex(prhs[3]) == 1)
- DYN_MEX_FUNC_ERR_MSG_TXT("kalman_steady_state: The fifth input argument (H) must be a real matrix!");
+ mexErrMsgTxt("kalman_steady_state: The fifth input argument (H) must be a real matrix!");
}
// Get input matrices.
const double *T = mxGetPr(prhs[0]);
@@ -147,8 +147,8 @@ mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
auto DWORK = std::make_unique(LDWORK);
auto BWORK = std::make_unique(nn);
// Initialize the output of the mex file
- plhs[1] = mxCreateDoubleMatrix(n, n, mxREAL);
- double *P = mxGetPr(plhs[1]);
+ plhs[0] = mxCreateDoubleMatrix(n, n, mxREAL);
+ double *P = mxGetPr(plhs[0]);
// Call the slicot routine
sb02od("D", // We want to solve a discrete Riccati equation.
"B", // Matrices Z and H are given.
@@ -164,25 +164,24 @@ mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
case 0:
break;
case 1:
- DYN_MEX_FUNC_ERR_MSG_TXT("The computed extended matrix pencil is singular, possibly due to rounding errors.\n");
+ mexErrMsgTxt("The computed extended matrix pencil is singular, possibly due to rounding errors.");
break;
case 2:
- DYN_MEX_FUNC_ERR_MSG_TXT("The QZ (or QR) algorithm failed!\n");
+ mexErrMsgTxt("The QZ (or QR) algorithm failed!");
break;
case 3:
- DYN_MEX_FUNC_ERR_MSG_TXT("The reordering of the (generalized) eigenvalues failed!\n");
+ mexErrMsgTxt("The reordering of the (generalized) eigenvalues failed!");
break;
case 4:
- DYN_MEX_FUNC_ERR_MSG_TXT("After reordering, roundoff changed values of some complex eigenvalues so that leading eigenvalues\n in the (generalized) Schur form no longer satisfy the stability condition; this could also be caused due to scaling.");
+ mexErrMsgTxt("After reordering, roundoff changed values of some complex eigenvalues so that leading eigenvalues\n in the (generalized) Schur form no longer satisfy the stability condition; this could also be caused due to scaling.");
break;
case 5:
- DYN_MEX_FUNC_ERR_MSG_TXT("The computed dimension of the solution does not equal n!\n");
+ mexErrMsgTxt("The computed dimension of the solution does not equal n!");
break;
case 6:
- DYN_MEX_FUNC_ERR_MSG_TXT("A singular matrix was encountered during the computation of the solution matrix P!\n");
+ mexErrMsgTxt("A singular matrix was encountered during the computation of the solution matrix P!");
break;
default:
- DYN_MEX_FUNC_ERR_MSG_TXT("Unknown problem!\n");
+ mexErrMsgTxt("Unknown problem!");
}
- plhs[0] = mxCreateDoubleScalar(0);
}
diff --git a/mex/sources/kronecker/A_times_B_kronecker_C.cc b/mex/sources/kronecker/A_times_B_kronecker_C.cc
index 071122e3f..95d0f7268 100644
--- a/mex/sources/kronecker/A_times_B_kronecker_C.cc
+++ b/mex/sources/kronecker/A_times_B_kronecker_C.cc
@@ -1,5 +1,5 @@
/*
- * Copyright © 2007-2019 Dynare Team
+ * Copyright © 2007-2020 Dynare Team
*
* This file is part of Dynare.
*
@@ -68,8 +68,11 @@ void
mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
// Check input and output:
- if (nrhs > 3 || nrhs < 2)
- DYN_MEX_FUNC_ERR_MSG_TXT("A_times_B_kronecker_C takes 2 or 3 input arguments and provides 2 output arguments.");
+ if (nrhs > 3 || nrhs < 2 || nlhs != 1)
+ {
+ mexErrMsgTxt("A_times_B_kronecker_C takes 2 or 3 input arguments and provides 1 output argument.");
+ return; // Needed to shut up some GCC warnings
+ }
// Get & Check dimensions (columns and rows):
size_t mA = mxGetM(prhs[0]);
@@ -82,12 +85,12 @@ mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
mC = mxGetM(prhs[2]);
nC = mxGetN(prhs[2]);
if (mB*mC != nA)
- DYN_MEX_FUNC_ERR_MSG_TXT("Input dimension error!");
+ mexErrMsgTxt("Input dimension error!");
}
else // A·(B⊗B) is to be computed.
{
if (mB*mB != nA)
- DYN_MEX_FUNC_ERR_MSG_TXT("Input dimension error!");
+ mexErrMsgTxt("Input dimension error!");
}
// Get input matrices:
const double *A = mxGetPr(prhs[0]);
@@ -108,6 +111,4 @@ mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
full_A_times_kronecker_B_B(A, B, D, mA, nA, mB, nB);
else
full_A_times_kronecker_B_C(A, B, C, D, mA, nA, mB, nB, mC, nC);
-
- plhs[1] = mxCreateDoubleScalar(0);
}
diff --git a/mex/sources/kronecker/sparse_hessian_times_B_kronecker_C.cc b/mex/sources/kronecker/sparse_hessian_times_B_kronecker_C.cc
index 93265998c..5eaa7eee5 100644
--- a/mex/sources/kronecker/sparse_hessian_times_B_kronecker_C.cc
+++ b/mex/sources/kronecker/sparse_hessian_times_B_kronecker_C.cc
@@ -1,5 +1,5 @@
/*
- * Copyright © 2007-2019 Dynare Team
+ * Copyright © 2007-2020 Dynare Team
*
* This file is part of Dynare.
*
@@ -135,11 +135,14 @@ void
mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
// Check input and output:
- if (nrhs > 4 || nrhs < 3)
- DYN_MEX_FUNC_ERR_MSG_TXT("sparse_hessian_times_B_kronecker_C takes 3 or 4 input arguments and provides 2 output arguments.");
+ if (nrhs > 4 || nrhs < 3 || nlhs != 1)
+ {
+ mexErrMsgTxt("sparse_hessian_times_B_kronecker_C takes 3 or 4 input arguments and provides 1 output argument.");
+ return; // Needed to shut up some GCC warnings
+ }
if (!mxIsSparse(prhs[0]))
- DYN_MEX_FUNC_ERR_MSG_TXT("sparse_hessian_times_B_kronecker_C: First input must be a sparse (dynare) hessian matrix.");
+ mexErrMsgTxt("sparse_hessian_times_B_kronecker_C: First input must be a sparse (dynare) hessian matrix.");
// Get & Check dimensions (columns and rows):
size_t mA = mxGetM(prhs[0]);
@@ -152,12 +155,12 @@ mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
mC = mxGetM(prhs[2]);
nC = mxGetN(prhs[2]);
if (mB*mC != nA)
- DYN_MEX_FUNC_ERR_MSG_TXT("Input dimension error!");
+ mexErrMsgTxt("Input dimension error!");
}
else // A·(B⊗B) is to be computed.
{
if (mB*mB != nA)
- DYN_MEX_FUNC_ERR_MSG_TXT("Input dimension error!");
+ mexErrMsgTxt("Input dimension error!");
}
// Get input matrices:
int numthreads;
@@ -185,6 +188,4 @@ mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
sparse_hessian_times_B_kronecker_B(isparseA, jsparseA, vsparseA, B, D, mA, nA, mB, nB, numthreads);
else
sparse_hessian_times_B_kronecker_C(isparseA, jsparseA, vsparseA, B, C, D, mA, nA, mB, nB, mC, nC, numthreads);
-
- plhs[1] = mxCreateDoubleScalar(0);
}
diff --git a/mex/sources/mjdgges/mjdgges.F08 b/mex/sources/mjdgges/mjdgges.F08
index dbc5da9d1..5209c01d1 100644
--- a/mex/sources/mjdgges/mjdgges.F08
+++ b/mex/sources/mjdgges/mjdgges.F08
@@ -60,8 +60,8 @@ subroutine mexFunction(nlhs, plhs, nrhs, prhs) bind(c, name='mexFunction')
real(real64), dimension(:), allocatable, target :: vsl_target
#endif
- if (nrhs < 2 .or. nrhs > 4 .or. nlhs /= 7) then
- call mexErrMsgTxt("MJDGGES: takes 2, 3 or 4 input arguments and exactly 7 output arguments.")
+ if (nrhs < 2 .or. nrhs > 4 .or. nlhs /= 6) then
+ call mexErrMsgTxt("MJDGGES: takes 2, 3 or 4 input arguments and exactly 6 output arguments.")
return
end if
@@ -95,24 +95,24 @@ subroutine mexFunction(nlhs, plhs, nrhs, prhs) bind(c, name='mexFunction')
zhreshold = 1e-6_real64
end if
+ plhs(1) = mxCreateDoubleMatrix(n1, n1, mxREAL)
plhs(2) = mxCreateDoubleMatrix(n1, n1, mxREAL)
plhs(3) = mxCreateDoubleMatrix(n1, n1, mxREAL)
- plhs(4) = mxCreateDoubleMatrix(n1, n1, mxREAL)
- plhs(5) = mxCreateDoubleMatrix(1_mwSize, 1_mwSize, mxREAL)
- plhs(6) = mxCreateDoubleMatrix(n1, 1_mwSize, mxCOMPLEX)
- plhs(7) = mxCreateDoubleMatrix(1_mwSize, 1_mwSize, mxREAL)
+ plhs(4) = mxCreateDoubleMatrix(1_mwSize, 1_mwSize, mxREAL)
+ plhs(5) = mxCreateDoubleMatrix(n1, 1_mwSize, mxCOMPLEX)
+ plhs(6) = mxCreateDoubleMatrix(1_mwSize, 1_mwSize, mxREAL)
- s => mxGetPr(plhs(2))
- t => mxGetPr(plhs(3))
- sdim => mxGetPr(plhs(5))
+ s => mxGetPr(plhs(1))
+ t => mxGetPr(plhs(2))
+ sdim => mxGetPr(plhs(4))
#if MX_HAS_INTERLEAVED_COMPLEX
- gev => mxGetComplexDoubles(plhs(6))
+ gev => mxGetComplexDoubles(plhs(5))
#else
- gev_r => mxGetPr(plhs(6))
- gev_i => mxGetPi(plhs(6))
+ gev_r => mxGetPr(plhs(5))
+ gev_i => mxGetPi(plhs(5))
#endif
- info => mxGetPr(plhs(7))
- z => mxGetPr(plhs(4))
+ info => mxGetPr(plhs(6))
+ z => mxGetPr(plhs(3))
#if defined(MATLAB_MEX_FILE) && MATLAB_VERSION < 0x0904
! The left Schur vectors (VSL) are normally not computed, since JOBVSL="N".
! But old MKL versions (at least the one shipped with MATLAB R2009b/7.9,
@@ -162,6 +162,4 @@ subroutine mexFunction(nlhs, plhs, nrhs, prhs) bind(c, name='mexFunction')
! error number (only if no other error)
if (any(abs(alpha_r) <= zhreshold .and. abs(beta) <= zhreshold) .and. info_bl == 0) &
info = 30
-
- plhs(1) = mxCreateDoubleScalar(0._real64)
end subroutine mexFunction
diff --git a/mex/sources/ms-sbvar/mex_top_level.cc b/mex/sources/ms-sbvar/mex_top_level.cc
index e4060c2be..cee4610d1 100644
--- a/mex/sources/ms-sbvar/mex_top_level.cc
+++ b/mex/sources/ms-sbvar/mex_top_level.cc
@@ -1,5 +1,5 @@
/*
- * Copyright © 2010-2017 Dynare Team
+ * Copyright © 2010-2020 Dynare Team
*
* This file is part of Dynare.
*
@@ -42,8 +42,8 @@ mexFunction(int nlhs, mxArray *plhs[],
/*
* Check args
*/
- if (nrhs != 1 || !mxIsChar(prhs[0]) || nlhs != 1)
- DYN_MEX_FUNC_ERR_MSG_TXT("Error in MS-SBVAR MEX file: this function takes 1 string input argument and returns 1 output argument.");
+ if (nrhs != 1 || !mxIsChar(prhs[0]) || nlhs != 0)
+ mexErrMsgTxt("Error in MS-SBVAR MEX file: this function takes 1 string input argument and returns no output argument.");
/*
* Allocate memory
@@ -52,24 +52,24 @@ mexFunction(int nlhs, mxArray *plhs[],
argument = static_cast(mxCalloc(mxGetN(prhs[0])+1, sizeof(char)));
args = static_cast(mxCalloc(maxnargs, sizeof(char *)));
if (argument == NULL || args == NULL)
- DYN_MEX_FUNC_ERR_MSG_TXT("Error in MS-SBVAR MEX file: could not allocate memory. (1)");
+ mexErrMsgTxt("Error in MS-SBVAR MEX file: could not allocate memory. (1)");
/*
* Create argument string from prhs and parse to create args / nargs
*/
if (!(args[nargs] = static_cast(mxCalloc(strlen(mainarg)+1, sizeof(char)))))
- DYN_MEX_FUNC_ERR_MSG_TXT("Error in MS-SBVAR MEX file: could not allocate memory. (2)");
+ mexErrMsgTxt("Error in MS-SBVAR MEX file: could not allocate memory. (2)");
strncpy(args[nargs++], mainarg, strlen(mainarg));
if (mxGetString(prhs[0], argument, mxGetN(prhs[0])+1))
- DYN_MEX_FUNC_ERR_MSG_TXT("Error in MS-SBVAR MEX file: error using mxGetString.\n");
+ mexErrMsgTxt("Error in MS-SBVAR MEX file: error using mxGetString.\n");
beginarg = &argument[0];
while ((n = strcspn(beginarg, " ")))
{
if (!(args[nargs] = static_cast(mxCalloc(n+1, sizeof(char)))))
- DYN_MEX_FUNC_ERR_MSG_TXT("Error in MS-SBVAR MEX file: could not allocate memory. (3)");
+ mexErrMsgTxt("Error in MS-SBVAR MEX file: could not allocate memory. (3)");
strncpy(args[nargs++], beginarg, n);
beginarg += (isspace(beginarg[n]) || isblank(beginarg[n]) ? ++n : n);
@@ -85,7 +85,7 @@ mexFunction(int nlhs, mxArray *plhs[],
}
catch (const char *str)
{
- DYN_MEX_FUNC_ERR_MSG_TXT(str);
+ mexErrMsgTxt(str);
}
/*
@@ -94,6 +94,4 @@ mexFunction(int nlhs, mxArray *plhs[],
for (n = 0; n < nargs; n++)
mxFree(args[n]);
mxFree(args);
-
- plhs[0] = mxCreateDoubleScalar(0);
}
diff --git a/mex/sources/sobol/qmc_sequence.cc b/mex/sources/sobol/qmc_sequence.cc
index 51b19b2e0..21a03dc1f 100644
--- a/mex/sources/sobol/qmc_sequence.cc
+++ b/mex/sources/sobol/qmc_sequence.cc
@@ -1,7 +1,7 @@
/*
** Computes Quasi Monte-Carlo sequence.
**
-** Copyright © 2010-2017 Dynare Team
+** Copyright © 2010-2020 Dynare Team
**
** This file is part of Dynare (can be used outside Dynare).
**
@@ -52,23 +52,23 @@ mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
** Check the number of input and output arguments.
*/
if (nrhs < 3 || nrhs > 5)
- DYN_MEX_FUNC_ERR_MSG_TXT("qmc_sequence:: Five, four or three input arguments are required!");
+ mexErrMsgTxt("qmc_sequence:: Five, four or three input arguments are required!");
if (nlhs == 0)
- DYN_MEX_FUNC_ERR_MSG_TXT("qmc_sequence:: At least one output argument is required!");
+ mexErrMsgTxt("qmc_sequence:: At least one output argument is required!");
/*
** Test the first input argument and assign it to dimension.
*/
if (!mxIsNumeric(prhs[0]))
- DYN_MEX_FUNC_ERR_MSG_TXT("qmc_sequence:: First input (dimension) has to be a positive integer!");
+ mexErrMsgTxt("qmc_sequence:: First input (dimension) has to be a positive integer!");
int dimension = static_cast(mxGetScalar(prhs[0]));
/*
** Test the second input argument and assign it to seed.
*/
if (!(mxIsNumeric(prhs[1]) && mxIsClass(prhs[1], "int64")))
- DYN_MEX_FUNC_ERR_MSG_TXT("qmc_sequence:: Second input (seed) has to be an integer [int64]!");
+ mexErrMsgTxt("qmc_sequence:: Second input (seed) has to be an integer [int64]!");
int64_T seed = static_cast(mxGetScalar(prhs[1]));
/*
@@ -83,22 +83,22 @@ mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
error_flag_3 = 1;
if (error_flag_3 == 1)
- DYN_MEX_FUNC_ERR_MSG_TXT("qmc_sequence:: Third input (type of QMC sequence) has to be an integer equal to 0, 1 or 2!");
+ mexErrMsgTxt("qmc_sequence:: Third input (type of QMC sequence) has to be an integer equal to 0, 1 or 2!");
/*
** Test dimension ≥ 2 when type==2
*/
if (type == 2 && dimension < 2)
- DYN_MEX_FUNC_ERR_MSG_TXT("qmc_sequence:: First input (dimension) has to be greater than 1 for a uniform QMC on an hypershere!");
+ mexErrMsgTxt("qmc_sequence:: First input (dimension) has to be greater than 1 for a uniform QMC on an hypershere!");
else if (dimension > DIM_MAX)
- DYN_MEX_FUNC_ERR_MSG_TXT(("qmc_sequence:: First input (dimension) has to be smaller than " + to_string(DIM_MAX) + " !").c_str());
+ mexErrMsgTxt(("qmc_sequence:: First input (dimension) has to be smaller than " + to_string(DIM_MAX) + " !").c_str());
/*
** Test the optional fourth input argument and assign it to sequence_size.
*/
if (nrhs > 3 && !mxIsNumeric(prhs[3]))
- DYN_MEX_FUNC_ERR_MSG_TXT("qmc_sequence:: Fourth input (qmc sequence size) has to be a positive integer!");
+ mexErrMsgTxt("qmc_sequence:: Fourth input (qmc sequence size) has to be a positive integer!");
int sequence_size;
if (nrhs > 3)
@@ -110,17 +110,17 @@ mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
** Test the optional fifth input argument and assign it to lower_and_upper_bounds.
*/
if (nrhs > 4 && type == 0 && mxGetN(prhs[4]) != 2) // Sequence of uniformly distributed numbers in an hypercube
- DYN_MEX_FUNC_ERR_MSG_TXT("qmc_sequence:: The fifth input argument must be an array with two columns!");
+ mexErrMsgTxt("qmc_sequence:: The fifth input argument must be an array with two columns!");
if (nrhs > 4 && type == 0 && static_cast(mxGetM(prhs[4])) != dimension)
- DYN_MEX_FUNC_ERR_MSG_TXT("qmc_sequence:: The fourth input argument must be an array with a number of lines equal to dimension (first input argument)!");
+ mexErrMsgTxt("qmc_sequence:: The fourth input argument must be an array with a number of lines equal to dimension (first input argument)!");
if (nrhs > 4 && type == 1 && !(static_cast(mxGetN(prhs[4])) == dimension
&& static_cast(mxGetM(prhs[4])) == dimension)) // Sequence of normally distributed numbers
- DYN_MEX_FUNC_ERR_MSG_TXT("qmc_sequence:: The fifth input argument must be a squared matrix (whose dimension is given by the first input argument)!");
+ mexErrMsgTxt("qmc_sequence:: The fifth input argument must be a squared matrix (whose dimension is given by the first input argument)!");
if (nrhs > 4 && type == 2 && !(mxGetN(prhs[4]) == 1 && mxGetM(prhs[4]) == 1)) // Sequence of uniformly distributed numbers on a hypershere
- DYN_MEX_FUNC_ERR_MSG_TXT("qmc_sequence:: The fifth input argument must be a positive scalar!");
+ mexErrMsgTxt("qmc_sequence:: The fifth input argument must be a positive scalar!");
const double *lower_bounds = nullptr, *upper_bounds = nullptr;
int unit_hypercube_flag = 1;
diff --git a/tests/kalman_steady_state/test1.m b/tests/kalman_steady_state/test1.m
index d928d2b37..895aeb9f6 100644
--- a/tests/kalman_steady_state/test1.m
+++ b/tests/kalman_steady_state/test1.m
@@ -17,8 +17,7 @@ for i=1:100
Z(1,1) = 1;
Z(2,3) = 1;
Z(3,6) = 1;
- [err P] = kalman_steady_state(transpose(T),QQ,transpose(Z),H);
- mexErrCheck('kalman_steady_state',err);
+ P = kalman_steady_state(transpose(T),QQ,transpose(Z),H);
end
% Without measurment errors.
@@ -35,6 +34,5 @@ for i=1:100
Z(1,1) = 1;
Z(2,3) = 1;
Z(3,6) = 1;
- [err P] = kalman_steady_state(transpose(T),QQ,transpose(Z),H);
- mexErrCheck('kalman_steady_state',err);
+ P = kalman_steady_state(transpose(T),QQ,transpose(Z),H);
end
diff --git a/tests/kronecker/test_kron.m b/tests/kronecker/test_kron.m
index a25b20668..27e80877e 100644
--- a/tests/kronecker/test_kron.m
+++ b/tests/kronecker/test_kron.m
@@ -1,5 +1,5 @@
function info = test_kron(test,number_of_threads)
-% Copyright (C) 2007-2010 Dynare Team
+% Copyright (C) 2007-2020 Dynare Team
%
% This file is part of Dynare.
%
@@ -52,14 +52,12 @@ if test == 1
disp('')
disp('Computation of A*kron(B,B) with the mex file (v1):')
tic
- [err, D1] = sparse_hessian_times_B_kronecker_C(A,B,number_of_threads);
- mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
+ D1 = sparse_hessian_times_B_kronecker_C(A,B,number_of_threads);
toc
disp('')
disp('Computation of A*kron(B,B) with the mex file (v2):')
tic
- [err, D2] = sparse_hessian_times_B_kronecker_C(A,B,B,number_of_threads);
- mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
+ D2 = sparse_hessian_times_B_kronecker_C(A,B,B,number_of_threads);
toc
disp('');
disp(['Difference between D1 and D2 = ' num2str(max(max(abs(D1-D2))))]);
@@ -120,14 +118,12 @@ if test==2
disp(' ')
disp('Computation of A*kron(B,B) with the mex file (v1):')
tic
- [err, D1] = sparse_hessian_times_B_kronecker_C(hessian,zx,number_of_threads);
- mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
+ D1 = sparse_hessian_times_B_kronecker_C(hessian,zx,number_of_threads);
toc
disp(' ')
disp('Computation of A*kron(B,B) with the mex file (v2):')
tic
- [err, D2] = sparse_hessian_times_B_kronecker_C(hessian,zx,zx,number_of_threads);
- mexErrCheck('sparse_hessian_times_B_kronecker_C', err);
+ D2 = sparse_hessian_times_B_kronecker_C(hessian,zx,zx,number_of_threads);
toc
disp(' ');
disp(['Difference between D1 and D2 = ' num2str(max(max(abs(D1-D2))))]);
@@ -167,8 +163,7 @@ if test==3
disp('Test with full format matrix -- 1(a)')
D1 = A*kron(B,C);
tic
- [err, D2] = A_times_B_kronecker_C(A,B,C,number_of_threads);
- mexErrCheck('A_times_B_kronecker_C', err);
+ D2 = A_times_B_kronecker_C(A,B,C,number_of_threads);
toc
disp(['Difference between D1 and D2 = ' num2str(max(max(abs(D1-D2))))]);
if max(max(abs(D1-D2)))>1e-10
@@ -177,8 +172,7 @@ if test==3
disp('Test with full format matrix -- 1(b)')
D1 = A*kron(B,B);
tic
- [err, D2] = A_times_B_kronecker_C(A,B,number_of_threads);
- mexErrCheck('A_times_B_kronecker_C', err);
+ D2 = A_times_B_kronecker_C(A,B,number_of_threads);
toc
disp(['Difference between D1 and D2 = ' num2str(max(max(abs(D1-D2))))]);
if max(max(abs(D1-D2)))>1e-10
@@ -187,4 +181,4 @@ if test==3
if ~(test3_1 && test3_2)
info = 0;
end
-end
\ No newline at end of file
+end