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
parent
fd0a172637
commit
5768acf17e
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue