opm-common
Loading...
Searching...
No Matches
Opm::ParseContext Class Reference

Control parser behaviour in failure conditions. More...

#include <ParseContext.hpp>

Public Member Functions

 ParseContext ()
 Default constructor.
 ParseContext (InputErrorAction default_action)
 Constructor.
 ParseContext (const std::vector< std::pair< std::string, InputErrorAction > > &initial)
 Constructor.
void handleError (const std::string &errorKey, const std::string &msg, const std::optional< KeywordLocation > &location, ErrorGuard &errors) const
 Handle an input error.
void handleUnknownKeyword (const std::string &keyword, const std::optional< KeywordLocation > &location, ErrorGuard &errors) const
 Handle an unknown keyword in the input stream.
bool hasKey (const std::string &key) const
 Existence predicate for particular context category.
void updateKey (const std::string &key, InputErrorAction action)
 Reset action for particular context category.
void update (InputErrorAction action)
 Reset action for all context categories.
void update (const std::string &keyString, InputErrorAction action)
 Reset action for one or more context categories.
void ignoreKeyword (const std::string &keyword)
 Ignore particular unknown input keyword if encountered during parsing.
InputErrorAction get (const std::string &key) const
 Retrieve category action for particular context category.
void addKey (const std::string &key, InputErrorAction default_action)
 Define action for user-specified category.
void setInputSkipMode (const std::string &skip_mode)
 Define how to handle simulator specific keyword suppression.
bool isActiveSkipKeyword (const std::string &deck_name) const
 Whether or not a particular keyword activates keyword suppression.

Static Public Attributes

static const std::string PARSE_EXTRA_RECORDS = "PARSE_EXTRA_RECORDS"
 The PARSE_EXTRA_RECORDS field controls the parser's response to keywords whose size has been defined in an earlier keyword.
static const std::string PARSE_UNKNOWN_KEYWORD = "PARSE_UNKNOWN_KEYWORD"
 The unknown keyword category controls the parser's behaviour on encountering an unknown keyword.
static const std::string PARSE_RANDOM_TEXT = "PARSE_RANDOM_TEXT"
 Random text is an input deck string not correctly formatted as a keyword heading.
static const std::string PARSE_RANDOM_SLASH = "PARSE_RANDOM_SLASH"
 It turns out that random '/'–i.e.
static const std::string PARSE_MISSING_DIMS_KEYWORD = "PARSE_MISSING_DIMS_KEYWORD"
 For some keywords the number of records (i.e., size) is given as an item in another keyword.
static const std::string PARSE_EXTRA_DATA = "PARSE_EXTRA_DATA"
 If the number of elements in the input record exceeds the number of items in the keyword configuration this error situation will be triggered.
static const std::string PARSE_MISSING_INCLUDE = "PARSE_MISSING_INCLUDE"
 If an include file is not found we can configure the parser to continue reading.
static const std::string PARSE_INVALID_KEYWORD_COMBINATION = "PARSE_INVALID_KEYWORD_COMBINATION"
 Certain keywords require, or prohibit, other specific keywords.
static const std::string RUNSPEC_NUMWELLS_TOO_LARGE = "RUNSPEC_NUMWELLS_TOO_LARGE"
 Dynamic number of wells exceeds maximum declared in RUNSPEC keyword WELLDIMS (item 1).
static const std::string RUNSPEC_CONNS_PER_WELL_TOO_LARGE = "RUNSPEC_CONNS_PER_WELL_TOO_LARGE"
 Dynamic number of connections per well exceeds maximum declared in RUNSPEC keyword WELLDIMS (item 2).
static const std::string RUNSPEC_NUMGROUPS_TOO_LARGE = "RUNSPEC_NUMGROUPS_TOO_LARGE"
 Dynamic number of groups exceeds maximum number declared in RUNSPEC keyword WELLDIMS (item 3).
static const std::string RUNSPEC_GROUPSIZE_TOO_LARGE = "RUNSPEC_GROUPSIZE_TOO_LARGE"
 Dynamic group size exceeds maximum number declared in RUNSPEC keyword WELLDIMS (item 4).
static const std::string RUNSPEC_NUMMSW_TOO_LARGE = "RUNSPEC_NUMMSW_TOO_LARGE"
 Dynamic number of multi-segmented wells exceeds maximum declared in RUNSPEC keyword WSEGDIMS (item 1).
