From 064f512893c95edcd7ba50206880871fef955793 Mon Sep 17 00:00:00 2001 From: Liu Ming Date: Thu, 7 Jul 2016 10:38:29 +0800 Subject: [PATCH] Diagnostics keywords that not supported by flow. --- CMakeLists_files.cmake | 2 + opm/autodiff/FlowMain.hpp | 4 +- opm/autodiff/MissingFeatures.cpp | 75 ++++++++++++++++++++++++++++++++ opm/autodiff/MissingFeatures.hpp | 28 ++++++++++++ 4 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 opm/autodiff/MissingFeatures.cpp create mode 100644 opm/autodiff/MissingFeatures.hpp diff --git a/CMakeLists_files.cmake b/CMakeLists_files.cmake index bd89c512d..304abca7d 100644 --- a/CMakeLists_files.cmake +++ b/CMakeLists_files.cmake @@ -50,6 +50,7 @@ list (APPEND MAIN_SOURCE_FILES opm/autodiff/MultisegmentWells.cpp opm/autodiff/BlackoilSolventState.cpp opm/autodiff/ThreadHandle.hpp + opm/autodiff/MissingFeatures.cpp opm/polymer/PolymerState.cpp opm/polymer/PolymerBlackoilState.cpp opm/polymer/CompressibleTpfaPolymer.cpp @@ -210,6 +211,7 @@ list (APPEND PUBLIC_HEADER_FILES opm/autodiff/StandardWells_impl.hpp opm/autodiff/StandardWellsSolvent.hpp opm/autodiff/StandardWellsSolvent_impl.hpp + opm/autodiff/MissingFeatures.hpp opm/polymer/CompressibleTpfaPolymer.hpp opm/polymer/GravityColumnSolverPolymer.hpp opm/polymer/GravityColumnSolverPolymer_impl.hpp diff --git a/opm/autodiff/FlowMain.hpp b/opm/autodiff/FlowMain.hpp index 810f275a1..c0c44f773 100644 --- a/opm/autodiff/FlowMain.hpp +++ b/opm/autodiff/FlowMain.hpp @@ -67,6 +67,7 @@ #include #include #include +#include #include #include @@ -76,7 +77,6 @@ #include #include #include -#include #include #include #include @@ -411,7 +411,7 @@ namespace Opm try { ParseContext parseContext({{ ParseContext::PARSE_RANDOM_SLASH , InputError::IGNORE }}); deck_ = parser->parseFile(deck_filename, parseContext); - checkDeck(deck_, parser); + checkKeywords(deck_, parser); eclipse_state_.reset(new EclipseState(deck_, parseContext)); auto ioConfig = eclipse_state_->getIOConfig(); ioConfig->setOutputDir(output_dir_); diff --git a/opm/autodiff/MissingFeatures.cpp b/opm/autodiff/MissingFeatures.cpp new file mode 100644 index 000000000..4d93edb95 --- /dev/null +++ b/opm/autodiff/MissingFeatures.cpp @@ -0,0 +1,75 @@ +/* + Copyright 2016 Statoil ASA. + + This file is part of the Open Porous Media project (OPM). + + OPM is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OPM is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OPM. If not, see . +*/ +#include +#include +#include +#include +#include +#include +#include + + +namespace Opm { + + + void checkKeywords(DeckConstPtr deck, ParserConstPtr parser) + { + // These keywords are supported by opm-parser, but are not supported + // by flow. For some of them, only part of the options are supported. + // The list is used to output messages only. + std::vector unsupported_keywords = { + "ACTDIMS", "ADSALNOD", "API", "AQUCON", "AQUDIMS", "AQUNUM" + "BLOCK_PROBE", "COMPLUMP", "COMPSEGS", "CONNECTION", "CPR", + "DATE", "ECHO", "EDITNNC", "ENDINC", "ENDNUM", "ENDPOINT_SPECIFIERS", + "ENDSKIP", "ENKSRVD", "ENPTVD", "EQLNUM", "EQUALREG", + "EXCEL", "EXTRAPMS", "FILED_PROBE", "FILLEPS", "FIPNUM", "FMTIN", + "FMTOUT", "FULLIMP", "GDORIENT", "GECON", "GEFAC", "GRIDUNIT", + "GROUP_PROBE", "GRUPNET", "IMKRVD", "IMPES", "IMPTVD", "MAPUNITS", + "MAXVALUE", "MEMORY", "MESSAGES", "MINVALUE", "MONITOR", "MSGFILE", + "MULT_XYZ", "NETBALAN", "NEXTSTEP", "NOCASC", "NOECHO", + "NOGGF", "NOINSPEC", "NOMONITO", "NONNC", "NORSSPEC", "NOSIM", + "NSTACK", "NUMRES", "NUPCOL", "OILVISCT", "OLDTRAN", "OPTIONS", + "PARALLEL", "PBVD", "PCG", "PERFORMACE_PROBE", "PERMXY", "PERMYZ", + "PERMZX", "PIMTDIMS", "PIMULTAB", "PLMIXPAR", "PLYADSS", "PLYDHFLF", + "RADFIN4", "REGDIMS", "REGION_PROBE", "RKTRMDIR", "ROCKCOMP", "ROCKOPTS", + "ROCKTAB", "RPTGRID", "RPTONLY", "RPTONLYO", "RPTPROS", "PRTRST", "RPTRUNSP", + "RPTSCHED", "RPTSOL", "RTEMPVD", "RUNSUM", "SATOPTS", "SAVE", "SEPARATE", + "SKIP", "SKIP100", "SKIP300", "SKIPREST", "SMRYDIMS", "SPECGRID", "SSOL", + "SUMTHIN", "TEMP", "THCONR", "TRACER", "TRACERS", "UDADIMS", "UDQDIMS", + "UNIFIN", "UNIFOUT", "VAPPARS", "VISCREF", "WATVISCT", "WELL_PROBE", + "WPAVE", "WPIMULT", "WPITAB", "WRFT", "WRFTPLT", "WSEGDIMS", "WTEMP", + "WTEST", "WTRACER", "ZIPPY2" }; + + // check deck and keyword for flow and parser. + if (checkDeck(deck, parser)) { + for (size_t idx = 0; idx < deck->size(); ++idx) { + const auto& keyword = deck->getKeyword(idx); + std::vector::const_iterator it; + it = std::find(unsupported_keywords.begin(), + unsupported_keywords.end(), + keyword.name()); + if (it != unsupported_keywords.end()) { + std::string msg = "Keyword '" + keyword.name() + "' is not supported by flow.\n" + + "In file " + keyword.getFileName() + ", line " + std::to_string(keyword.getLineNumber()) + "\n"; + OpmLog::error(msg); + } + } + } + } +} // namespace Opm diff --git a/opm/autodiff/MissingFeatures.hpp b/opm/autodiff/MissingFeatures.hpp new file mode 100644 index 000000000..32a656f07 --- /dev/null +++ b/opm/autodiff/MissingFeatures.hpp @@ -0,0 +1,28 @@ +/* + Copyright 2016 Statoil ASA. + + This file is part of the Open Porous Media project (OPM). + + OPM is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OPM is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OPM. If not, see . +*/ + +#ifndef OPM_MISSINGFEATURES_HEADER_INCLUDED +#define OPM_MISSINGFEATURES_HEADER_INCLUDED + +namespace Opm { + void checkKeywords(std::shared_ptr deck, std::shared_ptr parser); +} + + +#endif // OPM_MISSINGFEATURES_HEADER_INCLUDED