19#ifndef OPM_RUNSPEC_HPP
20#define OPM_RUNSPEC_HPP
22#include <opm/common/OpmLog/KeywordLocation.hpp>
24#include <opm/input/eclipse/EclipseState/EndpointScaling.hpp>
25#include <opm/input/eclipse/EclipseState/Phase.hpp>
26#include <opm/input/eclipse/EclipseState/Tables/Regdims.hpp>
27#include <opm/input/eclipse/EclipseState/Tables/Tabdims.hpp>
29#include <opm/input/eclipse/Schedule/Action/Actdims.hpp>
30#include <opm/input/eclipse/Schedule/UDQ/UDQParams.hpp>
48 Phases()
noexcept =
default;
49 Phases(
bool oil,
bool gas,
bool wat,
56 bool zfraction =
false)
noexcept;
58 static Phases serializationTestObject();
60 bool active( Phase )
const noexcept;
61 size_t size()
const noexcept;
63 bool operator==(
const Phases& data)
const;
65 template<
class Serializer>
72 std::bitset<NUM_PHASES_IN_ENUM> bits;
78 explicit Welldims(
const Deck& deck);
80 static Welldims serializationTestObject();
82 int maxConnPerWell()
const
87 int maxWellsPerGroup()
const
92 int maxGroupsInField()
const
97 int maxWellsInField()
const
102 int maxWellListsPrWell()
const
104 return this->nWlistPrWellMax;
107 int maxDynamicWellLists()
const
109 return this->nDynWlistMax;
112 const std::optional<KeywordLocation>& location()
const
114 return this->m_location;
117 static bool rst_cmp(
const Welldims& full_dims,
const Welldims& rst_dims) {
118 return full_dims.maxConnPerWell() == rst_dims.maxConnPerWell() &&
119 full_dims.maxWellsPerGroup() == rst_dims.maxWellsPerGroup() &&
120 full_dims.maxGroupsInField() == rst_dims.maxGroupsInField() &&
121 full_dims.maxWellsInField() == rst_dims.maxWellsInField() &&
122 full_dims.maxWellListsPrWell() == rst_dims.maxWellListsPrWell() &&
123 full_dims.maxDynamicWellLists() == rst_dims.maxDynamicWellLists();
126 bool operator==(
const Welldims& data)
const {
127 return this->location() == data.location() &&
128 rst_cmp(*
this, data);
131 template<
class Serializer>
138 serializer(nWlistPrWellMax);
139 serializer(nDynWlistMax);
140 serializer(m_location);
148 int nWlistPrWellMax { 1 };
149 int nDynWlistMax { 1 };
150 std::optional<KeywordLocation> m_location;
153class WellSegmentDims {
156 explicit WellSegmentDims(
const Deck& deck);
158 static WellSegmentDims serializationTestObject();
160 int maxSegmentedWells()
const
162 return this->nSegWellMax;
165 int maxSegmentsPerWell()
const
167 return this->nSegmentMax;
170 int maxLateralBranchesPerWell()
const
172 return this->nLatBranchMax;
175 const std::optional<KeywordLocation>& location()
const
177 return this->location_;
180 bool operator==(
const WellSegmentDims& data)
const;
182 template<
class Serializer>
185 serializer(nSegWellMax);
186 serializer(nSegmentMax);
187 serializer(nLatBranchMax);
188 serializer(location_);
195 std::optional<KeywordLocation> location_;
201 explicit NetworkDims(
const Deck& deck);
203 static NetworkDims serializationTestObject();
205 int maxNONodes()
const
207 return this->nMaxNoNodes;
210 int maxNoBranches()
const
212 return this->nMaxNoBranches;
215 int maxNoBranchesConToNode()
const
217 return this->nMaxNoBranchesConToNode;
220 bool extendedNetwork()
const
222 return this->type_ == Type::Extended;
225 bool standardNetwork()
const
227 return this->type_ == Type::Standard;
232 return this->extendedNetwork()
233 || this->standardNetwork();
236 bool operator==(
const NetworkDims& data)
const;
238 template<
class Serializer>
241 serializer(nMaxNoNodes);
242 serializer(nMaxNoBranches);
243 serializer(nMaxNoBranchesConToNode);
247 enum class Type { None, Extended, Standard, };
251 int nMaxNoBranchesConToNode;
252 Type type_{ Type::None };
255class AquiferDimensions {
258 explicit AquiferDimensions(
const Deck& deck);
260 static AquiferDimensions serializationTestObject();
262 int maxAnalyticAquifers()
const
264 return this->maxNumAnalyticAquifers;
267 int maxAnalyticAquiferConnections()
const
269 return this->maxNumAnalyticAquiferConn;
272 template <
class Serializer>
275 serializer(this->maxNumAnalyticAquifers);
276 serializer(this->maxNumAnalyticAquiferConn);
280 int maxNumAnalyticAquifers;
281 int maxNumAnalyticAquiferConn;
289 EclHysterConfig() =
default;
290 explicit EclHysterConfig(
const Deck& deck);
292 static EclHysterConfig serializationTestObject();
344 bool operator==(
const EclHysterConfig& data)
const;
346 template<
class Serializer>
349 serializer(activeHyst);
350 serializer(pcHystMod);
351 serializer(krHystMod);
352 serializer(modParamTrappedValue);
353 serializer(curvatureCapPrsValue);
354 serializer(activeWagHyst);
355 serializer(enablePcScaling);
360 bool activeHyst {
false };
363 int pcHystMod { -1 };
364 int krHystMod { -1 };
366 double modParamTrappedValue { 0.1 };
368 double curvatureCapPrsValue { 0.1 };
371 bool activeWagHyst {
false };
374 bool enablePcScaling {
false };
377class SatFuncControls {
379 enum class ThreePhaseOilKrModel {
385 enum class KeywordFamily {
394 explicit SatFuncControls(
const Deck& deck);
395 explicit SatFuncControls(
const double tolcritArg,
396 const ThreePhaseOilKrModel model,
397 const KeywordFamily family);
399 static SatFuncControls serializationTestObject();
401 double minimumRelpermMobilityThreshold()
const
403 return this->tolcrit;
406 ThreePhaseOilKrModel krModel()
const
408 return this->krmodel;
411 KeywordFamily family()
const
413 return this->satfunc_family;
416 bool operator==(
const SatFuncControls& rhs)
const;
418 template<
class Serializer>
423 serializer(satfunc_family);
428 ThreePhaseOilKrModel krmodel = ThreePhaseOilKrModel::Default;
429 KeywordFamily satfunc_family = KeywordFamily::Undefined;
436 explicit Nupcol(
int min_value);
437 void update(
int value);
440 static Nupcol serializationTestObject();
441 bool operator==(
const Nupcol& data)
const;
443 template<
class Serializer>
445 serializer(this->nupcol_value);
446 serializer(this->min_nupcol);
459 explicit Tracers(
const Deck& );
460 int water_tracers()
const;
462 template<
class Serializer>
464 serializer(this->m_oil_tracers);
465 serializer(this->m_water_tracers);
466 serializer(this->m_gas_tracers);
467 serializer(this->m_env_tracers);
468 serializer(this->diffusion_control);
469 serializer(this->max_iter);
470 serializer(this->min_iter);
473 static Tracers serializationTestObject();
474 bool operator==(
const Tracers& data)
const;
478 int m_water_tracers{};
481 bool diffusion_control{
false};
492 explicit Runspec(
const Deck& );
494 static Runspec serializationTestObject();
496 std::time_t start_time()
const noexcept;
497 const UDQParams& udqParams()
const noexcept;
498 const Phases& phases()
const noexcept;
499 const Tabdims& tabdims()
const noexcept;
500 const Regdims& regdims()
const noexcept;
502 const Welldims& wellDimensions()
const noexcept;
504 const NetworkDims& networkDimensions()
const noexcept;
506 int eclPhaseMask( )
const noexcept;
508 const Actdims& actdims()
const noexcept;
510 const Nupcol& nupcol()
const noexcept;
511 const Tracers& tracers()
const;
512 bool compositionalMode()
const;
513 size_t numComps()
const;
514 bool co2Storage()
const noexcept;
515 bool co2Sol()
const noexcept;
516 bool h2Sol()
const noexcept;
517 bool h2Storage()
const noexcept;
518 bool micp()
const noexcept;
519 bool mech()
const noexcept;
520 bool frac()
const noexcept;
521 bool temp()
const noexcept;
522 bool compositional()
const noexcept;
523 bool biof()
const noexcept;
525 bool operator==(
const Runspec& data)
const;
526 static bool rst_cmp(
const Runspec& full_state,
const Runspec& rst_state);
528 template<
class Serializer>
531 serializer(this->m_start_time);
532 serializer(active_phases);
533 serializer(m_tabdims);
534 serializer(m_regdims);
535 serializer(endscale);
536 serializer(welldims);
537 serializer(wsegdims);
538 serializer(netwrkdims);
539 serializer(aquiferdims);
540 serializer(udq_params);
542 serializer(m_actdims);
543 serializer(m_sfuncctrl);
544 serializer(m_nupcol);
545 serializer(m_tracers);
547 serializer(m_co2storage);
548 serializer(m_co2sol);
550 serializer(m_h2storage);
559 std::time_t m_start_time{};
575 bool m_co2storage{
false};
576 bool m_co2sol{
false};
578 bool m_h2storage{
false};
586std::size_t declaredMaxRegionID(
const Runspec& rspec);
Definition Actdims.hpp:30
Definition Runspec.hpp:255
Definition Runspec.hpp:287
int pcHysteresisModel() const
Return the type of the hysteresis model which is used for capillary pressure.
Definition Runspec.cpp:478
double modParamTrapped() const
Regularisation parameter used for Killough model.
Definition Runspec.cpp:484
double curvatureCapPrs() const
Curvature parameter used for capillary pressure hysteresis.
Definition Runspec.cpp:487
bool activeWag() const
Wag hysteresis.
Definition Runspec.cpp:490
bool doPcScaling() const
Do Pc scaling for scanning curves.
Definition Runspec.cpp:493
bool active() const
Specify whether hysteresis is enabled or not.
Definition Runspec.cpp:475
int krHysteresisModel() const
Return the type of the hysteresis model which is used for relative permeability.
Definition Runspec.cpp:481
Definition EndpointScaling.hpp:28
Definition Runspec.hpp:198
Definition Runspec.hpp:433
Definition Runspec.hpp:46
Definition Regdims.hpp:36
Definition Runspec.hpp:489
Definition Runspec.hpp:377
Class for (de-)serializing.
Definition Serializer.hpp:94
Definition Tabdims.hpp:36
Definition Runspec.hpp:455
Definition UDQParams.hpp:31
Definition Runspec.hpp:153
Definition Runspec.hpp:75
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition Exceptions.hpp:30