My Project
well.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 RST_WELL
21 #define RST_WELL
22 
23 #include <opm/io/eclipse/rst/connection.hpp>
24 #include <opm/io/eclipse/rst/segment.hpp>
25 
26 #include <opm/input/eclipse/Schedule/ScheduleTypes.hpp>
27 
28 #include <array>
29 #include <string>
30 #include <unordered_map>
31 #include <utility>
32 #include <vector>
33 
34 namespace Opm {
35 class UnitSystem;
36 } // namespace Opm
37 
38 namespace Opm { namespace RestartIO {
39 
40 struct RstHeader;
41 
42 struct RstWell
43 {
44  RstWell(const ::Opm::UnitSystem& unit_system,
45  const RstHeader& header,
46  const std::string& group_arg,
47  const std::string* zwel,
48  const int * iwel,
49  const float * swel,
50  const double * xwel,
51  const int * icon,
52  const float * scon,
53  const double * xcon);
54 
55  RstWell(const ::Opm::UnitSystem& unit_system,
56  const RstHeader& header,
57  const std::string& group_arg,
58  const std::string* zwel,
59  const int * iwel,
60  const float * swel,
61  const double * xwel,
62  const int * icon,
63  const float * scon,
64  const double * xcon,
65  const std::vector<int>& iseg,
66  const std::vector<double>& rseg);
67 
68  std::string name;
69  std::string group;
70  std::array<int, 2> ij;
71  std::pair<int,int> k1k2;
72  WellType wtype;
73  int well_status;
74  int active_control;
75  int vfp_table;
76  int econ_workover_procedure;
77  int preferred_phase;
78  bool allow_xflow;
79  int group_controllable_flag;
80  int econ_limit_end_run;
81  int grupcon_gr_phase;
82  int hist_requested_control;
83  int msw_index;
84  int completion_ordering;
85  int pvt_table;
86  int msw_pressure_drop_model;
87  int wtest_config_reasons;
88  int wtest_close_reason;
89  int wtest_remaining;
90  int econ_limit_quantity;
91  int econ_workover_procedure_2;
92  int thp_lookup_procedure_vfptable;
93  int close_if_thp_stabilised;
94  int prevent_thpctrl_if_unstable;
95  bool glift_active;
96  bool glift_alloc_extra_gas;
97 
98  float orat_target;
99  float wrat_target;
100  float grat_target;
101  float lrat_target;
102  float resv_target;
103  float thp_target;
104  float bhp_target_float;
105  float hist_lrat_target;
106  float hist_grat_target;
107  float hist_bhp_target;
108  float datum_depth;
109  float drainage_radius;
110  float grupcon_gr_value;
111  float efficiency_factor;
112  float alq_value;
113  float econ_limit_min_oil;
114  float econ_limit_min_gas;
115  float econ_limit_max_wct;
116  float econ_limit_max_gor;
117  float econ_limit_max_wgr;
118  float econ_limit_max_wct_2;
119  float econ_limit_min_liq;
120  float wtest_interval;
121  float wtest_startup;
122  float grupcon_gr_scaling;
123  float glift_max_rate;
124  float glift_min_rate;
125  float glift_weight_factor;
126  float glift_inc_weight_factor;
127  std::vector<float> tracer_concentration_injection;
128 
129  double oil_rate;
130  double water_rate;
131  double gas_rate;
132  double liquid_rate;
133  double void_rate;
134  double thp;
135  double flow_bhp;
136  double wct;
137  double gor;
138  double oil_total;
139  double water_total;
140  double gas_total;
141  double void_total;
142  double water_inj_total;
143  double gas_inj_total;
144  double void_inj_total;
145  double gas_fvf;
146  double bhp_target_double;
147  double hist_oil_total;
148  double hist_wat_total;
149  double hist_gas_total;
150  double hist_water_inj_total;
151  double hist_gas_inj_total;
152  double water_void_rate;
153  double gas_void_rate;
154 
155  const RstSegment& segment(int segment_number) const;
156  std::vector<RstConnection> connections;
157  std::vector<RstSegment> segments;
158 };
159 
160 }} // namespace Opm::RestartIO
161 
162 #endif // RST_WELL
Definition: ScheduleTypes.hpp:38
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:29
Definition: header.hpp:33
Definition: segment.hpp:33
Definition: well.hpp:43