From 3f2e29f7bf8cd44d7904d8bc24e8f1ab9d98c4c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien.villemot@ens.fr> Date: Fri, 23 Sep 2011 18:21:04 +0200 Subject: [PATCH] Adapt block_kalman_filter to Dynare's way of handling errors in MEX files --- matlab/DsgeLikelihood.m | 3 ++- .../block_kalman_filter.cc | 19 +++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/matlab/DsgeLikelihood.m b/matlab/DsgeLikelihood.m index c07dede8fd..967723ad93 100644 --- a/matlab/DsgeLikelihood.m +++ b/matlab/DsgeLikelihood.m @@ -465,7 +465,8 @@ singularity_flag = 0; if ((kalman_algo==1) || (kalman_algo==3))% Multivariate Kalman Filter if no_missing_data_flag if options_.block == 1 - LIK = block_kalman_filter(T,R,Q,H,Pstar,Y,start,mf,kalman_tol,riccati_tol, M_.nz_state_var, M_.n_diag); + [err, LIK] = block_kalman_filter(T,R,Q,H,Pstar,Y,start,mf,kalman_tol,riccati_tol, M_.nz_state_var, M_.n_diag); + mexErrCheck('block_kalman_filter', err); else LIK = kalman_filter(Y,diffuse_periods+1,size(Y,2), ... a,Pstar, ... diff --git a/mex/sources/block_kalman_filter/block_kalman_filter.cc b/mex/sources/block_kalman_filter/block_kalman_filter.cc index e43f51d919..5f9557ae6e 100644 --- a/mex/sources/block_kalman_filter/block_kalman_filter.cc +++ b/mex/sources/block_kalman_filter/block_kalman_filter.cc @@ -213,8 +213,8 @@ det(double* F, int dim) void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { - if (nlhs > 2) - DYN_MEX_FUNC_ERR_MSG_TXT("kalman_filter provides at most 2 output argument."); + if (nlhs > 3) + DYN_MEX_FUNC_ERR_MSG_TXT("kalman_filter provides at most 3 output argument."); if (nrhs != 12) DYN_MEX_FUNC_ERR_MSG_TXT("kalman_filter requires exactly 12 input arguments."); //(T,R,Q,H,P,Y,start,mf,kalman_tol,riccati_tol, block) @@ -792,16 +792,19 @@ mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) t++; } } - - if (nlhs >= 1) + + // info = 0 + plhs[0] = mxCreateDoubleScalar(0); + + if (nlhs >= 2) { - plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL); - double* pind = mxGetPr(plhs[0]); + plhs[1] = mxCreateDoubleMatrix(1, 1, mxREAL); + double* pind = mxGetPr(plhs[1]); pind[0] = LIK; } - if (nlhs == 2) - plhs[1] = plik; + if (nlhs == 3) + plhs[2] = plik; mxFree(w); #ifdef DIRECT /*mxDestroyArray(nze); -- GitLab