Implement faster fallback for non-canonical/lowercase name lookup
This commit is contained in:
parent
5e692e893a
commit
9ce255302e
2 changed files with 21 additions and 11 deletions
|
|
@ -859,6 +859,9 @@ private:
|
|||
//! Map of species names to indices
|
||||
std::map<std::string, size_t> m_speciesIndices;
|
||||
|
||||
//! Map of lower-case species names to indices
|
||||
std::map<std::string, size_t> m_speciesLower;
|
||||
|
||||
size_t m_mm; //!< Number of elements.
|
||||
vector_fp m_atomicWeights; //!< element atomic weights (kg kmol-1)
|
||||
vector_int m_atomicNumbers; //!< element atomic numbers
|
||||
|
|
|
|||
|
|
@ -175,18 +175,18 @@ void Phase::getAtoms(size_t k, double* atomArray) const
|
|||
|
||||
size_t Phase::findSpeciesLower(const std::string& name) const
|
||||
{
|
||||
size_t loc = npos;
|
||||
std::string nLower = toLowerCopy(name);
|
||||
for (const auto& k : m_speciesIndices) {
|
||||
if (toLowerCopy(k.first) == nLower) {
|
||||
if (loc == npos) {
|
||||
loc = k.second;
|
||||
} else {
|
||||
throw CanteraError("Phase::findSpeciesLower",
|
||||
"Lowercase species name '{}' is not unique. "
|
||||
"Set Phase::caseSensitiveSpecies to true to "
|
||||
"enforce case sensitive species names", nLower);
|
||||
}
|
||||
size_t loc = npos;
|
||||
auto it = m_speciesLower.find(nLower);
|
||||
if (it == m_speciesLower.end()) {
|
||||
return npos;
|
||||
} else {
|
||||
loc = it->second;
|
||||
if (loc == npos) {
|
||||
throw CanteraError("Phase::findSpeciesLower",
|
||||
"Lowercase species name '{}' is not unique. "
|
||||
"Set Phase::caseSensitiveSpecies to true to "
|
||||
"enforce case sensitive species names", nLower);
|
||||
}
|
||||
}
|
||||
return loc;
|
||||
|
|
@ -766,6 +766,13 @@ bool Phase::addSpecies(shared_ptr<Species> spec) {
|
|||
m_speciesCharge.push_back(spec->charge);
|
||||
size_t ne = nElements();
|
||||
|
||||
std::string nLower = toLowerCopy(spec->name);
|
||||
if (m_speciesLower.find(nLower) == m_speciesLower.end()) {
|
||||
m_speciesLower[nLower] = m_kk;
|
||||
} else {
|
||||
m_speciesLower[nLower] = npos;
|
||||
}
|
||||
|
||||
double wt = 0.0;
|
||||
const vector_fp& aw = atomicWeights();
|
||||
if (spec->charge != 0.0) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue