diff --git a/interfaces/cython/cantera/_cantera.pxd b/interfaces/cython/cantera/_cantera.pxd index bc094bbc7..90f7c1fa2 100644 --- a/interfaces/cython/cantera/_cantera.pxd +++ b/interfaces/cython/cantera/_cantera.pxd @@ -213,6 +213,7 @@ cdef extern from "cantera/thermo/SurfPhase.h": double siteDensity() void setSiteDensity(double) void setCoverages(double*) except + + void setCoveragesByName(Composition&) except + void getCoverages(double*) except + diff --git a/interfaces/cython/cantera/test/test_thermo.py b/interfaces/cython/cantera/test/test_thermo.py index 3c47061cf..d0d12a392 100644 --- a/interfaces/cython/cantera/test/test_thermo.py +++ b/interfaces/cython/cantera/test/test_thermo.py @@ -557,6 +557,31 @@ class TestInterfacePhase(utilities.CanteraTest): self.interface.site_density = 100 self.assertNear(self.interface.site_density, 100) + def test_coverages_array(self): + C = np.zeros(self.interface.n_species) + C[1] = 0.25 + C[3] = 0.125 + C[4] = 0.125 + self.interface.coverages = C + C = self.interface.coverages + # should now be normalized + self.assertNear(C[1], 0.5) + self.assertNear(C[3], 0.25) + self.assertNear(C[4], 0.25) + self.assertNear(sum(C), 1.0) + + def test_coverages_string(self): + self.interface.coverages = 'c6HM:0.2, c6H*:0.8' + C = self.interface.coverages + self.assertNear(C[self.interface.species_index('c6HM')], 0.2) + self.assertNear(C[self.interface.species_index('c6H*')], 0.8) + + def test_coverages_dict(self): + self.interface.coverages = {'c6**':1.0, 'c6*M':3.0} + C = self.interface.coverages + self.assertNear(C[self.interface.species_index('c6**')], 0.25) + self.assertNear(C[self.interface.species_index('c6*M')], 0.75) + class ImportTest(utilities.CanteraTest): """ diff --git a/interfaces/cython/cantera/thermo.pyx b/interfaces/cython/cantera/thermo.pyx index 3f1cecef1..7987985a2 100644 --- a/interfaces/cython/cantera/thermo.pyx +++ b/interfaces/cython/cantera/thermo.pyx @@ -1067,6 +1067,10 @@ cdef class InterfacePhase(ThermoPhase): return data def __set__(self, theta): + if isinstance(theta, (dict, str, unicode, bytes)): + self.surf.setCoveragesByName(comp_map(theta)) + return + if len(theta) != self.n_species: raise ValueError("Array has incorrect length") cdef np.ndarray[np.double_t, ndim=1] data = \