opm-simulators
WellAssemble.hpp
1 /*
2  Copyright 2017 SINTEF Digital, Mathematics and Cybernetics.
3  Copyright 2017 Statoil ASA.
4  Copyright 2017 IRIS
5  Copyright 2019 Norce
6 
7  This file is part of the Open Porous Media project (OPM).
8 
9  OPM is free software: you can redistribute it and/or modify
10  it under the terms of the GNU General Public License as published by
11  the Free Software Foundation, either version 3 of the License, or
12  (at your option) any later version.
13 
14  OPM is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  GNU General Public License for more details.
18 
19  You should have received a copy of the GNU General Public License
20  along with OPM. If not, see <http://www.gnu.org/licenses/>.
21 */
22 
23 
24 #ifndef OPM_WELL_ASSEMBLE_HEADER_INCLUDED
25 #define OPM_WELL_ASSEMBLE_HEADER_INCLUDED
26 
27 #include <opm/input/eclipse/Schedule/ScheduleTypes.hpp>
28 #include <opm/input/eclipse/Schedule/Well/WellEnums.hpp>
29 
30 #include <functional>
31 
32 namespace Opm
33 {
34 
35 class DeferredLogger;
36 class Group;
37 template<class Scalar> class GroupState;
38 class Schedule;
39 class SummaryState;
40 template<typename FluidSystem> class WellInterfaceFluidSystem;
41 template<typename Scalar, typename IndexTraits> class WellState;
42 template<typename Scalar, typename IndexTraits> class GroupStateHelper;
43 struct WellInjectionControls;
44 struct WellProductionControls;
45 
46 template<typename FluidSystem>
47 class WellAssemble {
48  static constexpr int Water = FluidSystem::waterPhaseIdx;
49  static constexpr int Oil = FluidSystem::oilPhaseIdx;
50  static constexpr int Gas = FluidSystem::gasPhaseIdx;
51  using Scalar = typename FluidSystem::Scalar;
52  using IndexTraits = typename FluidSystem::IndexTraitsType;
54 
55 public:
57 
58  template<class EvalWell>
59  void assembleControlEqProd(const GroupStateHelperType& groupStateHelper,
60  const WellProductionControls& controls,
61  const EvalWell& bhp,
62  const std::vector<EvalWell>& rates, // Always 3 canonical rates.
63  const std::function<EvalWell()>& bhp_from_thp,
64  EvalWell& control_eq) const;
65 
66  template<class EvalWell>
67  void assembleControlEqInj(const GroupStateHelperType& groupStateHelper,
68  const WellInjectionControls& controls,
69  const EvalWell& bhp,
70  const EvalWell& injection_rate,
71  const std::function<EvalWell()>& bhp_from_thp,
72  EvalWell& control_eq) const;
73 
74 private:
76 };
77 
78 
79 
80 }
81 
82 #endif // OPM_WELL_ASSEMBLE_HEADER_INCLUDED
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition: blackoilbioeffectsmodules.hh:45
Definition: BlackoilWellModelConstraints.hpp:37
Definition: StandardWellAssemble.hpp:37
Definition: WellAssemble.hpp:47