static const std::string RUNSPEC_NUMSEG_PER_WELL_TOO_LARGE = "RUNSPEC_NUMSEG_PER_WELL_TOO_LARGE"
 Dynamic number of segments per MS well exceeds maximum declared in RUNSPEC keyword WSEGDIMS (item 2).
static const std::string RUNSPEC_NUMBRANCH_TOO_LARGE = "RUNSPEC_NUMBRANCH_TOO_LARGE"
 Dynamic number of branches exceeds maximum number declared in RUNSPEC keyword WSEGDIMS (item 3).
static const std::string PARSE_LONG_KEYWORD = "PARSE_LONG_KEYWORD"
 Should we allow keywords of length more than eight characters?
static const std::string UNIT_SYSTEM_MISMATCH = "UNIT_SYSTEM_MISMATCH"
 The unit system specified via the FILEUNIT keyword is different from the unit system used by the deck.
static const std::string UNSUPPORTED_INITIAL_THPRES = "UNSUPPORTED_INITIAL_THPRES"
 If the third item in the THPRES keyword is defaulted, the threshold pressure is inferred from the initial pressure.
static const std::string UNSUPPORTED_TERMINATE_IF_BHP = "UNSUPPORTED_TERMINATE_IF_BHP"
 If the second item in the WHISTCTL keyword is set to YES.
static const std::string UDQ_PARSE_ERROR = "UDQ_PARSE_ERROR"
 Parser fails to analyse the defining expression of a UDQ.
static const std::string UDQ_TYPE_ERROR = "UDQ_TYPE_ERROR"
 Parser unable to establish a coherent UDQ set type for a user-defined quantity.
static const std::string UDQ_DEFINE_CANNOT_EVAL = "UDQ_DEFINE_CANNOT_EVAL"
 Cannot evaluate the defining expression of a UDQ at the point of definition due to missing objects, e.g., wells or groups.
static const std::string INTERNAL_ERROR_UNINITIALIZED_THPRES = "INTERNAL_ERROR_UNINITIALIZED_THPRES"
 If the third item in the THPRES keyword is defaulted the threshold pressure is inferred from the initial pressure–if you still ask the ThresholdPressure instance for a pressure value this error will be signalled.
static const std::string PARSE_MISSING_SECTIONS = "PARSE_MISSING_SECTIONS"
 If the deck does not have all sections, whence complete EclipseState and Schedule objects cannot be constructed, we may still be able to construct a slim EclipseGrid.
static const std::string PARSE_WGNAME_SPACE = "PARSE_WGNAME_SPACE"
 When defining wells and groups with the WELSPECS and GRUPTREE keywords we do not allow leading or trailing spaces.
static const std::string SUMMARY_UNKNOWN_WELL = "SUMMARY_UNKNOWN_WELL"
 Well level summary vector references an unknown well.
static const std::string SUMMARY_UNKNOWN_GROUP = "SUMMARY_UNKNOWN_GROUP"
 Group level summary vector references an unknown group.
static const std::string SUMMARY_UNKNOWN_NODE = "SUMMARY_UNKNOWN_NODE"
 Summary vector references an unknown network node.
static const std::string SUMMARY_UNKNOWN_AQUIFER = "SUMMARY_UNKNOWN_AQUIFER"
 Aquifer level summary vector references an unknown aquifer (analytic or numeric).
static const std::string SUMMARY_UNHANDLED_KEYWORD = "SUMMARY_UNHANDLED_KEYWORD"
 Summary vector name is unknown.
static const std::string SUMMARY_UNDEFINED_UDQ = "SUMMARY_UNDEFINED_UDQ"
 Summary vector references an undefined UDQ.
static const std::string SUMMARY_UDQ_MISSING_UNIT = "SUMMARY_UDQ_MISSING_UNIT"
 User-defined quantity does not have an associated unit of measure and will thus be reported without any units.
static const std::string SUMMARY_INVALID_FIPNUM = "SUMMARY_INVALID_FIPNUM"
 Summary vector references an unknown FIP region.
static const std::string SUMMARY_EMPTY_REGION = "SUMMARY_EMPTY_REGION"
 Summary vector references an empty region.
