*** empty log message ***

This commit is contained in:
Dave Goodwin 2003-07-30 20:56:57 +00:00
parent ae09566d97
commit ab65fb1607
6 changed files with 238 additions and 214 deletions

View File

@ -1,3 +1,4 @@
#
# Cantera input file processor
#
@ -55,9 +56,10 @@ def get_atomic_wts():
edata = edb.child('ctml/elementData')
e = edata.children()
for el in e:
_atw[el['name']] = el['atomicWt']
if el['atomicWt'] == '':
print 'no wt for ',el['name']
if el['name'] <> 'dummy':
_atw[el['name']] = el['atomicWt']
if el['atomicWt'] == '':
print 'no atomic weight for ',el['name']
def units(length = '', quantity = '', mass = '', time = '', act_energy = ''):
global _ulen, _umol, _ue
@ -383,17 +385,12 @@ class sticking_prob(writer):
class reaction(writer):
def __init__(self,
equation = '',
rate_coeff = None,
k_0 = None,
k_inf = None,
efficiencies = '',
falloff = None,
id = ''
kf = None,
id = '',
):
self._id = id
self._e = equation
self._falloff = falloff
global _reactions
self._num = len(_reactions)+1
r = ''
@ -406,12 +403,8 @@ class reaction(writer):
break
self._r = getReactionSpecies(r)
self._p = getReactionSpecies(p)
self._kf = rate_coeff
self._kf0 = k_0
self._kfinf = k_inf
self._kf = kf
self._type = ''
self._effm = -1.0
self._eff = efficiencies
_reactions.append(self)
@ -419,7 +412,15 @@ class reaction(writer):
if self._id:
id = self._id
else:
id = 'reaction_'+`self._num`
if self._num < 10:
nstr = '000'+`self._num`
elif self._num < 100:
nstr = '00'+`self._num`
elif self._num < 1000:
nstr = '0'+`self._num`
else:
nstr = `self._num`
id = 'reaction_'+nstr
p.addComment(" reaction "+id+" ")
r = p.addChild('reaction')
r['id'] = id
@ -436,47 +437,23 @@ class reaction(writer):
ldim = 0
str = ''
if self._r.has_key('(+'):
self._type = 'falloff'
if not self._falloff:
self._falloff = Lindemann()
if self._r.has_key('M)'):
self._effm = 1.0
del self._r['M)']
del self._p['M)']
else:
for f in self._r.keys():
if f[-1] == ')' and f.find('(') < 0:
self._effm = 0.0
self._eff = f[:-1]+':1.0'
del self._r[f]
del self._p[f]
del self._r['(+']
del self._p['(+']
for s in self._r.keys():
ns = self._r[s]
nm = -999
nl = -999
if s == 'M' or s == 'm':
self._type = 'threeBody'
mdim += 1
ldim -= 3
self._effm = 1.0
else:
str += s+':'+`ns`+' '
str += s+':'+`ns`+' '
for ph in _phases:
if ph.has_species(s):
nm, nl = ph.conc_dim()
break
if nm < 0:
print self._r
raise 'undeclared species '+s
else:
mdim += nm*ns
ldim += nl*ns
for ph in _phases:
if ph.has_species(s):
nm, nl = ph.conc_dim()
break
if nm < 0:
print self._r
raise 'undeclared species '+s
else:
mdim += nm*ns
ldim += nl*ns
# adjust the moles and length powers based on the dimensions of
# the rate of progress (moles/length^2 or moles/length^3)
@ -487,11 +464,7 @@ class reaction(writer):
mdim += -1
ldim += 3
if self._type == 'falloff':
self._kf = (self._kfinf, self._kf0)
else:
self._kf = (self._kf,)
# add the reaction type as an attribute if it has been specified.
if self._type:
r['type'] = self._type
@ -502,96 +475,124 @@ class reaction(writer):
# otherwise, just use the supplied instance.
nm = ''
kfnode = r.addChild('rateCoeff')
if self._type == '':
self._kf = [self._kf]
elif self._type == 'threeBody':
self._kf = [self._kf]
mdim += 1
ldim -= 3
for kf in self._kf:
# compute the pre-exponential units string, and if it begins with a
# dash, remove it.
ku = ufmt(_ulen,-ldim) + ufmt(_umol,-mdim) + ufmt('s',-1)
if ku[0] == '-': ku = ku[1:]
mdim += 1
ldim -= 3
if type(kf) == types.InstanceType:
k = kf
else:
k = Arrhenius(A = kf[0], n = kf[1], E = kf[2])
k.build(kfnode, units = ku, name = nm)
# set values for low-pressure rate coeff if falloff rxn
mdim += 1
ldim -= 3
nm = 'k0'
if self._eff and self._effm >= 0.0:
eff = kfnode.addChild('efficiencies',self._eff)
eff['default'] = `self._effm`
str = str[:-1]
r.addChild('reactants',str)
str = ''
for s in self._p.keys():
ns = self._p[s]
if s == 'M' or s == 'm':
pass
else:
str += s+':'+`ns`+' '
str += s+':'+`ns`+' '
str = str[:-1]
r.addChild('products',str)
if self._falloff:
self._falloff.build(kfnode)
return r
#-------------------
class falloff_reaction(writer):
class three_body_reaction(reaction):
def __init__(self,
equation = '',
k_0 = None,
k_inf = None,
kf = None,
efficiencies = '',
id = '',
):
reaction.__init__(self, equation, kf, id)
self._type = 'threeBody'
self._effm = 1.0
self._eff = efficiencies
# clean up reactant and product lists
for r in self._r.keys():
if r == 'M' or r == 'm':
del self._r[r]
for p in self._p.keys():
if p == 'M' or p == 'm':
del self._p[p]
def build(self, p):
r = reaction.build(self, p)
kfnode = r.child('rateCoeff')
if self._eff:
eff = kfnode.addChild('efficiencies',self._eff)
eff['default'] = `self._effm`
#---------------
class falloff_reaction(reaction):
def __init__(self,
equation = '',
kf0 = None,
kf = None,
efficiencies = '',
falloff = None,
id = ''
):
if self._falloff:
self._falloff = falloff
else:
self._falloff = Lindemann()
self._num = len(_reactions)+1
kf2 = (kf, kf0)
reaction.__init__(self, equation, kf2, id)
self._type = 'falloff'
# use a Lindemann falloff function by default
self._falloff = falloff
if self._falloff == None:
self._falloff = Lindemann()
self._effm = 1.0
self._eff = efficiencies
kf = (kfinf, kf0)
reaction.__init__(self, equation, kf, id)
self._eff = efficiencies
# clean up reactant and product lists
del self._r['(+']
del self._p['(+']
if self._r.has_key('M)'):
del self._r['M)']
del self._p['M)']
if self._r.has_key('m)'):
del self._r['m)']
del self._p['m)']
else:
for r in self._r.keys():
if r[-1] == ')' and r.find('(') < 0:
if self._eff:
raise '(+ '+mspecies+') and '+self._eff+' cannot both be specified'
self._eff = r[-1]+':1.0'
self._effm = 0.0
del self._r[r]
del self._p[r]
def build(self, p):
r = reaction.build(self, p)
if self._r.has_key('M)'):
self._effm = 1.0
del self._r['M)']
del self._p['M)']
else:
for f in self._r.keys():
if f[-1] == ')' and f.find('(') < 0:
self._effm = 0.0
self._eff = f[:-1]+':1.0'
del self._r[f]
del self._p[f]
del self._r['(+']
del self._p['(+']
r['type'] = 'falloff'
# The default rate coefficient type is Arrhenius. If the rate
# coefficient has been specified as a sequence of three
# numbers, then create a new Arrhenius instance for it;
# otherwise, just use the supplied instance.
nm = ''
kfnode = r.addChild('rateCoeff')
kfnode = r.child('rateCoeff')
if self._eff and self._effm >= 0.0:
eff = kfnode.addChild('efficiencies',self._eff)

View File

@ -6,8 +6,11 @@
// Copyright 2001 California Institute of Technology
//
// $Log$
// Revision 1.1 2003-04-14 17:57:52 dggoodwin
// Initial revision
// Revision 1.2 2003-07-30 20:56:57 dggoodwin
// *** empty log message ***
//
// Revision 1.1.1.1 2003/04/14 17:57:52 dggoodwin
// Initial import.
//
// Revision 1.1 2003/03/05 00:28:16 dgg
// *** empty log message ***
@ -833,6 +836,7 @@ next:
}
Reaction rxn;
vector<string> cm;
bool ok = true;
while (1 > 0) {
@ -840,6 +844,7 @@ next:
// skip blank or comment lines
do {
getCKLine(s, comment);
cm.push_back(comment);
}
while (s == "" && comment[0] != '%');
@ -849,6 +854,7 @@ next:
if (nRxns > 0) {
rxn.number = nRxns;
reactions.push_back(rxn);
//rxn.comment.clear();
}
if (nRxns > 0) return ok;
return false;
@ -916,6 +922,8 @@ next:
}
nRxns++;
rxn = Reaction();
rxn.comment = cm;
cm.clear();
}
else auxDataLine = true;
if (comment != "") rxn.lines.push_back(s+'!'+comment);

