[Test] Add tests for manually-constructed Transport objects
This commit is contained in:
parent
bdc568d416
commit
44a99de4e0
2 changed files with 176 additions and 0 deletions
|
|
@ -219,6 +219,7 @@ else:
|
|||
addTestProgram('general', 'general', env_vars=python_env_vars)
|
||||
addTestProgram('thermo', 'thermo', env_vars=python_env_vars)
|
||||
addTestProgram('kinetics', 'kinetics', env_vars=python_env_vars)
|
||||
addTestProgram('transport', 'transport', env_vars=python_env_vars)
|
||||
|
||||
python_subtests = ['']
|
||||
test_root = '#interfaces/cython/cantera/test'
|
||||
|
|
|
|||
175
test/transport/transportFromScratch.cpp
Normal file
175
test/transport/transportFromScratch.cpp
Normal file
|
|
@ -0,0 +1,175 @@
|
|||
#include "gtest/gtest.h"
|
||||
|
||||
#include "cantera/transport/TransportData.h"
|
||||
#include "cantera/transport/MixTransport.h"
|
||||
#include "cantera/transport/MultiTransport.h"
|
||||
#include "cantera/transport/TransportFactory.h"
|
||||
#include "cantera/thermo/ThermoFactory.h"
|
||||
#include "cantera/thermo/IdealGasPhase.h"
|
||||
#include "cantera/thermo/NasaPoly2.h"
|
||||
#include "cantera/base/global.h"
|
||||
#include "cantera/base/stringUtils.h"
|
||||
|
||||
#include "../thermo/thermo_data.h"
|
||||
|
||||
using namespace Cantera;
|
||||
|
||||
class TransportFromScratch : public testing::Test
|
||||
{
|
||||
public:
|
||||
TransportFromScratch()
|
||||
: sH2("H2", parseCompString("H:2"),
|
||||
new NasaPoly2(0, 200, 3500, 101325, h2_nasa_coeffs))
|
||||
, sO2("O2", parseCompString("O:2"),
|
||||
new NasaPoly2(0, 200, 3500, 101325, o2_nasa_coeffs))
|
||||
, sH2O("H2O", parseCompString("H:2 O:1"),
|
||||
new NasaPoly2(0, 200, 3500, 101325, h2o_nasa_coeffs))
|
||||
, tH2(new GasTransportData())
|
||||
, tO2(new GasTransportData())
|
||||
, tH2O(new GasTransportData())
|
||||
{
|
||||
tH2->setCustomaryUnits("H2", "linear", 2.92, 38.0, 0.0, 0.79, 280.0);
|
||||
tO2->setCustomaryUnits("O2", "linear", 3.46, 107.40, 0.0, 1.60, 3.80);
|
||||
tH2O->setCustomaryUnits("H2O", "nonlinear", 2.60, 572.4, 1.84, 0.0, 4.00);
|
||||
|
||||
sH2.transport = tH2;
|
||||
sO2.transport = tO2;
|
||||
sH2O.transport = tH2O;
|
||||
|
||||
std::string phase_def = "ideal_gas(name='test', elements='O H',"
|
||||
"species='gri30: H2 O2 H2O')";
|
||||
|
||||
XML_Node* fxml = get_XML_from_string(phase_def);
|
||||
ref.reset(newPhase(*fxml->findByName("phase")));
|
||||
test.reset(new IdealGasPhase());
|
||||
|
||||
test->addElement("O");
|
||||
test->addElement("H");
|
||||
test->addSpecies(sH2);
|
||||
test->addSpecies(sO2);
|
||||
test->addSpecies(sH2O);
|
||||
test->initThermo();
|
||||
|
||||
ref->setState_TPX(400, 5e5, "H2:0.5, O2:0.3, H2O:0.2");
|
||||
test->setState_TPX(400, 5e5, "H2:0.5, O2:0.3, H2O:0.2");
|
||||
}
|
||||
|
||||
Species sH2, sO2, sH2O;
|
||||
shared_ptr<GasTransportData> tH2, tO2, tH2O;
|
||||
shared_ptr<ThermoPhase> ref;
|
||||
shared_ptr<ThermoPhase> test;
|
||||
};
|
||||
|
||||
TEST_F(TransportFromScratch, binaryDiffCoeffs)
|
||||
{
|
||||
Transport* trRef = newTransportMgr("Mix", ref.get());
|
||||
MixTransport trTest;
|
||||
trTest.init(test.get());
|
||||
|
||||
size_t K = ref->nSpecies();
|
||||
Array2D bdiffRef(3,3);
|
||||
Array2D bdiffTest(3,3);
|
||||
ref->setState_TPX(400, 5e5, "H2:0.5, O2:0.3, H2O:0.2");
|
||||
test->setState_TPX(400, 5e5, "H2:0.5, O2:0.3, H2O:0.2");
|
||||
trRef->getBinaryDiffCoeffs(K, &bdiffRef(0,0));
|
||||
trTest.getBinaryDiffCoeffs(K, &bdiffTest(0,0));
|
||||
|
||||
for (size_t i=0; i < K; i++) {
|
||||
for (size_t j=0; j < K; j++) {
|
||||
EXPECT_DOUBLE_EQ(bdiffRef(i,j), bdiffTest(i,j)) << "i = " << i << ", j = " << j;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(TransportFromScratch, mixDiffCoeffs)
|
||||
{
|
||||
Transport* trRef = newTransportMgr("Mix", ref.get());
|
||||
MixTransport trTest;
|
||||
trTest.init(test.get());
|
||||
|
||||
size_t K = ref->nSpecies();
|
||||
vector_fp Dref(3);
|
||||
vector_fp Dtest(3);
|
||||
ref->setState_TPX(400, 5e5, "H2:0.5, O2:0.3, H2O:0.2");
|
||||
test->setState_TPX(400, 5e5, "H2:0.5, O2:0.3, H2O:0.2");
|
||||
trRef->getMixDiffCoeffs(&Dref[0]);
|
||||
trTest.getMixDiffCoeffs(&Dtest[0]);
|
||||
|
||||
for (size_t k=0; k < K; k++) {
|
||||
EXPECT_DOUBLE_EQ(Dref[k], Dtest[k]) << "k = " << k;
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(TransportFromScratch, viscosity)
|
||||
{
|
||||
Transport* trRef = newTransportMgr("Mix", ref.get());
|
||||
MixTransport trTest;
|
||||
trTest.init(test.get());
|
||||
|
||||
for (size_t i = 0; i < 10; i++) {
|
||||
double T = 300 + 111*i;
|
||||
ref->setState_TPX(T, 5e5, "H2:0.5, O2:0.3, H2O:0.2");
|
||||
test->setState_TPX(T, 5e5, "H2:0.5, O2:0.3, H2O:0.2");
|
||||
EXPECT_DOUBLE_EQ(trRef->viscosity(), trTest.viscosity()) << "T = " << T;
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(TransportFromScratch, thermalConductivityMix)
|
||||
{
|
||||
Transport* trRef = newTransportMgr("Mix", ref.get());
|
||||
MixTransport trTest;
|
||||
trTest.init(test.get());
|
||||
|
||||
for (size_t i = 0; i < 10; i++) {
|
||||
double T = 300 + 111*i;
|
||||
ref->setState_TPX(T, 5e5, "H2:0.5, O2:0.3, H2O:0.2");
|
||||
test->setState_TPX(T, 5e5, "H2:0.5, O2:0.3, H2O:0.2");
|
||||
EXPECT_DOUBLE_EQ(trRef->thermalConductivity(),
|
||||
trTest.thermalConductivity()) << "T = " << T;
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(TransportFromScratch, multiDiffCoeffs)
|
||||
{
|
||||
Transport* trRef = newTransportMgr("Multi", ref.get());
|
||||
MultiTransport trTest;
|
||||
trTest.init(test.get());
|
||||
|
||||
size_t K = ref->nSpecies();
|
||||
Array2D Dref(3,3);
|
||||
Array2D Dtest(3,3);
|
||||
ref->setState_TPX(400, 5e5, "H2:0.5, O2:0.3, H2O:0.2");
|
||||
test->setState_TPX(400, 5e5, "H2:0.5, O2:0.3, H2O:0.2");
|
||||
trRef->getMultiDiffCoeffs(K, &Dref(0,0));
|
||||
trTest.getMultiDiffCoeffs(K, &Dtest(0,0));
|
||||
|
||||
for (size_t i=0; i < K; i++) {
|
||||
for (size_t j=0; j < K; j++) {
|
||||
EXPECT_DOUBLE_EQ(Dref(i,j), Dtest(i,j)) << "i = " << i << ", j = " << j;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(TransportFromScratch, thermalConductivityMulti)
|
||||
{
|
||||
Transport* trRef = newTransportMgr("Multi", ref.get());
|
||||
MultiTransport trTest;
|
||||
trTest.init(test.get());
|
||||
|
||||
for (size_t i = 0; i < 10; i++) {
|
||||
double T = 300 + 111*i;
|
||||
ref->setState_TPX(T, 5e5, "H2:0.5, O2:0.3, H2O:0.2");
|
||||
test->setState_TPX(T, 5e5, "H2:0.5, O2:0.3, H2O:0.2");
|
||||
EXPECT_DOUBLE_EQ(trRef->thermalConductivity(),
|
||||
trTest.thermalConductivity()) << "T = " << T;
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
printf("Running main() from transportFromScratch.cpp\n");
|
||||
testing::InitGoogleTest(&argc, argv);
|
||||
int result = RUN_ALL_TESTS();
|
||||
appdelete();
|
||||
return result;
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue