diff --git a/CMakeLists_files.cmake b/CMakeLists_files.cmake index 119ab033643..220ae321fc1 100644 --- a/CMakeLists_files.cmake +++ b/CMakeLists_files.cmake @@ -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 ) diff --git a/opm/material/fluidsystems/blackoilpvt/ConstantCompressibilityWaterPvt.hpp b/opm/material/fluidsystems/blackoilpvt/ConstantCompressibilityWaterPvt.hpp index a05968a1dd3..5be4bf36cc0 100644 --- a/opm/material/fluidsystems/blackoilpvt/ConstantCompressibilityWaterPvt.hpp +++ b/opm/material/fluidsystems/blackoilpvt/ConstantCompressibilityWaterPvt.hpp @@ -27,13 +27,17 @@ #ifndef OPM_CONSTANT_COMPRESSIBILITY_WATER_PVT_HPP #define OPM_CONSTANT_COMPRESSIBILITY_WATER_PVT_HPP -#if HAVE_ECL_INPUT -#include -#endif - +#include +#include #include 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. @@ -42,47 +46,12 @@ template class ConstantCompressibilityWaterPvt { public: - ConstantCompressibilityWaterPvt() = default; - ConstantCompressibilityWaterPvt(const std::vector& waterReferenceDensity, - const std::vector& waterReferencePressure, - const std::vector& waterReferenceFormationVolumeFactor, - const std::vector& waterCompressibility, - const std::vector& waterViscosity, - const std::vector& 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) @@ -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& waterReferencePressure() const @@ -289,16 +258,6 @@ class ConstantCompressibilityWaterPvt const std::vector& waterViscosibility() const { return waterViscosibility_; } - bool operator==(const ConstantCompressibilityWaterPvt& 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 waterReferenceDensity_; std::vector waterReferencePressure_; diff --git a/src/opm/material/fluidsystems/blackoilpvt/ConstantCompressibilityWaterPvt.cpp b/src/opm/material/fluidsystems/blackoilpvt/ConstantCompressibilityWaterPvt.cpp new file mode 100644 index 00000000000..c09f7ee2e55 --- /dev/null +++ b/src/opm/material/fluidsystems/blackoilpvt/ConstantCompressibilityWaterPvt.cpp @@ -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 . + + 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 +#include + +#include + +#include + +#include + +namespace Opm { + +template +void ConstantCompressibilityWaterPvt:: +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; +template class ConstantCompressibilityWaterPvt; + +} // namespace Opm