opm-common
Loading...
Searching...
No Matches
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
25namespace 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
Class for (de-)serializing.
Definition Serializer.hpp:94
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition Exceptions.hpp:30