static const std::string SUMMARY_REGION_TOO_LARGE = "SUMMARY_REGION_TOO_LARGE"
 Summary vector references an out-of-bounds region ID.
static const std::string SCHEDULE_INVALID_NAME = "SCHEDULE_INVALID_NAME"
 A well or group name used before it has been fully defined through WELSPECS/COMPDAT/GRUPTREE.
static const std::string ACTIONX_ILLEGAL_KEYWORD = "ACTIONX_ILLEGAL_KEYWORD"
 ACTIONX block uses an unsupported schedule keyword.
static const std::string PYACTION_ILLEGAL_KEYWORD = "PYACTION_ILLEGAL_KEYWORD"
 PYACTION block uses an unsupported schedule keyword.
static const std::string ACTIONX_CONDITION_ERROR = "ACTIONX_CONDITION_ERROR"
 Error flag marking parser errors ic ACTIONX conditions.
static const std::string ACTIONX_NO_CONDITION = "ACTIONX_NO_CONDITION"
 Error flag marking that an ACTIONX has no condition.
static const std::string RPT_MIXED_STYLE = "RPT_MIXED_STYLE"
 The RPTRST, RPTSOL and RPTSCHED keywords have two alternative forms.
static const std::string RPT_UNKNOWN_MNEMONIC = "RPT_UNKNOWN_MNEMONIC"
 An unknown mnemonic in one of the RPT* keywords.
static const std::string SCHEDULE_GROUP_ERROR = "SCHEDULE_GROUP_ERROR"
 Operation applied to incorrect/unknown group.
static const std::string SCHEDULE_IGNORED_GUIDE_RATE = "SCHEDULE_IGNORED_GUIDE_RATE"
 Explicitly supplied guide rate will be ignored.
static const std::string SCHEDULE_WELL_IN_FIELD_GROUP = "SCHEDULE_WELL_IN_FIELD_GROUP"
 Well parented directly to the FIELD group.
static const std::string SCHEDULE_COMPSEGS_INVALID = "SCHEDULE_COMPSEG_INVALID"
 COMPSEGS data invalid in some way.
static const std::string SCHEDULE_COMPSEGS_NOT_SUPPORTED = "SCHEDULE_COMPSEGS_NOT_SUPPORTED"
 COMPSEGS definition not supported.
static const std::string SCHEDULE_COMPDAT_INVALID = "SCHEDULE_COMPDAT_INVALID"
 Connection data (COMPDAT keyword) invalid in some way.
static const std::string SCHEDULE_COMPDAT_ZERO_PERM = "SCHEDULE_COMPDAT_ZERO_PERM"
 Connection in zero-permeability cell (COMPDAT keyword).
static const std::string SCHEDULE_ICD_MISSING_SEGMENT = "SCHEDULE_ICD_MISSING_SEGMENT"
 ICD keyword (WSEGAICD, WSEGSICD, WSEGVALV) references a missing well segment.
static const std::string SCHEDULE_ICD_INCOMPATIBLE_PDROP_MODEL = "SCHEDULE_ICD_INCOMPATIBLE_PDROP_MODEL"
 ICD keyword (WSEGAICD, WSEGSICD, WSEGVALV) is not compatible with the pressure drop model chosen for a particular MSW.
static const std::string SIMULATOR_KEYWORD_NOT_SUPPORTED = "SIMULATOR_KEYWORD_NOT_SUPPORTED"
 Keyword that is not supported in the simulator.
static const std::string SIMULATOR_KEYWORD_NOT_SUPPORTED_CRITICAL = "SIMULATOR_KEYWORD_NOT_SUPPORTED_CRITICAL"
 Keyword that is not supported in the simulator, and which should be treated as a critical failure if encountered.
static const std::string SIMULATOR_KEYWORD_ITEM_NOT_SUPPORTED = "SIMULATOR_KEYWORD_ITEM_NOT_SUPPORTED"
 Keyword item setting that is not supported in the simulator.
static const std::string SIMULATOR_KEYWORD_ITEM_NOT_SUPPORTED_CRITICAL = "SIMULATOR_KEYWORD_ITEM_NOT_SUPPORTED_CRITICAL"
 Keyword item setting that is not supported in the simulator and which should be treated as a critical failure if encountered.

