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;
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;
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;
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_;
182 template<
class Serializer>
185 serializer(nSegWellMax);
186 serializer(nSegmentMax);
187 serializer(nLatBranchMax);
188 serializer(location_);
195 std::optional<KeywordLocation> location_;
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();
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 };
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;
341 template<
class Serializer>
344 serializer(activeHyst);
345 serializer(pcHystMod);
346 serializer(krHystMod);
347 serializer(modParamTrappedValue);
348 serializer(curvatureCapPrsValue);
349 serializer(activeWagHyst);
354 bool activeHyst {
false };
357 int pcHystMod { -1 };
358 int krHystMod { -1 };
360 double modParamTrappedValue { 0.1 };
362 double curvatureCapPrsValue { 0.1 };
365 bool activeWagHyst {
false };
370 enum class ThreePhaseOilKrModel {
376 enum class KeywordFamily {
387 const ThreePhaseOilKrModel model,
388 const KeywordFamily family);
392 double minimumRelpermMobilityThreshold()
const
394 return this->tolcrit;
397 ThreePhaseOilKrModel krModel()
const
399 return this->krmodel;
402 KeywordFamily family()
const
404 return this->satfunc_family;
409 template<
class Serializer>
414 serializer(satfunc_family);
419 ThreePhaseOilKrModel krmodel = ThreePhaseOilKrModel::Default;
420 KeywordFamily satfunc_family = KeywordFamily::Undefined;
427 explicit Nupcol(
int min_value);
428 void update(
int value);
431 static Nupcol serializationTestObject();
432 bool operator==(
const Nupcol& data)
const;
434 template<
class Serializer>
436 serializer(this->nupcol_value);
437 serializer(this->min_nupcol);
452 int water_tracers()
const;
454 template<
class Serializer>
456 serializer(this->m_oil_tracers);
457 serializer(this->m_water_tracers);
458 serializer(this->m_gas_tracers);
459 serializer(this->m_env_tracers);
460 serializer(this->diffusion_control);
461 serializer(this->max_iter);
462 serializer(this->min_iter);
465 static Tracers serializationTestObject();
466 bool operator==(
const Tracers& data)
const;
473 bool diffusion_control;
486 static Runspec serializationTestObject();
488 std::time_t start_time()
const noexcept;
489 const UDQParams& udqParams()
const noexcept;
490 const Phases& phases()
const noexcept;
491 const Tabdims& tabdims()
const noexcept;
492 const Regdims& regdims()
const noexcept;
494 const Welldims& wellDimensions()
const noexcept;
496 const NetworkDims& networkDimensions()
const noexcept;
498 int eclPhaseMask( )
const noexcept;
500 const Actdims& actdims()
const noexcept;
502 const Nupcol& nupcol()
const noexcept;
503 const Tracers& tracers()
const;
504 bool compositionalMode()
const;
505 size_t numComps()
const;
506 bool co2Storage()
const noexcept;
507 bool co2Sol()
const noexcept;
508 bool h2Sol()
const noexcept;
509 bool h2Storage()
const noexcept;
510 bool micp()
const noexcept;
511 bool mech()
const noexcept;
513 bool operator==(
const Runspec& data)
const;
514 static bool rst_cmp(
const Runspec& full_state,
const Runspec& rst_state);
516 template<
class Serializer>
519 serializer(this->m_start_time);
520 serializer(active_phases);
521 serializer(m_tabdims);
522 serializer(m_regdims);
523 serializer(endscale);
524 serializer(welldims);
525 serializer(wsegdims);
526 serializer(netwrkdims);
527 serializer(aquiferdims);
528 serializer(udq_params);
530 serializer(m_actdims);
531 serializer(m_sfuncctrl);
532 serializer(m_nupcol);
534 serializer(m_co2storage);
535 serializer(m_co2sol);
537 serializer(m_h2storage);
543 std::time_t m_start_time;
567std::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:467
double modParamTrapped() const
Regularisation parameter used for Killough model.
Definition Runspec.cpp:473
double curvatureCapPrs() const
Curvature parameter used for capillary pressure hysteresis.
Definition Runspec.cpp:476
bool activeWag() const
Wag hysteresis.
Definition Runspec.cpp:479
bool active() const
Specify whether hysteresis is enabled or not.
Definition Runspec.cpp:464
int krHysteresisModel() const
Return the type of the hysteresis model which is used for relative permeability.
Definition Runspec.cpp:470
Definition EndpointScaling.hpp:28
Definition Runspec.hpp:198
Definition Runspec.hpp:424
Definition Runspec.hpp:46
Definition Regdims.hpp:36
Definition Runspec.hpp:481
Definition Runspec.hpp:368
Class for (de-)serializing.
Definition Serializer.hpp:84
Definition Tabdims.hpp:36
Definition Runspec.hpp:446
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