Remove EclStrictParsing, replace with ParsingStrictness.

The new parameter takes the "high", "normal" (default), or "low" string.
Also implemented behaviour.
This commit is contained in:
Atgeirr Flø Rasmussen 2023-04-25 12:03:13 +02:00
parent 04d2b8f39d
commit 9ca6034388
7 changed files with 26 additions and 19 deletions

View File

@ -65,7 +65,7 @@ struct EnableOpmRstFile {
using type = UndefinedProperty;
};
template<class TypeTag, class MyTypeTag>
struct EclStrictParsing {
struct ParsingStrictness {
using type = UndefinedProperty;
};
template<class TypeTag, class MyTypeTag>
@ -134,8 +134,8 @@ struct EnableOpmRstFile<TypeTag, TTag::EclBaseVanguard> {
static constexpr bool value = false;
};
template<class TypeTag>
struct EclStrictParsing<TypeTag, TTag::EclBaseVanguard> {
static constexpr bool value = false;
struct ParsingStrictness<TypeTag, TTag::EclBaseVanguard> {
static constexpr auto value = "normal";
};
template<class TypeTag>
struct SchedRestart<TypeTag, TTag::EclBaseVanguard> {
@ -231,8 +231,8 @@ public:
"Include OPM-specific keywords in the ECL restart file to enable restart of OPM simulators from these files");
EWOMS_REGISTER_PARAM(TypeTag, std::string, IgnoreKeywords,
"List of Eclipse keywords which should be ignored. As a ':' separated string.");
EWOMS_REGISTER_PARAM(TypeTag, bool, EclStrictParsing,
"Use strict mode for parsing - all errors are collected before the applicaton exists.");
EWOMS_REGISTER_PARAM(TypeTag, std::string, ParsingStrictness,
"Set strictness of parsing process. Avaliable options are normal (stop for critical errors), high (stop for all errors) and low (as normal, except do not stop due to unsupported keywords even if marked critical");
EWOMS_REGISTER_PARAM(TypeTag, bool, SchedRestart,
"When restarting: should we try to initialize wells and groups from historical SCHEDULE section.");
EWOMS_REGISTER_PARAM(TypeTag, int, EdgeWeightsMethod,
@ -290,7 +290,6 @@ public:
#endif
enableDistributedWells_ = EWOMS_GET_PARAM(TypeTag, bool, AllowDistributedWells);
ignoredKeywords_ = EWOMS_GET_PARAM(TypeTag, std::string, IgnoreKeywords);
eclStrictParsing_ = EWOMS_GET_PARAM(TypeTag, bool, EclStrictParsing);
int output_param = EWOMS_GET_PARAM(TypeTag, int, EclOutputInterval);
if (output_param >= 0)
outputInterval_ = output_param;

View File

@ -133,7 +133,7 @@ void EclGenericVanguard::readDeck(const std::string& filename)
modelParams_.actionState_,
modelParams_.wtestState_,
modelParams_.eclSummaryConfig_,
nullptr, false, false, false, {});
nullptr, "normal", false, false, {});
modelParams_.setupTime_ = setupTimer.stop();
}

View File

@ -296,7 +296,6 @@ protected:
#endif
bool enableDistributedWells_;
std::string ignoredKeywords_;
bool eclStrictParsing_;
std::optional<int> outputInterval_;
bool useMultisegmentWell_;
bool enableExperiments_;

View File

@ -171,7 +171,7 @@ void Main::readDeck(const std::string& deckFilename,
const std::string& outputMode,
const bool init_from_restart_file,
const bool allRanksDbgPrtLog,
const bool strictParsing,
const std::string& parsingStrictness,
const int mpiRank,
const int output_param,
const std::string& parameters,
@ -202,7 +202,7 @@ void Main::readDeck(const std::string& deckFilename,
wtestState_,
summaryConfig_,
std::make_shared<Python>(),
strictParsing,
parsingStrictness,
init_from_restart_file,
outputCout_,
outputInterval);

View File

@ -374,7 +374,7 @@ private:
EWOMS_GET_PARAM(PreTypeTag, std::string, OutputMode),
!EWOMS_GET_PARAM(PreTypeTag, bool, SchedRestart),
EWOMS_GET_PARAM(PreTypeTag, bool, EnableLoggingFalloutWarning),
EWOMS_GET_PARAM(PreTypeTag, bool, EclStrictParsing),
EWOMS_GET_PARAM(PreTypeTag, std::string, ParsingStrictness),
mpiRank,
EWOMS_GET_PARAM(PreTypeTag, int, EclOutputInterval),
cmdline_params,
@ -626,7 +626,7 @@ private:
const std::string& outputMode,
const bool init_from_restart_file,
const bool allRanksDbgPrtLog,
const bool strictParsing,
const std::string& parsingStrictness,
const int mpiRank,
const int output_param,
const std::string& parameters,

View File

@ -191,6 +191,7 @@ namespace {
const bool checkDeck,
const Opm::Parser& parser,
const Opm::ParseContext& parseContext,
const bool treatCriticalAsNonCritical,
Opm::ErrorGuard& errorGuard)
{
Opm::Deck deck(parser.parseFile(deckFilename, parseContext, errorGuard));
@ -203,7 +204,7 @@ namespace {
Opm::KeywordValidation::specialValidation()
};
keyword_validator.validateDeck(deck, parseContext, true, errorGuard);
keyword_validator.validateDeck(deck, parseContext, treatCriticalAsNonCritical, errorGuard);
if (checkDeck) {
Opm::checkDeck(deck, parser, parseContext, errorGuard);
@ -235,6 +236,7 @@ namespace {
std::shared_ptr<Opm::Python> python,
const bool initFromRestart,
const bool checkDeck,
const bool treatCriticalAsNonCritical,
const std::optional<int>& outputInterval,
Opm::ErrorGuard& errorGuard)
{
@ -248,7 +250,7 @@ namespace {
auto parser = Opm::Parser{};
const auto deck = readDeckFile(deckFilename, checkDeck, parser,
*parseContext, errorGuard);
*parseContext, treatCriticalAsNonCritical, errorGuard);
if (eclipseState == nullptr) {
eclipseState = createEclipseState(comm, deck);
@ -490,7 +492,7 @@ void Opm::readDeck(Opm::Parallel::Communication comm,
std::unique_ptr<WellTestState>& wtestState,
std::shared_ptr<SummaryConfig>& summaryConfig,
std::shared_ptr<Python> python,
const bool strictParsing,
const std::string& parsingStrictness,
const bool initFromRestart,
const bool checkDeck,
const std::optional<int>& outputInterval)
@ -500,13 +502,20 @@ void Opm::readDeck(Opm::Parallel::Communication comm,
int parseSuccess = 1; // > 0 is success
std::string failureMessage;
if (parsingStrictness != "high" && parsingStrictness != "normal" && parsingStrictness != "low") {
OPM_THROW(std::runtime_error,
fmt::format("Incorrect value {} for parameter ParsingStrictness, must be 'high', 'normal', or 'low'"));
}
if (comm.rank() == 0) { // Always true when !HAVE_MPI
const bool exitOnAllErrors = (parsingStrictness == "high");
const bool treatCriticalAsNonCritical = (parsingStrictness == "low");
try {
auto parseContext = setupParseContext(strictParsing);
auto parseContext = setupParseContext(exitOnAllErrors);
readOnIORank(comm, deckFilename, parseContext.get(),
eclipseState, schedule, udqState, actionState, wtestState,
summaryConfig, std::move(python), initFromRestart,
checkDeck, outputInterval, *errorGuard);
checkDeck, treatCriticalAsNonCritical, outputInterval, *errorGuard);
}
catch (const OpmInputError& input_error) {
failureMessage = input_error.what();

View File

@ -60,7 +60,7 @@ enum class FileOutputMode {
void
ensureOutputDirExists(const std::string& cmdline_output_dir);
std::unique_ptr<ParseContext> setupParseContext(const bool strictParsing);
std::unique_ptr<ParseContext> setupParseContext(const bool exitOnAllErrors);
// Setup the OpmLog backends
FileOutputMode
@ -85,7 +85,7 @@ void readDeck(Parallel::Communication comm,
std::unique_ptr<WellTestState>& wtestState,
std::shared_ptr<SummaryConfig>& summaryConfig,
std::shared_ptr<Python> python,
bool strictParsing,
const std::string& parsingStrictness,
bool initFromRestart,
bool checkDeck,
const std::optional<int>& outputInterval);