20#ifndef OPM_WELLS_HEADER_INCLUDED
21#define OPM_WELLS_HEADER_INCLUDED
23#include <opm/common/ErrorMacros.hpp>
24#include <opm/grid/utility/SparseTable.hpp>
25#include <opm/input/eclipse/Deck/Deck.hpp>
26#include <dune/common/fvector.hh>
40 void init(Opm::DeckConstPtr deck);
44 enum WellType { Injector, Producer };
45 WellType type(
int wellnum)
const;
46 enum WellControl { Rate, Pressure };
47 WellControl control(
int wellnum)
const;
48 double target(
int wellnum)
const;
49 double referenceDepth(
int wellnum)
const;
50 int numPerforations(
int wellnum)
const;
51 int wellCell(
int wellnum,
int perfnum)
const;
52 double wellIndex(
int wellnum,
int perfnum)
const;
53 double pressureDelta(
int wellnum,
int perfnum)
const;
56 void update(
int num_cells,
57 const std::vector<double>& well_pressures,
58 const std::vector<double>& well_fluxes);
61 double perforationPressure(
int cell)
const;
62 double wellToReservoirFlux(
int cell)
const;
63 Dune::FieldVector<double, 3> injectionMixture(
int cell)
const;
66 struct WellData { WellType type; WellControl control;
double target;
double reference_bhp_depth; };
67 std::vector<WellData> well_data_;
68 struct PerfData {
int cell;
double well_index;
double pdelta; };
69 Opm::SparseTable<PerfData> perf_data_;
75 inline void Wells::init(Opm::DeckConstPtr deck)
79 inline int Wells::numWells()
const
81 return well_data_.size();
84 inline Wells::WellType Wells::type(
int wellnum)
const
86 return well_data_[wellnum].type;
89 inline Wells::WellControl Wells::control(
int wellnum)
const
91 return well_data_[wellnum].control;
94 inline double Wells::target(
int wellnum)
const
96 return well_data_[wellnum].target;
99 inline double Wells::referenceDepth(
int wellnum)
const
101 return well_data_[wellnum].reference_bhp_depth;
104 inline int Wells::numPerforations(
int wellnum)
const
106 return perf_data_[wellnum].size();
109 inline int Wells::wellCell(
int wellnum,
int perfnum)
const
111 return perf_data_[wellnum][perfnum].cell;
114 inline double Wells::wellIndex(
int wellnum,
int perfnum)
const
116 return perf_data_[wellnum][perfnum].well_index;
119 inline double Wells::pressureDelta(
int wellnum,
int perfnum)
const
121 return perf_data_[wellnum][perfnum].pdelta;
124 inline void Wells::update(
int ,
125 const std::vector<double>& ,
126 const std::vector<double>& )
130 inline double Wells::perforationPressure(
int cell)
const
132 OPM_THROW(std::runtime_error,
"Not implemented");
136 inline double Wells::wellToReservoirFlux(
int cell)
const
141 inline Dune::FieldVector<double, 3> Wells::injectionMixture(
int cell)
const
143 OPM_THROW(std::runtime_error,
"Not implemented");
144 return Dune::FieldVector<double, 3>(0.0);
A class designed to encapsulate a set of rate- or pressure-controlled wells.
Definition Wells.hpp:38
Inverting small matrices.
Definition ImplicitAssembly.hpp:43