diff --git a/interfaces/cython/cantera/_cantera.pxd b/interfaces/cython/cantera/_cantera.pxd index 90f7c1fa2..5c84bc982 100644 --- a/interfaces/cython/cantera/_cantera.pxd +++ b/interfaces/cython/cantera/_cantera.pxd @@ -472,6 +472,7 @@ cdef extern from "cantera/zeroD/Wall.h": void setHeatFlux(CxxFunc1*) void setKinetics(CxxKinetics*, CxxKinetics*) void setCoverages(int, double*) + void setCoverages(int, Composition&) except + void syncCoverages(int) double vdot(double) double Q(double) diff --git a/interfaces/cython/cantera/reactor.pyx b/interfaces/cython/cantera/reactor.pyx index 2cfce2a34..c8e73cfe0 100644 --- a/interfaces/cython/cantera/reactor.pyx +++ b/interfaces/cython/cantera/reactor.pyx @@ -324,6 +324,11 @@ cdef class WallSurface: def __set__(self, coverages): if self._kinetics is None: raise Exception("Can't set coverages before assigning kinetics manager.") + + if isinstance(coverages, (dict, str, unicode, bytes)): + self.cxxwall.setCoverages(self.side, comp_map(coverages)) + return + if len(coverages) != self._kinetics.n_species: raise ValueError('Incorrect number of site coverages specified') cdef np.ndarray[np.double_t, ndim=1] data = \ diff --git a/interfaces/cython/cantera/test/test_reactor.py b/interfaces/cython/cantera/test/test_reactor.py index 8b58f1501..6683fd19d 100644 --- a/interfaces/cython/cantera/test/test_reactor.py +++ b/interfaces/cython/cantera/test/test_reactor.py @@ -814,12 +814,10 @@ class TestWallKinetics(utilities.CanteraTest): self.make_reactors() self.w.left.kinetics = self.interface - C = np.zeros(self.interface.n_species) - C[0] = 0.3 - C[4] = 0.7 - - self.w.left.coverages = C - self.assertArrayNear(self.w.left.coverages, C) + self.w.left.coverages = {'c6HH':0.3, 'c6HM':0.7} + self.assertNear(self.w.left.coverages[0], 0.3) + self.assertNear(self.w.left.coverages[1], 0.0) + self.assertNear(self.w.left.coverages[4], 0.7) self.net.advance(1e-5) C_left = self.w.left.coverages @@ -829,8 +827,9 @@ class TestWallKinetics(utilities.CanteraTest): self.make_reactors() self.w.right.kinetics = self.interface - self.w.right.coverages = C - self.assertArrayNear(self.w.right.coverages, C) + self.w.right.coverages = 'c6HH:0.3, c6HM:0.7' + self.assertNear(self.w.right.coverages[0], 0.3) + self.assertNear(self.w.right.coverages[4], 0.7) self.assertEqual(self.w.left.kinetics, None) with self.assertRaises(Exception): self.w.left.coverages