mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
RateConverter: move inferDissolvedVaporisedRatio to compile unit
This commit is contained in:
parent
8c233ffba2
commit
173e3900d4
@ -25,6 +25,36 @@
|
||||
#include <opm/material/fluidsystems/BlackOilFluidSystem.hpp>
|
||||
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
|
||||
namespace {
|
||||
|
||||
template <typename Rates>
|
||||
std::pair<double, double>
|
||||
dissolvedVaporisedRatio(const int io,
|
||||
const int ig,
|
||||
const double rs,
|
||||
const double rv,
|
||||
const Rates& surface_rates)
|
||||
{
|
||||
if ((io < 0) || (ig < 0)) {
|
||||
return { rs, rv };
|
||||
}
|
||||
auto eps = std::copysign(1.0e-15, surface_rates[io]);
|
||||
const auto Rs = surface_rates[ig] / (surface_rates[io] + eps);
|
||||
|
||||
eps = std::copysign(1.0e-15, surface_rates[ig]);
|
||||
const auto Rv = surface_rates[io] / (surface_rates[ig] + eps);
|
||||
|
||||
return {
|
||||
std::clamp(static_cast<double>(Rs), 0.0, rs),
|
||||
std::clamp(static_cast<double>(Rv), 0.0, rv)
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace Opm {
|
||||
namespace RateConverter {
|
||||
@ -195,10 +225,10 @@ calcReservoirVoidageRates(const int pvtRegionIdx,
|
||||
const auto io = RegionAttributeHelpers::PhasePos::oil (pu);
|
||||
const auto ig = RegionAttributeHelpers::PhasePos::gas (pu);
|
||||
|
||||
const auto [Rs, Rv] = this->
|
||||
const auto [Rs, Rv] =
|
||||
dissolvedVaporisedRatio(io, ig, rs, rv, surface_rates);
|
||||
|
||||
const auto [Rsw, Rvw] = this->
|
||||
const auto [Rsw, Rvw] =
|
||||
dissolvedVaporisedRatio(iw, ig, rsw, rvw, surface_rates);
|
||||
|
||||
|
||||
@ -287,6 +317,19 @@ calcReservoirVoidageRates(const RegionId r,
|
||||
voidage_rates);
|
||||
}
|
||||
|
||||
template <class FluidSystem, class Region>
|
||||
template <class Rates>
|
||||
std::pair<double, double>
|
||||
SurfaceToReservoirVoidage<FluidSystem,Region>::
|
||||
inferDissolvedVaporisedRatio(const double rsMax,
|
||||
const double rvMax,
|
||||
const Rates& surface_rates) const
|
||||
{
|
||||
const auto io = RegionAttributeHelpers::PhasePos::oil(this->phaseUsage_);
|
||||
const auto ig = RegionAttributeHelpers::PhasePos::gas(this->phaseUsage_);
|
||||
return dissolvedVaporisedRatio(io, ig, rsMax, rvMax, surface_rates);
|
||||
}
|
||||
|
||||
using FS = BlackOilFluidSystem<double,BlackOilDefaultIndexTraits>;
|
||||
template void SurfaceToReservoirVoidage<FS,std::vector<int>>::
|
||||
sumRates(std::unordered_map<int,Attributes>&,
|
||||
@ -326,5 +369,11 @@ template void SurfaceToReservoirVoidage<FS,std::vector<int>>::
|
||||
const std::vector<double>&,
|
||||
std::vector<double>&) const;
|
||||
|
||||
template std::pair<double,double>
|
||||
SurfaceToReservoirVoidage<FS,std::vector<int>>::
|
||||
inferDissolvedVaporisedRatio<std::vector<double>::iterator>(const double,
|
||||
const double,
|
||||
const std::vector<double>::iterator&) const;
|
||||
|
||||
} // namespace RateConverter
|
||||
} // namespace Opm
|
||||
|
@ -32,13 +32,8 @@
|
||||
#include <dune/grid/common/gridenums.hh>
|
||||
#include <dune/grid/common/rangegenerators.hh>
|
||||
|
||||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <cassert>
|
||||
#include <cmath>
|
||||
#include <memory>
|
||||
#include <stdexcept>
|
||||
#include <type_traits>
|
||||
#include <unordered_map>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
@ -330,12 +325,7 @@ namespace Opm {
|
||||
std::pair<double, double>
|
||||
inferDissolvedVaporisedRatio(const double rsMax,
|
||||
const double rvMax,
|
||||
const Rates& surface_rates) const
|
||||
{
|
||||
const auto io = RegionAttributeHelpers::PhasePos::oil(this->phaseUsage_);
|
||||
const auto ig = RegionAttributeHelpers::PhasePos::gas(this->phaseUsage_);
|
||||
return this->dissolvedVaporisedRatio(io, ig, rsMax, rvMax, surface_rates);
|
||||
}
|
||||
const Rates& surface_rates) const;
|
||||
|
||||
/**
|
||||
* Compute coefficients for surface-to-reservoir voidage
|
||||
@ -416,29 +406,6 @@ namespace Opm {
|
||||
Parallel::Communication comm);
|
||||
|
||||
RegionAttributeHelpers::RegionAttributes<RegionId, Attributes> attr_;
|
||||
|
||||
template <typename Rates>
|
||||
std::pair<double, double>
|
||||
dissolvedVaporisedRatio(const int io,
|
||||
const int ig,
|
||||
const double rs,
|
||||
const double rv,
|
||||
const Rates& surface_rates) const
|
||||
{
|
||||
if ((io < 0) || (ig < 0)) {
|
||||
return { rs, rv };
|
||||
}
|
||||
auto eps = std::copysign(1.0e-15, surface_rates[io]);
|
||||
const auto Rs = surface_rates[ig] / (surface_rates[io] + eps);
|
||||
|
||||
eps = std::copysign(1.0e-15, surface_rates[ig]);
|
||||
const auto Rv = surface_rates[io] / (surface_rates[ig] + eps);
|
||||
|
||||
return {
|
||||
std::clamp(static_cast<double>(Rs), 0.0, rs),
|
||||
std::clamp(static_cast<double>(Rv), 0.0, rv)
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace RateConverter
|
||||
|
Loading…
Reference in New Issue
Block a user