diff --git a/interfaces/cython/cantera/_cantera.pxd b/interfaces/cython/cantera/_cantera.pxd index 92bbcac15..07cc19d0f 100644 --- a/interfaces/cython/cantera/_cantera.pxd +++ b/interfaces/cython/cantera/_cantera.pxd @@ -229,6 +229,7 @@ cdef extern from "cantera/thermo/SurfPhase.h": void setSiteDensity(double) except + void setCoverages(double*) except + void setCoveragesByName(Composition&) except + + void setCoveragesNoNorm(double*) except + void getCoverages(double*) except + diff --git a/interfaces/cython/cantera/thermo.pyx b/interfaces/cython/cantera/thermo.pyx index 2ee21d178..3f3e6c265 100644 --- a/interfaces/cython/cantera/thermo.pyx +++ b/interfaces/cython/cantera/thermo.pyx @@ -1191,6 +1191,20 @@ cdef class InterfacePhase(ThermoPhase): np.ascontiguousarray(theta, dtype=np.double) self.surf.setCoverages(&data[0]) + def set_unnormalized_coverages(self, cov): + """ + Set the surface coverages without normalizing to force sum(cov) == 1.0. + Useful primarily when calculating derivatives with respect to cov[k] by + finite difference. + """ + cdef np.ndarray[np.double_t, ndim=1] data + if len(cov) == self.n_species: + data = np.ascontiguousarray(cov, dtype=np.double) + else: + raise ValueError("Array has incorrect length." + " Got {}, expected {}.".format(len(cov), self.n_species)) + self.surf.setCoveragesNoNorm(&data[0]) + cdef class PureFluid(ThermoPhase): """