Detailed Description

Control parser behaviour in failure conditions.

The ParseContext class is a way to influence the parser's behaviour and the EclipseState/Schedule construction phase in the face of errors or inconsistencies in the input stream.

For each of the possible problem categories encountered, the possible actions are goverened by the InputErrorAction enum:

InputErrorAction::THROW_EXCEPTION
   -> Throws an exception at the point of call which will
      typically lead to the application shutting down shortly
      thereafter.  Might also include a back-trace for
      subsequent analysis.

InputErrorAction::WARN
  -> Warns about a potential problem, but continues loading and
     analysing the input deck.

InputErrorAction::IGNORE
  -> Ignores the problem without issuing any diagnostic message.

InputErrorAction::EXIT1
  -> Stops parsing and shuts down the application immediately,
     with a status code signifying an error condition.  This
     action should only be used for the most severe cases, in
     which the input analysis cannot proceed.  One example of
     this situation would be a missing INCLUDE file.

InputErrorAction::DELAYED_EXIT1
  -> Schedule application shutdown, with a failure condition
     status code, at the end of loading the input file.  Should
     typically be used only for cases that cannot be simulated,
     but for which the parser is able to continue and possibly
     diagnose other inconsistencies.

The internal datastructure is a map from categories (strings) to action values (of type InputErrorAction). The context categories are intended to be descriptive and human readable, like

"PARSE_RANDOMTEXT"

The constructors will furthermore inspect the environment variables OPM_ERRORS_IGNORE, OPM_ERRORS_WARN, OPM_ERRORS_EXIT1, OPM_ERRORS_DELAYED_EXIT1 and OPM_ERRORS_EXCEPTION when forming the initial set of context actions. These variables should be set as strings of update syntax, and the categories referenced by these variables will have their actions reset to that implied by the variable name. As an example, categories referenced by the OPM_ERRORS_DELAYED_EXIT1 enviroment variable will have their actions reset to InputErrorAction::DELAYED_EXIT1.

Update syntax: The main function for updating the policy of a parseContext instance is the update() method. This member function takes a string as input, and resets the actions for categories that match the string. In particular, the string can contain shell-style wildcards ('*' and '?' as though matched by the Posix function fnmatch()), and is split on ':' or '|' to allow multiple settings to be applied in one go:

Reset one context category: update("PARSE_RANDOM_SLASH", InputErrorAction::IGNORE)

Ignore all unsupported features: update("UNSUPPORTED_*", InputErrorAction::IGNORE)

Reset two categories (names separated by ':'): update("UNSUPPORTED_INITIAL_THPRES:PARSE_RANDOM_SLASH", InputErrorAction::IGNORE)

The update function will silently ignore unknown context categories. On the other hand, member function updateKey() will throw an exception for any unknown category.

Constructor & Destructor Documentation

◆ ParseContext() [1/3]

Opm::ParseContext::ParseContext ( )

Default constructor.

Creates a context object with all known categories intialised to their default action. Some/all categories may be overridden through environment variables.

◆ ParseContext() [2/3]

Opm::ParseContext::ParseContext ( InputErrorAction default_action)
explicit

Constructor.

Context object with all known categories initialised to a single user-defined action. Some/all categories may be overridden through environment variables.

Parameters
[in]default_actionAction for all context categories that are not overridden by environment variables.

◆ ParseContext() [3/3]

Opm::ParseContext::ParseContext ( const std::vector< std::pair< std::string, InputErrorAction > > & initial)
explicit

Constructor.

Context object with all known categories initialised to their default action, except for those categories that are explicitly assigned a user-defined action through the constructor argument. Some/all categories may be overridden through environment variables.

Parameters
[in]initialUser-defined action for select context categories.

Member Function Documentation

◆ addKey()

void Opm::ParseContext::addKey ( const std::string & key,
InputErrorAction default_action )

Define action for user-specified category.

Parameters
[in]keyUser-specified context category. If key already exists in this context object, then the context object is unchanged. Use member functions update() or updateKey() to change the action of an existing context category.
[in]default_actionDefault action for user-specified context category key.

◆ get()

InputErrorAction Opm::ParseContext::get ( const std::string & key) const

Retrieve category action for particular context category.

Parameters
[in]keyContext category.
Returns
Category action for key.

