1 #ifndef INITHYDROCARBONSTATE_HPP
2 #define INITHYDROCARBONSTATE_HPP
4 #include "opm/core/simulator/BlackoilState.hpp"
9 inline void initHydroCarbonState(BlackoilState& state,
const PhaseUsage& pu,
const int num_cells,
const bool has_disgas,
const bool has_vapoil) {
10 enum { Oil = BlackoilPhases::Liquid, Gas = BlackoilPhases::Vapour, Water = BlackoilPhases::Aqua };
12 assert(pu.phase_used[Oil]);
13 std::vector<HydroCarbonState>& hydroCarbonState = state.hydroCarbonState();
14 hydroCarbonState.resize(num_cells);
15 if (!pu.phase_used[Gas]) {
17 std::fill(hydroCarbonState.begin(), hydroCarbonState.end(), HydroCarbonState::OilOnly);
20 const int np = pu.num_phases;
21 std::fill(hydroCarbonState.begin(), hydroCarbonState.end(), HydroCarbonState::GasAndOil);
24 const double epsilon = std::sqrt(std::numeric_limits<double>::epsilon());
25 const std::vector<double>& saturation = state.saturation();
26 for (
int c = 0; c < num_cells; ++c) {
27 if (pu.phase_used[Water]) {
28 if ( saturation[c*np + pu.phase_pos[ Water ]] > (1.0 - epsilon)) {
32 if ( saturation[c*np + pu.phase_pos[ Gas ]] == 0.0 && has_disgas) {
33 hydroCarbonState[c] = HydroCarbonState::OilOnly;
36 if ( saturation[c*np + pu.phase_pos[ Oil ]] == 0.0 && has_vapoil) {
37 hydroCarbonState[c] = HydroCarbonState::GasOnly;
44 #endif // INITHYDROCARBONSTATE_HPP