20#ifndef OPM_PRIVARSPACKING_HEADER_INCLUDED
21#define OPM_PRIVARSPACKING_HEADER_INCLUDED
28 constexpr int fbits = 4;
31 std::size_t pack(
const PV& privar) {
32 std::size_t m1 =
static_cast<std::size_t
>(privar.primaryVarsMeaningWater());
33 std::size_t m2 =
static_cast<std::size_t
>(privar.primaryVarsMeaningPressure());
34 std::size_t m3 =
static_cast<std::size_t
>(privar.primaryVarsMeaningGas());
35 std::size_t m4 =
static_cast<std::size_t
>(privar.primaryVarsMeaningBrine());
36 std::size_t m5 =
static_cast<std::size_t
>(privar.primaryVarsMeaningSolvent());
37 return m1 + (m2 << fbits*1) + (m3 << fbits*2) + (m4 << fbits*3) + (m5 << fbits*4);
41 void unPack(PV& privar,
const std::size_t meanings) {
42 const std::size_t filter = ((1 << fbits) - 1);
43 std::size_t m1 = (meanings >> fbits*0) & filter;
44 std::size_t m2 = (meanings >> fbits*1) & filter;
45 std::size_t m3 = (meanings >> fbits*2) & filter;
46 std::size_t m4 = (meanings >> fbits*3) & filter;
47 std::size_t m5 = (meanings >> fbits*4) & filter;
48 privar.setPrimaryVarsMeaningWater(
typename PV::WaterMeaning(m1));
49 privar.setPrimaryVarsMeaningPressure(
typename PV::PressureMeaning(m2));
50 privar.setPrimaryVarsMeaningGas(
typename PV::GasMeaning(m3));
51 privar.setPrimaryVarsMeaningBrine(
typename PV::BrineMeaning(m4));
52 privar.setPrimaryVarsMeaningSolvent(
typename PV::SolventMeaning(m5));
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition blackoilboundaryratevector.hh:37