[Python] Wall coverages can be set using a dict or string

This commit is contained in:
Ray Speth 2015-05-01 12:08:33 -04:00
parent 0562f18100
commit c1fda5ca3c
3 changed files with 13 additions and 8 deletions

View file

@ -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)

View file

@ -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 = \

View file

@ -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