cantera/test_problems/cathermo/stoichSubSSTP/stoichSubSSTP.cpp
Ray Speth 217d780233 Fix calls to CanteraError with blank or incorrect first argument
The first argument should be the function name from which the exception was
thrown. Leaving this blank makes it difficult to track down the location of the
exception.
2015-06-09 12:03:57 -04:00

117 lines
3.2 KiB
C++

/**
*
* @file HMW_graph_1.cpp
*/
#include "cantera/thermo.h"
#include "cantera/thermo/StoichSubstanceSSTP.h"
#include "TemperatureTable.h"
#include <cstdio>
using namespace std;
using namespace Cantera;
int main(int argc, char** argv)
{
try {
std::string iFile = (argc > 1) ? argv[1] : "NaCl_Solid.xml";
std::string file_ID = iFile + "#NaCl(S)";
XML_Node* xm = get_XML_NameID("phase", file_ID, 0);
StoichSubstanceSSTP* solid = new StoichSubstanceSSTP(*xm);
/*
* Load in and initialize the
*/
//string nacl_s = "NaCl_Solid.xml";
//string id = "NaCl(S)";
//Cantera::ThermoPhase *solid = Cantera::newPhase(nacl_s, id);
size_t nsp = solid->nSpecies();
if (nsp != 1) {
throw CanteraError("main","Should just be one species");
}
string sName;
TemperatureTable TTable(8, true, 300, 100., 0, 0);
/*
* Set the Pressure
*/
double pres = OneAtm;
double T = 298.15;
solid->setState_TP(T, pres);
/*
* ThermoUnknowns
*/
double mu0_RT[20], mu[20], cp_r[20];
double enth_RT[20];
double entrop_RT[20], intE_RT[20];
double mu_NaCl, enth_NaCl, entrop_NaCl;
double cp_NaCl;
/*
* Create a Table of NaCl Properties as a Function
* of the Temperature
*/
double RT = GasConstant * T;
solid->getEnthalpy_RT(enth_RT);
double enth_NaCl_298 = enth_RT[0] * RT * 1.0E-6;
printf(" Data from http://webbook.nist.gov\n");
printf("\n");
printf(" T, Pres, molarGibbs0, Enthalpy, Entropy, Cp ,"
" -(G-H298)/T, H-H298 ");
printf("\n");
printf(" Kelvin, bars, kJ/gmol, kJ/gmol, J/gmolK, J/gmolK ,"
" J/gmolK, J/gmol");
printf("\n");
for (size_t i = 0; i < TTable.NPoints; i++) {
T = TTable.T[i];
// GasConstant is in J/kmol
RT = GasConstant * T;
pres = OneAtm;
solid->setState_TP(T, pres);
/*
* Get the Standard State DeltaH
*/
solid->getGibbs_RT(mu0_RT);
solid->getEnthalpy_RT(enth_RT);
enth_NaCl = enth_RT[0] * RT * 1.0E-6;
solid->getChemPotentials(mu);
mu_NaCl = mu[0] * 1.0E-6;
solid->getEntropy_R(entrop_RT);
entrop_NaCl = entrop_RT[0] * GasConstant * 1.0E-3;
solid->getIntEnergy_RT(intE_RT);
solid->getCp_R(cp_r);
cp_NaCl = cp_r[0] * GasConstant * 1.0E-3;
double pbar = pres * 1.0E-5;
printf("%10g, %10g, %12g, %12g, %12g, %12g, %12g, %12g",
T, pbar, mu_NaCl, enth_NaCl, entrop_NaCl, cp_NaCl, -1.0E3*(mu_NaCl-enth_NaCl_298)/T, enth_NaCl-enth_NaCl_298);
printf("\n");
}
delete solid;
solid = 0;
Cantera::appdelete();
} catch (CanteraError& err) {
std::cout << err.what() << std::endl;
Cantera::appdelete();
return -1;
}
return 0;
}