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

time-shift
Houtan Bastani 2011-02-04 15:42:24 +01:00
parent 9ae3115b9d
commit 85332744d8
3 changed files with 86 additions and 2 deletions

View File

@ -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 <http://www.gnu.org/licenses/>.
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

View File

@ -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

View File

@ -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