int main() { typedef double Scalar; Opm::Parser parser; Opm::ParseMode parseMode; const auto deck = parser.parseString(deckString1, parseMode); const auto eclState = std::make_shared<Opm::EclipseState>(deck, parseMode); const auto eclGrid = eclState->getEclipseGrid(); const auto pvtwKeyword = deck->getKeyword("PVTW"); size_t numPvtRegions = pvtwKeyword->size(); if (numPvtRegions != 2) OPM_THROW(std::logic_error, "The number of PVT regions of the test deck must be 2. (is " << numPvtRegions << ")"); ////////// // constant compressibility water ////////// Opm::ConstantCompressibilityWaterPvt<Scalar> constCompWaterPvt; constCompWaterPvt.initFromDeck(deck, eclState); // make sure that the values at the reference points are the ones specified in the // deck. Scalar refTmp, tmp; refTmp = 1.1e-3; // the deck value is given in cP, while the SI units use Pa s... tmp = constCompWaterPvt.viscosity(/*regionIdx=*/0, /*temperature=*/273.15 + 20.0, /*pressure=*/1e5); if (std::abs(tmp - refTmp) > 1e-30) OPM_THROW(std::logic_error, "The reference water viscosity at region 0 is supposed to be " << refTmp << ". (is " << tmp << ")"); refTmp = 1.2e-3; tmp = constCompWaterPvt.viscosity(/*regionIdx=*/1, /*temperature=*/273.15 + 20.0, /*pressure=*/2e5); if (std::abs(tmp - refTmp) > 1e-30) OPM_THROW(std::logic_error, "The reference water viscosity at region 1 is supposed to be " << refTmp << ". (is " << tmp << ")"); refTmp = 500/1.1; tmp = constCompWaterPvt.density(/*regionIdx=*/0, /*temperature=*/273.15 + 20.0, /*pressure=*/1e5); if (std::abs(tmp - refTmp) > 5e-14) OPM_THROW(std::logic_error, "The reference water density at region 0 is supposed to be " << refTmp << ". (is " << tmp << ")"); refTmp = 600/1.2; tmp = constCompWaterPvt.density(/*regionIdx=*/1, /*temperature=*/273.15 + 20.0, /*pressure=*/2e5); if (std::abs(tmp - refTmp) > 5e-14) OPM_THROW(std::logic_error, "The reference water density at region 1 is supposed to be " << refTmp << ". (is " << tmp << ")"); ////////// // the gas and oil PVT classes. // // TODO: check the results ////////// Opm::GasPvtMultiplexer<Scalar> gasPvt; Opm::OilPvtMultiplexer<Scalar> oilPvt; Opm::WaterPvtMultiplexer<Scalar> waterPvt; gasPvt.initFromDeck(deck, eclState); oilPvt.initFromDeck(deck, eclState); waterPvt.initFromDeck(deck, eclState); gasPvt.initEnd(&oilPvt); oilPvt.initEnd(&gasPvt); waterPvt.initEnd(); // make sure that the BlackOil fluid system's initFromDeck() method compiles. typedef Opm::FluidSystems::BlackOil<Scalar> BlackOilFluidSystem; BlackOilFluidSystem::initFromDeck(deck, eclState); return 0; }
inline void testAll() { static const Scalar tolerance = std::numeric_limits<Scalar>::epsilon()*1e3; Opm::Parser parser; Opm::ParseMode parseMode; const auto deck = parser.parseString(deckString1, parseMode); const auto eclState = std::make_shared<Opm::EclipseState>(deck, parseMode); const auto eclGrid = eclState->getEclipseGrid(); const auto pvtwKeyword = deck->getKeyword("PVTW"); size_t numPvtRegions = pvtwKeyword->size(); if (numPvtRegions != 2) OPM_THROW(std::logic_error, "The number of PVT regions of the test deck must be 2. (is " << numPvtRegions << ")"); ////////// // constant compressibility water ////////// Opm::ConstantCompressibilityWaterPvt<Scalar> constCompWaterPvt; constCompWaterPvt.initFromDeck(deck, eclState); // make sure that the values at the reference points are the ones specified in the // deck. Scalar refTmp, tmp; refTmp = 1.1e-3; // the deck value is given in cP, while the SI units use Pa s... tmp = constCompWaterPvt.viscosity(/*regionIdx=*/0, /*temperature=*/273.15 + 20.0, /*pressure=*/1e5); if (std::abs(tmp - refTmp) > tolerance) OPM_THROW(std::logic_error, "The reference water viscosity at region 0 is supposed to be " << refTmp << ". (is " << tmp << ")"); refTmp = 1.2e-3; tmp = constCompWaterPvt.viscosity(/*regionIdx=*/1, /*temperature=*/273.15 + 20.0, /*pressure=*/2e5); if (std::abs(tmp - refTmp) > tolerance) OPM_THROW(std::logic_error, "The reference water viscosity at region 1 is supposed to be " << refTmp << ". (is " << tmp << ")"); ////////// // the gas and oil PVT classes. // // TODO: check the results ////////// Opm::GasPvtMultiplexer<Scalar> gasPvt; Opm::OilPvtMultiplexer<Scalar> oilPvt; Opm::WaterPvtMultiplexer<Scalar> waterPvt; gasPvt.initFromDeck(deck, eclState); oilPvt.initFromDeck(deck, eclState); waterPvt.initFromDeck(deck, eclState); gasPvt.initEnd(); oilPvt.initEnd(); waterPvt.initEnd(); struct Foo; typedef Opm::LocalAd::Evaluation<Scalar, Foo, 1> FooEval; ensurePvtApi<Scalar>(oilPvt, gasPvt, waterPvt); ensurePvtApi<FooEval>(oilPvt, gasPvt, waterPvt); // make sure that the BlackOil fluid system's initFromDeck() method compiles. typedef Opm::FluidSystems::BlackOil<Scalar> BlackOilFluidSystem; BlackOilFluidSystem::initFromDeck(deck, eclState); }