preprocessor: remove extra exogenous variables. closes #841
parent
3a0b9a1143
commit
f1d607af99
|
@ -928,6 +928,7 @@ Allows Dynare to issue a warning and continue processing when
|
|||
@enumerate
|
||||
@item there are more endogenous variables than equations
|
||||
@item an undeclared symbol is assigned in @code{initval} or @code{endval}
|
||||
@item exogenous variables were declared but not used in the @code{model} block
|
||||
@end enumerate
|
||||
|
||||
@item fast
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2008-2016 Dynare Team
|
||||
* Copyright (C) 2008-2017 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
|
@ -42,7 +42,7 @@ main2(stringstream &in, string &basename, bool debug, bool clear_all, bool clear
|
|||
ModFile *mod_file = p.parse(in, debug);
|
||||
|
||||
// Run checking pass
|
||||
mod_file->checkPass();
|
||||
mod_file->checkPass(nostrict);
|
||||
|
||||
// Perform transformations on the model (creation of auxiliary vars and equations)
|
||||
mod_file->transformPass(nostrict);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2006-2016 Dynare Team
|
||||
* Copyright (C) 2006-2017 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
|
@ -107,7 +107,7 @@ ModFile::addStatementAtFront(Statement *st)
|
|||
}
|
||||
|
||||
void
|
||||
ModFile::checkPass()
|
||||
ModFile::checkPass(bool nostrict)
|
||||
{
|
||||
for (vector<Statement *>::iterator it = statements.begin();
|
||||
it != statements.end(); it++)
|
||||
|
@ -299,19 +299,22 @@ ModFile::checkPass()
|
|||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// Check if some exogenous is not used in the model block
|
||||
// Check if some exogenous is not used in the model block, Issue #841
|
||||
set<int> unusedExo = dynamic_model.findUnusedExogenous();
|
||||
if (unusedExo.size() > 0)
|
||||
{
|
||||
warnings << "WARNING: some exogenous (";
|
||||
for (set<int>::const_iterator it = unusedExo.begin();
|
||||
it != unusedExo.end(); )
|
||||
ostringstream unused_exos;
|
||||
for (set<int>::iterator it = unusedExo.begin(); it != unusedExo.end(); it++)
|
||||
unused_exos << symbol_table.getName(*it) << " ";
|
||||
|
||||
if (nostrict)
|
||||
warnings << "WARNING: " << unused_exos.str()
|
||||
<< "not used in model block, removed by nostrict command-line option" << endl;
|
||||
else
|
||||
{
|
||||
warnings << symbol_table.getName(*it);
|
||||
if (++it != unusedExo.end())
|
||||
warnings << ", ";
|
||||
cerr << "ERROR: " << unused_exos.str() << "not used in model block. To bypass this error, use the `nostrict` option. This may lead to crashes or unexpected behavior." << endl;
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
warnings << ") are declared but not used in the model. This may lead to crashes or unexpected behaviour." << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2006-2016 Dynare Team
|
||||
* Copyright (C) 2006-2017 Dynare Team
|
||||
*
|
||||
* This file is part of Dynare.
|
||||
*
|
||||
|
@ -128,7 +128,7 @@ public:
|
|||
void evalAllExpressions(bool warn_uninit);
|
||||
//! Do some checking and fills mod_file_struct
|
||||
/*! \todo add check for number of equations and endogenous if ramsey_policy is present */
|
||||
void checkPass();
|
||||
void checkPass(bool nostrict);
|
||||
//! Perform some transformations on the model (creation of auxiliary vars and equations)
|
||||
void transformPass(bool nostrict);
|
||||
//! Execute computations
|
||||
|
|
|
@ -342,7 +342,7 @@ XFAIL_MODFILES = ramst_xfail.mod \
|
|||
estimation/fs2000_stochastic_singularity_xfail.mod \
|
||||
identification/ident_unit_root/ident_unit_root_xfail.mod \
|
||||
steady_state/Linear_steady_state_xfail.mod \
|
||||
example1_undeclared_vars_xfail.mod
|
||||
example1_extra_exo_xfail.mod
|
||||
|
||||
MFILES = initval_file/ramst_initval_file_data.m
|
||||
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
// Example 1 from Collard's guide to Dynare
|
||||
var y, c, k, a, h, b;
|
||||
varexo e, u, extra;
|
||||
|
||||
verbatim;
|
||||
% I want these comments included in
|
||||
% example1.m 1999q1 1999y
|
||||
%
|
||||
var = 1;
|
||||
end;
|
||||
|
||||
parameters beta, rho, alpha, delta, theta, psi, tau;
|
||||
|
||||
alpha = 0.36;
|
||||
rho = 0.95;
|
||||
tau = 0.025;
|
||||
beta = 0.99;
|
||||
delta = 0.025;
|
||||
psi = 0;
|
||||
theta = 2.95;
|
||||
|
||||
phi = 0.1;
|
||||
|
||||
model;
|
||||
c*theta*h^(1+psi)=(1-alpha)*y;
|
||||
k = beta*(((exp(b)*c)/(exp(b(+1))*c(+1)))
|
||||
*(exp(b(+1))*alpha*y(+1)+(1-delta)*k));
|
||||
y = exp(a)*(k(-1)^alpha)*(h^(1-alpha));
|
||||
k = exp(b)*(y-c)+(1-delta)*k(-1);
|
||||
a = rho*a(-1)+tau*b(-1) + e;
|
||||
b = tau*a(-1)+rho*b(-1) + u;
|
||||
end;
|
||||
|
||||
initval;
|
||||
y = 1.08068253095672;
|
||||
c = 0.80359242014163;
|
||||
h = 0.29175631001732;
|
||||
k = 11.08360443260358;
|
||||
a = 0;
|
||||
b = 0;
|
||||
e = 0;
|
||||
u = 0;
|
||||
extra = 0;
|
||||
end;
|
||||
|
||||
shocks;
|
||||
var e; stderr 0.009;
|
||||
var u; stderr 0.009;
|
||||
var e, u = phi*0.009*0.009;
|
||||
end;
|
||||
|
||||
stoch_simul;
|
Loading…
Reference in New Issue