PerforationData: template Scalar type

This commit is contained in:
Arne Morten Kvarving
2024-05-22 09:48:07 +02:00
parent d2cbf33b62
commit 81189b89c7
23 changed files with 57 additions and 54 deletions
@@ -193,7 +193,7 @@ public:
bool forceShutWellByName(const std::string& wellname,
const double simulation_time);
const std::vector<PerforationData>& perfData(const int well_idx) const
const std::vector<PerforationData<Scalar>>& perfData(const int well_idx) const
{ return well_perf_data_[well_idx]; }
const Parallel::Communication& comm() const { return comm_; }
@@ -450,7 +450,7 @@ protected:
std::optional<int> last_run_wellpi_{};
std::vector<Well> wells_ecl_;
std::vector<std::vector<PerforationData>> well_perf_data_;
std::vector<std::vector<PerforationData<Scalar>>> well_perf_data_;
/// Connection index mappings
class ConnectionIndexMap
@@ -71,7 +71,7 @@ template<class Scalar>
void BlackoilWellModelRestart<Scalar>::
loadRestartConnectionData(const std::vector<data::Rates::opt>& phs,
const data::Well& rst_well,
const std::vector<PerforationData>& old_perf_data,
const std::vector<PerforationData<Scalar>>& old_perf_data,
SingleWellState<Scalar>& ws) const
{
auto& perf_data = ws.perf_data;
@@ -130,7 +130,7 @@ loadRestartWellData(const std::string& well_name,
const bool handle_ms_well,
const std::vector<data::Rates::opt>& phs,
const data::Well& rst_well,
const std::vector<PerforationData>& old_perf_data,
const std::vector<PerforationData<Scalar>>& old_perf_data,
SingleWellState<Scalar>& ws) const
{
const auto np = phs.size();
@@ -38,7 +38,7 @@ class GroupAndNetworkValues;
template<class Scalar> class GroupState;
class GuideRate;
class GuideRateConfig;
struct PerforationData;
template<class Scalar> struct PerforationData;
struct PhaseUsage;
template<class Scalar> class SingleWellState;
template<class Scalar> class WellState;
@@ -76,7 +76,7 @@ private:
//! \brief Loads per-connection data from restart structures.
void loadRestartConnectionData(const std::vector<data::Rates::opt>& phs,
const data::Well& rst_well,
const std::vector<PerforationData>& old_perf_data,
const std::vector<PerforationData<Scalar>>& old_perf_data,
SingleWellState<Scalar>& ws) const;
//! \brief Loads per-segment data from restart structures.
@@ -90,7 +90,7 @@ private:
const bool handle_ms_well,
const std::vector<data::Rates::opt>& phs,
const data::Well& rst_well,
const std::vector<PerforationData>& old_perf_data,
const std::vector<PerforationData<Scalar>>& old_perf_data,
SingleWellState<Scalar>& ws) const;
//! \brief Loads per-group data from restart structures.
+1 -1
View File
@@ -76,7 +76,7 @@ namespace Opm
const int num_components,
const int num_phases,
const int index_of_well,
const std::vector<PerforationData>& perf_data);
const std::vector<PerforationData<Scalar>>& perf_data);
void init(const PhaseUsage* phase_usage_arg,
const std::vector<double>& depth_arg,
@@ -65,7 +65,7 @@ namespace Opm
const int num_components,
const int num_phases,
const int index_of_well,
const std::vector<PerforationData>& perf_data)
const std::vector<PerforationData<Scalar>>& perf_data)
: Base(well, pw_info, time_step, param, rate_converter, pvtRegionIdx, num_components, num_phases, index_of_well, perf_data)
, MSWEval(static_cast<WellInterfaceIndices<FluidSystem,Indices>&>(*this))
, regularize_(false)
+4 -4
View File
@@ -22,15 +22,15 @@
#include <cstddef>
namespace Opm
{
namespace Opm {
/// Static data associated with a well perforation.
template<class Scalar>
struct PerforationData
{
int cell_index{};
double connection_transmissibility_factor{};
double connection_d_factor{};
Scalar connection_transmissibility_factor{};
Scalar connection_d_factor{};
int satnum_id{};
/// \brief The original index of the perforation in ECL Schedule
std::size_t ecl_index{};
+2 -2
View File
@@ -34,7 +34,7 @@ SingleWellState(const std::string& name_,
const ParallelWellInfo& pinfo,
bool is_producer,
Scalar pressure_first_connection,
const std::vector<PerforationData>& perf_input,
const std::vector<PerforationData<Scalar>>& perf_input,
const PhaseUsage& pu_,
Scalar temp)
: name(name_)
@@ -138,7 +138,7 @@ void SingleWellState<Scalar>::updateStatus(Well::Status new_status)
template<class Scalar>
void SingleWellState<Scalar>::
reset_connection_factors(const std::vector<PerforationData>& new_perf_data)
reset_connection_factors(const std::vector<PerforationData<Scalar>>& new_perf_data)
{
if (this->perf_data.size() != new_perf_data.size()) {
throw std::invalid_argument {
+3 -3
View File
@@ -33,7 +33,7 @@
namespace Opm {
struct PerforationData;
template<class Scalar> struct PerforationData;
class SummaryState;
class Well;
@@ -44,7 +44,7 @@ public:
const ParallelWellInfo& pinfo,
bool is_producer,
Scalar presssure_first_connection,
const std::vector<PerforationData>& perf_input,
const std::vector<PerforationData<Scalar>>& perf_input,
const PhaseUsage& pu,
Scalar temp);
@@ -120,7 +120,7 @@ public:
/// \param[in] new_perf_data New perforation data. Only
/// PerforationData::connection_transmissibility_factor actually
/// used (overwrites existing internal values).
void reset_connection_factors(const std::vector<PerforationData>& new_perf_data);
void reset_connection_factors(const std::vector<PerforationData<Scalar>>& new_perf_data);
void update_producer_targets(const Well& ecl_well, const SummaryState& st);
void update_injector_targets(const Well& ecl_well, const SummaryState& st);
void update_targets(const Well& ecl_well, const SummaryState& st);
+1 -1
View File
@@ -128,7 +128,7 @@ namespace Opm
const int num_components,
const int num_phases,
const int index_of_well,
const std::vector<PerforationData>& perf_data);
const std::vector<PerforationData<Scalar>>& perf_data);
virtual void init(const PhaseUsage* phase_usage_arg,
const std::vector<Scalar>& depth_arg,
+1 -1
View File
@@ -78,7 +78,7 @@ namespace Opm
const int num_components,
const int num_phases,
const int index_of_well,
const std::vector<PerforationData>& perf_data)
const std::vector<PerforationData<Scalar>>& perf_data)
: Base(well, pw_info, time_step, param, rate_converter, pvtRegionIdx, num_components, num_phases, index_of_well, perf_data)
, StdWellEval(static_cast<const WellInterfaceIndices<FluidSystem,Indices>&>(*this))
, regularize_(false)
+1
View File
@@ -25,6 +25,7 @@
#include <opm/simulators/utils/DeferredLoggingErrorHelpers.hpp>
#include <opm/simulators/wells/PerforationData.hpp>
#include <opm/simulators/wells/WellInterfaceGeneric.hpp>
#include <opm/simulators/wells/WellState.hpp>
+1 -2
View File
@@ -60,7 +60,6 @@ namespace Opm {
#include <opm/material/densead/Evaluation.hpp>
#include <cassert>
#include <vector>
namespace Opm
@@ -142,7 +141,7 @@ public:
const int num_components,
const int num_phases,
const int index_of_well,
const std::vector<PerforationData>& perf_data);
const std::vector<PerforationData<Scalar>>& perf_data);
/// Virtual destructor
virtual ~WellInterface() = default;
@@ -53,7 +53,7 @@ WellInterfaceFluidSystem(const Well& well,
const int num_components,
const int num_phases,
const int index_of_well,
const std::vector<PerforationData>& perf_data)
const std::vector<PerforationData<Scalar>>& perf_data)
: WellInterfaceGeneric<Scalar>(well, parallel_well_info, time_step,
pvtRegionIdx, num_components, num_phases,
index_of_well, perf_data)
@@ -75,7 +75,7 @@ protected:
const int num_components,
const int num_phases,
const int index_of_well,
const std::vector<PerforationData>& perf_data);
const std::vector<PerforationData<Scalar>>& perf_data);
// updating the voidage rates in well_state when requested
void calculateReservoirRates(SingleWellState<Scalar>& ws) const;
@@ -60,7 +60,7 @@ WellInterfaceGeneric(const Well& well,
const int num_components,
const int num_phases,
const int index_of_well,
const std::vector<PerforationData>& perf_data)
const std::vector<PerforationData<Scalar>>& perf_data)
: well_ecl_(well)
, parallel_well_info_(pw_info)
, current_step_(time_step)
@@ -143,7 +143,7 @@ adaptRatesForVFP(std::vector<Scalar>& rates) const
}
template<class Scalar>
const std::vector<PerforationData>&
const std::vector<PerforationData<Scalar>>&
WellInterfaceGeneric<Scalar>::perforationData() const
{
return *perf_data_;
@@ -37,7 +37,7 @@ namespace Opm
class DeferredLogger;
class GuideRate;
class ParallelWellInfo;
struct PerforationData;
template<class Scalar> struct PerforationData;
struct PhaseUsage;
class SummaryState;
template<class Scalar> class VFPProperties;
@@ -57,10 +57,10 @@ public:
const int num_components,
const int num_phases,
const int index_of_well,
const std::vector<PerforationData>& perf_data);
const std::vector<PerforationData<Scalar>>& perf_data);
/// \brief Get the perforations of the well
const std::vector<PerforationData>& perforationData() const;
const std::vector<PerforationData<Scalar>>& perforationData() const;
/// Well name.
const std::string& name() const;
@@ -286,7 +286,7 @@ protected:
// the index of well in Wells struct
int index_of_well_;
const std::vector<PerforationData>* perf_data_;
const std::vector<PerforationData<Scalar>>* perf_data_;
// the vectors used to describe the inflow performance relationship (IPR)
// Q = IPR_A - BHP * IPR_B
@@ -43,7 +43,7 @@ WellInterfaceIndices(const Well& well,
const int num_components,
const int num_phases,
const int index_of_well,
const std::vector<PerforationData>& perf_data)
const std::vector<PerforationData<Scalar>>& perf_data)
: WellInterfaceFluidSystem<FluidSystem>(well,
parallel_well_info,
time_step,
@@ -63,7 +63,7 @@ protected:
const int num_components,
const int num_phases,
const int index_of_well,
const std::vector<PerforationData>& perf_data);
const std::vector<PerforationData<Scalar>>& perf_data);
};
}
+2 -1
View File
@@ -40,6 +40,7 @@
#include <dune/common/version.hh>
#include <cassert>
#include <cstddef>
#include <utility>
@@ -60,7 +61,7 @@ namespace Opm
const int num_components,
const int num_phases,
const int index_of_well,
const std::vector<PerforationData>& perf_data)
const std::vector<PerforationData<Scalar>>& perf_data)
: WellInterfaceIndices<FluidSystem,Indices>(well,
pw_info,
time_step,
+7 -6
View File
@@ -30,6 +30,7 @@
#include <opm/simulators/utils/ParallelCommunication.hpp>
#include <opm/simulators/wells/ParallelWellInfo.hpp>
#include <opm/simulators/wells/PerforationData.hpp>
#include <opm/grid/common/p2pcommunicator.hh>
#include <opm/output/data/Wells.hpp>
@@ -150,7 +151,7 @@ template<class Scalar>
void WellState<Scalar>::base_init(const std::vector<Scalar>& cellPressures,
const std::vector<Well>& wells_ecl,
const std::vector<std::reference_wrapper<ParallelWellInfo>>& parallel_well_info,
const std::vector<std::vector<PerforationData>>& well_perf_data,
const std::vector<std::vector<PerforationData<Scalar>>>& well_perf_data,
const SummaryState& summary_state)
{
// clear old name mapping
@@ -172,7 +173,7 @@ template<class Scalar>
void WellState<Scalar>::initSingleProducer(const Well& well,
const ParallelWellInfo& well_info,
Scalar pressure_first_connection,
const std::vector<PerforationData>& well_perf_data,
const std::vector<PerforationData<Scalar>>& well_perf_data,
const SummaryState& summary_state)
{
const auto& pu = this->phase_usage_;
@@ -201,7 +202,7 @@ template<class Scalar>
void WellState<Scalar>::initSingleInjector(const Well& well,
const ParallelWellInfo& well_info,
Scalar pressure_first_connection,
const std::vector<PerforationData>& well_perf_data,
const std::vector<PerforationData<Scalar>>& well_perf_data,
const SummaryState& summary_state)
{
const auto& pu = this->phase_usage_;
@@ -228,7 +229,7 @@ void WellState<Scalar>::initSingleInjector(const Well& well,
template<class Scalar>
void WellState<Scalar>::initSingleWell(const std::vector<Scalar>& cellPressures,
const Well& well,
const std::vector<PerforationData>& well_perf_data,
const std::vector<PerforationData<Scalar>>& well_perf_data,
const ParallelWellInfo& well_info,
const SummaryState& summary_state)
{
@@ -253,7 +254,7 @@ void WellState<Scalar>::init(const std::vector<Scalar>& cellPressures,
const std::vector<std::reference_wrapper<ParallelWellInfo>>& parallel_well_info,
const int report_step,
const WellState* prevState,
const std::vector<std::vector<PerforationData>>& well_perf_data,
const std::vector<std::vector<PerforationData<Scalar>>>& well_perf_data,
const SummaryState& summary_state)
{
// call init on base class
@@ -423,7 +424,7 @@ void WellState<Scalar>::resize(const std::vector<Well>& wells_ecl,
const Schedule& schedule,
const bool handle_ms_well,
const std::size_t numCells,
const std::vector<std::vector<PerforationData>>& well_perf_data,
const std::vector<std::vector<PerforationData<Scalar>>>& well_perf_data,
const SummaryState& summary_state)
{
const std::vector<Scalar> tmp(numCells, 0.0); // <- UGLY HACK to pass the size
+7 -7
View File
@@ -36,7 +36,6 @@
#include <opm/simulators/wells/ALQState.hpp>
#include <opm/simulators/wells/GlobalWellInfo.hpp>
#include <opm/simulators/wells/PerfData.hpp>
#include <opm/simulators/wells/PerforationData.hpp>
#include <opm/simulators/wells/SegmentState.hpp>
#include <opm/simulators/wells/SingleWellState.hpp>
#include <opm/simulators/wells/WellContainer.hpp>
@@ -52,6 +51,7 @@ namespace Opm
{
class ParallelWellInfo;
template<class Scalar> struct PerforationData;
class Schedule;
enum class WellStatus;
@@ -102,7 +102,7 @@ public:
const std::vector<std::reference_wrapper<ParallelWellInfo>>& parallel_well_info,
const int report_step,
const WellState* prevState,
const std::vector<std::vector<PerforationData>>& well_perf_data,
const std::vector<std::vector<PerforationData<Scalar>>>& well_perf_data,
const SummaryState& summary_state);
void resize(const std::vector<Well>& wells_ecl,
@@ -110,7 +110,7 @@ public:
const Schedule& schedule,
const bool handle_ms_well,
const std::size_t numCells,
const std::vector<std::vector<PerforationData>>& well_perf_data,
const std::vector<std::vector<PerforationData<Scalar>>>& well_perf_data,
const SummaryState& summary_state);
void setCurrentWellRates(const std::string& wellName,
@@ -379,25 +379,25 @@ private:
void base_init(const std::vector<Scalar>& cellPressures,
const std::vector<Well>& wells_ecl,
const std::vector<std::reference_wrapper<ParallelWellInfo>>& parallel_well_info,
const std::vector<std::vector<PerforationData>>& well_perf_data,
const std::vector<std::vector<PerforationData<Scalar>>>& well_perf_data,
const SummaryState& summary_state);
void initSingleWell(const std::vector<Scalar>& cellPressures,
const Well& well,
const std::vector<PerforationData>& well_perf_data,
const std::vector<PerforationData<Scalar>>& well_perf_data,
const ParallelWellInfo& well_info,
const SummaryState& summary_state);
void initSingleProducer(const Well& well,
const ParallelWellInfo& well_info,
Scalar pressure_first_connection,
const std::vector<PerforationData>& well_perf_data,
const std::vector<PerforationData<Scalar>>& well_perf_data,
const SummaryState& summary_state);
void initSingleInjector(const Well& well,
const ParallelWellInfo& well_info,
Scalar pressure_first_connection,
const std::vector<PerforationData>& well_perf_data,
const std::vector<PerforationData<Scalar>>& well_perf_data,
const SummaryState& summary_state);
};