Added method for recognizing unreferenced atoms. Call to this method replace catching the exception used before to recognize that an atom is not referenced.
parent
64346de401
commit
a97973d01f
|
@ -341,6 +341,12 @@ int DynamicAtoms::index(const char* name, int ll) const
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool DynamicAtoms::is_referenced(const char* name) const
|
||||||
|
{
|
||||||
|
Tvarmap::const_iterator it = vars.find(name);
|
||||||
|
return it != vars.end();
|
||||||
|
}
|
||||||
|
|
||||||
const DynamicAtoms::Tlagmap& DynamicAtoms::lagmap(const char* name) const
|
const DynamicAtoms::Tlagmap& DynamicAtoms::lagmap(const char* name) const
|
||||||
{
|
{
|
||||||
Tvarmap::const_iterator it = vars.find(name);
|
Tvarmap::const_iterator it = vars.find(name);
|
||||||
|
|
|
@ -182,6 +182,9 @@ namespace ogp {
|
||||||
/** Return index of the variable described by the variable
|
/** Return index of the variable described by the variable
|
||||||
* name and lag/lead. If it doesn't exist, return -1. */
|
* name and lag/lead. If it doesn't exist, return -1. */
|
||||||
int index(const char* name, int ll) const;
|
int index(const char* name, int ll) const;
|
||||||
|
/** Return true if a variable is referenced, i.e. it has lag
|
||||||
|
* map. */
|
||||||
|
bool is_referenced(const char* name) const;
|
||||||
/** Return the lag map for the variable name. */
|
/** Return the lag map for the variable name. */
|
||||||
const Tlagmap& lagmap(const char* name) const;
|
const Tlagmap& lagmap(const char* name) const;
|
||||||
/** Return the variable name for the tree index. It throws an
|
/** Return the variable name for the tree index. It throws an
|
||||||
|
|
|
@ -41,15 +41,14 @@ void StaticAtoms::import_atoms(const DynamicAtoms& da, OperationTree& otree, Tin
|
||||||
register_name(name);
|
register_name(name);
|
||||||
int tnew = otree.add_nulary();
|
int tnew = otree.add_nulary();
|
||||||
assign(name, tnew);
|
assign(name, tnew);
|
||||||
try {
|
if (da.is_referenced(name)) {
|
||||||
const DynamicAtoms::Tlagmap& lmap = da.lagmap(name);
|
const DynamicAtoms::Tlagmap& lmap = da.lagmap(name);
|
||||||
for (DynamicAtoms::Tlagmap::const_iterator it = lmap.begin();
|
for (DynamicAtoms::Tlagmap::const_iterator it = lmap.begin();
|
||||||
it != lmap.end(); ++it) {
|
it != lmap.end(); ++it) {
|
||||||
int told = (*it).second;
|
int told = (*it).second;
|
||||||
tmap.insert(Tintintmap::value_type(told, tnew));
|
tmap.insert(Tintintmap::value_type(told, tnew));
|
||||||
}
|
}
|
||||||
} catch (const ogu::Exception& e) {
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -135,22 +135,19 @@ void DynareAtomValues::setValues(ogp::EvalTree& et) const
|
||||||
|
|
||||||
// set parameteres
|
// set parameteres
|
||||||
for (unsigned int i = 0; i < atoms.get_params().size(); i++) {
|
for (unsigned int i = 0; i < atoms.get_params().size(); i++) {
|
||||||
try {
|
if (atoms.is_referenced(atoms.get_params()[i])) {
|
||||||
const ogp::DynamicAtoms::Tlagmap& lmap = atoms.lagmap(atoms.get_params()[i]);
|
const ogp::DynamicAtoms::Tlagmap& lmap = atoms.lagmap(atoms.get_params()[i]);
|
||||||
for (ogp::DynamicAtoms::Tlagmap::const_iterator it = lmap.begin();
|
for (ogp::DynamicAtoms::Tlagmap::const_iterator it = lmap.begin();
|
||||||
it != lmap.end(); ++it) {
|
it != lmap.end(); ++it) {
|
||||||
int t = (*it).second;
|
int t = (*it).second;
|
||||||
et.set_nulary(t, paramvals[i]);
|
et.set_nulary(t, paramvals[i]);
|
||||||
}
|
}
|
||||||
} catch (const ogu::Exception& e) {
|
|
||||||
// ignore non-referenced parameters; there is no
|
|
||||||
// lagmap for them
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// set endogenous
|
// set endogenous
|
||||||
for (unsigned int outer_i = 0; outer_i < atoms.get_endovars().size(); outer_i++) {
|
for (unsigned int outer_i = 0; outer_i < atoms.get_endovars().size(); outer_i++) {
|
||||||
try {
|
if (atoms.is_referenced(atoms.get_endovars()[outer_i])) {
|
||||||
const ogp::DynamicAtoms::Tlagmap& lmap = atoms.lagmap(atoms.get_endovars()[outer_i]);
|
const ogp::DynamicAtoms::Tlagmap& lmap = atoms.lagmap(atoms.get_endovars()[outer_i]);
|
||||||
for (ogp::DynamicAtoms::Tlagmap::const_iterator it = lmap.begin();
|
for (ogp::DynamicAtoms::Tlagmap::const_iterator it = lmap.begin();
|
||||||
it != lmap.end(); ++it) {
|
it != lmap.end(); ++it) {
|
||||||
|
@ -165,15 +162,12 @@ void DynareAtomValues::setValues(ogp::EvalTree& et) const
|
||||||
else
|
else
|
||||||
et.set_nulary(t, yyp[i-atoms.nstat()-atoms.npred()]);
|
et.set_nulary(t, yyp[i-atoms.nstat()-atoms.npred()]);
|
||||||
}
|
}
|
||||||
} catch (const ogu::Exception& e) {
|
|
||||||
// ignore non-referenced endogenous variables; there is no
|
|
||||||
// lagmap for them
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// set exogenous
|
// set exogenous
|
||||||
for (unsigned int outer_i = 0; outer_i < atoms.get_exovars().size(); outer_i++) {
|
for (unsigned int outer_i = 0; outer_i < atoms.get_exovars().size(); outer_i++) {
|
||||||
try {
|
if (atoms.is_referenced(atoms.get_exovars()[outer_i])) {
|
||||||
const ogp::DynamicAtoms::Tlagmap& lmap = atoms.lagmap(atoms.get_exovars()[outer_i]);
|
const ogp::DynamicAtoms::Tlagmap& lmap = atoms.lagmap(atoms.get_exovars()[outer_i]);
|
||||||
for (ogp::DynamicAtoms::Tlagmap::const_iterator it = lmap.begin();
|
for (ogp::DynamicAtoms::Tlagmap::const_iterator it = lmap.begin();
|
||||||
it != lmap.end(); ++it) {
|
it != lmap.end(); ++it) {
|
||||||
|
@ -184,8 +178,6 @@ void DynareAtomValues::setValues(ogp::EvalTree& et) const
|
||||||
et.set_nulary(t, xx[i]);
|
et.set_nulary(t, xx[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (const ogu::Exception& e) {
|
|
||||||
// ignore non-referenced variables
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue