From 383009e031f0b19d738953e3fae6272a43056397 Mon Sep 17 00:00:00 2001 From: Andreas Lauser Date: Tue, 5 Mar 2019 11:41:02 +0100 Subject: [PATCH 1/3] add some ebos variants these variants should cover most of the common use cases. That said, there are no plans to provide simulators for combinations of blackoil extensions or a "multiplexing" simulator like `flow`: If someone is interested in e.g., an oil-water simulator with polymer and energy enabled, a separate self-compiled executable should be added locally. --- CMakeLists.txt | 45 +++++++++++++++++++++++++++++++++ ebos/ebos_gasoil.cc | 59 +++++++++++++++++++++++++++++++++++++++++++ ebos/ebos_oilwater.cc | 59 +++++++++++++++++++++++++++++++++++++++++++ ebos/ebos_plain.cc | 44 ++++++++++++++++++++++++++++++++ ebos/ebos_polymer.cc | 45 +++++++++++++++++++++++++++++++++ ebos/ebos_solvent.cc | 45 +++++++++++++++++++++++++++++++++ ebos/ebos_thermal.cc | 45 +++++++++++++++++++++++++++++++++ 7 files changed, 342 insertions(+) create mode 100644 ebos/ebos_gasoil.cc create mode 100644 ebos/ebos_oilwater.cc create mode 100644 ebos/ebos_plain.cc create mode 100644 ebos/ebos_polymer.cc create mode 100644 ebos/ebos_solvent.cc create mode 100644 ebos/ebos_thermal.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index 3374b97bc..9ee04f201 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -161,7 +161,52 @@ opm_add_test(ebos LIBRARIES "opmsimulators" SOURCES ebos/ebos.cc) +opm_add_test(ebos_solvent + ONLY_COMPILE + ALWAYS_ENABLE + SOURCES ebos/ebos_solvent.cc + EXE_NAME ebos_solvent + DEPENDS "opmsimulators" + LIBRARIES "opmsimulators") + +opm_add_test(ebos_polymer + ONLY_COMPILE + ALWAYS_ENABLE + SOURCES ebos/ebos_polymer.cc + EXE_NAME ebos_polymer + DEPENDS "opmsimulators" + LIBRARIES "opmsimulators") + +opm_add_test(ebos_gasoil + ONLY_COMPILE + ALWAYS_ENABLE + SOURCES ebos/ebos_gasoil.cc + EXE_NAME ebos_gasoil + DEPENDS "opmsimulators" + LIBRARIES "opmsimulators") + +opm_add_test(ebos_oilwater + ONLY_COMPILE + ALWAYS_ENABLE + SOURCES ebos/ebos_oilwater.cc + EXE_NAME ebos_oilwater + DEPENDS "opmsimulators" + LIBRARIES "opmsimulators") + +opm_add_test(ebos_thermal + ONLY_COMPILE + ALWAYS_ENABLE + SOURCES ebos/ebos_thermal.cc + EXE_NAME ebos_thermal + DEPENDS "opmsimulators" + LIBRARIES "opmsimulators") + install(TARGETS ebos DESTINATION bin) +install(TARGETS ebos_solvent DESTINATION bin) +install(TARGETS ebos_polymer DESTINATION bin) +install(TARGETS ebos_gasoil DESTINATION bin) +install(TARGETS ebos_oilwater DESTINATION bin) +install(TARGETS ebos_thermal DESTINATION bin) include(OpmBashCompletion) opm_add_bash_completion(flow) diff --git a/ebos/ebos_gasoil.cc b/ebos/ebos_gasoil.cc new file mode 100644 index 000000000..da20a7f85 --- /dev/null +++ b/ebos/ebos_gasoil.cc @@ -0,0 +1,59 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/* + 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 2 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 . + + Consult the COPYING file in the top-level source directory of this + module for the precise wording of the license and the list of + copyright holders. +*/ +/*! + * \file + * + * \brief A general-purpose simulator for ECL decks using the black-oil model. + */ +#include "config.h" + +#include "ebos.hh" + +BEGIN_PROPERTIES + +NEW_TYPE_TAG(EbosGasOilTypeTag, INHERITS_FROM(EbosTypeTag)); + +//! The indices indices which only enable oil and water +SET_PROP(EbosGasOilTypeTag, Indices) +{ +private: + // it is unfortunately not possible to simply use 'TypeTag' here because this leads + // to cyclic definitions of some properties. if this happens the compiler error + // messages unfortunately are *really* confusing and not really helpful. + typedef typename GET_PROP_TYPE(TTAG(EbosTypeTag), FluidSystem) FluidSystem; + +public: + typedef Ewoms::BlackOilTwoPhaseIndices type; +}; + +END_PROPERTIES + +int main(int argc, char **argv) +{ + typedef TTAG(EbosGasOilTypeTag) ProblemTypeTag; + return Ewoms::start(argc, argv); +} diff --git a/ebos/ebos_oilwater.cc b/ebos/ebos_oilwater.cc new file mode 100644 index 000000000..abd0b2509 --- /dev/null +++ b/ebos/ebos_oilwater.cc @@ -0,0 +1,59 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/* + 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 2 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 . + + Consult the COPYING file in the top-level source directory of this + module for the precise wording of the license and the list of + copyright holders. +*/ +/*! + * \file + * + * \brief A general-purpose simulator for ECL decks using the black-oil model. + */ +#include "config.h" + +#include "ebos.hh" + +BEGIN_PROPERTIES + +NEW_TYPE_TAG(EbosOilWaterTypeTag, INHERITS_FROM(EbosTypeTag)); + +//! The indices indices which only enable oil and water +SET_PROP(EbosOilWaterTypeTag, Indices) +{ +private: + // it is unfortunately not possible to simply use 'TypeTag' here because this leads + // to cyclic definitions of some properties. if this happens the compiler error + // messages unfortunately are *really* confusing and not really helpful. + typedef typename GET_PROP_TYPE(TTAG(EbosTypeTag), FluidSystem) FluidSystem; + +public: + typedef Ewoms::BlackOilTwoPhaseIndices type; +}; + +END_PROPERTIES + +int main(int argc, char **argv) +{ + typedef TTAG(EbosOilWaterTypeTag) ProblemTypeTag; + return Ewoms::start(argc, argv); +} diff --git a/ebos/ebos_plain.cc b/ebos/ebos_plain.cc new file mode 100644 index 000000000..ea5b27a87 --- /dev/null +++ b/ebos/ebos_plain.cc @@ -0,0 +1,44 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/* + 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 2 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 . + + Consult the COPYING file in the top-level source directory of this + module for the precise wording of the license and the list of + copyright holders. +*/ +/*! + * \file + * + * \brief A general-purpose simulator for ECL decks using the black-oil model. + */ +#include "config.h" + +#include "eclproblem.hh" + +#include + +BEGIN_PROPERTIES + +NEW_TYPE_TAG(EbosPlainTypeTag, INHERITS_FROM(BlackOilModel, EclBaseProblem)); + +END_PROPERTIES + +int main(int argc, char **argv) +{ + typedef TTAG(EbosPlainTypeTag) ProblemTypeTag; + return Ewoms::start(argc, argv); +} diff --git a/ebos/ebos_polymer.cc b/ebos/ebos_polymer.cc new file mode 100644 index 000000000..afe0e6378 --- /dev/null +++ b/ebos/ebos_polymer.cc @@ -0,0 +1,45 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/* + 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 2 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 . + + Consult the COPYING file in the top-level source directory of this + module for the precise wording of the license and the list of + copyright holders. +*/ +/*! + * \file + * + * \brief A general-purpose simulator for ECL decks using the black-oil model. + */ +#include "config.h" + +#include "ebos.hh" + +BEGIN_PROPERTIES + +NEW_TYPE_TAG(EbosPolymerTypeTag, INHERITS_FROM(EbosTypeTag)); + +// enable the polymer extension of the black oil model +SET_BOOL_PROP(EbosPolymerTypeTag, EnablePolymer, true); + +END_PROPERTIES + +int main(int argc, char **argv) +{ + typedef TTAG(EbosPolymerTypeTag) ProblemTypeTag; + return Ewoms::start(argc, argv); +} diff --git a/ebos/ebos_solvent.cc b/ebos/ebos_solvent.cc new file mode 100644 index 000000000..bcd1b4e4f --- /dev/null +++ b/ebos/ebos_solvent.cc @@ -0,0 +1,45 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/* + 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 2 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 . + + Consult the COPYING file in the top-level source directory of this + module for the precise wording of the license and the list of + copyright holders. +*/ +/*! + * \file + * + * \brief A general-purpose simulator for ECL decks using the black-oil model. + */ +#include "config.h" + +#include "ebos.hh" + +BEGIN_PROPERTIES + +NEW_TYPE_TAG(EbosSolventTypeTag, INHERITS_FROM(EbosTypeTag)); + +// enable the solvent extension of the black oil model +SET_BOOL_PROP(EbosSolventTypeTag, EnableSolvent, true); + +END_PROPERTIES + +int main(int argc, char **argv) +{ + typedef TTAG(EbosSolventTypeTag) ProblemTypeTag; + return Ewoms::start(argc, argv); +} diff --git a/ebos/ebos_thermal.cc b/ebos/ebos_thermal.cc new file mode 100644 index 000000000..adb96e84d --- /dev/null +++ b/ebos/ebos_thermal.cc @@ -0,0 +1,45 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/* + 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 2 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 . + + Consult the COPYING file in the top-level source directory of this + module for the precise wording of the license and the list of + copyright holders. +*/ +/*! + * \file + * + * \brief A general-purpose simulator for ECL decks using the black-oil model. + */ +#include "config.h" + +#include "ebos.hh" + +BEGIN_PROPERTIES + +NEW_TYPE_TAG(EbosThermalTypeTag, INHERITS_FROM(EbosTypeTag)); + +// enable the energy extension of the black oil model +SET_BOOL_PROP(EbosThermalTypeTag, EnableEnergy, true); + +END_PROPERTIES + +int main(int argc, char **argv) +{ + typedef TTAG(EbosThermalTypeTag) ProblemTypeTag; + return Ewoms::start(argc, argv); +} From d8148d281f319cb85c3b6421e54cafebb9f88f2b Mon Sep 17 00:00:00 2001 From: Andreas Lauser Date: Wed, 6 Mar 2019 11:54:21 +0100 Subject: [PATCH 2/3] add cmake build switches to enable/disable flow and/or ebos --- CMakeLists.txt | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9ee04f201..da2353153 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,6 +21,8 @@ cmake_minimum_required (VERSION 2.8) option(SIBLING_SEARCH "Search for other modules in sibling directories?" ON) set( USE_OPENMP_DEFAULT OFF ) # Use of OpenMP is considered experimental +option(BUILD_FLOW "Build the production oriented flow simulator?" ON) +option(BUILD_EBOS "Build the research oriented ebos simulator and its variants?" ON) if(SIBLING_SEARCH AND NOT opm-common_DIR) # guess the sibling dir @@ -127,7 +129,9 @@ opm_add_test(test_gatherdeferredlogger 5 ${CMAKE_BINARY_DIR} ) +include(OpmBashCompletion) +if (BUILD_FLOW) # the production oriented general-purpose ECL simulator opm_add_test(flow ONLY_COMPILE @@ -145,12 +149,15 @@ opm_add_test(flow flow/flow_ebos_oilwater_polymer.cpp flow/flow_ebos_oilwater_polymer_injectivity.cpp) install(TARGETS flow DESTINATION bin) +opm_add_bash_completion(flow) add_test(NAME flow__version COMMAND flow --version) set_tests_properties(flow__version PROPERTIES PASS_REGULAR_EXPRESSION "${${project}_LABEL}") +endif() +if (BUILD_EBOS) # the research oriented general-purpose ECL simulator ("ebos" == &ecl # &black-&oil &simulator) opm_add_test(ebos @@ -208,6 +215,10 @@ install(TARGETS ebos_gasoil DESTINATION bin) install(TARGETS ebos_oilwater DESTINATION bin) install(TARGETS ebos_thermal DESTINATION bin) -include(OpmBashCompletion) -opm_add_bash_completion(flow) opm_add_bash_completion(ebos) +opm_add_bash_completion(ebos_solvent) +opm_add_bash_completion(ebos_polymer) +opm_add_bash_completion(ebos_gasoil) +opm_add_bash_completion(ebos_oilwater) +opm_add_bash_completion(ebos_thermal) +endif() From fb70fe2ba39fa3927a3c9b15391f329f9c4341dc Mon Sep 17 00:00:00 2001 From: Andreas Lauser Date: Thu, 7 Mar 2019 12:45:15 +0100 Subject: [PATCH 3/3] add but do not build disabled targets this simply excludes the disabled simulators from `make all` while `make flow` will continue to work even if the cmake variable `BUILD_FLOW` was set to `OFF`. This requires a small patch for opm-common. --- CMakeLists.txt | 88 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 57 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index da2353153..7a138c841 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,7 +22,8 @@ cmake_minimum_required (VERSION 2.8) option(SIBLING_SEARCH "Search for other modules in sibling directories?" ON) set( USE_OPENMP_DEFAULT OFF ) # Use of OpenMP is considered experimental option(BUILD_FLOW "Build the production oriented flow simulator?" ON) -option(BUILD_EBOS "Build the research oriented ebos simulator and its variants?" ON) +option(BUILD_EBOS "Build the research oriented ebos simulator?" ON) +option(BUILD_EBOS_EXTENSIONS "Build the variants for various extensions of ebos by default?" OFF) if(SIBLING_SEARCH AND NOT opm-common_DIR) # guess the sibling dir @@ -131,46 +132,71 @@ opm_add_test(test_gatherdeferredlogger include(OpmBashCompletion) -if (BUILD_FLOW) +if (NOT BUILD_FLOW) + set(FLOW_DEFAULT_ENABLE_IF "FALSE") +else() + set(FLOW_DEFAULT_ENABLE_IF "TRUE") +endif() + # the production oriented general-purpose ECL simulator opm_add_test(flow ONLY_COMPILE ALWAYS_ENABLE + DEFAULT_ENABLE_IF ${FLOW_DEFAULT_ENABLE_IF} DEPENDS "opmsimulators" LIBRARIES "opmsimulators" SOURCES - flow/flow.cpp - flow/flow_ebos_blackoil.cpp - flow/flow_ebos_gasoil.cpp - flow/flow_ebos_oilwater.cpp - flow/flow_ebos_polymer.cpp - flow/flow_ebos_solvent.cpp - flow/flow_ebos_energy.cpp - flow/flow_ebos_oilwater_polymer.cpp - flow/flow_ebos_oilwater_polymer_injectivity.cpp) -install(TARGETS flow DESTINATION bin) -opm_add_bash_completion(flow) + flow/flow.cpp + flow/flow_ebos_blackoil.cpp + flow/flow_ebos_gasoil.cpp + flow/flow_ebos_oilwater.cpp + flow/flow_ebos_polymer.cpp + flow/flow_ebos_solvent.cpp + flow/flow_ebos_energy.cpp + flow/flow_ebos_oilwater_polymer.cpp + flow/flow_ebos_oilwater_polymer_injectivity.cpp) -add_test(NAME flow__version - COMMAND flow --version) -set_tests_properties(flow__version PROPERTIES - PASS_REGULAR_EXPRESSION "${${project}_LABEL}") +if (BUILD_FLOW) + install(TARGETS flow DESTINATION bin) + opm_add_bash_completion(flow) + + add_test(NAME flow__version + COMMAND flow --version) + set_tests_properties(flow__version PROPERTIES + PASS_REGULAR_EXPRESSION "${${project}_LABEL}") endif() -if (BUILD_EBOS) +if (NOT BUILD_EBOS) + set(EBOS_DEFAULT_ENABLE_IF "FALSE") +else() + set(EBOS_DEFAULT_ENABLE_IF "TRUE") +endif() + # the research oriented general-purpose ECL simulator ("ebos" == &ecl # &black-&oil &simulator) opm_add_test(ebos ONLY_COMPILE + DEFAULT_ENABLE_IF ${EBOS_DEFAULT_ENABLE_IF} ALWAYS_ENABLE EXE_NAME ebos DEPENDS "opmsimulators" LIBRARIES "opmsimulators" SOURCES ebos/ebos.cc) +if (BUILD_EBOS) + install(TARGETS ebos DESTINATION bin) + opm_add_bash_completion(ebos) +endif() + +if (NOT BUILD_EBOS_EXTENSIONS) + set(EBOS_EXTENSIONS_DEFAULT_ENABLE_IF "FALSE") +else() + set(EBOS_EXTENSIONS_DEFAULT_ENABLE_IF "TRUE") +endif() + opm_add_test(ebos_solvent ONLY_COMPILE - ALWAYS_ENABLE + DEFAULT_ENABLE_IF ${EBOS_EXTENSIONS_DEFAULT_ENABLE_IF} SOURCES ebos/ebos_solvent.cc EXE_NAME ebos_solvent DEPENDS "opmsimulators" @@ -178,7 +204,7 @@ opm_add_test(ebos_solvent opm_add_test(ebos_polymer ONLY_COMPILE - ALWAYS_ENABLE + DEFAULT_ENABLE_IF ${EBOS_EXTENSIONS_DEFAULT_ENABLE_IF} SOURCES ebos/ebos_polymer.cc EXE_NAME ebos_polymer DEPENDS "opmsimulators" @@ -186,7 +212,7 @@ opm_add_test(ebos_polymer opm_add_test(ebos_gasoil ONLY_COMPILE - ALWAYS_ENABLE + DEFAULT_ENABLE_IF ${EBOS_EXTENSIONS_DEFAULT_ENABLE_IF} SOURCES ebos/ebos_gasoil.cc EXE_NAME ebos_gasoil DEPENDS "opmsimulators" @@ -194,7 +220,7 @@ opm_add_test(ebos_gasoil opm_add_test(ebos_oilwater ONLY_COMPILE - ALWAYS_ENABLE + DEFAULT_ENABLE_IF ${EBOS_EXTENSIONS_DEFAULT_ENABLE_IF} SOURCES ebos/ebos_oilwater.cc EXE_NAME ebos_oilwater DEPENDS "opmsimulators" @@ -202,23 +228,23 @@ opm_add_test(ebos_oilwater opm_add_test(ebos_thermal ONLY_COMPILE - ALWAYS_ENABLE + DEFAULT_ENABLE_IF ${EBOS_EXTENSIONS_DEFAULT_ENABLE_IF} SOURCES ebos/ebos_thermal.cc EXE_NAME ebos_thermal DEPENDS "opmsimulators" LIBRARIES "opmsimulators") -install(TARGETS ebos DESTINATION bin) -install(TARGETS ebos_solvent DESTINATION bin) -install(TARGETS ebos_polymer DESTINATION bin) -install(TARGETS ebos_gasoil DESTINATION bin) -install(TARGETS ebos_oilwater DESTINATION bin) -install(TARGETS ebos_thermal DESTINATION bin) - -opm_add_bash_completion(ebos) opm_add_bash_completion(ebos_solvent) opm_add_bash_completion(ebos_polymer) opm_add_bash_completion(ebos_gasoil) opm_add_bash_completion(ebos_oilwater) opm_add_bash_completion(ebos_thermal) + +if (BUILD_EBOS_EXTENSIONS) + install(TARGETS ebos_solvent DESTINATION bin) + install(TARGETS ebos_polymer DESTINATION bin) + install(TARGETS ebos_gasoil DESTINATION bin) + install(TARGETS ebos_oilwater DESTINATION bin) + install(TARGETS ebos_thermal DESTINATION bin) endif() +