From aa2b31276ee12c4513e823c40465703cb7ad8c58 Mon Sep 17 00:00:00 2001 From: Dave Goodwin Date: Wed, 2 Jun 2004 12:57:42 +0000 Subject: [PATCH] minor cleanup --- Cantera/python/Cantera/Func.py | 19 +++++- Cantera/python/Cantera/Phase.py | 97 ++++++++++++++++++--------- Cantera/python/Cantera/ThermoPhase.py | 12 +++- Cantera/python/examples/reactor1.py | 50 ++++++++------ Cantera/python/examples/reactor2.py | 51 +++++++------- 5 files changed, 150 insertions(+), 79 deletions(-) diff --git a/Cantera/python/Cantera/Func.py b/Cantera/python/Cantera/Func.py index 227afac16..3f5f098d0 100644 --- a/Cantera/python/Cantera/Func.py +++ b/Cantera/python/Cantera/Func.py @@ -20,6 +20,13 @@ class Func1: classes are designed to be used with the Cantera kernel. """ def __init__(self, typ, n, coeffs=[]): + """ + typ - functor type + + n - order + + coeffs - coefficient array + """ self.n = n self.coeffs = asarray(coeffs,'d') self._func_id = _cantera.func_new(typ, n, self.coeffs) @@ -73,7 +80,8 @@ class Func1: return RatioFunction(other, self) def func_id(self): - """Return the integer index used internally to access the kernel-level object.""" + """Return the integer index used internally to access the + kernel-level object.""" return self._func_id @@ -88,6 +96,9 @@ class Polynomial(Func1): >>> p2 = Polynomial([6.0, 8.0]) # 8t + 6 """ def __init__(self, coeffs=[]): + """ + coeffs - polynomial coefficients + """ Func1.__init__(self, 2, len(coeffs)-1, coeffs) @@ -181,7 +192,13 @@ def Const(value): class PeriodicFunction(Func1): + """Converts a function into a periodic function with period T.""" def __init__(self, func, T): + """ + func - initial non-periodic function + + T - period [s] + """ Func1.__init__(self, 50, func.func_id(), array([T],'d')) diff --git a/Cantera/python/Cantera/Phase.py b/Cantera/python/Cantera/Phase.py index 180031ddd..e15532e88 100755 --- a/Cantera/python/Cantera/Phase.py +++ b/Cantera/python/Cantera/Phase.py @@ -34,6 +34,8 @@ class Phase: pass def phase_id(self): + """The integer index used to access the kernel-level object. + Internal.""" return self._phase_id def nElements(self): @@ -41,7 +43,12 @@ class Phase: return _cantera.phase_nelements(self._phase_id) def atomicWeights(self, elements = []): - """Array of element molar masses [kg/kmol].""" + """Array of element molar masses [kg/kmol]. + + If a sequence of element symbols is supplied, only the values + for those elements are returned, ordered as in the + list. Otherwise, the values are for all elements in the phase, + ordered as in the input file. """ atw = _cantera.phase_getarray(self._phase_id,1) if elements: ae = [] @@ -57,9 +64,13 @@ class Phase: """Number of species.""" return _cantera.phase_nspecies(self._phase_id) - def nAtoms(self, species = -1, element = -1): + def nAtoms(self, species = None, element = None): """Number of atoms of element 'element' in species 'species'. - The element and species may be specified by name or by number.""" + The element and species may be specified by name or by number. + >>> ph.nAtoms('CH4','H') + ___ 4 + + """ try: m = self.elementIndex(element) k = self.speciesIndex(species) @@ -86,30 +97,34 @@ class Phase: return _cantera.phase_molardensity(self._phase_id) def meanMolecularWeight(self): - """Mean molar mass [kg/kmol]. - DEPRECATED: use meanMolarMass""" + """Mean molar mass [kg/kmol].""" return _cantera.phase_meanmolwt(self._phase_id) def meanMolarMass(self): """Mean molar mass [kg/kmol].""" return _cantera.phase_meanmolwt(self._phase_id) - def molarMasses(self, species = []): + def molarMasses(self, species = None): """Array of species molar masses [kg/kmol].""" mm = _cantera.phase_getarray(self._phase_id,22) return self.selectSpecies(mm, species) - def molecularWeights(self, species = []): - """Array of species molar masses [kg/kmol]. - DEPRECATED: use molarMasses""" + def molecularWeights(self, species = None): + """Array of species molar masses [kg/kmol].""" return self.molarMasses(species) - def moleFractions(self, species = []): - """Species mole fraction array.""" + def moleFractions(self, species = None): + """Species mole fraction array. + If optional argument 'species' + is supplied, then only the values for the selected species are + returned. + >>> x1 = ph.moleFractions() # all species + >>> x2 = ph.moleFractions(['OH', 'CH3'. 'O2']) + """ x = _cantera.phase_getarray(self._phase_id,20) return self.selectSpecies(x, species) - def moleFraction(self, species=-1): + def moleFraction(self, species): """Mole fraction of a species, referenced by name or index number. >>> ph.moleFraction(4) @@ -119,13 +134,19 @@ class Phase: return _cantera.phase_molefraction(self._phase_id,k) - def massFractions(self, species = []): - """Species mass fraction array.""" + def massFractions(self, species = None): + """Species mass fraction array. + If optional argument 'species' + is supplied, then only the values for the selected species are + returned. + >>> y1 = ph.massFractions() # all species + >>> y2 = ph.massFractions(['OH', 'CH3'. 'O2']) + """ y = _cantera.phase_getarray(self._phase_id,21) return self.selectSpecies(y, species) - def massFraction(self, species=-1): + def massFraction(self, species): """Mass fraction of one species, referenced by name or index number. >>> ph.massFraction(4) @@ -136,7 +157,7 @@ class Phase: def elementName(self,m): - """Name of element m.""" + """Name of the element with index number m.""" return _cantera.phase_getstring(self._phase_id,1,m) def elementNames(self): @@ -144,7 +165,7 @@ class Phase: nel = self.nElements() return map(self.elementName,range(nel)) - def elementIndex(self, element=-1): + def elementIndex(self, element): """The index of element 'element', which may be specified as a string or an integer index. In the latter case, the index is checked for validity and returned. If no such element is @@ -173,7 +194,7 @@ class Phase: return map(self.speciesName,range(nsp)) - def speciesIndex(self, species=-1): + def speciesIndex(self, species): """The index of species 'species', which may be specified as a string or an integer index. In the latter case, the index is checked for validity and returned. If no such species is @@ -198,15 +219,18 @@ class Phase: _cantera.phase_setfp(self._phase_id,2,rho) def setMoleFractions(self, x, norm = 1): - """Set the mole fractions. The values may be input either - in a string or a sequence. + """Set the mole fractions. + + x - string or array of mole fraction values + + norm - If non-zero (default), array values will be + scaled to sum to 1.0. + >>> ph.setMoleFractions('CO:1, H2:7, H2O:7.8') >>> x = [1.0]*ph.nSpecies() >>> ph.setMoleFractions(x) - By default, the input values will be scaled to sum to 1.0. - If this is not desired, supply a third parameter 'norm' set to zero - >>> ph.setMoleFractions(x, norm = 0) - (Note that this only works if an array is input.) + >>> ph.setMoleFractions(x, norm = 0) # don't normalize values + """ if type(x) == types.StringType: _cantera.phase_setstring(self._phase_id,1,x) @@ -216,7 +240,7 @@ class Phase: def setMassFractions(self, x, norm = 1): """Set the mass fractions. - See also: setMoleFractions + See: setMoleFractions """ if type(x) == types.StringType: _cantera.phase_setstring(self._phase_id,2,x) @@ -224,7 +248,11 @@ class Phase: _cantera.phase_setarray(self._phase_id,2,norm,Numeric.asarray(x)) def setState_TRX(self, t, rho, x): - """Set the temperature, density, and mole fractions.""" + """Set the temperature, density, and mole fractions. The mole + fractions may be entered as a string or array, + >>> ph.setState_TRX(600.0, 2.0e-3, 'CH4:0.4, O2:0.6') + """ + self.setTemperature(t) self.setMoleFractions(x) self.setDensity(rho) @@ -236,15 +264,24 @@ class Phase: self.setDensity(rho) def setState_TR(self, t, rho): - """Set the temperature and density.""" + """Set the temperature and density, leaving the composition + unchanged.""" self.setTemperature(t) self.setDensity(rho) - def selectSpecies(self, f, sp): - if sp: + def selectSpecies(self, f, species): + """Given an array 'f' of floating-point species properties, + return a Numeric array of those values corresponding to species + listed in 'species'. This method is used internally to implement + species selection in methods like moleFractions, massFractions, etc. + >>> f = ph.chemPotentials() + >>> muo2, muh2 = ph.selectSpecies(f, ['O2', 'H2']) + """ + + if species: fs = [] k = 0 - for s in sp: + for s in species: k = self.speciesIndex(s) fs.append(f[k]) return Numeric.asarray(fs) diff --git a/Cantera/python/Cantera/ThermoPhase.py b/Cantera/python/Cantera/ThermoPhase.py index f75526194..0d131a256 100644 --- a/Cantera/python/Cantera/ThermoPhase.py +++ b/Cantera/python/Cantera/ThermoPhase.py @@ -10,7 +10,9 @@ def thermoIndex(id): return _cantera.thermo_thermoIndex(id) class ThermoPhase(Phase): - """ Class ThermoPhase may be used to represent the intensive state + """ Phases of matter. + + Class ThermoPhase may be used to represent the intensive state of a homogeneous phase of matter, which might be a gas, liquid, or solid. """ @@ -20,8 +22,12 @@ class ThermoPhase(Phase): def __init__(self, xml_phase=None, index=-1): - """Create a new object representing a phase of matter, or wrap - an existing kernel instance.""" + """ + xml_phase - CTML node specifying the attributes of this phase + + index - optional. If positive, create only a Python wrapper for + an existing kernel object + """ self._phase_id = 0 self._owner = 0 diff --git a/Cantera/python/examples/reactor1.py b/Cantera/python/examples/reactor1.py index 99672be6b..ed31322b3 100644 --- a/Cantera/python/examples/reactor1.py +++ b/Cantera/python/examples/reactor1.py @@ -3,6 +3,8 @@ Constant-pressure, adiabatic kinetics simulation. """ +import sys + from Cantera import * from Cantera.Reactor import * from Cantera.Func import * @@ -41,25 +43,29 @@ for n in range(100): # plot the results if matplotlib is installed. # see http://matplotlib.sourceforge.net to get it -try: - from matplotlib.matlab import * - clf - subplot(2,2,1) - plot(tim,data[:,0]) - xlabel('Time (s)'); - ylabel('Temperature (K)'); - subplot(2,2,2) - plot(tim,data[:,1]) - xlabel('Time (s)'); - ylabel('OH Mole Fraction'); - subplot(2,2,3) - plot(tim,data[:,2]); - xlabel('Time (s)'); - ylabel('H Mole Fraction'); - subplot(2,2,4) - plot(tim,data[:,3]); - xlabel('Time (s)'); - ylabel('H2 Mole Fraction'); - show() -except: - pass +args = sys.argv +if len(args) > 1 and args[1] == '-plot': + try: + from matplotlib.matlab import * + clf + subplot(2,2,1) + plot(tim,data[:,0]) + xlabel('Time (s)'); + ylabel('Temperature (K)'); + subplot(2,2,2) + plot(tim,data[:,1]) + xlabel('Time (s)'); + ylabel('OH Mole Fraction'); + subplot(2,2,3) + plot(tim,data[:,2]); + xlabel('Time (s)'); + ylabel('H Mole Fraction'); + subplot(2,2,4) + plot(tim,data[:,3]); + xlabel('Time (s)'); + ylabel('H2 Mole Fraction'); + show() + except: + pass +else: + print """To view a plot of these results, run this script with the option -plot""" diff --git a/Cantera/python/examples/reactor2.py b/Cantera/python/examples/reactor2.py index 3b924f1e6..9968d8627 100644 --- a/Cantera/python/examples/reactor2.py +++ b/Cantera/python/examples/reactor2.py @@ -18,7 +18,7 @@ instructive. """ - +import sys from Cantera import * from Cantera.Reactor import * from Cantera.Func import * @@ -96,27 +96,32 @@ import os print 'Output written to file piston.csv' print 'Directory: '+os.getcwd() -if 1: - from matplotlib.matlab import * - clf - subplot(2,2,1) - plot(tm, temp[:,0],'g-',tm, temp[:,1],'b-') - legend(['Reactor 1','Reactor 2'],2) - xlabel('Time (s)'); - ylabel('Temperature (K)'); +args = sys.argv +if len(args) > 1 and args[1] == '-plot': + try: + from matplotlib.matlab import * + clf + subplot(2,2,1) + plot(tm, temp[:,0],'g-',tm, temp[:,1],'b-') + legend(['Reactor 1','Reactor 2'],2) + xlabel('Time (s)'); + ylabel('Temperature (K)'); + + subplot(2,2,2) + plot(tm, pres[:,0],'g-',tm, pres[:,1],'b-') + legend(['Reactor 1','Reactor 2'],2) + xlabel('Time (s)'); + ylabel('Pressure (Bar)'); - subplot(2,2,2) - plot(tm, pres[:,0],'g-',tm, pres[:,1],'b-') - legend(['Reactor 1','Reactor 2'],2) - xlabel('Time (s)'); - ylabel('Pressure (Bar)'); - - subplot(2,2,3) - plot(tm, vol[:,0],'g-',tm, vol[:,1],'b-') - legend(['Reactor 1','Reactor 2'],2) - xlabel('Time (s)'); - ylabel('Volume (m^3)'); + subplot(2,2,3) + plot(tm, vol[:,0],'g-',tm, vol[:,1],'b-') + legend(['Reactor 1','Reactor 2'],2) + xlabel('Time (s)'); + ylabel('Volume (m^3)'); - show() -#except: -# pass + show() + except: + pass +else: + print """To view a plot of these results, run this script with the option -plot""" +