Skip to content

Commit

Permalink
Add invalidateCache() function to ThermoPhase and Kinetics
Browse files Browse the repository at this point in the history
This can be used to invalidate cached data after a change to underlying data
such as species thermo coefficients or reaction rate coefficients. Needs to be
user-accessible so that dependent objects can be updated manually.
  • Loading branch information
speth committed Apr 15, 2016
1 parent eda9fc8 commit 13fa0c7
Show file tree
Hide file tree
Showing 11 changed files with 35 additions and 0 deletions.
1 change: 1 addition & 0 deletions include/cantera/kinetics/BulkKinetics.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ class BulkKinetics : public Kinetics
virtual bool ready() const;

virtual void setMultiplier(size_t i, double f);
virtual void invalidateCache();

protected:
virtual void addElementaryReaction(ElementaryReaction& r);
Expand Down
1 change: 1 addition & 0 deletions include/cantera/kinetics/GasKinetics.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ class GasKinetics : public BulkKinetics
virtual void modifyReaction(size_t i, shared_ptr<Reaction> rNew);
virtual void finalize();
virtual bool ready() const;
virtual void invalidateCache();
//@}

void updateROP();
Expand Down
2 changes: 2 additions & 0 deletions include/cantera/kinetics/Kinetics.h
Original file line number Diff line number Diff line change
Expand Up @@ -803,6 +803,8 @@ class Kinetics
m_perturb[i] = f;
}

virtual void invalidateCache() {};

//@}

/**
Expand Down
4 changes: 4 additions & 0 deletions include/cantera/thermo/Phase.h
Original file line number Diff line number Diff line change
Expand Up @@ -724,6 +724,10 @@ class Phase
return m_stateNum;
}

//! Invalidate any cached values which are normally updated only when a
//! change in state is detected
virtual void invalidateCache();

protected:
//! Cached for saved calculations within each ThermoPhase.
/*!
Expand Down
2 changes: 2 additions & 0 deletions include/cantera/thermo/ThermoPhase.h
Original file line number Diff line number Diff line change
Expand Up @@ -1537,6 +1537,8 @@ class ThermoPhase : public Phase
*/
virtual void setStateFromXML(const XML_Node& state);

virtual void invalidateCache();

//! @}
//! @name Derivatives of Thermodynamic Variables needed for Applications
//! @{
Expand Down
2 changes: 2 additions & 0 deletions interfaces/cython/cantera/_cantera.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ cdef extern from "cantera/thermo/ThermoPhase.h" namespace "Cantera":
void addUndefinedElements() except +
cbool addSpecies(shared_ptr[CxxSpecies]) except +
void initThermo() except +
void invalidateCache() except +

# basic thermodynamic properties
double temperature() except +
Expand Down Expand Up @@ -361,6 +362,7 @@ cdef extern from "cantera/kinetics/Kinetics.h" namespace "Cantera":
void addReaction(shared_ptr[CxxReaction]) except +
void finalize() except +
void modifyReaction(int, shared_ptr[CxxReaction]) except +
void invalidateCache() except +

shared_ptr[CxxReaction] reaction(size_t) except +
cbool isReversible(int) except +
Expand Down
7 changes: 7 additions & 0 deletions src/kinetics/BulkKinetics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -159,4 +159,11 @@ void BulkKinetics::setMultiplier(size_t i, double f) {
m_ROP_ok = false;
}

void BulkKinetics::invalidateCache()
{
Kinetics::invalidateCache();
m_ROP_ok = false;
m_temp += 0.13579;
}

}
6 changes: 6 additions & 0 deletions src/kinetics/GasKinetics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -402,4 +402,10 @@ bool GasKinetics::ready() const
return m_finalized;
}

void GasKinetics::invalidateCache()
{
BulkKinetics::invalidateCache();
m_pres += 0.13579;
}

}
1 change: 1 addition & 0 deletions src/kinetics/Kinetics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -644,6 +644,7 @@ void Kinetics::modifyReaction(size_t i, shared_ptr<Reaction> rNew)
rOld->productString(), rNew->productString());
}
m_reactions[i] = rNew;
invalidateCache();
}

shared_ptr<Reaction> Kinetics::reaction(size_t i)
Expand Down
4 changes: 4 additions & 0 deletions src/thermo/Phase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -864,4 +864,8 @@ bool Phase::ready() const
return (m_kk > 0);
}

void Phase::invalidateCache() {
m_cache.clear();
}

} // namespace Cantera
5 changes: 5 additions & 0 deletions src/thermo/ThermoPhase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -757,6 +757,11 @@ void ThermoPhase::setStateFromXML(const XML_Node& state)
}
}

void ThermoPhase::invalidateCache() {
Phase::invalidateCache();
m_tlast += 0.1234;
}

void ThermoPhase::equilibrate(const std::string& XY, const std::string& solver,
double rtol, int max_steps, int max_iter,
int estimate_equil, int log_level)
Expand Down

0 comments on commit 13fa0c7

Please sign in to comment.