Fixed the verbosity of perfect foresight models solvers.

With stack_solve_algo={0, 6} the verbosity is controlled with
options_.verbosity instead of options_.no_homotopy.

Also harmonized the printed informations across these two algorithms.
time-shift
Stéphane Adjemian (Charybdis) 2015-02-18 23:58:37 +01:00
parent fd0a172637
commit 5768acf17e
3 changed files with 58 additions and 42 deletions

View File

@ -58,18 +58,21 @@ end
initperiods = 1:M_.maximum_lag; initperiods = 1:M_.maximum_lag;
lastperiods = (M_.maximum_endo_lag+options_.periods+1):(M_.maximum_endo_lag+options_.periods+M_.maximum_endo_lead); lastperiods = (M_.maximum_endo_lag+options_.periods+1):(M_.maximum_endo_lag+options_.periods+M_.maximum_endo_lead);
% Disable warnings if homotopy
if ~options_.no_homotopy
warning off all
end
oo_ = simulation_core(options_, M_, oo_); oo_ = simulation_core(options_, M_, oo_);
% If simulation failed try homotopy. % If simulation failed try homotopy.
if ~oo_.deterministic_simulation.status && ~options_.no_homotopy if ~oo_.deterministic_simulation.status && ~options_.no_homotopy
skipline()
disp('Simulation of the perfect foresight model failed!') disp('Simulation of the perfect foresight model failed!')
skipline() skipline()
% Disable warnings if homotopy
warning off all
% Do not print anything
oldverbositylevel = options_.verbosity;
options_.verbosity = 0;
exosim = oo_.exo_simul; exosim = oo_.exo_simul;
exoinit = repmat(oo_.exo_steady_state',M_.maximum_lag+options_.periods+M_.maximum_lead,1); exoinit = repmat(oo_.exo_steady_state',M_.maximum_lag+options_.periods+M_.maximum_lead,1);
@ -141,10 +144,8 @@ if ~oo_.deterministic_simulation.status && ~options_.no_homotopy
end end
fprintf('++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n') fprintf('++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n')
skipline() skipline()
end options_.verbosity = oldverbositylevel;
warning on all
if ~options_.no_homotopy
warning off all
end end
if oo_.deterministic_simulation.status == 1 if oo_.deterministic_simulation.status == 1

View File

@ -30,7 +30,7 @@ function oo_ = sim1(options_, M_, oo_)
% You should have received a copy of the GNU General Public License % You should have received a copy of the GNU General Public License
% along with Dynare. If not, see <http://www.gnu.org/licenses/>. % along with Dynare. If not, see <http://www.gnu.org/licenses/>.
verbose = options_.no_homotopy; verbose = options_.verbosity;
endogenous_terminal_period = options_.endogenous_terminal_period; endogenous_terminal_period = options_.endogenous_terminal_period;
vperiods = options_.periods*ones(1,options_.simul.maxit); vperiods = options_.periods*ones(1,options_.simul.maxit);
@ -76,8 +76,9 @@ Y = endo_simul(:);
if verbose if verbose
skipline() skipline()
disp (['-----------------------------------------------------']) ; printline(56)
fprintf('MODEL SIMULATION:\n'); disp('MODEL SIMULATION:')
skipline()
end end
model_dynamic = str2func([M_.fname,'_dynamic']); model_dynamic = str2func([M_.fname,'_dynamic']);
@ -144,6 +145,12 @@ for iter = 1:options_.simul.maxit
end end
skipline() skipline()
end end
if verbose
str = sprintf('Iter: %s,\t err. = %s, \t time = %s',num2str(iter),num2str(err), num2str(etime(clock,h2)));
disp(str);
end
if err < options_.dynatol.f if err < options_.dynatol.f
stop = 1 ; stop = 1 ;
@ -175,23 +182,21 @@ if stop
oo_.deterministic_simulation.periods = vperiods(1:iter); oo_.deterministic_simulation.periods = vperiods(1:iter);
oo_.endo_simul = reshape(Y,ny,periods+maximum_lag+M_.maximum_lead); oo_.endo_simul = reshape(Y,ny,periods+maximum_lag+M_.maximum_lead);
if verbose if verbose
skipline(); skipline()
fprintf('\nSimulation terminated after %d iterations.\n',iter); disp(sprintf('Total time of simulation: %s.', num2str(etime(clock,h1))))
fprintf('Total time of simulation: %16.13f\n',etime(clock,h1));
if ~isreal(res) || ~isreal(Y) if ~isreal(res) || ~isreal(Y)
fprintf('WARNING: Simulation terminated with imaginary parts in the residuals or endogenous variables.\n'); disp('Simulation terminated with imaginary parts in the residuals or endogenous variables.')
else else
fprintf('WARNING: Simulation terminated with NaN or Inf in the residuals or endogenous variables.\n'); disp('Simulation terminated with NaN or Inf in the residuals or endogenous variables.')
end end
fprintf('WARNING: There is most likely something wrong with your model. Try model_diagnostics.\n'); disp('There is most likely something wrong with your model. Try model_diagnostics or another simulation method.')
printline(105)
end end
else else
if verbose if verbose
skipline(); skipline();
fprintf('\nSimulation concluded successfully after %d iterations.\n',iter); disp(sprintf('Total time of simulation: %s', num2str(etime(clock,h1))))
fprintf('Total time of simulation: %16.13f\n',etime(clock,h1)); printline(56)
fprintf('Max. Abs. Error : %16.13f\n',err);
fprintf('Convergency obtained!\n');
end end
oo_.deterministic_simulation.status = true;% Convergency obtained. oo_.deterministic_simulation.status = true;% Convergency obtained.
oo_.deterministic_simulation.error = err; oo_.deterministic_simulation.error = err;
@ -202,10 +207,9 @@ if stop
elseif ~stop elseif ~stop
if verbose if verbose
skipline(); skipline();
fprintf('\nSimulation terminated after %d iterations.\n',iter); disp(sprintf('Total time of simulation: %s.', num2str(etime(clock,h1))))
fprintf('Total time of simulation: %16.13f\n',etime(clock,h1)); disp('Maximum number of iterations is reached (modify option maxit).')
fprintf('Max. Abs. Error : %16.13f\n',err); printline(62)
fprintf('WARNING : maximum number of iterations is reached (modify option maxit).\n') ;
end end
oo_.deterministic_simulation.status = false;% more iterations are needed. oo_.deterministic_simulation.status = false;% more iterations are needed.
oo_.deterministic_simulation.error = err; oo_.deterministic_simulation.error = err;
@ -214,6 +218,5 @@ elseif ~stop
end end
if verbose if verbose
disp (['-----------------------------------------------------']) ;
skipline(); skipline();
end end