◆ handleError()

void Opm::ParseContext::handleError ( const std::string & errorKey,
const std::string & msg,
const std::optional< KeywordLocation > & location,
ErrorGuard & errors ) const

Handle an input error.

This is the primary client interface that starts input failure processing. Each failure category will be handled according to its currently configured action.

Parameters
[in]errorKeyFailure category.
[in]msgDiagnostic message. Will be transformed through
if call site additionally passes a KeywordLocation for the error handling.
[in]locationInput file position of the keyword that triggered this failure condition. Nullopt if no such location is available.
[in,out]errorsAll diagnostic messages collected thus far. If the configured action for errorKey is WARN or DELAYED_EXIT1, the errors object will include the diagnostic message derived from msg as either a warning or an error.

◆ handleUnknownKeyword()

void Opm::ParseContext::handleUnknownKeyword ( const std::string & keyword,
const std::optional< KeywordLocation > & location,
ErrorGuard & errors ) const

Handle an unknown keyword in the input stream.

This function exists mostly for backwards compatibility.

Parameters
[in]keywordUnknown keyword in input stream.
[in]locationInput file position of the unknown keyword. Nullopt if no such location is available.
[in,out]errorsAll diagnostic messages collected thus far. If the keyword is not explicitly ignored–see member function ignoreKeyword()–the errors object will include a diagnostic message for this unknown keyword.

◆ hasKey()

bool Opm::ParseContext::hasKey ( const std::string & key) const

Existence predicate for particular context category.

Parameters
[in]keyContext category.
Returns
Whether or not the category key is known to this context object.

◆ ignoreKeyword()

void Opm::ParseContext::ignoreKeyword ( const std::string & keyword)

Ignore particular unknown input keyword if encountered during parsing.

Bypasses the error handling in handleUnknownKeyword().

[2026-01-19] Useful in the early development of the OPM input parser, but exists now mostly for backwards compatibility and historical reasons. See Issue OPM/opm-simulators#6541 for why we might want to remove this function.

Parameters
[in]keywordUnknown input keyword that should be explicitly ignored if encountered in the input stream.

◆ isActiveSkipKeyword()

bool Opm::ParseContext::isActiveSkipKeyword ( const std::string & deck_name) const

Whether or not a particular keyword activates keyword suppression.

Parameters
[in]deck_nameKeyword name.
Returns
Whether or not deck_name is one of the keywords that activates keyword suppression. Results depend on the input skip mode defined through setInputSkipMode().

◆ setInputSkipMode()

void Opm::ParseContext::setInputSkipMode ( const std::string & skip_mode)

Define how to handle simulator specific keyword suppression.

In particular, this function defines how the parser will treat the SKIP100 and SKIP300 keywords. Keywords between SKIP/ENDSKIP are always suppressed/ignored/skipped.

Parameters
[in]skip_modeMode of operation for the keyword suppression algorithm. Supported values are:
  • "100" – Skip/ignore keywords between SKIP100/ENDSKIP. Keep others. Default setting.
  • "300" – Skip/ignore keywords between SKIP300/ENDSKIP. Keep others.
  • "all" – Skip/ignore keywords both between SKIP100/ENDSKIP and between SKIP300/ENDSKIP.

◆ update() [1/2]

void Opm::ParseContext::update ( const std::string & keyString,
InputErrorAction action )

Reset action for one or more context categories.

This is the most general update function. The input key string is treated as a "category selection string", and all context categories matching a pattern will reset their action. The algorithm for decoding the category selection string is:

  1. Split category selection string into elements on occurences of ':' or '|', and then each element is treated separately.
  2. For each element in the list from 1):

    a) If the element contains a wildcard ('*'), then treat the element as a shell-style pattern and update all context categories matching this pattern.

    b) Otherwise, if the element is exactly equal to a known context category, then update that category.

    c) Otherwise, silently ignore the element.

Parameters
[in]keyStringCategory selection string.
[in]actionNew action for those categories matching keyString.

◆ update() [2/2]

void Opm::ParseContext::update ( InputErrorAction action)

Reset action for all context categories.

Parameters
[in]actionNew action for all known context categories.

◆ updateKey()

void Opm::ParseContext::updateKey ( const std::string & key,
InputErrorAction action )

