diff --git a/include/cantera/oneD/OneDim.h b/include/cantera/oneD/OneDim.h index 9ea717fe8..9669cf533 100644 --- a/include/cantera/oneD/OneDim.h +++ b/include/cantera/oneD/OneDim.h @@ -250,6 +250,44 @@ public: //! Clear saved statistics void clearStats(); + //! Return total grid size in each call to solve() + const std::vector& gridSizeStats() { + saveStats(); + return m_gridpts; + } + + //! Return CPU time spent evaluating Jacobians in each call to solve() + const vector_fp& jacobianTimeStats() { + saveStats(); + return m_jacElapsed; + } + + //! Return CPU time spent on non-Jacobian function evaluations in each call + //! to solve() + const vector_fp& evalTimeStats() { + saveStats(); + return m_funcElapsed; + } + + //! Return number of Jacobian evaluations made in each call to solve() + const vector_int& jacobianCountStats() { + saveStats(); + return m_jacEvals; + } + + //! Return number of non-Jacobian function evaluations made in each call to + //! solve() + const vector_int& evalCountStats() { + saveStats(); + return m_funcEvals; + } + + //! Return number of time steps taken in each call to solve() + const vector_int& timeStepStats() { + saveStats(); + return m_timeSteps; + } + //! Set a function that will be called every time #eval is called. //! Can be used to provide keyboard interrupt support in the high-level //! language interfaces. diff --git a/interfaces/cython/cantera/_cantera.pxd b/interfaces/cython/cantera/_cantera.pxd index b5c9f375e..48c4e58bc 100644 --- a/interfaces/cython/cantera/_cantera.pxd +++ b/interfaces/cython/cantera/_cantera.pxd @@ -687,6 +687,13 @@ cdef extern from "cantera/oneD/Sim1D.h": void restore(string, string, int) except + void writeStats(int) except + void clearStats() + vector[size_t]& gridSizeStats() + vector[double]& jacobianTimeStats() + vector[double]& evalTimeStats() + vector[int]& jacobianCountStats() + vector[int]& evalCountStats() + vector[int]& timeStepStats() + int domainIndex(string) except + double value(size_t, size_t, size_t) except + double workValue(size_t, size_t, size_t) except + diff --git a/interfaces/cython/cantera/onedim.pyx b/interfaces/cython/cantera/onedim.pyx index e63b3d557..7459ecdde 100644 --- a/interfaces/cython/cantera/onedim.pyx +++ b/interfaces/cython/cantera/onedim.pyx @@ -802,7 +802,6 @@ cdef class Sim1D: self.sim.restoreTimeSteppingSolution() def show_stats(self, print_time=True): - """ Show the statistics for the last solution. @@ -817,5 +816,41 @@ cdef class Sim1D: """ self.sim.clearStats() + property grid_size_stats: + """Return total grid size in each call to solve()""" + def __get__(self): + return self.sim.gridSizeStats() + + property jacobian_time_stats: + """Return CPU time spent evaluating Jacobians in each call to solve()""" + def __get__(self): + return self.sim.jacobianTimeStats() + + property jacobian_count_stats: + """Return number of Jacobian evaluations made in each call to solve()""" + def __get__(self): + return self.sim.jacobianCountStats() + + property eval_time_stats: + """ + Return CPU time spent on non-Jacobian function evaluations in each call + to solve() + """ + def __get__(self): + return self.sim.evalTimeStats() + + property eval_count_stats: + """ + Return number of non-Jacobian function evaluations made in each call to + solve() + """ + def __get__(self): + return self.sim.evalCountStats() + + property time_step_stats: + """Return number of time steps taken in each call to solve()""" + def __get__(self): + return self.sim.timeStepStats() + def __dealloc__(self): del self.sim