86 const auto& gridView = simulator.
gridView();
87 const auto& comm = gridView.comm();
88 for (
const auto& reg : rmap_.activeRegions()) {
89 numRegions = std::max(numRegions, reg);
91 numRegions = comm.max(numRegions);
92 for (
int reg = 1; reg <= numRegions ; ++ reg) {
94 attr_.insert(reg, Attributes());
98 for (
int reg = 1; reg <= numRegions ; ++ reg) {
99 auto& ra = attr_.attributes(reg);
106 std::unordered_map<RegionId, Attributes> attributes_pv;
109 std::unordered_map<RegionId, Attributes> attributes_hpv;
111 for (
int reg = 1; reg <= numRegions ; ++ reg) {
112 attributes_pv.insert({reg, Attributes()});
113 attributes_hpv.insert({reg, Attributes()});
116 ElementContext elemCtx( simulator );
118 OPM_BEGIN_PARALLEL_TRY_CATCH();
119 for (
const auto& elem : elements(gridView, Dune::Partitions::interior)) {
120 elemCtx.updatePrimaryStencil(elem);
121 elemCtx.updatePrimaryIntensiveQuantities(0);
122 const unsigned cellIdx = elemCtx.globalSpaceIndex(0, 0);
123 const auto& intQuants = elemCtx.intensiveQuantities(0, 0);
124 const auto& fs = intQuants.fluidState();
126 const Scalar pv_cell =
127 simulator.
model().dofTotalVolume(cellIdx)
128 * intQuants.porosity().value();
131 Scalar hydrocarbon = 1.0;
132 const auto& pu = phaseUsage_;
134 hydrocarbon -= fs.saturation(FluidSystem::waterPhaseIdx).value();
137 const int reg = rmap_.region(cellIdx);
141 const Scalar hydrocarbonPV = pv_cell*hydrocarbon;
142 if (hydrocarbonPV > 0.) {
143 auto& attr = attributes_hpv[reg];
144 attr.pv += hydrocarbonPV;
146 attr.pressure += fs.pressure(FluidSystem::oilPhaseIdx).value() * hydrocarbonPV;
149 attr.pressure += fs.pressure(FluidSystem::gasPhaseIdx).value() * hydrocarbonPV;
154 auto& attr = attributes_pv[reg];
157 attr.pressure += fs.pressure(FluidSystem::oilPhaseIdx).value() * pv_cell;
159 attr.pressure += fs.pressure(FluidSystem::gasPhaseIdx).value() * pv_cell;
162 attr.pressure += fs.pressure(FluidSystem::waterPhaseIdx).value() * pv_cell;
166 OPM_END_PARALLEL_TRY_CATCH(
"AverageRegionalPressure::defineState(): ", simulator.
vanguard().grid().comm());
168 for (
int reg = 1; reg <= numRegions ; ++ reg) {
169 auto& ra = attr_.attributes(reg);
170 const Scalar hpv_sum = comm.sum(attributes_hpv[reg].pv);
173 const auto& attri_hpv = attributes_hpv[reg];
174 const Scalar p_hpv_sum = comm.sum(attri_hpv.pressure);
175 ra.pressure = p_hpv_sum / hpv_sum;
178 const auto& attri_pv = attributes_pv[reg];
179 const Scalar pv_sum = comm.sum(attri_pv.pv);
182 const Scalar p_pv_sum = comm.sum(attri_pv.pressure);
183 ra.pressure = p_pv_sum / pv_sum;