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();
349 bool operator==(
const EclHysterConfig& data)
const;
351 template<
class Serializer>
354 serializer(activeHyst);
355 serializer(pcHystMod);
356 serializer(krHystMod);
357 serializer(modParamTrappedValue);
358 serializer(curvatureCapPrsValue);
359 serializer(activeWagHyst);
360 serializer(enablePcScaling);
361 serializer(enableKilloughWettingFix);
366 bool activeHyst {
false };
369 int pcHystMod { -1 };
370 int krHystMod { -1 };
372 double modParamTrappedValue { 0.1 };
374 double curvatureCapPrsValue { 0.1 };
377 bool activeWagHyst {
false };
380 bool enablePcScaling {
false };
383 bool enableKilloughWettingFix {
false };
386class SatFuncControls {
388 enum class ThreePhaseOilKrModel {
394 enum class KeywordFamily {
403 explicit SatFuncControls(
const Deck& deck);
404 explicit SatFuncControls(
const double tolcritArg,
405 const ThreePhaseOilKrModel model,
406 const KeywordFamily family);
408 static SatFuncControls serializationTestObject();
410 double minimumRelpermMobilityThreshold()
const
412 return this->tolcrit;
415 ThreePhaseOilKrModel krModel()
const
417 return this->krmodel;
420 KeywordFamily family()
const
422 return this->satfunc_family;
425 bool operator==(
const SatFuncControls& rhs)
const;
427 template<
class Serializer>
432 serializer(satfunc_family);
437 ThreePhaseOilKrModel krmodel = ThreePhaseOilKrModel::Default;
438 KeywordFamily satfunc_family = KeywordFamily::Undefined;
445 explicit Nupcol(
int min_value);
446 void update(
int value);
449 static Nupcol serializationTestObject();
450 bool operator==(
const Nupcol& data)
const;
452 template<
class Serializer>
454 serializer(this->nupcol_value);
455 serializer(this->min_nupcol);
468 explicit Tracers(
const Deck& );
469 int water_tracers()
const;
470 int gas_tracers()
const;
471 int oil_tracers()
const;
473 template<
class Serializer>
475 serializer(this->m_oil_tracers);
476 serializer(this->m_water_tracers);
477 serializer(this->m_gas_tracers);
478 serializer(this->m_env_tracers);
479 serializer(this->diffusion_control);
480 serializer(this->max_iter);
481 serializer(this->min_iter);
484 static Tracers serializationTestObject();
485 bool operator==(
const Tracers& data)
const;
489 int m_water_tracers{};
492 bool diffusion_control{
false};
503 Geochem(std::string file_name,
double mbal_tol,
double ph_tol,
bool charge_balance,
504 bool activated,
int splay_tree)
505 : m_file_name(file_name)
506 , m_mbal_tol(mbal_tol)
508 , m_charge_balance(charge_balance)
509 , m_activated(activated)
510 , m_splay_tree(splay_tree)
512 explicit Geochem(
const Deck&);
514 const std::string& geochem_file_name()
const;
515 double mbal_tol()
const;
516 double ph_tol()
const;
517 int splay_tree_resolution()
const;
518 bool charge_balance()
const;
519 bool enabled()
const;
521 template<
class Serializer>
523 serializer(this->m_file_name);
524 serializer(this->m_mbal_tol);
525 serializer(this->m_ph_tol);
526 serializer(this->m_charge_balance);
527 serializer(this->m_activated);
528 serializer(this->m_splay_tree);
530 static Geochem serializationTestObject();
532 bool operator==(
const Geochem& data)
const;
535 std::string m_file_name;
538 bool m_charge_balance{
false};
539 bool m_activated{
false};
547 explicit Runspec(
const Deck& );
549 static Runspec serializationTestObject();
551 std::time_t start_time()
const noexcept;
552 const UDQParams& udqParams()
const noexcept;
553 const Phases& phases()
const noexcept;
554 const Tabdims& tabdims()
const noexcept;
555 const Regdims& regdims()
const noexcept;
557 const Welldims& wellDimensions()
const noexcept;
559 const NetworkDims& networkDimensions()
const noexcept;
561 int eclPhaseMask( )
const noexcept;
563 const Actdims& actdims()
const noexcept;
565 const Nupcol& nupcol()
const noexcept;
566 const Tracers& tracers()
const;
567 const Geochem& geochem()
const;
568 bool compositionalMode()
const;
569 size_t numComps()
const;
570 bool co2Storage()
const noexcept;
571 bool co2Sol()
const noexcept;
572 bool h2Sol()
const noexcept;
573 bool h2Storage()
const noexcept;
574 bool micp()
const noexcept;
575 bool mech()
const noexcept;
576 bool frac()
const noexcept;
577 bool temp()
const noexcept;
578 bool compositional()
const noexcept;
579 bool biof()
const noexcept;
581 bool operator==(
const Runspec& data)
const;
582 static bool rst_cmp(
const Runspec& full_state,
const Runspec& rst_state);
584 template<
class Serializer>
587 serializer(this->m_start_time);
588 serializer(active_phases);
589 serializer(m_tabdims);
590 serializer(m_regdims);
591 serializer(endscale);
592 serializer(welldims);
593 serializer(wsegdims);
594 serializer(netwrkdims);
595 serializer(aquiferdims);
596 serializer(udq_params);
598 serializer(m_actdims);
599 serializer(m_sfuncctrl);
600 serializer(m_nupcol);
601 serializer(m_tracers);
603 serializer(m_co2storage);
604 serializer(m_co2sol);
606 serializer(m_h2storage);
612 serializer(m_geochem);
616 std::time_t m_start_time{};
633 bool m_co2storage{
false};
634 bool m_co2sol{
false};
636 bool m_h2storage{
false};
644std::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:486
double modParamTrapped() const
Regularisation parameter used for Killough model.
Definition Runspec.cpp:492
bool fixWettingPhaseKillough() const
Activate fix for wetting phase killough.
Definition Runspec.cpp:504
double curvatureCapPrs() const
Curvature parameter used for capillary pressure hysteresis.
Definition Runspec.cpp:495
bool activeWag() const
Wag hysteresis.
Definition Runspec.cpp:498
bool doPcScaling() const
Do Pc scaling for scanning curves.
Definition Runspec.cpp:501
bool active() const
Specify whether hysteresis is enabled or not.
Definition Runspec.cpp:483
int krHysteresisModel() const
Return the type of the hysteresis model which is used for relative permeability.
Definition Runspec.cpp:489
Definition EndpointScaling.hpp:28
Definition Runspec.hpp:500
Definition Runspec.hpp:198
Definition Runspec.hpp:442
Definition Runspec.hpp:46
Definition Regdims.hpp:36
Definition Runspec.hpp:544
Definition Runspec.hpp:386
Class for (de-)serializing.
Definition Serializer.hpp:94
Definition Tabdims.hpp:36
Definition Runspec.hpp:464
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