The water property calculator needs to be given the correct phase guess, otherwise it will return in an invalid state.
65 lines
2 KiB
C++
65 lines
2 KiB
C++
#include "gtest/gtest.h"
|
|
#include "cantera/thermo/HMWSoln.h"
|
|
|
|
using namespace Cantera;
|
|
|
|
TEST(HMW, VPSSMgrGeneral_vs_VPSSMgrWater_ConstVol)
|
|
{
|
|
// Calculations should give the same result using either the generic
|
|
// VPSSMgr_General class or one of the more specialized classes such as
|
|
// VPSSMgr_Water_ConstVol.
|
|
HMWSoln p1("../data/HMW_NaCl.xml", "water_constvol");
|
|
HMWSoln p2("../data/HMW_NaCl.xml", "general");
|
|
size_t n = p1.nSpecies();
|
|
vector_fp molalities(n);
|
|
p1.getMolalities(molalities.data());
|
|
molalities[2] = 2.1628E-9;
|
|
molalities[3] = 6.0997;
|
|
molalities[4] = 1.3977E-6;
|
|
molalities[1] = molalities[2] + molalities[3] - molalities[4];
|
|
p1.setMolalities(molalities.data());
|
|
p2.setMolalities(molalities.data());
|
|
p1.setState_TP(310.15, 201325);
|
|
p2.setState_TP(310.15, 201325);
|
|
|
|
vector_fp v1(n);
|
|
vector_fp v2(n);
|
|
p1.getStandardVolumes(v1.data());
|
|
p2.getStandardVolumes(v2.data());
|
|
for (size_t i = 0; i < n; i++) {
|
|
EXPECT_NEAR(v1[i], v2[i], 1e-9) << p1.speciesName(i);
|
|
}
|
|
|
|
p1.getCp_R(v1.data());
|
|
p2.getCp_R(v2.data());
|
|
for (size_t i = 0; i < n; i++) {
|
|
EXPECT_NEAR(v1[i], v2[i], 1e-10) << p1.speciesName(i);
|
|
}
|
|
|
|
p1.getEntropy_R(v1.data());
|
|
p2.getEntropy_R(v2.data());
|
|
for (size_t i = 0; i < n; i++) {
|
|
EXPECT_NEAR(v1[i], v2[i], 1e-10) << p1.speciesName(i);
|
|
}
|
|
|
|
p1.getEnthalpy_RT(v1.data());
|
|
p2.getEnthalpy_RT(v2.data());
|
|
for (size_t i = 0; i < n; i++) {
|
|
EXPECT_NEAR(v1[i], v2[i], 1e-10) << p1.speciesName(i);
|
|
}
|
|
|
|
p1.getChemPotentials_RT(v1.data());
|
|
p2.getChemPotentials_RT(v2.data());
|
|
for (size_t i = 0; i < n; i++) {
|
|
EXPECT_NEAR(v1[i], v2[i], 1e-10) << p1.speciesName(i);
|
|
}
|
|
|
|
p1.getGibbs_ref(v1.data());
|
|
p2.getGibbs_ref(v2.data());
|
|
for (size_t i = 0; i < n; i++) {
|
|
EXPECT_NEAR(v1[i], v2[i], 1e-4) << p1.speciesName(i);
|
|
}
|
|
|
|
EXPECT_NEAR(p1.entropy_mole(), p2.entropy_mole(), 1e-7);
|
|
EXPECT_NEAR(p1.enthalpy_mole(), p2.enthalpy_mole(), 1e-4);
|
|
}
|