opm-simulators
Toggle main menu visibility
Loading...
Searching...
No Matches
priVarsPacking.hpp
1
/*
2
Copyright 2023 Total SE
3
4
This file is part of the Open Porous Media project (OPM).
5
6
OPM is free software: you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation, either version 3 of the License, or
9
(at your option) any later version.
10
11
OPM is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
GNU General Public License for more details.
15
16
You should have received a copy of the GNU General Public License
17
along with OPM. If not, see <http://www.gnu.org/licenses/>.
18
*/
19
20
#ifndef OPM_PRIVARSPACKING_HEADER_INCLUDED
21
#define OPM_PRIVARSPACKING_HEADER_INCLUDED
22
23
#include <cstddef>
24
25
namespace
Opm
{
26
27
namespace
PVUtil {
28
constexpr
int
fbits = 4;
29
30
template
<
class
PV>
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);
38
}
39
40
template
<
class
PV>
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));
53
}
54
}
// namespace PVMeanings
55
}
// namespace Opm
56
57
#endif
// OPM_PRIVARSPACKING_HEADER_INCLUDED
Opm
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition
blackoilbioeffectsmodules.hh:43
opm
simulators
flow
priVarsPacking.hpp
Generated by
1.17.0