Reset action for particular context category.

Throws an exception of type

if the context category is unknown.

Parameters
[in]keyContext category.
[in]actionNew action for category key.

Member Data Documentation

◆ INTERNAL_ERROR_UNINITIALIZED_THPRES

const std::string Opm::ParseContext::INTERNAL_ERROR_UNINITIALIZED_THPRES = "INTERNAL_ERROR_UNINITIALIZED_THPRES"
static

If the third item in the THPRES keyword is defaulted the threshold pressure is inferred from the initial pressure–if you still ask the ThresholdPressure instance for a pressure value this error will be signalled.

This is currently not supported.

◆ PARSE_EXTRA_DATA

const std::string Opm::ParseContext::PARSE_EXTRA_DATA = "PARSE_EXTRA_DATA"
static

If the number of elements in the input record exceeds the number of items in the keyword configuration this error situation will be triggered.

Many keywords end with several ECLIPSE300 only items–in some cases we have omitted those items in the Json configuration; that will typically trigger this error situation when encountering an ECLIPSE300 deck.

◆ PARSE_EXTRA_RECORDS

const std::string Opm::ParseContext::PARSE_EXTRA_RECORDS = "PARSE_EXTRA_RECORDS"
static

The PARSE_EXTRA_RECORDS field controls the parser's response to keywords whose size has been defined in an earlier keyword.

Example:

EQLDIMS 2 100 20 1 1 / – ... EQUIL 2469 382.4 1705.0 0.0 500 0.0 1 1 20 / 2469 382.4 1705.0 0.0 500 0.0 1 1 20 / 2470 382.4 1705.0 0.0 500 0.0 1 1 20 /

Item 1 of EQLDIMS is 2 which determines the number of expected records in EQUIL. Since there are 3 records in this EQUIL keyword however, this generates an error condition that must be handled by the parser.

◆ PARSE_INVALID_KEYWORD_COMBINATION

const std::string Opm::ParseContext::PARSE_INVALID_KEYWORD_COMBINATION = "PARSE_INVALID_KEYWORD_COMBINATION"
static

Certain keywords require, or prohibit, other specific keywords.

When such keywords are found in an invalid combination (i.e., required keyword missing required or prohibited keyword present), this error situation occurs.

◆ PARSE_LONG_KEYWORD

const std::string Opm::ParseContext::PARSE_LONG_KEYWORD = "PARSE_LONG_KEYWORD"
static

Should we allow keywords of length more than eight characters?

If the keyword is too long it will be internalized using only the eight first characters.

◆ PARSE_MISSING_DIMS_KEYWORD

const std::string Opm::ParseContext::PARSE_MISSING_DIMS_KEYWORD = "PARSE_MISSING_DIMS_KEYWORD"
static

For some keywords the number of records (i.e., size) is given as an item in another keyword.

A typical example is the EQUIL keyword where the number of records is given by the NTEQUL item of the EQLDIMS keyword. If the size defining XXXDIMS keyword is not in the deck, we can use the default values of the XXXDIMS keyword. This is controlled by the "missing dimension keyword" field.

Observe that a fully defaulted XXXDIMS keyword does not trigger this behaviour.

◆ PARSE_MISSING_INCLUDE

const std::string Opm::ParseContext::PARSE_MISSING_INCLUDE = "PARSE_MISSING_INCLUDE"
static

If an include file is not found we can configure the parser to continue reading.

The resulting deck will probably not be consistent in this case.

◆ PARSE_RANDOM_SLASH

const std::string Opm::ParseContext::PARSE_RANDOM_SLASH = "PARSE_RANDOM_SLASH"
static

It turns out that random '/'–i.e.

typically an extra slash which is not needed–is quite common. This is therefore a special case treatment of the "random text" behaviour.

◆ PARSE_UNKNOWN_KEYWORD

const std::string Opm::ParseContext::PARSE_UNKNOWN_KEYWORD = "PARSE_UNKNOWN_KEYWORD"
static

The unknown keyword category controls the parser's behaviour on encountering an unknown keyword.

Observe that 'keyword' in this context means

a string of at most eight upper case letters and numbers, starting with an upper case letter.

Moreover, the unknown keyword handling does not inspect any collection of keywords to determine if a particular string corresponds to a known, valid keyword which just happens to be ignored for this particular parse operation.

