20 #ifndef OPM_PHASEUSAGEFROMDECK_HEADER_INCLUDED
21 #define OPM_PHASEUSAGEFROMDECK_HEADER_INCLUDED
23 #include <opm/core/props/BlackoilPhases.hpp>
24 #include <opm/common/ErrorMacros.hpp>
26 #include <opm/parser/eclipse/Deck/Deck.hpp>
27 #include <opm/parser/eclipse/EclipseState/EclipseState.hpp>
28 #include <opm/parser/eclipse/EclipseState/Runspec.hpp>
36 inline PhaseUsage phaseUsageFromDeck(
const Opm::EclipseState& eclipseState)
39 std::fill(pu.phase_used, pu.phase_used + BlackoilPhases::MaxNumPhases, 0);
41 const auto& phase = eclipseState.runspec().phases();
43 if (phase.active(Phase::WATER)) {
44 pu.phase_used[BlackoilPhases::Aqua] = 1;
46 if (phase.active(Phase::OIL)) {
47 pu.phase_used[BlackoilPhases::Liquid] = 1;
49 if (phase.active(Phase::GAS)) {
50 pu.phase_used[BlackoilPhases::Vapour] = 1;
53 for (
int i = 0; i < BlackoilPhases::MaxNumPhases; ++i) {
54 pu.phase_pos[i] = pu.num_phases;
55 pu.num_phases += pu.phase_used[i];
59 if (pu.num_phases < 2 || pu.num_phases > 3) {
60 OPM_THROW(std::runtime_error,
"Cannot handle cases with " << pu.num_phases <<
" phases.");
65 if (!pu.phase_used[BlackoilPhases::Liquid]) {
66 OPM_THROW(std::runtime_error,
"Cannot handle cases with no OIL, i.e. water-gas systems.");
70 pu.has_solvent =
false;
71 if (phase.active(Phase::SOLVENT)) {
72 pu.has_solvent =
true;
76 pu.has_polymer =
false;
77 if (phase.active(Phase::POLYMER)) {
78 pu.has_polymer =
true;
86 inline PhaseUsage phaseUsageFromDeck(
const Opm::Deck& deck)
89 std::fill(pu.phase_used, pu.phase_used + BlackoilPhases::MaxNumPhases, 0);
91 Runspec runspec( deck );
92 const auto& phase = runspec.phases();
95 if (phase.active( Phase::WATER )) {
96 pu.phase_used[BlackoilPhases::Aqua] = 1;
98 if (phase.active( Phase::OIL )) {
99 pu.phase_used[BlackoilPhases::Liquid] = 1;
101 if (phase.active( Phase::GAS )) {
102 pu.phase_used[BlackoilPhases::Vapour] = 1;
105 for (
int i = 0; i < BlackoilPhases::MaxNumPhases; ++i) {
106 if (pu.phase_used[i]) {
107 pu.phase_pos[i] = pu.num_phases;
112 pu.phase_pos[i] = 2000000000;
117 if (pu.num_phases < 2 || pu.num_phases > 3) {
118 OPM_THROW(std::runtime_error,
"Cannot handle cases with " << pu.num_phases <<
" phases.");
123 if (!pu.phase_used[BlackoilPhases::Liquid]) {
124 OPM_THROW(std::runtime_error,
"Cannot handle cases with no OIL, i.e. water-gas systems.");
128 pu.has_solvent =
false;
129 if (phase.active(Phase::SOLVENT)) {
130 pu.has_solvent =
true;
134 pu.has_polymer =
false;
135 if (phase.active(Phase::POLYMER)) {
136 pu.has_polymer =
true;
144 #endif // OPM_PHASEUSAGEFROMDECK_HEADER_INCLUDED