From 85332744d8d54019a6277e71c282211273254eeb Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Fri, 4 Feb 2011 15:42:24 +0100 Subject: [PATCH] Ticket #59: add cases for errors that were not being caught and convert AIM error codes so that they don't overlap with other error codes in print_info --- matlab/convertAimCodeToInfo.m | 58 +++++++++++++++++++++++++++++++++++ matlab/dr1.m | 4 +-- matlab/print_info.m | 26 ++++++++++++++++ 3 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 matlab/convertAimCodeToInfo.m diff --git a/matlab/convertAimCodeToInfo.m b/matlab/convertAimCodeToInfo.m new file mode 100644 index 000000000..ed62448a2 --- /dev/null +++ b/matlab/convertAimCodeToInfo.m @@ -0,0 +1,58 @@ +function [info] = convertAimCodeToInfo(aimCode) +% function [info] = convertAimCodeToInfo(aimCode) +% Returns an appropriate code for print_info +% +% INPUTS +% aimCode [integer] code returned by AIM +% (aimCode==1) e='Aim: unique solution.'; +% (aimCode==2) e='Aim: roots not correctly computed by real_schur.'; +% (aimCode==3) e='Aim: too many big roots.'; +% (aimCode==35) e='Aim: too many big roots, and q(:,right) is singular.'; +% (aimCode==4) e='Aim: too few big roots.'; +% (aimCode==45) e='Aim: too few big roots, and q(:,right) is singular.'; +% (aimCode==5) e='Aim: q(:,right) is singular.'; +% (aimCode==61) e='Aim: too many exact shiftrights.'; +% (aimCode==62) e='Aim: too many numeric shiftrights.'; +% +% OUTPUTS +% info [integer] Code to be used to print error in print_info.m + +% Copyright (C) 2011 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 . + +switch aimCode + case 1 + info = 0; % no problem encountered + case 2 + info = 102; + case 3 + info = 103; + case 35 + info = 135; + case 4 + info = 104; + case 45 + info = 145; + case 5 + info = 105; + case 61 + info = 161; + case 62 + info = 162; + otherwise + info = 1; +end \ No newline at end of file diff --git a/matlab/dr1.m b/matlab/dr1.m index 86809e2d4..f3ca08b7e 100644 --- a/matlab/dr1.m +++ b/matlab/dr1.m @@ -230,7 +230,7 @@ if M_.maximum_endo_lead == 0 try [dr,aimcode]=dynAIMsolver1(jacobia_,M_,dr); if aimcode ~=1 - info(1) = aimcode; + info(1) = convertAimCodeToInfo(aimcode); info(2) = 1.0e+8; return end @@ -283,7 +283,7 @@ if (options_.aim_solver == 1) && (task == 0) % reuse some of the bypassed code and tests that may be needed if aimcode ~=1 - info(1) = aimcode; + info(1) = convertAimCodeToInfo(aimcode); info(2) = 1.0e+8; return end diff --git a/matlab/print_info.m b/matlab/print_info.m index 7c2acc610..7a08ae376 100644 --- a/matlab/print_info.m +++ b/matlab/print_info.m @@ -56,10 +56,36 @@ if ~noprint error('The steady state is complex.') case 30 error('Variance can''t be computed') + case 41 + error('one (many) parameter(s) do(es) not satisfy the lower bound'); + case 42 + error('one (many) parameter(s) do(es) not satisfy the upper bound'); case 43 error('Covariance matrix of shocks is not positive definite') + case 44 %DsgeLikelihood_hh / DsgeLikelihood + error(''); case 51 error('You are estimating a DSGE-VAR model, but the value of the dsge prior weight is too low!') + case 52 %DsgeVarLikelihood + error(''); + + % Aim Code Conversions by convertAimCodeToInfo.m + case 102 + error('Aim: roots not correctly computed by real_schur.'); + case 103 + error('Aim: too many big roots.'); + case 135 + error('Aim: too many big roots, and q(:,right) is singular.'); + case 104 + error('Aim: too few big roots.'); + case 145 + error('Aim: too few big roots, and q(:,right) is singular.'); + case 105 + error('Aim: q(:,right) is singular.'); + case 161 + error('Aim: too many exact shiftrights.'); + case 162 + error('Aim: too many numeric shiftrights.'); otherwise error('This case shouldn''t happen. Contact the authors of Dynare') end