[Transport] Make SimpleTransport constructible without XML

This commit is contained in:
Ray Speth 2017-08-15 17:53:16 -04:00
parent 4b5af64050
commit 7020fa72bf
4 changed files with 93 additions and 1 deletions

View file

@ -207,6 +207,10 @@ public:
*/
virtual bool initLiquid(LiquidTransportParams& tr);
void setCompositionDependence(LiquidTranMixingModel model) {
compositionDepType_ = model;
}
virtual std::string transportType() const {
return "Simple";
}

View file

@ -26,7 +26,8 @@ for optimize_flag in ('-O3', '-O2', '/O2'):
ccflags.remove(optimize_flag)
localenv['CCFLAGS'] = ccflags
localenv['ENV']['CANTERA_DATA'] = Dir('#build/data').abspath
localenv['ENV']['CANTERA_DATA'] = (Dir('#build/data').abspath + os.pathsep +
Dir('#test/data').abspath)
PASSED_FILES = {}

View file

@ -3,6 +3,7 @@
#include "cantera/transport/TransportData.h"
#include "cantera/transport/MixTransport.h"
#include "cantera/transport/MultiTransport.h"
#include "cantera/transport/SimpleTransport.h"
#include "cantera/transport/TransportFactory.h"
#include "cantera/thermo/ThermoFactory.h"
#include "cantera/thermo/IdealGasPhase.h"
@ -166,6 +167,92 @@ TEST_F(TransportFromScratch, thermalConductivityMulti)
}
}
class SimpleTransportTest : public testing::Test
{
public:
SimpleTransportTest()
: p(newPhase("HMW_NaCl_pdss.xml", "NaCl_electrolyte"))
{
}
void check_transport(SimpleTransport& tr) {
p->setState_TP(303.13, OneAtm);
size_t N = p->nSpecies();
EXPECT_NEAR(tr.viscosity(), 0.001, 1e-4);
EXPECT_NEAR(tr.thermalConductivity(), 0.58, 1e-3);
vector_fp spvisc(N), Dmix(N), mobilities(N), fluxes1(N), fluxes2(N);
vector_fp gradX(N, 0.0);
gradX[1] = 1.0;
double gradT = 0.0;
double gradV = 1.0;
vector_fp spvisc_ref = {0.001, 0, 0, 0, 0};
vector_fp Dmix_ref = {1e-05, 1e-05, 1e-05, 1e-05, 1e-05};
vector_fp mobilities_ref = {0.000382823, 0.000382823, 0.000382823,
0.000382823, 0.000382823};
vector_fp fluxes1_ref = {0.0102344, -0.0124461, 0.00221167,
2.22987e-14, 2.43291e-10};
vector_fp fluxes2_ref = {-0.0191255, -0.0505223, 0.0696478,
-7.85548e-13, 7.6615e-09};
tr.getSpeciesViscosities(spvisc.data());
tr.getMixDiffCoeffs(Dmix.data());
tr.getMobilities(mobilities.data());
tr.getSpeciesFluxes(1, &gradT, N, gradX.data(), N, fluxes1.data());
gradX[1] = 0.0;
tr.set_Grad_T(&gradT);
tr.set_Grad_V(&gradV);
tr.set_Grad_X(gradX.data());
tr.getSpeciesFluxesExt(N, fluxes2.data());
for (size_t k = 0; k < N; k++) {
EXPECT_NEAR(spvisc[k], spvisc_ref[k], 1e-5);
EXPECT_NEAR(Dmix[k], Dmix_ref[k], 1e-7);
EXPECT_NEAR(mobilities[k], mobilities_ref[k], 1e-9);
EXPECT_NEAR(fluxes1[k], fluxes1_ref[k], 1e-5*std::abs(fluxes1_ref[k]));
EXPECT_NEAR(fluxes2[k], fluxes2_ref[k], 1e-5*std::abs(fluxes2_ref[k]));
}
}
shared_ptr<ThermoPhase> p;
};
TEST_F(SimpleTransportTest, fromScratch)
{
SimpleTransport tr(p.get(), 3);
LiquidTransportParams params;
params.LTData.resize(p->nSpecies());
LTPspecies_Const* ltp = new LTPspecies_Const();
ltp->setName(p->speciesName(0));
ltp->setTransportPropertyType(TP_VISCOSITY);
ltp->setThermo(p.get());
ltp->setCoeff(1.0 * toSI("centipoise"));
params.LTData[0].viscosity = ltp;
ltp = new LTPspecies_Const();
ltp->setName(p->speciesName(0));
ltp->setTransportPropertyType(TP_THERMALCOND);
ltp->setThermo(p.get());
ltp->setCoeff(0.58);
params.LTData[0].thermalCond = ltp;
for (size_t k = 0; k < p->nSpecies(); k++) {
ltp = new LTPspecies_Const();
ltp->setName(p->speciesName(k));
ltp->setTransportPropertyType(TP_DIFFUSIVITY);
ltp->setThermo(p.get());
ltp->setCoeff(1e-5);
params.LTData[k].speciesDiffusivity = ltp;
}
params.thermo = p.get();
tr.initLiquid(params);
tr.setCompositionDependence(LTI_MODEL_SOLVENT);
check_transport(tr);
}
int main(int argc, char** argv)
{
printf("Running main() from transportFromScratch.cpp\n");