View File

@ -59,6 +59,7 @@ namespace ckr {
isDuplicate = b.isDuplicate;
lines = b.lines;
number = b.number;
comment = b.comment;
return *this;
}

View File

@ -147,7 +147,7 @@ namespace ckr {
falloffType(r.falloffType),
falloffParameters(r.falloffParameters),
otherAuxData(r.otherAuxData),
lines(r.lines) {}
lines(r.lines), comment(r.comment) {}
/// Destructor
virtual ~Reaction() {}
@ -228,6 +228,11 @@ namespace ckr {
*/
vector<string> lines;
/**
* comments
*/
vector<string> comment;
// methods
double stoichCoefficient(const string& s) const;

View File

@ -238,15 +238,25 @@ namespace pip {
const ckr::ReactionUnits& runits, doublereal version) {
cout << "\n# Reaction " << i+1 << endl;
int nc = rxn.comment.size();
for (int nn = 0; nn < nc; nn++)
if (rxn.comment[nn] != "") cout << "# " << rxn.comment[nn] << endl;
string eqn = ckr::reactionEquation(rxn);
cout << "reaction( \"" << eqn << "\", ";
if (rxn.isThreeBodyRxn)
cout << "three_body_reaction( \"" << eqn << "\", ";
else if (rxn.isFalloffRxn)
cout << "falloff_reaction( \"" << eqn << "\", ";
else
cout << "reaction( \"" << eqn << "\", ";
if (rxn.isFalloffRxn) {
if (rxn.kf.type == ckr::Arrhenius) {
printf("\n k_inf = [%10.5E, %g, %g]", rxn.kf.A, rxn.kf.n, rxn.kf.E);
printf("\n kf = [%10.5E, %g, %g]", rxn.kf.A, rxn.kf.n, rxn.kf.E);
}
if (rxn.kf_aux.type == ckr::Arrhenius) {
printf(",\n k_0 = [%10.5E, %g, %g]", rxn.kf_aux.A, rxn.kf_aux.n, rxn.kf_aux.E);
printf(",\n kf0 = [%10.5E, %g, %g]", rxn.kf_aux.A, rxn.kf_aux.n, rxn.kf_aux.E);
}
if (rxn.falloffType == ckr::Lindemann)
addFalloff("Lindemann",rxn.falloffParameters);
@ -299,7 +309,6 @@ namespace pip {
popError();
doublereal version = 1.0;
cout << "from ctmm import *" << endl;
cout << "dataset(\"" << idtag << "\")" << endl;
@ -448,7 +457,6 @@ namespace pip {
getTransportData(trfile);
}
ck2ct(idtag, r);
cout << "write()" << endl;
}
catch (CanteraError) {
return -1;

View File

@ -1,101 +1,102 @@
<ctml>
<elementData caseSensitive="no">
<element name="H", atomicWt = "1.00794"/>
<element name="D", atomicWt = "2.0147"/>
<element name="Tr", atomicWt = "3.016327"/>
<element name="He", atomicWt = "4.002602"/>
<element name="Li", atomicWt = "6.941"/>
<element name="Be", atomicWt = "9.012182"/>
<element name="B", atomicWt = "10.811"/>
<element name="C", atomicWt = "12.011"/>
<element name="N", atomicWt = "14.00674"/>
<element name="O", atomicWt = "15.9994"/>
<element name="F", atomicWt = "18.9984032"/>
<element name="Ne", atomicWt = "20.1797"/>
<element name="Na", atomicWt = "22.98977"/>
<element name="Mg", atomicWt = "24.3050"/>
<element name="Al", atomicWt = "26.98154"/>
<element name="Si", atomicWt = "28.0855"/>
<element name="P", atomicWt = "30.97376"/>
<element name="S", atomicWt = "32.066"/>
<element name="Cl", atomicWt = "35.4527"/>
<element name="Ar", atomicWt = "39.948"/>
<element name="K", atomicWt = "39.0983"/>
<element name="Ca", atomicWt = "40.078"/>
<element name="Sc", atomicWt = "44.95591"/>
<element name="Ti", atomicWt = "47.88"/>
<element name="V", atomicWt = "50.9415"/>
<element name="Cr", atomicWt = "51.9961"/>
<element name="Mn", atomicWt = "54.9381"/>
<element name="Fe", atomicWt = "55.847"/>
<element name="Co", atomicWt = "58.9332"/>
<element name="Ni", atomicWt = "58.69"/>
<element name="Cu", atomicWt = "63.546"/>
<element name="Zn", atomicWt = "65.39"/>
<element name="Ga", atomicWt = "69.723"/>
<element name="Ge", atomicWt = "72.61"/>
<element name="As", atomicWt = "74.92159"/>
<element name="Se", atomicWt = "78.96"/>
<element name="Br", atomicWt = "79.904"/>
<element name="Kr", atomicWt = "83.80"/>
<element name="Rb", atomicWt = "85.4678"/>
<element name="Sr", atomicWt = "87.62"/>
<element name="Y", atomicWt = "88.90585"/>
<element name="Zr", atomicWt = "91.224"/>
<element name="Nb", atomicWt = "92.90638"/>
<element name="Mo", atomicWt = "95.94 "/>
<element name="Tc", atomicWt = "97.9072"/>
<element name="Ru", atomicWt = "101.07"/>
<element name="Rh", atomicWt = "102.9055"/>
<element name="Pd", atomicWt = "106.42"/>
<element name="Ag", atomicWt = "107.8682"/>
<element name="Cd", atomicWt = "112.411"/>
<element name="In", atomicWt = "114.82"/>
<element name="Sn", atomicWt = "118.710"/>
<element name="Sb", atomicWt = "121.75"/>
<element name="Te", atomicWt = "127.6"/>
<element name="I", atomicWt = " 126.90447"/>
<element name="Xe", atomicWt = "131.29"/>
<element name="Cs", atomicWt = "132.90543"/>
<element name="Ba", atomicWt = "137.327"/>
<element name="La", atomicWt = "138.9055"/>
<element name="Ce", atomicWt = "140.115"/>
<element name="Pr", atomicWt = "140.90765"/>
<element name="Nd", atomicWt = "144.24"/>
<element name="Pm", atomicWt = "144.9127"/>
<element name="Sm", atomicWt = "150.36 "/>
<element name="Eu", atomicWt = "151.965"/>
<element name="Gd", atomicWt = "157.25"/>
<element name="Tb", atomicWt = "158.92534"/>
<element name="Dy", atomicWt = "162.50"/>
<element name="Ho", atomicWt = "164.93032"/>
<element name="Er", atomicWt = "167.26"/>
<element name="Tm", atomicWt = "168.93421"/>
<element name="Yb", atomicWt = "173.04"/>
<element name="Lu", atomicWt = "174.967"/>
<element name="Hf", atomicWt = "178.49"/>
<element name="Ta", atomicWt = "180.9479"/>
<element name="W", atomicWt = "183.85"/>
<element name="Re", atomicWt = "186.207"/>
<element name="Os", atomicWt = "190.2"/>
<element name="Ir", atomicWt = "192.22"/>
<element name="Pt", atomicWt = "195.08"/>
<element name="Au", atomicWt = "196.96654"/>
<element name="Hg", atomicWt = "200.59"/>
<element name="Ti", atomicWt = "204.3833"/>
<element name="Pb", atomicWt = "207.2"/>
<element name="Bi", atomicWt = "208.98037"/>
<element name="Po", atomicWt = "208.9824"/>
<element name="At", atomicWt = "209.9871"/>
<element name="Rn", atomicWt = "222.0176"/>
<element name="Fr", atomicWt = "223.0197"/>
<element name="Ra", atomicWt = "226.0254"/>
<element name="Ac", atomicWt = "227.0279"/>
<element name="Th", atomicWt = "232.0381"/>
<element name="Pa", atomicWt = "231.03588"/>
<element name="U", atomicWt = "238.0508"/>
<element name="Np", atomicWt = "237.0482"/>
<element name="Pu", atomicWt = "244.0482"/>
<element name="E", atomicWt = "0.000545"/>
<element name="H" atomicWt = "1.00794"/>
<element name="D" atomicWt = "2.0147"/>
<element name="Tr" atomicWt = "3.016327"/>
<element name="He" atomicWt = "4.002602"/>
<element name="Li" atomicWt = "6.941"/>
<element name="Be" atomicWt = "9.012182"/>
<element name="B" atomicWt = "10.811"/>
<element name="C" atomicWt = "12.011"/>
<element name="N" atomicWt = "14.00674"/>
<element name="O" atomicWt = "15.9994"/>
<element name="F" atomicWt = "18.9984032"/>
<element name="Ne" atomicWt = "20.1797"/>
<element name="Na" atomicWt = "22.98977"/>
<element name="Mg" atomicWt = "24.3050"/>
<element name="Al" atomicWt = "26.98154"/>
<element name="Si" atomicWt = "28.0855"/>
<element name="P" atomicWt = "30.97376"/>
<element name="S" atomicWt = "32.066"/>
<element name="Cl" atomicWt = "35.4527"/>
<element name="Ar" atomicWt = "39.948"/>
<element name="K" atomicWt = "39.0983"/>
<element name="Ca" atomicWt = "40.078"/>
<element name="Sc" atomicWt = "44.95591"/>
<element name="Ti" atomicWt = "47.88"/>
<element name="V" atomicWt = "50.9415"/>
<element name="Cr" atomicWt = "51.9961"/>
<element name="Mn" atomicWt = "54.9381"/>
<element name="Fe" atomicWt = "55.847"/>
<element name="Co" atomicWt = "58.9332"/>
<element name="Ni" atomicWt = "58.69"/>
<element name="Cu" atomicWt = "63.546"/>
<element name="Zn" atomicWt = "65.39"/>
<element name="Ga" atomicWt = "69.723"/>
<element name="Ge" atomicWt = "72.61"/>
<element name="As" atomicWt = "74.92159"/>
<element name="Se" atomicWt = "78.96"/>
<element name="Br" atomicWt = "79.904"/>
<element name="Kr" atomicWt = "83.80"/>
<element name="Rb" atomicWt = "85.4678"/>
<element name="Sr" atomicWt = "87.62"/>
<element name="Y" atomicWt = "88.90585"/>
<element name="Zr" atomicWt = "91.224"/>
<element name="Nb" atomicWt = "92.90638"/>
<element name="Mo" atomicWt = "95.94 "/>
<element name="Tc" atomicWt = "97.9072"/>
<element name="Ru" atomicWt = "101.07"/>
<element name="Rh" atomicWt = "102.9055"/>
<element name="Pd" atomicWt = "106.42"/>
<element name="Ag" atomicWt = "107.8682"/>
<element name="Cd" atomicWt = "112.411"/>
<element name="In" atomicWt = "114.82"/>
<element name="Sn" atomicWt = "118.710"/>
<element name="Sb" atomicWt = "121.75"/>
<element name="Te" atomicWt = "127.6"/>
<element name="I" atomicWt = " 126.90447"/>
<element name="Xe" atomicWt = "131.29"/>
<element name="Cs" atomicWt = "132.90543"/>
<element name="Ba" atomicWt = "137.327"/>
<element name="La" atomicWt = "138.9055"/>
<element name="Ce" atomicWt = "140.115"/>
<element name="Pr" atomicWt = "140.90765"/>
<element name="Nd" atomicWt = "144.24"/>
<element name="Pm" atomicWt = "144.9127"/>
<element name="Sm" atomicWt = "150.36 "/>
<element name="Eu" atomicWt = "151.965"/>
<element name="Gd" atomicWt = "157.25"/>
<element name="Tb" atomicWt = "158.92534"/>
<element name="Dy" atomicWt = "162.50"/>
<element name="Ho" atomicWt = "164.93032"/>
<element name="Er" atomicWt = "167.26"/>
<element name="Tm" atomicWt = "168.93421"/>
<element name="Yb" atomicWt = "173.04"/>
<element name="Lu" atomicWt = "174.967"/>
<element name="Hf" atomicWt = "178.49"/>
<element name="Ta" atomicWt = "180.9479"/>
<element name="W" atomicWt = "183.85"/>
<element name="Re" atomicWt = "186.207"/>
<element name="Os" atomicWt = "190.2"/>
<element name="Ir" atomicWt = "192.22"/>
<element name="Pt" atomicWt = "195.08"/>
<element name="Au" atomicWt = "196.96654"/>
<element name="Hg" atomicWt = "200.59"/>
<element name="Ti" atomicWt = "204.3833"/>
<element name="Pb" atomicWt = "207.2"/>
<element name="Bi" atomicWt = "208.98037"/>
<element name="Po" atomicWt = "208.9824"/>
<element name="At" atomicWt = "209.9871"/>
<element name="Rn" atomicWt = "222.0176"/>
<element name="Fr" atomicWt = "223.0197"/>
<element name="Ra" atomicWt = "226.0254"/>
<element name="Ac" atomicWt = "227.0279"/>
<element name="Th" atomicWt = "232.0381"/>
<element name="Pa" atomicWt = "231.03588"/>
<element name="U" atomicWt = "238.0508"/>
<element name="Np" atomicWt = "237.0482"/>
<element name="Pu" atomicWt = "244.0482"/>
<element name="E" atomicWt = "0.000545"/>
<element name="dummy" atomicWt = "0.0"/>
</elementData>
</ctml>