mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
initializeWBPCalculationService: move to BlackoilWellModelGeneric
This commit is contained in:
parent
a67e8c44b4
commit
4d998545eb
@ -500,14 +500,9 @@ template<class Scalar> class WellContributions;
|
|||||||
// setting the well_solutions_ based on well_state.
|
// setting the well_solutions_ based on well_state.
|
||||||
void updatePrimaryVariables(DeferredLogger& deferred_logger);
|
void updatePrimaryVariables(DeferredLogger& deferred_logger);
|
||||||
|
|
||||||
void initializeWBPCalculationService();
|
|
||||||
|
|
||||||
data::WellBlockAveragePressures
|
data::WellBlockAveragePressures
|
||||||
computeWellBlockAveragePressures() const;
|
computeWellBlockAveragePressures() const;
|
||||||
|
|
||||||
typename ParallelWBPCalculation<Scalar>::EvaluatorFactory
|
|
||||||
makeWellSourceEvaluatorFactory(const std::vector<Well>::size_type wellIdx) const;
|
|
||||||
|
|
||||||
void updateAverageFormationFactor();
|
void updateAverageFormationFactor();
|
||||||
|
|
||||||
void computePotentials(const std::size_t widx,
|
void computePotentials(const std::size_t widx,
|
||||||
|
@ -2101,6 +2101,80 @@ registerOpenWellsForWBPCalculation()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class Scalar>
|
||||||
|
typename ParallelWBPCalculation<Scalar>::EvaluatorFactory
|
||||||
|
BlackoilWellModelGeneric<Scalar>::
|
||||||
|
makeWellSourceEvaluatorFactory(const std::vector<Well>::size_type wellIdx) const
|
||||||
|
{
|
||||||
|
using Span = typename PAvgDynamicSourceData<Scalar>::template SourceDataSpan<Scalar>;
|
||||||
|
using Item = typename Span::Item;
|
||||||
|
|
||||||
|
return [wellIdx, this]() -> typename ParallelWBPCalculation<Scalar>::Evaluator
|
||||||
|
{
|
||||||
|
if (! this->wbpCalcMap_[wellIdx].openWellIdx_.has_value()) {
|
||||||
|
// Well is stopped/shut. Return evaluator for stopped wells.
|
||||||
|
return []([[maybe_unused]] const int connIdx, Span sourceTerm)
|
||||||
|
{
|
||||||
|
// Well/connection is stopped/shut. Set all items to
|
||||||
|
// zero.
|
||||||
|
|
||||||
|
sourceTerm
|
||||||
|
.set(Item::Pressure , 0.0)
|
||||||
|
.set(Item::PoreVol , 0.0)
|
||||||
|
.set(Item::MixtureDensity, 0.0)
|
||||||
|
.set(Item::Depth , 0.0)
|
||||||
|
;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Well is open. Return an evaluator for open wells/open connections.
|
||||||
|
return [this, wellPtr = this->well_container_generic_[*this->wbpCalcMap_[wellIdx].openWellIdx_]]
|
||||||
|
(const int connIdx, Span sourceTerm)
|
||||||
|
{
|
||||||
|
// Note: The only item which actually matters for the WBP
|
||||||
|
// calculation at the well reservoir connection level is the
|
||||||
|
// mixture density. Set other items to zero.
|
||||||
|
|
||||||
|
const auto& connIdxMap =
|
||||||
|
this->conn_idx_map_[wellPtr->indexOfWell()];
|
||||||
|
|
||||||
|
const auto rho = wellPtr->
|
||||||
|
connectionDensity(connIdxMap.global(connIdx),
|
||||||
|
connIdxMap.open(connIdx));
|
||||||
|
|
||||||
|
sourceTerm
|
||||||
|
.set(Item::Pressure , 0.0)
|
||||||
|
.set(Item::PoreVol , 0.0)
|
||||||
|
.set(Item::MixtureDensity, rho)
|
||||||
|
.set(Item::Depth , 0.0)
|
||||||
|
;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class Scalar>
|
||||||
|
void BlackoilWellModelGeneric<Scalar>::
|
||||||
|
initializeWBPCalculationService()
|
||||||
|
{
|
||||||
|
this->wbpCalcMap_.clear();
|
||||||
|
this->wbpCalcMap_.resize(this->wells_ecl_.size());
|
||||||
|
|
||||||
|
this->registerOpenWellsForWBPCalculation();
|
||||||
|
|
||||||
|
auto wellID = std::size_t{0};
|
||||||
|
for (const auto& well : this->wells_ecl_) {
|
||||||
|
this->wbpCalcMap_[wellID].wbpCalcIdx_ = this->wbpCalculationService_
|
||||||
|
.createCalculator(well,
|
||||||
|
this->local_parallel_well_info_[wellID],
|
||||||
|
this->conn_idx_map_[wellID].local(),
|
||||||
|
this->makeWellSourceEvaluatorFactory(wellID));
|
||||||
|
|
||||||
|
++wellID;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->wbpCalculationService_.defineCommunication();
|
||||||
|
}
|
||||||
|
|
||||||
template class BlackoilWellModelGeneric<double>;
|
template class BlackoilWellModelGeneric<double>;
|
||||||
|
|
||||||
#if FLOW_INSTANTIATE_FLOAT
|
#if FLOW_INSTANTIATE_FLOAT
|
||||||
|
@ -460,6 +460,11 @@ protected:
|
|||||||
|
|
||||||
void registerOpenWellsForWBPCalculation();
|
void registerOpenWellsForWBPCalculation();
|
||||||
|
|
||||||
|
typename ParallelWBPCalculation<Scalar>::EvaluatorFactory
|
||||||
|
makeWellSourceEvaluatorFactory(const std::vector<Well>::size_type wellIdx) const;
|
||||||
|
|
||||||
|
void initializeWBPCalculationService();
|
||||||
|
|
||||||
Schedule& schedule_;
|
Schedule& schedule_;
|
||||||
const SummaryState& summaryState_;
|
const SummaryState& summaryState_;
|
||||||
const EclipseState& eclState_;
|
const EclipseState& eclState_;
|
||||||
|
@ -2357,34 +2357,6 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template <typename TypeTag>
|
|
||||||
void
|
|
||||||
BlackoilWellModel<TypeTag>::
|
|
||||||
initializeWBPCalculationService()
|
|
||||||
{
|
|
||||||
this->wbpCalcMap_.clear();
|
|
||||||
this->wbpCalcMap_.resize(this->wells_ecl_.size());
|
|
||||||
|
|
||||||
this->registerOpenWellsForWBPCalculation();
|
|
||||||
|
|
||||||
auto wellID = std::size_t{0};
|
|
||||||
for (const auto& well : this->wells_ecl_) {
|
|
||||||
this->wbpCalcMap_[wellID].wbpCalcIdx_ = this->wbpCalculationService_
|
|
||||||
.createCalculator(well,
|
|
||||||
this->local_parallel_well_info_[wellID],
|
|
||||||
this->conn_idx_map_[wellID].local(),
|
|
||||||
this->makeWellSourceEvaluatorFactory(wellID));
|
|
||||||
|
|
||||||
++wellID;
|
|
||||||
}
|
|
||||||
|
|
||||||
this->wbpCalculationService_.defineCommunication();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template <typename TypeTag>
|
template <typename TypeTag>
|
||||||
data::WellBlockAveragePressures
|
data::WellBlockAveragePressures
|
||||||
BlackoilWellModel<TypeTag>::
|
BlackoilWellModel<TypeTag>::
|
||||||
@ -2431,61 +2403,6 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template <typename TypeTag>
|
|
||||||
typename ParallelWBPCalculation<typename BlackoilWellModel<TypeTag>::Scalar>::EvaluatorFactory
|
|
||||||
BlackoilWellModel<TypeTag>::
|
|
||||||
makeWellSourceEvaluatorFactory(const std::vector<Well>::size_type wellIdx) const
|
|
||||||
{
|
|
||||||
using Span = typename PAvgDynamicSourceData<Scalar>::template SourceDataSpan<Scalar>;
|
|
||||||
using Item = typename Span::Item;
|
|
||||||
|
|
||||||
return [wellIdx, this]() -> typename ParallelWBPCalculation<Scalar>::Evaluator
|
|
||||||
{
|
|
||||||
if (! this->wbpCalcMap_[wellIdx].openWellIdx_.has_value()) {
|
|
||||||
// Well is stopped/shut. Return evaluator for stopped wells.
|
|
||||||
return []([[maybe_unused]] const int connIdx, Span sourceTerm)
|
|
||||||
{
|
|
||||||
// Well/connection is stopped/shut. Set all items to
|
|
||||||
// zero.
|
|
||||||
|
|
||||||
sourceTerm
|
|
||||||
.set(Item::Pressure , 0.0)
|
|
||||||
.set(Item::PoreVol , 0.0)
|
|
||||||
.set(Item::MixtureDensity, 0.0)
|
|
||||||
.set(Item::Depth , 0.0)
|
|
||||||
;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Well is open. Return an evaluator for open wells/open connections.
|
|
||||||
return [this, wellPtr = this->well_container_[*this->wbpCalcMap_[wellIdx].openWellIdx_].get()]
|
|
||||||
(const int connIdx, Span sourceTerm)
|
|
||||||
{
|
|
||||||
// Note: The only item which actually matters for the WBP
|
|
||||||
// calculation at the well reservoir connection level is the
|
|
||||||
// mixture density. Set other items to zero.
|
|
||||||
|
|
||||||
const auto& connIdxMap =
|
|
||||||
this->conn_idx_map_[wellPtr->indexOfWell()];
|
|
||||||
|
|
||||||
const auto rho = wellPtr->
|
|
||||||
connectionDensity(connIdxMap.global(connIdx),
|
|
||||||
connIdxMap.open(connIdx));
|
|
||||||
|
|
||||||
sourceTerm
|
|
||||||
.set(Item::Pressure , 0.0)
|
|
||||||
.set(Item::PoreVol , 0.0)
|
|
||||||
.set(Item::MixtureDensity, rho)
|
|
||||||
.set(Item::Depth , 0.0)
|
|
||||||
;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename TypeTag>
|
template<typename TypeTag>
|
||||||
void
|
void
|
||||||
BlackoilWellModel<TypeTag>::
|
BlackoilWellModel<TypeTag>::
|
||||||
|
Loading…
Reference in New Issue
Block a user