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;
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_);
% If simulation failed try homotopy.
if ~oo_.deterministic_simulation.status && ~options_.no_homotopy
skipline()
disp('Simulation of the perfect foresight model failed!')
skipline()
% Disable warnings if homotopy
warning off all
% Do not print anything
oldverbositylevel = options_.verbosity;
options_.verbosity = 0;
exosim = oo_.exo_simul;
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
fprintf('++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n')
skipline()
end
if ~options_.no_homotopy
warning off all
options_.verbosity = oldverbositylevel;
warning on all
end
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
% 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;
vperiods = options_.periods*ones(1,options_.simul.maxit);
@ -76,8 +76,9 @@ Y = endo_simul(:);
if verbose
skipline()
disp (['-----------------------------------------------------']) ;
fprintf('MODEL SIMULATION:\n');
printline(56)
disp('MODEL SIMULATION:')
skipline()
end
model_dynamic = str2func([M_.fname,'_dynamic']);
@ -144,6 +145,12 @@ for iter = 1:options_.simul.maxit
end
skipline()
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
stop = 1 ;
@ -175,23 +182,21 @@ if stop
oo_.deterministic_simulation.periods = vperiods(1:iter);
oo_.endo_simul = reshape(Y,ny,periods+maximum_lag+M_.maximum_lead);
if verbose
skipline();
fprintf('\nSimulation terminated after %d iterations.\n',iter);
fprintf('Total time of simulation: %16.13f\n',etime(clock,h1));
skipline()
disp(sprintf('Total time of simulation: %s.', num2str(etime(clock,h1))))
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
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
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
else
if verbose
skipline();
fprintf('\nSimulation concluded successfully after %d iterations.\n',iter);
fprintf('Total time of simulation: %16.13f\n',etime(clock,h1));
fprintf('Max. Abs. Error : %16.13f\n',err);
fprintf('Convergency obtained!\n');
disp(sprintf('Total time of simulation: %s', num2str(etime(clock,h1))))
printline(56)
end
oo_.deterministic_simulation.status = true;% Convergency obtained.
oo_.deterministic_simulation.error = err;
@ -202,10 +207,9 @@ if stop
elseif ~stop
if verbose
skipline();
fprintf('\nSimulation terminated after %d iterations.\n',iter);
fprintf('Total time of simulation: %16.13f\n',etime(clock,h1));
fprintf('Max. Abs. Error : %16.13f\n',err);
fprintf('WARNING : maximum number of iterations is reached (modify option maxit).\n') ;
disp(sprintf('Total time of simulation: %s.', num2str(etime(clock,h1))))
disp('Maximum number of iterations is reached (modify option maxit).')
printline(62)
end
oo_.deterministic_simulation.status = false;% more iterations are needed.
oo_.deterministic_simulation.error = err;
@ -214,6 +218,5 @@ elseif ~stop
end
if verbose
disp (['-----------------------------------------------------']) ;
skipline();
end

View File

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