opm-simulators
GasLiftSingleWell.hpp
1 /*
2  Copyright 2020 Equinor ASA.
3 
4  This file is part of the Open Porous Media project (OPM).
5 
6  OPM is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  OPM is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with OPM. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #ifndef OPM_GASLIFT_SINGLE_WELL_HEADER_INCLUDED
21 #define OPM_GASLIFT_SINGLE_WELL_HEADER_INCLUDED
22 
27 #include <opm/simulators/wells/GasLiftSingleWellGeneric.hpp>
28 #include <opm/simulators/wells/GasLiftGroupInfo.hpp>
29 
30 #include <optional>
31 
32 namespace Opm {
33 
34 template<class TypeTag> class WellInterface;
35 
36 template<class TypeTag>
37 class GasLiftSingleWell : public GasLiftSingleWellGeneric<GetPropType<TypeTag, Properties::Scalar>,
38  typename GetPropType<TypeTag, Properties::FluidSystem>::IndexTraitsType>
39 {
43  using IndexTraits = typename FluidSystem::IndexTraitsType;
44  using GLiftSyncGroups = typename GasLiftSingleWellGeneric<Scalar, IndexTraits>::GLiftSyncGroups;
46 
47 public:
49  const Simulator& simulator,
50  const SummaryState& summary_state,
51  DeferredLogger& deferred_logger,
53  const GroupState<Scalar>& group_state,
55  GLiftSyncGroups& sync_groups,
56  const Parallel::Communication& comm,
57  bool glift_debug);
58 
59  const WellInterfaceGeneric<Scalar, IndexTraits>& getWell() const override { return well_; }
60 
61 private:
62  std::optional<Scalar>
63  computeBhpAtThpLimit_(Scalar alq,
64  Scalar bhp,
65  bool debug_ouput = true) const override;
66 
67  RatesAndBhp computeWellRates_(Scalar bhp,
68  bool bhp_is_limited,
69  bool debug_output = true) const override;
70 
71  void setAlqMaxRate_(const GasLiftWell& well);
72  void setupPhaseVariables_();
73  bool checkThpControl_() const override;
74 
75  const Simulator& simulator_;
77 };
78 
79 } // namespace Opm
80 
81 #include "GasLiftSingleWell_impl.hpp"
82 
83 #endif // OPM_GASLIFT_SINGLE_WELL_HEADER_INCLUDED
typename Properties::Detail::GetPropImpl< TypeTag, Property >::type::type GetPropType
get the type alias defined in the property (equivalent to old macro GET_PROP_TYPE(...))
Definition: propertysystem.hh:233
This file provides the infrastructure to retrieve run-time parameters.
Definition: BlackoilWellModelGeneric.hpp:66
Definition: BlackoilWellModelConstraints.hpp:34
Definition: GasLiftSingleWellGeneric.hpp:134
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition: blackoilbioeffectsmodules.hh:45
A fully-implicit black-oil flow model.
Definition: BlackoilWellModelGasLift.hpp:38
Declare the properties used by the infrastructure code of the finite volume discretizations.
Definition: BlackoilWellModelGeneric.hpp:65
Definition: DeferredLogger.hpp:56
The Opm property system, traits with inheritance.
Definition: GasLiftSingleWell.hpp:37
Definition: BlackoilWellModelGeneric.hpp:75
The state of a set of wells, tailored for use by the fully implicit blackoil simulator.
Definition: TemperatureModel.hpp:61