diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3374b97bc..7a138c841 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,6 +21,9 @@ 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?" 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
@@ -127,42 +130,121 @@ opm_add_test(test_gatherdeferredlogger
5 ${CMAKE_BINARY_DIR}
)
+include(OpmBashCompletion)
+
+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)
+ 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 (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)
-install(TARGETS ebos DESTINATION bin)
+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
+ DEFAULT_ENABLE_IF ${EBOS_EXTENSIONS_DEFAULT_ENABLE_IF}
+ SOURCES ebos/ebos_solvent.cc
+ EXE_NAME ebos_solvent
+ DEPENDS "opmsimulators"
+ LIBRARIES "opmsimulators")
+
+opm_add_test(ebos_polymer
+ ONLY_COMPILE
+ DEFAULT_ENABLE_IF ${EBOS_EXTENSIONS_DEFAULT_ENABLE_IF}
+ SOURCES ebos/ebos_polymer.cc
+ EXE_NAME ebos_polymer
+ DEPENDS "opmsimulators"
+ LIBRARIES "opmsimulators")
+
+opm_add_test(ebos_gasoil
+ ONLY_COMPILE
+ DEFAULT_ENABLE_IF ${EBOS_EXTENSIONS_DEFAULT_ENABLE_IF}
+ SOURCES ebos/ebos_gasoil.cc
+ EXE_NAME ebos_gasoil
+ DEPENDS "opmsimulators"
+ LIBRARIES "opmsimulators")
+
+opm_add_test(ebos_oilwater
+ ONLY_COMPILE
+ DEFAULT_ENABLE_IF ${EBOS_EXTENSIONS_DEFAULT_ENABLE_IF}
+ SOURCES ebos/ebos_oilwater.cc
+ EXE_NAME ebos_oilwater
+ DEPENDS "opmsimulators"
+ LIBRARIES "opmsimulators")
+
+opm_add_test(ebos_thermal
+ ONLY_COMPILE
+ DEFAULT_ENABLE_IF ${EBOS_EXTENSIONS_DEFAULT_ENABLE_IF}
+ SOURCES ebos/ebos_thermal.cc
+ EXE_NAME ebos_thermal
+ DEPENDS "opmsimulators"
+ LIBRARIES "opmsimulators")
+
+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()
-include(OpmBashCompletion)
-opm_add_bash_completion(flow)
-opm_add_bash_completion(ebos)
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);
+}