Finally, the "unknown keyword" and "random text" categories are not fully independent. As a result, encountering an unknown keyword without halting the parser might lead to a subsequent piece of "random text" not being correctly identified as such.

◆ PARSE_WGNAME_SPACE

const std::string Opm::ParseContext::PARSE_WGNAME_SPACE = "PARSE_WGNAME_SPACE"
static

When defining wells and groups with the WELSPECS and GRUPTREE keywords we do not allow leading or trailing spaces.

The code in Schedule.cpp will unconditionally remove the spaces, but with PARSE_WGNAME_SPACE setting you can additionally configure the normal IGNORE|WARN|ERROR behavior.

◆ RPT_MIXED_STYLE

const std::string Opm::ParseContext::RPT_MIXED_STYLE = "RPT_MIXED_STYLE"
static

The RPTRST, RPTSOL and RPTSCHED keywords have two alternative forms.

The traditional style uses integer controls, whence the RPTRST keyword can be configured along the lines of:

RPTRST 0 0 0 1 0 1 0 2 0 0 0 0 0 1 0 0 2 /

The recommended way uses string mnemonics which can optionally have an integer value, e.g., something along the lines of

RPTRST BASIC=2 FLOWS ALLPROPS /

It is not possible to mix the two styles within a single keyword instance, though a particlar run may use both styles within a single model description as long as the instances are separate.

A situation with mixed input style is identified if any of the items are exclusively integers while others are string mnemonics. To avoid the situation in which values in the assignments like BASIC=2 be interpreted as integers, there should be no space character on either side of the '=' character. We nevertheless support slightly relaxed parsing for situations like

RPTRST BASIC = 2 /

where the intention is clear. The RPT_MIXED_STYLE category tries to handle this situation. Observe that really mixed input style is impossible to handle and will lead to a hard exception. RPT_MIXED_STYLE nevertheless enables configuring lenient behaviour in interpreting the input as string mnemonics.

◆ SCHEDULE_COMPSEGS_INVALID

const std::string Opm::ParseContext::SCHEDULE_COMPSEGS_INVALID = "SCHEDULE_COMPSEG_INVALID"
static

COMPSEGS data invalid in some way.

For instance, referencing non-existent segments or not covering all connections of a single well.

◆ SCHEDULE_COMPSEGS_NOT_SUPPORTED

const std::string Opm::ParseContext::SCHEDULE_COMPSEGS_NOT_SUPPORTED = "SCHEDULE_COMPSEGS_NOT_SUPPORTED"
static

COMPSEGS definition not supported.

Might for instance use an unsupported MD specification.

◆ SCHEDULE_ICD_MISSING_SEGMENT

const std::string Opm::ParseContext::SCHEDULE_ICD_MISSING_SEGMENT = "SCHEDULE_ICD_MISSING_SEGMENT"
static

ICD keyword (WSEGAICD, WSEGSICD, WSEGVALV) references a missing well segment.

Typically generates a warning and drops the device. Note, however, that there are likely to be other issues in the input deck when this situation occurs.

◆ SCHEDULE_WELL_IN_FIELD_GROUP

const std::string Opm::ParseContext::SCHEDULE_WELL_IN_FIELD_GROUP = "SCHEDULE_WELL_IN_FIELD_GROUP"
static

Well parented directly to the FIELD group.

Typically generates a warning.

◆ UNSUPPORTED_INITIAL_THPRES

const std::string Opm::ParseContext::UNSUPPORTED_INITIAL_THPRES = "UNSUPPORTED_INITIAL_THPRES"
static

If the third item in the THPRES keyword is defaulted, the threshold pressure is inferred from the initial pressure.

This is currently not supported.

◆ UNSUPPORTED_TERMINATE_IF_BHP

const std::string Opm::ParseContext::UNSUPPORTED_TERMINATE_IF_BHP = "UNSUPPORTED_TERMINATE_IF_BHP"
static

If the second item in the WHISTCTL keyword is set to YES.

The simulator is supposed to terminate if the well is changed to BHP control. This feature is not yet supported.


The documentation for this class was generated from the following files:
  • opm/input/eclipse/Parser/ParseContext.hpp
  • opm/input/eclipse/Parser/ParseContext.cpp