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:
@@ -25,6 +25,36 @@
|
|||||||
#include <opm/material/fluidsystems/BlackOilFluidSystem.hpp>
|
#include <opm/material/fluidsystems/BlackOilFluidSystem.hpp>
|
||||||
|
|
||||||
#include <algorithm>
|
#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 Opm {
|
||||||
namespace RateConverter {
|
namespace RateConverter {
|
||||||
@@ -195,10 +225,10 @@ calcReservoirVoidageRates(const int pvtRegionIdx,
|
|||||||
const auto io = RegionAttributeHelpers::PhasePos::oil (pu);
|
const auto io = RegionAttributeHelpers::PhasePos::oil (pu);
|
||||||
const auto ig = RegionAttributeHelpers::PhasePos::gas (pu);
|
const auto ig = RegionAttributeHelpers::PhasePos::gas (pu);
|
||||||
|
|
||||||
const auto [Rs, Rv] = this->
|
const auto [Rs, Rv] =
|
||||||
dissolvedVaporisedRatio(io, ig, rs, rv, surface_rates);
|
dissolvedVaporisedRatio(io, ig, rs, rv, surface_rates);
|
||||||
|
|
||||||
const auto [Rsw, Rvw] = this->
|
const auto [Rsw, Rvw] =
|
||||||
dissolvedVaporisedRatio(iw, ig, rsw, rvw, surface_rates);
|
dissolvedVaporisedRatio(iw, ig, rsw, rvw, surface_rates);
|
||||||
|
|
||||||
|
|
||||||
@@ -287,6 +317,19 @@ calcReservoirVoidageRates(const RegionId r,
|
|||||||
voidage_rates);
|
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>;
|
using FS = BlackOilFluidSystem<double,BlackOilDefaultIndexTraits>;
|
||||||
template void SurfaceToReservoirVoidage<FS,std::vector<int>>::
|
template void SurfaceToReservoirVoidage<FS,std::vector<int>>::
|
||||||
sumRates(std::unordered_map<int,Attributes>&,
|
sumRates(std::unordered_map<int,Attributes>&,
|
||||||
@@ -326,5 +369,11 @@ template void SurfaceToReservoirVoidage<FS,std::vector<int>>::
|
|||||||
const std::vector<double>&,
|
const std::vector<double>&,
|
||||||
std::vector<double>&) const;
|
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 RateConverter
|
||||||
} // namespace Opm
|
} // namespace Opm
|
||||||
|
|||||||
@@ -32,13 +32,8 @@
|
|||||||
#include <dune/grid/common/gridenums.hh>
|
#include <dune/grid/common/gridenums.hh>
|
||||||
#include <dune/grid/common/rangegenerators.hh>
|
#include <dune/grid/common/rangegenerators.hh>
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cmath>
|
|
||||||
#include <memory>
|
|
||||||
#include <stdexcept>
|
|
||||||
#include <type_traits>
|
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@@ -330,12 +325,7 @@ namespace Opm {
|
|||||||
std::pair<double, double>
|
std::pair<double, double>
|
||||||
inferDissolvedVaporisedRatio(const double rsMax,
|
inferDissolvedVaporisedRatio(const double rsMax,
|
||||||
const double rvMax,
|
const double rvMax,
|
||||||
const Rates& surface_rates) const
|
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compute coefficients for surface-to-reservoir voidage
|
* Compute coefficients for surface-to-reservoir voidage
|
||||||
@@ -416,29 +406,6 @@ namespace Opm {
|
|||||||
Parallel::Communication comm);
|
Parallel::Communication comm);
|
||||||
|
|
||||||
RegionAttributeHelpers::RegionAttributes<RegionId, Attributes> attr_;
|
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
|
} // namespace RateConverter
|
||||||
|
|||||||
Reference in New Issue
Block a user