opm-common
Tuning.hpp
1 /*
2  Copyright 2015 Statoil 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_TUNING_HPP
21 #define OPM_TUNING_HPP
22 
23 #include <optional>
24 
25 namespace Opm {
26 
27  class NextStep {
28  public:
29  NextStep() = default;
30  NextStep(double value, bool every_report);
31  double value() const;
32  bool every_report() const;
33  bool operator==(const NextStep& other) const;
34  static NextStep serializationTestObject();
35 
36  template<class Serializer>
37  void serializeOp(Serializer& serializer)
38  {
39  serializer(this->next_tstep);
40  serializer(this->persist);
41  }
42 
43  private:
44  double next_tstep{};
45  bool persist{false};
46  };
47 
48  struct Tuning {
49  Tuning();
50 
51  static Tuning serializationTestObject();
52 
53  // Record1
54  std::optional<double> TSINIT;
55  double TSMAXZ;
56  double TSMINZ;
57  double TSMCHP;
58  double TSFMAX;
59  double TSFMIN;
60  double TFDIFF;
61  double TSFCNV;
62  double THRUPT;
63  double TMAXWC = 0.0;
64  bool TMAXWC_has_value = false;
65 
66  // Record 2
67  double TRGTTE;
68  bool TRGTTE_has_value = false;
69  double TRGCNV;
70  double TRGMBE;
71  double TRGLCV;
72  bool TRGLCV_has_value = false;
73  double XXXTTE;
74  bool XXXTTE_has_value = false;
75  double XXXCNV;
76  double XXXMBE;
77  double XXXLCV;
78  bool XXXLCV_has_value = false;
79  double XXXWFL;
80  bool XXXWFL_has_value = false;
81  double TRGFIP;
82  bool TRGFIP_has_value = false;
83  double TRGSFT = 0.0;
84  bool TRGSFT_has_value = false;
85  double THIONX;
86  bool THIONX_has_value = false;
87  double TRWGHT;
88  bool TRWGHT_has_value = false;
89 
90  // Record 3
91  int NEWTMX;
92  int NEWTMN;
93  int LITMAX;
94  bool LITMAX_has_value = false;
95  int LITMIN;
96  bool LITMIN_has_value = false;
97  int MXWSIT;
98  bool MXWSIT_has_value = false;
99  int MXWPIT;
100  bool MXWPIT_has_value = false;
101  double DDPLIM;
102  bool DDPLIM_has_value = false;
103  double DDSLIM;
104  bool DDSLIM_has_value = false;
105  double TRGDPR;
106  bool TRGDPR_has_value = false;
107  double XXXDPR;
108  bool XXXDPR_has_value = false;
109  int MNWRFP;
110  bool MNWRFP_has_value = false;
111 
112  /*
113  In addition to the values set in the TUNING keyword this Tuning
114  implementation also contains the result of the WSEGITER keyword, which
115  is special tuning parameters to be applied to the multisegment well
116  model. Observe that the maximum number of well iterations - MXWSIT -
117  is specified by both the TUNING keyword and the WSEGITER keyword, but
118  with different defaults.
119  */
120  int WSEG_MAX_RESTART;
121  double WSEG_REDUCTION_FACTOR;
122  double WSEG_INCREASE_FACTOR;
123 
124 
125  bool operator==(const Tuning& data) const;
126  bool operator !=(const Tuning& data) const {
127  return !(*this == data);
128  }
129 
130  template<class Serializer>
131  void serializeOp(Serializer& serializer)
132  {
133  serializer(TSINIT);
134  serializer(TSMAXZ);
135  serializer(TSMINZ);
136  serializer(TSMCHP);
137  serializer(TSFMAX);
138  serializer(TSFMIN);
139  serializer(TFDIFF);
140  serializer(TSFCNV);
141  serializer(THRUPT);
142  serializer(TMAXWC);
143  serializer(TMAXWC_has_value);
144 
145  serializer(TRGTTE);
146  serializer(TRGTTE_has_value);
147  serializer(TRGCNV);
148  serializer(TRGMBE);
149  serializer(TRGLCV);
150  serializer(TRGLCV_has_value);
151  serializer(XXXTTE);
152  serializer(XXXTTE_has_value);
153  serializer(XXXCNV);
154  serializer(XXXMBE);
155  serializer(XXXLCV);
156  serializer(XXXLCV_has_value);
157  serializer(XXXWFL);
158  serializer(XXXWFL_has_value);
159  serializer(TRGFIP);
160  serializer(TRGFIP_has_value);
161  serializer(TRGSFT);
162  serializer(TRGSFT_has_value);
163  serializer(THIONX);
164  serializer(THIONX_has_value);
165  serializer(TRWGHT);
166  serializer(TRWGHT_has_value);
167 
168  serializer(NEWTMX);
169  serializer(NEWTMN);
170  serializer(LITMAX);
171  serializer(LITMAX_has_value);
172  serializer(LITMIN);
173  serializer(LITMIN_has_value);
174  serializer(MXWSIT);
175  serializer(MXWSIT_has_value);
176  serializer(MXWPIT);
177  serializer(MXWPIT_has_value);
178  serializer(DDPLIM);
179  serializer(DDPLIM_has_value);
180  serializer(DDSLIM);
181  serializer(DDSLIM_has_value);
182  serializer(TRGDPR);
183  serializer(TRGDPR_has_value);
184  serializer(XXXDPR);
185  serializer(XXXDPR_has_value);
186  serializer(MNWRFP);
187  serializer(MNWRFP_has_value);
188 
189  serializer(WSEG_MAX_RESTART);
190  serializer(WSEG_REDUCTION_FACTOR);
191  serializer(WSEG_INCREASE_FACTOR);
192  }
193  };
194 
195  struct TuningDp {
196  TuningDp();
197 
198  static TuningDp serializationTestObject();
199 
200  // NOTE: TRGLCV and XXXLCV are the same as in TUNING, since they define a different default value in TUNINGDP
201  double TRGLCV;
202  bool TRGLCV_has_value{false};
203  double XXXLCV;
204  bool XXXLCV_has_value{false};
205  double TRGDDP;
206  double TRGDDS;
207  double TRGDDRS;
208  double TRGDDRV;
209 
210  bool defaults_updated{false};
211 
212  void set_defaults();
213 
214  bool operator==(const TuningDp& other) const;
215  bool operator!=(const TuningDp& other) const
216  {
217  return !(*this == other);
218  }
219 
220  template<class Serializer>
221  void serializeOp(Serializer& serializer)
222  {
223  serializer(TRGLCV);
224  serializer(TRGLCV_has_value);
225  serializer(XXXLCV);
226  serializer(XXXLCV_has_value);
227  serializer(TRGDDP);
228  serializer(TRGDDS);
229  serializer(TRGDDRS);
230  serializer(TRGDDRV);
231  serializer(defaults_updated);
232  }
233  };
234 
235 } //namespace Opm
236 
237 #endif
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:30
Definition: Tuning.hpp:27
Definition: Tuning.hpp:195
Definition: Tuning.hpp:48
Class for (de-)serializing.
Definition: Serializer.hpp:94