diff --git a/Cantera/cxx/include/zerodim.h b/Cantera/cxx/include/zerodim.h index 6d9c0a339..214a9b245 100644 --- a/Cantera/cxx/include/zerodim.h +++ b/Cantera/cxx/include/zerodim.h @@ -2,6 +2,7 @@ #define CT_INCL_ZERODIM_H #include "kernel/zeroD/Reactor.h" +#include "kernel/zeroD/ReactorNet.h" #include "kernel/zeroD/Reservoir.h" #include "kernel/zeroD/Wall.h" #include "kernel/zeroD/flowControllers.h" diff --git a/Cantera/python/Cantera/ctml_writer.py b/Cantera/python/Cantera/ctml_writer.py index b254d9c8c..f8fb1e371 100644 --- a/Cantera/python/Cantera/ctml_writer.py +++ b/Cantera/python/Cantera/ctml_writer.py @@ -332,6 +332,37 @@ class NASA(thermo): u = n.addChild("floatArray", str) u["size"] = "7" u["name"] = "coeffs" + + +class Shomate(thermo): + """Shomate polynomial parameterization.""" + + def __init__(self, range = (0.0, 0.0), + coeffs = [], p0 = -1.0): + self._t = range + self._pref = p0 + if len(coeffs) <> 7: + raise 'Shomate coefficient list must have length = 7' + self._coeffs = coeffs + + + def build(self, t): + n = t.addChild("Shomate") + n['Tmin'] = `self._t[0]` + n['Tmax'] = `self._t[1]` + if self._pref <= 0.0: + n['P0'] = `_pref` + else: + n['P0'] = `self._pref` + str = '' + for i in range(4): + str += '%17.9E, ' % self._coeffs[i] + str += '\n' + str += '%17.9E, %17.9E, %17.9E' % (self._coeffs[4], + self._coeffs[5], self._coeffs[6]) + u = n.addChild("floatArray", str) + u["size"] = "7" + u["name"] = "coeffs" class const_cp(thermo): @@ -1039,7 +1070,7 @@ class stoichiometric_solid(phase): def build(self, p): ph = phase.build(self, p) e = ph.addChild("thermo") - e['model'] = 'StoichCompound' + e['model'] = 'StoichSubstance' addFloat(e, 'density', self._dens, defunits = _umass+'/'+_ulen+'3') if self._tr: t = ph.addChild('transport') @@ -1358,7 +1389,10 @@ validate() # $Revision$ # $Date$ # $Log$ -# Revision 1.32 2004-04-23 16:35:32 dggoodwin +# Revision 1.33 2004-04-23 19:03:21 dggoodwin +# *** empty log message *** +# +# Revision 1.32 2004/04/23 16:35:32 dggoodwin # *** empty log message *** # # Revision 1.31 2004/03/12 05:59:59 dggoodwin diff --git a/Cantera/src/NasaThermo.h b/Cantera/src/NasaThermo.h index b1da5b626..a2a533969 100755 --- a/Cantera/src/NasaThermo.h +++ b/Cantera/src/NasaThermo.h @@ -86,7 +86,7 @@ namespace Cantera { vector_fp chigh(7); copy(c + 8, c + 15, chigh.begin()); - checkContinuity(tmid, clow, chigh.begin()); + //checkContinuity(tmid, clow, chigh.begin()); m_high[igrp-1].push_back(NasaPoly1(index, tmid, thigh, pref, chigh.begin())); @@ -241,7 +241,10 @@ namespace Cantera { #endif // $Log$ -// Revision 1.3 2004-04-22 21:44:36 dggoodwin +// Revision 1.4 2004-04-23 19:03:22 dggoodwin +// *** empty log message *** +// +// Revision 1.3 2004/04/22 21:44:36 dggoodwin // *** empty log message *** // // Revision 1.2 2003/11/01 04:50:35 dggoodwin diff --git a/Cantera/src/SpeciesThermoFactory.h b/Cantera/src/SpeciesThermoFactory.h index 6e52e1b68..0d9eeb842 100755 --- a/Cantera/src/SpeciesThermoFactory.h +++ b/Cantera/src/SpeciesThermoFactory.h @@ -29,7 +29,7 @@ namespace Cantera { public: UnknownSpeciesThermoModel(string proc, string spName, string speciesThermoModel) : - CanteraError(proc, "species :" + spName + + CanteraError(proc, "species " + spName + ": Specified speciesThermoPhase model " + speciesThermoModel + " does not match any known type.") {} diff --git a/Cantera/src/importCTML.cpp b/Cantera/src/importCTML.cpp index 908b15b8e..9eef8e953 100755 --- a/Cantera/src/importCTML.cpp +++ b/Cantera/src/importCTML.cpp @@ -156,14 +156,21 @@ namespace Cantera { * Install a NASA polynomial thermodynamic property * parameterization for species k. */ - static void installNasaThermo(SpeciesThermo& sp, int k, const XML_Node& f0, - const XML_Node& f1) { + static void installNasaThermo(SpeciesThermo& sp, int k, const XML_Node* f0ptr, + const XML_Node* f1ptr) { doublereal tmin0, tmax0, tmin1, tmax1, tmin, tmid, tmax; + const XML_Node& f0 = *f0ptr; + bool dualRange = false; + if (f1ptr) {dualRange = true;} tmin0 = fpValue(f0["Tmin"]); tmax0 = fpValue(f0["Tmax"]); - tmin1 = fpValue(f1["Tmin"]); - tmax1 = fpValue(f1["Tmax"]); + tmin1 = tmax0; + tmax1 = tmin1 + 0.0001; + if (dualRange) { + tmin1 = fpValue((*f1ptr)["Tmin"]); + tmax1 = fpValue((*f1ptr)["Tmax"]); + } vector_fp c0, c1; if (fabs(tmax0 - tmin1) < 0.01) { @@ -171,13 +178,16 @@ namespace Cantera { tmid = tmax0; tmax = tmax1; getFloatArray(f0.child("floatArray"), c0, false); - getFloatArray(f1.child("floatArray"), c1, false); + if (dualRange) + getFloatArray(f1ptr->child("floatArray"), c1, false); + else + c1.resize(7,0.0); } else if (fabs(tmax1 - tmin0) < 0.01) { tmin = tmin1; tmid = tmax1; tmax = tmax0; - getFloatArray(f1.child("floatArray"), c0, false); + getFloatArray(f1ptr->child("floatArray"), c0, false); getFloatArray(f0.child("floatArray"), c1, false); } else { @@ -197,36 +207,88 @@ namespace Cantera { } + /** - * Install a Shomate polynomial thermodynamic property + * Install a NASA polynomial thermodynamic property * parameterization for species k. */ - static void installShomateThermo(SpeciesThermo& sp, int k, const XML_Node& f) { - doublereal tmin, tmid, tmax; - tmin = fpValue(f["Tmin"]); - tmid = fpValue(f["Tmid"]); - tmax = fpValue(f["Tmax"]); + static void installShomateThermo(SpeciesThermo& sp, int k, const XML_Node* f0ptr, + const XML_Node* f1ptr) { + doublereal tmin0, tmax0, tmin1, tmax1, tmin, tmid, tmax; + + const XML_Node& f0 = *f0ptr; + bool dualRange = false; + if (f1ptr) {dualRange = true;} + tmin0 = fpValue(f0["Tmin"]); + tmax0 = fpValue(f0["Tmax"]); + tmin1 = tmax0; + tmax1 = tmin1 + 0.0001; + if (dualRange) { + tmin1 = fpValue((*f1ptr)["Tmin"]); + tmax1 = fpValue((*f1ptr)["Tmax"]); + } - vector fa; - f.getChildren("floatArray",fa); vector_fp c0, c1; - getFloatArray(*fa[0], c0, false); - getFloatArray(*fa[1], c1, false); + if (fabs(tmax0 - tmin1) < 0.01) { + tmin = tmin0; + tmid = tmax0; + tmax = tmax1; + getFloatArray(f0.child("floatArray"), c0, false); + if (dualRange) + getFloatArray(f1ptr->child("floatArray"), c1, false); + else + c1.resize(7,0.0); + } + else if (fabs(tmax1 - tmin0) < 0.01) { + tmin = tmin1; + tmid = tmax1; + tmax = tmax0; + getFloatArray(f1ptr->child("floatArray"), c0, false); + getFloatArray(f0.child("floatArray"), c1, false); + } + else { + throw CanteraError("installShomateThermo", + "non-continuous temperature ranges."); + } array_fp c(15); c[0] = tmid; doublereal p0 = OneAtm; - if ((*fa[0])["title"] == "low") { - copy(c0.begin(), c0.end(), c.begin() + 1); - copy(c1.begin(), c1.end(), c.begin() + 8); - } - else { - copy(c1.begin(), c1.end(), c.begin() + 1); - copy(c0.begin(), c0.end(), c.begin() + 8); - } + copy(c0.begin(), c0.begin()+7, c.begin() + 1); + copy(c1.begin(), c1.begin()+7, c.begin() + 8); sp.install(k, SHOMATE, c.begin(), tmin, tmax, p0); } +// /** +// * Install a Shomate polynomial thermodynamic property +// * parameterization for species k. +// */ +// static void installShomateThermo(SpeciesThermo& sp, int k, const XML_Node& f) { +// doublereal tmin, tmid, tmax; +// tmin = fpValue(f["Tmin"]); +// tmid = fpValue(f["Tmid"]); +// tmax = fpValue(f["Tmax"]); + +// vector fa; +// f.getChildren("floatArray",fa); +// vector_fp c0, c1; +// getFloatArray(*fa[0], c0, false); +// getFloatArray(*fa[1], c1, false); +// array_fp c(15); +// c[0] = tmid; +// doublereal p0 = OneAtm; +// if ((*fa[0])["title"] == "low") { +// copy(c0.begin(), c0.end(), c.begin() + 1); +// copy(c1.begin(), c1.end(), c.begin() + 8); +// } +// else { +// copy(c1.begin(), c1.end(), c.begin() + 1); +// copy(c0.begin(), c0.end(), c.begin() + 8); +// } +// sp.install(k, SHOMATE, c.begin(), tmin, tmax, p0); +// } + + /** * Install a constant-cp thermodynamic property * parameterization for species k. @@ -319,25 +381,32 @@ namespace Cantera { const vector& tp = thermo.children(); int nc = tp.size(); if (nc == 1) { - const XML_Node& f = *tp[0]; - if (f.name() == "Shomate") { - installShomateThermo(spthermo, k, f); + const XML_Node* f = tp[0]; + if (f->name() == "Shomate") { + installShomateThermo(spthermo, k, f, 0); } - else if (f.name() == "const_cp") { - installSimpleThermo(spthermo, k, f); + else if (f->name() == "const_cp") { + installSimpleThermo(spthermo, k, *f); } + else if (f->name() == "NASA") { + installNasaThermo(spthermo, k, f, 0); + } else { - UnknownSpeciesThermoModel("installSpecies", s["name"], f.name()); + UnknownSpeciesThermoModel("installSpecies", s["name"], f->name()); } } else if (nc == 2) { - const XML_Node& f0 = *tp[0]; - const XML_Node& f1 = *tp[1]; - if (f0.name() == "NASA" && f1.name() == "NASA") { + const XML_Node* f0 = tp[0]; + const XML_Node* f1 = tp[1]; + if (f0->name() == "NASA" && f1->name() == "NASA") { installNasaThermo(spthermo, k, f0, f1); - } else { + } + else if (f0->name() == "Shomate" && f1->name() == "Shomate") { + installShomateThermo(spthermo, k, f0, f1); + } + else { UnknownSpeciesThermoModel("installSpecies", s["name"], - f0.name() + f1.name()); + f0->name() + " and " + f1->name()); } } else { @@ -397,7 +466,7 @@ namespace Cantera { +" "+ fp2str(balp[b->first]); } } - if (msg != "") { + if (!ok) { msg = "The following reaction is unbalanced:\n\t" + rdata.equation + "\n" + msg + "\n"; throw CanteraError("checkRxnElementBalance",msg); diff --git a/examples/cxx/equil_example1.cpp b/examples/cxx/equil_example1.cpp index cfd9aadd7..ebacffa35 100755 --- a/examples/cxx/equil_example1.cpp +++ b/examples/cxx/equil_example1.cpp @@ -70,7 +70,7 @@ int equil_example1(int job) { // create a gas mixture, and set its state - IdealGasMix gas("silane.xml", "silane"); + IdealGasMix gas("silane.cti", "silane"); int nsp = gas.nSpecies(); int ntemps = 50; // number of temperatures diff --git a/examples/cxx/kinetics_example1.cpp b/examples/cxx/kinetics_example1.cpp index e0a666cc0..c481cd93d 100755 --- a/examples/cxx/kinetics_example1.cpp +++ b/examples/cxx/kinetics_example1.cpp @@ -81,6 +81,11 @@ int kinetics_example1(int job) { w.setExpansionRateCoeff(1.e9); w.setArea(1.0); + // create a container object to run the simulation + // and add the reactor to it + ReactorNet sim; + sim.addReactor(&r); + double tm; double dt = 1.e-5; // interval at which output is written int nsteps = 100; // number of intervals @@ -94,7 +99,7 @@ int kinetics_example1(int job) { clock_t t0 = clock(); for (int i = 1; i <= nsteps; i++) { tm = i*dt; - r.advance(tm); + sim.advance(tm); saveSoln(tm, gas, soln); } clock_t t1 = clock(); @@ -111,8 +116,8 @@ int kinetics_example1(int job) { cout << " Tfinal = " << r.temperature() << endl; cout << " time = " << tmm << endl; cout << " number of residual function evaluations = " - << r.integrator().nEvals() << endl; - cout << " time per evaluation = " << tmm/r.integrator().nEvals() + << sim.integrator().nEvals() << endl; + cout << " time per evaluation = " << tmm/sim.integrator().nEvals() << endl << endl; cout << "Output files:" << endl << " kin1.csv (Excel CSV file)" << endl diff --git a/examples/cxx/kinetics_example2.cpp b/examples/cxx/kinetics_example2.cpp index dfe2becd2..a6fe5b7b3 100755 --- a/examples/cxx/kinetics_example2.cpp +++ b/examples/cxx/kinetics_example2.cpp @@ -26,6 +26,10 @@ * Same as kinetics_example1, except that it uses class GRI30 instead * of class IdealGasMix. */ + +// Note: although this simulation can be done in C++, as shown here, +// it is much easier in Python or Matlab! + int kinetics_example2(int job) { try { @@ -69,6 +73,11 @@ int kinetics_example2(int job) { w.setExpansionRateCoeff(1.e9); w.setArea(1.0); + // create a container object to run the simulation + // and add the reactor to it + ReactorNet sim; + sim.addReactor(&r); + double tm; double dt = 1.e-5; // interval at which output is written int nsteps = 100; // number of intervals @@ -82,7 +91,7 @@ int kinetics_example2(int job) { clock_t t0 = clock(); for (int i = 1; i <= nsteps; i++) { tm = i*dt; - r.advance(tm); + sim.advance(tm); saveSoln(tm, gas, soln); } clock_t t1 = clock(); @@ -99,8 +108,8 @@ int kinetics_example2(int job) { cout << " Tfinal = " << r.temperature() << endl; cout << " time = " << tmm << endl; cout << " number of residual function evaluations = " - << r.integrator().nEvals() << endl; - cout << " time per evaluation = " << tmm/r.integrator().nEvals() + << sim.integrator().nEvals() << endl; + cout << " time per evaluation = " << tmm/sim.integrator().nEvals() << endl << endl; cout << "Output files:" << endl diff --git a/examples/cxx/rxnpath_example1.cpp b/examples/cxx/rxnpath_example1.cpp index de4039b87..57e140915 100755 --- a/examples/cxx/rxnpath_example1.cpp +++ b/examples/cxx/rxnpath_example1.cpp @@ -129,6 +129,11 @@ int rxnpath_example1(int job) { double dt = 1.e-5; // interval at which output is written int nsteps = 100; // number of intervals + // create a container object to run the simulation + // and add the reactor to it + ReactorNet sim; + sim.addReactor(&r); + // create a reaction path diagram builder ReactionPathBuilder b; ofstream rplog("rp1.log"); // log file @@ -139,7 +144,7 @@ int rxnpath_example1(int job) { clock_t t0 = clock(); for (int i = 1; i <= nsteps; i++) { tm = i*dt; - r.advance(tm); + sim.advance(tm); writeRxnPathDiagram(tm, b, gas, rplog, rplot); } clock_t t1 = clock(); diff --git a/test_problems/cxx_ex/silane.xml b/test_problems/cxx_ex/silane.xml index 5ab6d2945..c355f7516 100644 --- a/test_problems/cxx_ex/silane.xml +++ b/test_problems/cxx_ex/silane.xml @@ -28,12 +28,12 @@ 2.344331120E+00, 7.980520750E-03, -1.947815100E-05, 2.015720940E-08, - -7.376117610E-12, -9.179351730E+02, 6.830102380E-01, + -7.376117610E-12, -9.179351730E+02, 6.830102380E-01 3.337279200E+00, -4.940247310E-05, 4.994567780E-07, -1.795663940E-10, - 2.002553760E-14, -9.501589220E+02, -3.205023310E+00, + 2.002553760E-14, -9.501589220E+02, -3.205023310E+00 @@ -46,12 +46,12 @@ 2.500000000E+00, 7.053328190E-13, -1.995919640E-15, 2.300816320E-18, - -9.277323320E-22, 2.547365990E+04, -4.466828530E-01, + -9.277323320E-22, 2.547365990E+04, -4.466828530E-01 2.500000010E+00, -2.308429730E-11, 1.615619480E-14, -4.735152350E-18, - 4.981973570E-22, 2.547365990E+04, -4.466829140E-01, + 4.981973570E-22, 2.547365990E+04, -4.466829140E-01 @@ -64,12 +64,12 @@ 2.500000000E+00, 0.000000000E+00, 0.000000000E+00, 0.000000000E+00, - 0.000000000E+00, -7.453750000E+02, 9.153488000E-01, + 0.000000000E+00, -7.453750000E+02, 9.153488000E-01 2.500000000E+00, 0.000000000E+00, 0.000000000E+00, 0.000000000E+00, - 0.000000000E+00, -7.453750000E+02, 9.153489000E-01, + 0.000000000E+00, -7.453750000E+02, 9.153489000E-01 @@ -82,12 +82,12 @@ 1.451640400E+00, 1.398736300E-02, -4.234563900E-06, -2.360614200E-09, - 1.371208900E-12, 3.113410500E+03, 1.232185500E+01, + 1.371208900E-12, 3.113410500E+03, 1.232185500E+01 7.935938000E-01, 1.767189900E-02, -1.139800900E-05, 3.599260400E-09, - -4.524157100E-13, 3.198212700E+03, 1.524225700E+01, + -4.524157100E-13, 3.198212700E+03, 1.524225700E+01 @@ -100,12 +100,12 @@ 3.179353700E+00, -2.764699200E-03, 4.478403800E-06, -3.283317700E-09, - 9.121363100E-13, 5.333903200E+04, 2.727320400E+00, + 9.121363100E-13, 5.333903200E+04, 2.727320400E+00 2.650601400E+00, -3.576385200E-04, 2.959229300E-07, -7.280482900E-11, - 5.796332900E-15, 5.343705400E+04, 5.220405700E+00, + 5.796332900E-15, 5.343705400E+04, 5.220405700E+00 @@ -118,12 +118,12 @@ 3.836010000E+00, -2.702657000E-03, 6.849070000E-06, -5.424184000E-09, - 1.472131000E-12, 4.507593000E+04, 9.350778000E-01, + 1.472131000E-12, 4.507593000E+04, 9.350778000E-01 3.110430000E+00, 1.094946000E-03, 2.898629000E-08, -2.745104000E-10, - 7.051799000E-14, 4.516898000E+04, 4.193487000E+00, + 7.051799000E-14, 4.516898000E+04, 4.193487000E+00 @@ -136,12 +136,12 @@ 3.475092000E+00, 2.139338000E-03, 7.672306000E-07, 5.217668000E-10, - -9.898824000E-13, 3.147397000E+04, 4.436585000E+00, + -9.898824000E-13, 3.147397000E+04, 4.436585000E+00 4.142390000E+00, 2.150191000E-03, -2.190730000E-07, -2.073725000E-10, - 4.741018000E-14, 3.110484000E+04, 2.930745000E-01, + 4.741018000E-14, 3.110484000E+04, 2.930745000E-01 @@ -154,12 +154,12 @@ 2.946733000E+00, 6.466764000E-03, 5.991653000E-07, -2.218413000E-09, - 3.052670000E-13, 2.270173000E+04, 7.347948000E+00, + 3.052670000E-13, 2.270173000E+04, 7.347948000E+00 5.015906000E+00, 3.732750000E-03, -3.609053000E-07, -3.729193000E-10, - 8.468490000E-14, 2.190233000E+04, -4.291368000E+00, + 8.468490000E-14, 2.190233000E+04, -4.291368000E+00 @@ -172,12 +172,12 @@ 3.698707000E+00, 1.870180000E-02, -1.430704000E-05, 6.005836000E-09, - -1.116293000E-12, 3.590825000E+04, 8.825191000E+00, + -1.116293000E-12, 3.590825000E+04, 8.825191000E+00 1.127202000E+01, 2.538145000E-03, -2.998472000E-07, -9.465367000E-11, - 1.855053000E-14, 3.297169000E+04, -3.264598000E+01, + 1.855053000E-14, 3.297169000E+04, -3.264598000E+01 @@ -190,12 +190,12 @@ 6.734798300E-01, 4.093153100E-02, -4.484125500E-05, 2.995223200E-08, - -8.901085400E-12, 7.932787500E+03, 1.862740300E+01, + -8.901085400E-12, 7.932787500E+03, 1.862740300E+01 3.407493600E+00, 2.720647900E-02, -1.771320400E-05, 5.639117700E-09, - -7.137868200E-13, 7.532184200E+03, 6.132175400E+00, + -7.137868200E-13, 7.532184200E+03, 6.132175400E+00 @@ -208,12 +208,12 @@ 5.133186000E+00, 1.252855000E-02, -4.620421000E-07, -6.606075000E-09, - 2.864345000E-12, 2.956915000E+04, 7.605133000E-01, + 2.864345000E-12, 2.956915000E+04, 7.605133000E-01 8.986817000E+00, 5.405047000E-03, -5.214022000E-07, -5.313742000E-10, - 1.188727000E-13, 2.832748000E+04, -2.004478000E+01, + 1.188727000E-13, 2.832748000E+04, -2.004478000E+01 @@ -226,12 +226,12 @@ 7.719684600E-01, 6.344274000E-02, -7.672610900E-05, 5.454371500E-08, - -1.661172900E-11, 1.207126300E+04, 2.153250700E+01, + -1.661172900E-11, 1.207126300E+04, 2.153250700E+01 6.093334100E+00, 3.658011200E-02, -2.389236100E-05, 7.627193200E-09, - -9.676938400E-13, 1.129720500E+04, -2.747565400E+00, + -9.676938400E-13, 1.129720500E+04, -2.747565400E+00 @@ -244,12 +244,12 @@ 2.967197600E+00, 6.311955800E-03, -1.097079000E-05, 8.927868000E-09, - -2.787368900E-12, 6.987073800E+04, 9.278950300E+00, + -2.787368900E-12, 6.987073800E+04, 9.278950300E+00 4.144677900E+00, 6.523467700E-04, -5.010852000E-07, 1.806284300E-10, - -2.516111100E-14, 6.969470700E+04, 3.862736600E+00, + -2.516111100E-14, 6.969470700E+04, 3.862736600E+00 @@ -262,12 +262,12 @@ 4.597912900E+00, 1.071527400E-02, -1.610042200E-05, 1.096920700E-08, - -2.783287500E-12, 7.476632400E+04, 3.442167100E+00, + -2.783287500E-12, 7.476632400E+04, 3.442167100E+00 7.421336000E+00, -1.170994800E-04, 8.982077500E-08, 7.193596400E-12, - -2.567083700E-15, 7.414669900E+04, -1.036527400E+01, + -2.567083700E-15, 7.414669900E+04, -1.036527400E+01 diff --git a/test_problems/diamondSurf/diamond.cti b/test_problems/diamondSurf/diamond.cti index 0df40af0f..2cb6cb0d2 100644 --- a/test_problems/diamondSurf/diamond.cti +++ b/test_problems/diamondSurf/diamond.cti @@ -19,7 +19,7 @@ ideal_gas(name = 'gas', #------------- bulk diamond ------------------------------------- -pure_solid(name = 'diamond', +stoichiometric_solid(name = 'diamond', elements = 'H C', density = (3.52, 'g/cm3'), species = 'C(d)') diff --git a/test_problems/diamondSurf/diamond_blessed.xml b/test_problems/diamondSurf/diamond_blessed.xml index 79a1671e7..47da35476 100644 --- a/test_problems/diamondSurf/diamond_blessed.xml +++ b/test_problems/diamondSurf/diamond_blessed.xml @@ -19,7 +19,7 @@ H C C(d) - + 3.52