Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Dóra Kocsis
dynare
Commits
a5b5f399
Commit
a5b5f399
authored
Sep 10, 2010
by
Michel Juillard
Browse files
Preprocessor: corrected bug on HISTVAL with lags > 1
parent
49daa411
Changes
3
Hide whitespace changes
Inline
Side-by-side
preprocessor/NumericalInitialization.cc
View file @
a5b5f399
...
...
@@ -182,16 +182,32 @@ HistValStatement::writeOutput(ostream &output, const string &basename) const
{
output
<<
"%"
<<
endl
<<
"% HISTVAL instructions"
<<
endl
<<
"%"
<<
endl
;
<<
"%"
<<
endl
<<
"oo_.endo_simul = zeros(M_.endo_nbr,M_.maximum_lag);"
<<
endl
;
for
(
hist_values_type
::
const_iterator
it
=
hist_values
.
begin
();
it
!=
hist_values
.
end
();
it
++
)
{
const
int
&
symb_id
=
it
->
first
.
first
;
const
int
&
lag
=
it
->
first
.
second
;
int
symb_id
=
it
->
first
.
first
;
int
lag
=
it
->
first
.
second
;
const
NodeID
expression
=
it
->
second
;
SymbolType
type
=
symbol_table
.
getType
(
symb_id
);
if
(
type
==
eEndogenous
&&
lag
<
0
)
{
const
int
new_symb_id
=
symbol_table
.
searchAuxiliaryVars
(
symb_id
,
lag
);
if
(
new_symb_id
!=
-
1
)
{
symb_id
=
new_symb_id
;
lag
=
0
;
}
else
if
(
symbol_table
.
AuxVarsSize
()
>
0
)
{
cerr
<<
"Histval: this variable doesn't exist with such a lag in the model"
<<
endl
;
exit
(
EXIT_FAILURE
);
}
}
int
tsid
=
symbol_table
.
getTypeSpecificID
(
symb_id
)
+
1
;
if
(
type
==
eEndogenous
)
...
...
preprocessor/SymbolTable.cc
View file @
a5b5f399
...
...
@@ -364,6 +364,15 @@ SymbolTable::addExpectationAuxiliaryVar(int information_set, int index, const st
return
symb_id
;
}
int
SymbolTable
::
searchAuxiliaryVars
(
int
orig_symb_id
,
int
orig_lead_lag
)
const
{
for
(
int
i
=
0
;
i
<
aux_vars
.
size
();
++
i
)
if
((
aux_vars
[
i
].
get_orig_symb_id
()
==
orig_symb_id
)
&&
(
aux_vars
[
i
].
get_orig_lead_lag
()
==
orig_lead_lag
))
return
aux_vars
[
i
].
get_symb_id
();
return
-
1
;
}
void
SymbolTable
::
markPredetermined
(
int
symb_id
)
throw
(
UnknownSymbolIDException
,
FrozenException
)
{
...
...
preprocessor/SymbolTable.hh
View file @
a5b5f399
...
...
@@ -204,6 +204,13 @@ public:
\return the symbol ID of the new symbol
*/
int
addExpectationAuxiliaryVar
(
int
information_set
,
int
index
,
const
string
&
information_set_name
)
throw
(
FrozenException
);
//! Searches auxiliary variables by symbol_id and lead_lag
/*!
\return the symbol ID of the auxiliary variable and -1 if not found
*/
int
searchAuxiliaryVars
(
int
orig_symb_id
,
int
orig_lead_lag
)
const
;
//! Returns the number of auxiliary variables
int
AuxVarsSize
()
const
{
return
aux_vars
.
size
();};
//! Tests if symbol already exists
inline
bool
exists
(
const
string
&
name
)
const
;
//! Get symbol name (by ID)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment