Skip to content

Commit

Permalink
Merge pull request #3261 from akva2/constantcompressibilitywaterpvt_e…
Browse files Browse the repository at this point in the history
…ncapsulate

ConstantCompressibilityWaterPvt: encapsulate EclipseState w/ friends
  • Loading branch information
bska authored Dec 21, 2022
2 parents db71266 + d754d83 commit 77c79ca
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 51 deletions.
1 change: 1 addition & 0 deletions CMakeLists_files.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,7 @@ if(ENABLE_ECL_INPUT)
src/opm/material/fluidsystems/blackoilpvt/Co2GasPvt.cpp
src/opm/material/fluidsystems/blackoilpvt/ConstantCompressibilityBrinePvt.cpp
src/opm/material/fluidsystems/blackoilpvt/ConstantCompressibilityOilPvt.cpp
src/opm/material/fluidsystems/blackoilpvt/ConstantCompressibilityWaterPvt.cpp
)


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,17 @@
#ifndef OPM_CONSTANT_COMPRESSIBILITY_WATER_PVT_HPP
#define OPM_CONSTANT_COMPRESSIBILITY_WATER_PVT_HPP

#if HAVE_ECL_INPUT
#include <opm/input/eclipse/EclipseState/EclipseState.hpp>
#endif

#include <cstddef>
#include <stdexcept>
#include <vector>

namespace Opm {

#if HAVE_ECL_INPUT
class EclipseState;
class Schedule;
#endif

/*!
* \brief This class represents the Pressure-Volume-Temperature relations of the gas phase
* without vaporized oil.
Expand All @@ -42,47 +46,12 @@ template <class Scalar>
class ConstantCompressibilityWaterPvt
{
public:
ConstantCompressibilityWaterPvt() = default;
ConstantCompressibilityWaterPvt(const std::vector<Scalar>& waterReferenceDensity,
const std::vector<Scalar>& waterReferencePressure,
const std::vector<Scalar>& waterReferenceFormationVolumeFactor,
const std::vector<Scalar>& waterCompressibility,
const std::vector<Scalar>& waterViscosity,
const std::vector<Scalar>& waterViscosibility)
: waterReferenceDensity_(waterReferenceDensity)
, waterReferencePressure_(waterReferencePressure)
, waterReferenceFormationVolumeFactor_(waterReferenceFormationVolumeFactor)
, waterCompressibility_(waterCompressibility)
, waterViscosity_(waterViscosity)
, waterViscosibility_(waterViscosibility)
{ }
#if HAVE_ECL_INPUT
/*!
* \brief Sets the pressure-dependent water viscosity and density
* using a table stemming from the Eclipse PVTW keyword.
*/
void initFromState(const EclipseState& eclState, const Schedule&)
{
const auto& pvtwTable = eclState.getTableManager().getPvtwTable();
const auto& densityTable = eclState.getTableManager().getDensityTable();

assert(pvtwTable.size() == densityTable.size());

size_t numRegions = pvtwTable.size();
setNumRegions(numRegions);

for (unsigned regionIdx = 0; regionIdx < numRegions; ++ regionIdx) {
waterReferenceDensity_[regionIdx] = densityTable[regionIdx].water;

waterReferencePressure_[regionIdx] = pvtwTable[regionIdx].reference_pressure;
waterReferenceFormationVolumeFactor_[regionIdx] = pvtwTable[regionIdx].volume_factor;
waterCompressibility_[regionIdx] = pvtwTable[regionIdx].compressibility;
waterViscosity_[regionIdx] = pvtwTable[regionIdx].viscosity;
waterViscosibility_[regionIdx] = pvtwTable[regionIdx].viscosibility;
}

initEnd();
}
void initFromState(const EclipseState& eclState, const Schedule&);
#endif

void setNumRegions(size_t numRegions)
Expand Down Expand Up @@ -271,7 +240,7 @@ class ConstantCompressibilityWaterPvt
const Evaluation& /*saltconcentration*/) const
{ return 0.0; /* this is dead water! */ }

const Scalar waterReferenceDensity(unsigned regionIdx) const
Scalar waterReferenceDensity(unsigned regionIdx) const
{ return waterReferenceDensity_[regionIdx]; }

const std::vector<Scalar>& waterReferencePressure() const
Expand All @@ -289,16 +258,6 @@ class ConstantCompressibilityWaterPvt
const std::vector<Scalar>& waterViscosibility() const
{ return waterViscosibility_; }

bool operator==(const ConstantCompressibilityWaterPvt<Scalar>& data) const
{
return this->waterReferenceDensity_ == data.waterReferenceDensity_ &&
this->waterReferencePressure() == data.waterReferencePressure() &&
this->waterReferenceFormationVolumeFactor() == data.waterReferenceFormationVolumeFactor() &&
this->waterCompressibility() == data.waterCompressibility() &&
this->waterViscosity() == data.waterViscosity() &&
this->waterViscosibility() == data.waterViscosibility();
}

private:
std::vector<Scalar> waterReferenceDensity_;
std::vector<Scalar> waterReferencePressure_;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
// vi: set et ts=4 sw=4 sts=4:
/*
This file is part of the Open Porous Media project (OPM).
OPM is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
OPM is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OPM. If not, see <http://www.gnu.org/licenses/>.
Consult the COPYING file in the top-level source directory of this
module for the precise wording of the license and the list of
copyright holders.
*/

#include <config.h>
#include <opm/material/fluidsystems/blackoilpvt/ConstantCompressibilityWaterPvt.hpp>

#include <opm/common/ErrorMacros.hpp>

#include <opm/input/eclipse/EclipseState/EclipseState.hpp>

#include <fmt/format.h>

namespace Opm {

template<class Scalar>
void ConstantCompressibilityWaterPvt<Scalar>::
initFromState(const EclipseState& eclState, const Schedule&)
{
const auto& pvtwTable = eclState.getTableManager().getPvtwTable();
const auto& densityTable = eclState.getTableManager().getDensityTable();

if (pvtwTable.size() != densityTable.size()) {
OPM_THROW(std::runtime_error,
fmt::format("Table sizes mismatch. PVTW: {}, DensityTable: {}\n",
pvtwTable.size(), densityTable.size()));
}

size_t numRegions = pvtwTable.size();
setNumRegions(numRegions);

for (unsigned regionIdx = 0; regionIdx < numRegions; ++regionIdx) {
waterReferenceDensity_[regionIdx] = densityTable[regionIdx].water;

waterReferencePressure_[regionIdx] = pvtwTable[regionIdx].reference_pressure;
waterReferenceFormationVolumeFactor_[regionIdx] = pvtwTable[regionIdx].volume_factor;
waterCompressibility_[regionIdx] = pvtwTable[regionIdx].compressibility;
waterViscosity_[regionIdx] = pvtwTable[regionIdx].viscosity;
waterViscosibility_[regionIdx] = pvtwTable[regionIdx].viscosibility;
}

initEnd();
}

template class ConstantCompressibilityWaterPvt<double>;
template class ConstantCompressibilityWaterPvt<float>;

} // namespace Opm

0 comments on commit 77c79ca

Please sign in to comment.