cantera/samples/cxx/NASA_coeffs/NASA_coeffs.cpp
Ray Speth 54efbaa320 Rewrote exception handling to be more general and more explicit
CanteraError inerits from std:exception, so now it has a what() method
that is used to print a message describing the exception. Adding an
exception to the Cantera error stack now requires explicitly calling
the .save() method.
2012-03-05 20:45:56 +00:00

103 lines
2.6 KiB
C++

#include <cantera/IdealGasMix.h> // defines class IdealGasMix
#include <iostream>
#include <fstream>
#include <vector>
#include <map>
#include <numeric>
#include <string>
#include <algorithm>
using namespace std;
using namespace Cantera;
// The program is put into a function so that error handling code can
// be conveniently put around the whole thing. See main() below.
void demoprog()
{
printf("\n\n**** Testing modifying NASA polynomial coefficients ****\n\n");
IdealGasMix gas("h2o2.cti","ohmech");
int nsp = gas.nSpecies();
int type;
doublereal c[15];
doublereal minTemp, maxTemp, refPressure;
// get a reference to the species thermo property manager
SpeciesThermo& sp = gas.speciesThermo();
int n, j;
// these constants define the location of coefficient "a6" in the
// cofficient array c. The c array contains Tmid in the first
// location, followed by the 7 low-temperature coefficients, then
// the seven high-temperature ones.
const int LOW_A6 = 6;
//const int HIGH_A6 = 13;
for (n = 0; n < nsp; n++) {
printf("\n\n %s (original):", gas.speciesName(n).c_str());
// get the NASA coefficients in array c
sp.reportParams(n, type, c, minTemp, maxTemp, refPressure);
// print the unmodified NASA coefficients
printf("\n ");
for (j = 1; j < 8; j++) {
printf(" A%d ", j);
}
printf("\n low:");
for (j = 1; j < 8; j++) {
printf(" %10.4E ", c[j]);
}
printf("\n high:");
for (j = 8; j < 15; j++) {
printf(" %10.4E ", c[j]);
}
printf("\n ");
// modify coefficient A6 of the low-temperature polynomial
// Note that since we are not modifying the high-temperature
// polynomial, a warning will be printed about a discontinuity
// in enthalpy at Tmid.
c[LOW_A6] += 1.0e4;
sp.modifyParams(n, c);
sp.reportParams(n, type, c, minTemp, maxTemp, refPressure);
// print the modified NASA coefficients
printf("\n\n %s (modified):", gas.speciesName(n).c_str());
printf("\n ");
for (j = 1; j < 8; j++) {
printf(" A%d ", j);
}
printf("\n low:");
for (j = 1; j < 8; j++) {
printf(" %10.4E ", c[j]);
}
printf("\n high:");
for (j = 8; j < 15; j++) {
printf(" %10.4E ", c[j]);
}
printf("\n ");
}
}
int main()
{
try {
demoprog();
} catch (CanteraError& err) {
std::cout << err.what() << std::endl;
}
}