View File

@ -49,9 +49,13 @@ isf1 = [nyp+ny+1:nyf+nyp+ny+1] ;
stop = 0 ; stop = 0 ;
iz = [1:ny+nyp+nyf]; iz = [1:ny+nyp+nyf];
disp (['-----------------------------------------------------']) ; verbose = options_.verbosity;
disp (['MODEL SIMULATION :']) ;
fprintf('\n') ; if verbose
printline(56)
disp(['MODEL SIMULATION :'])
skipline()
end
it_init = M_.maximum_lag+1 ; it_init = M_.maximum_lag+1 ;
@ -98,16 +102,18 @@ for iter = 1:options_.simul.maxit
end end
err = max(max(abs(c./options_.scalv'))); err = max(max(abs(c./options_.scalv')));
disp([num2str(iter) ' - err = ' num2str(err)]) ;
disp([' Time of iteration :' num2str(etime(clock,h2))]) ; if verbose
str = sprintf('Iter: %s,\t err. = %s, \t time = %s',num2str(iter),num2str(err), num2str(etime(clock,h2)));
disp(str);
end
if err < options_.dynatol.f if err < options_.dynatol.f
stop = 1 ; stop = 1 ;
fprintf('\n') ; if verbose
disp([' Total time of simulation :' num2str(etime(clock,h1))]) ; skipline()
fprintf('\n') ; disp(sprintf('Total time of simulation: %s', num2str(etime(clock,h1))))
disp([' Convergency obtained.']) ; end
fprintf('\n') ;
oo_.deterministic_simulation.status = 1;% Convergency obtained. oo_.deterministic_simulation.status = 1;% Convergency obtained.
oo_.deterministic_simulation.error = err; oo_.deterministic_simulation.error = err;
oo_.deterministic_simulation.iterations = iter; oo_.deterministic_simulation.iterations = iter;
@ -116,15 +122,21 @@ for iter = 1:options_.simul.maxit
end end
if ~stop if ~stop
fprintf('\n') ; if verbose
disp([' Total time of simulation :' num2str(etime(clock,h1))]) ; disp(sprintf('Total time of simulation: %s.', num2str(etime(clock,h1))))
fprintf('\n') ; disp('Maximum number of iterations is reached (modify option maxit).')
disp(['WARNING : maximum number of iterations is reached (modify options_.simul.maxit).']) ; end
fprintf('\n') ;
oo_.deterministic_simulation.status = 0;% more iterations are needed. oo_.deterministic_simulation.status = 0;% more iterations are needed.
oo_.deterministic_simulation.error = err; oo_.deterministic_simulation.error = err;
oo_.deterministic_simulation.errors = c/abs(err); oo_.deterministic_simulation.errors = c/abs(err);
oo_.deterministic_simulation.iterations = options_.simul.maxit; oo_.deterministic_simulation.iterations = options_.simul.maxit;
end end
disp (['-----------------------------------------------------']) ;
if verbose
if stop
printline(56)
else
printline(62)
end
skipline()
end