19 #ifndef OPM_RUNSPEC_HPP
20 #define OPM_RUNSPEC_HPP
26 #include <opm/common/OpmLog/KeywordLocation.hpp>
27 #include <opm/input/eclipse/EclipseState/Tables/Tabdims.hpp>
28 #include <opm/input/eclipse/EclipseState/Tables/Regdims.hpp>
29 #include <opm/input/eclipse/EclipseState/EndpointScaling.hpp>
30 #include <opm/input/eclipse/Schedule/UDQ/UDQParams.hpp>
31 #include <opm/input/eclipse/Schedule/Action/Actdims.hpp>
52 constexpr
int NUM_PHASES_IN_ENUM =
static_cast<int>(Phase::ZFRACTION) + 1;
54 Phase get_phase(
const std::string& );
55 std::ostream& operator<<( std::ostream&,
const Phase& );
59 Phases() noexcept =
default;
60 Phases(
bool oil,
bool gas,
bool wat,
bool solvent =
false,
bool polymer =
false,
bool energy =
false,
61 bool polymw =
false,
bool foam =
false,
bool brine =
false,
bool zfraction =
false ) noexcept;
63 static Phases serializeObject();
65 bool active( Phase )
const noexcept;
66 size_t size()
const noexcept;
68 bool operator==(
const Phases& data)
const;
70 template<
class Serializer>
73 if (serializer.isSerializing())
74 serializer(bits.to_ulong());
76 unsigned long Bits = 0;
78 bits = std::bitset<NUM_PHASES_IN_ENUM>(Bits);
83 std::bitset< NUM_PHASES_IN_ENUM > bits;
94 int maxConnPerWell()
const
99 int maxWellsPerGroup()
const
104 int maxGroupsInField()
const
109 int maxWellsInField()
const
114 int maxWellListsPrWell()
const
116 return this->nWlistPrWellMax;
119 int maxDynamicWellLists()
const
121 return this->nDynWlistMax;
124 const std::optional<KeywordLocation>& location()
const {
125 return this->m_location;
129 return full_dims.maxConnPerWell() == rst_dims.maxConnPerWell() &&
130 full_dims.maxWellsPerGroup() == rst_dims.maxWellsPerGroup() &&
131 full_dims.maxGroupsInField() == rst_dims.maxGroupsInField() &&
132 full_dims.maxWellsInField() == rst_dims.maxWellsInField() &&
133 full_dims.maxWellListsPrWell() == rst_dims.maxWellListsPrWell() &&
134 full_dims.maxDynamicWellLists() == rst_dims.maxDynamicWellLists();
137 bool operator==(
const Welldims& data)
const {
138 return this->location() == data.location() &&
139 rst_cmp(*
this, data);
143 template<
class Serializer>
150 serializer(nWlistPrWellMax);
151 serializer(nDynWlistMax);
152 serializer(m_location);
160 int nWlistPrWellMax { 1 };
161 int nDynWlistMax { 1 };
162 std::optional<KeywordLocation> m_location;
173 int maxSegmentedWells()
const
175 return this->nSegWellMax;
178 int maxSegmentsPerWell()
const
180 return this->nSegmentMax;
183 int maxLateralBranchesPerWell()
const
185 return this->nLatBranchMax;
190 template<
class Serializer>
193 serializer(nSegWellMax);
194 serializer(nSegmentMax);
195 serializer(nLatBranchMax);
211 int maxNONodes()
const
213 return this->nMaxNoNodes;
216 int maxNoBranches()
const
218 return this->nMaxNoBranches;
221 int maxNoBranchesConToNode()
const
223 return this->nMaxNoBranchesConToNode;
230 template<
class Serializer>
233 serializer(nMaxNoNodes);
234 serializer(nMaxNoBranches);
235 serializer(nMaxNoBranchesConToNode);
241 int nMaxNoBranchesConToNode;
251 int maxAnalyticAquifers()
const
253 return this->maxNumAnalyticAquifers;
256 int maxAnalyticAquiferConnections()
const
258 return this->maxNumAnalyticAquiferConn;
261 template <
class Serializer>
264 serializer(this->maxNumAnalyticAquifers);
265 serializer(this->maxNumAnalyticAquiferConn);
269 int maxNumAnalyticAquifers;
270 int maxNumAnalyticAquiferConn;
311 template<
class Serializer>
314 serializer(activeHyst);
315 serializer(pcHystMod);
316 serializer(krHystMod);
321 bool activeHyst {
false };
330 enum class ThreePhaseOilKrModel {
336 enum class KeywordFamily {
345 const ThreePhaseOilKrModel model,
346 const KeywordFamily family);
350 double minimumRelpermMobilityThreshold()
const
352 return this->tolcrit;
355 ThreePhaseOilKrModel krModel()
const
357 return this->krmodel;
360 KeywordFamily family()
const
362 return this->satfunc_family;
367 template<
class Serializer>
372 serializer(satfunc_family);
377 ThreePhaseOilKrModel krmodel = ThreePhaseOilKrModel::Default;
378 KeywordFamily satfunc_family = KeywordFamily::Undefined;
385 explicit Nupcol(
int min_value);
386 void update(
int value);
389 static Nupcol serializeObject();
390 bool operator==(
const Nupcol& data)
const;
392 template<
class Serializer>
394 serializer(this->nupcol_value);
395 serializer(this->min_nupcol);
410 int water_tracers()
const;
412 template<
class Serializer>
414 serializer(this->m_oil_tracers);
415 serializer(this->m_water_tracers);
416 serializer(this->m_gas_tracers);
417 serializer(this->m_env_tracers);
418 serializer(this->diffusion_control);
419 serializer(this->max_iter);
420 serializer(this->min_iter);
423 static Tracers serializeObject();
424 bool operator==(
const Tracers& data)
const;
431 bool diffusion_control;
444 static Runspec serializeObject();
446 std::time_t start_time()
const noexcept;
447 const UDQParams& udqParams()
const noexcept;
448 const Phases& phases()
const noexcept;
449 const Tabdims& tabdims()
const noexcept;
450 const Regdims& regdims()
const noexcept;
452 const Welldims& wellDimensions()
const noexcept;
454 const NetworkDims& networkDimensions()
const noexcept;
456 int eclPhaseMask( )
const noexcept;
458 const Actdims& actdims()
const noexcept;
460 const Nupcol& nupcol()
const noexcept;
461 const Tracers& tracers()
const;
462 bool co2Storage()
const noexcept;
463 bool micp()
const noexcept;
465 bool operator==(
const Runspec& data)
const;
466 static bool rst_cmp(
const Runspec& full_state,
const Runspec& rst_state);
468 template<
class Serializer>
471 serializer(this->m_start_time);
472 active_phases.serializeOp(serializer);
473 m_tabdims.serializeOp(serializer);
474 m_regdims.serializeOp(serializer);
475 endscale.serializeOp(serializer);
476 welldims.serializeOp(serializer);
477 wsegdims.serializeOp(serializer);
478 netwrkdims.serializeOp(serializer);
479 aquiferdims.serializeOp(serializer);
480 udq_params.serializeOp(serializer);
481 hystpar.serializeOp(serializer);
482 m_actdims.serializeOp(serializer);
483 m_sfuncctrl.serializeOp(serializer);
484 m_nupcol.serializeOp(serializer);
485 serializer(m_co2storage);
490 std::time_t m_start_time;
Definition: Actdims.hpp:30
Definition: Runspec.hpp:244
Definition: Runspec.hpp:276
int pcHysteresisModel() const
Return the type of the hysteresis model which is used for capillary pressure.
bool active() const
Specify whether hysteresis is enabled or not.
int krHysteresisModel() const
Return the type of the hysteresis model which is used for relative permeability.
Definition: EndpointScaling.hpp:28
Definition: Runspec.hpp:204
Definition: Runspec.hpp:382
Definition: Runspec.hpp:57
Definition: Regdims.hpp:36
Definition: Runspec.hpp:439
Definition: Runspec.hpp:328
Definition: Serializer.hpp:38
Definition: Tabdims.hpp:36
Definition: Runspec.hpp:404
Definition: UDQParams.hpp:31
Definition: Runspec.hpp:165
Definition: Runspec.hpp:87
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:29