diff --git a/ebos/eclproblem.hh b/ebos/eclproblem.hh index 5d3212b2d..923bb2ec2 100644 --- a/ebos/eclproblem.hh +++ b/ebos/eclproblem.hh @@ -2669,11 +2669,10 @@ private: referencePorosity_[/*timeIdx=*/0].resize(numDof); const auto& fp = eclState.fieldProps(); - const std::vector porvData = fp.porv(true); + const std::vector porvData = fp.porv(false); const std::vector actnumData = fp.actnum(); for (size_t dofIdx = 0; dofIdx < numDof; ++ dofIdx) { - unsigned cartElemIdx = vanguard.cartesianIndex(dofIdx); - Scalar poreVolume = porvData[cartElemIdx]; + Scalar poreVolume = porvData[dofIdx]; // we define the porosity as the accumulated pore volume divided by the // geometric volume of the element. Note that -- in pathetic cases -- it can diff --git a/opm/simulators/utils/ParallelEclipseState.cpp b/opm/simulators/utils/ParallelEclipseState.cpp index 477b65012..8397f80c2 100644 --- a/opm/simulators/utils/ParallelEclipseState.cpp +++ b/opm/simulators/utils/ParallelEclipseState.cpp @@ -49,14 +49,23 @@ void ParallelFieldPropsManager::reset_actnum(const std::vector& actnum) std::vector ParallelFieldPropsManager::porv(bool global) const { - std::vector result; + std::vector global_porv; if (m_comm.rank() == 0) - result = m_manager.porv(global); - size_t size = result.size(); + global_porv = m_manager.porv(true); + + size_t size = global_porv.size(); m_comm.broadcast(&size, 1, 0); - result.resize(size); - m_comm.broadcast(result.data(), size, 0); - return result; + global_porv.resize(size); + m_comm.broadcast(global_porv.data(), size, 0); + if (global) + return global_porv; + + std::vector local_porv(this->m_activeSize()); + for (int i = 0; i < m_activeSize(); ++i) + { + local_porv[i] = global_porv[this->m_local2Global(i)]; + } + return local_porv; }