From 3457d46a00b48066d2183d3f4abcd1e8c2da0957 Mon Sep 17 00:00:00 2001 From: Tor Harald Sandve Date: Fri, 8 Jan 2021 10:44:40 +0100 Subject: [PATCH] add flow_co2 gas-oil simulator with diffusion for testing --- CMakeLists.txt | 10 ++++++ flow/flow_co2_diffusion.cpp | 64 +++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 flow/flow_co2_diffusion.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e7f592a9..a27fded43 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -339,6 +339,16 @@ opm_add_test(flow_onephase DEPENDS opmsimulators LIBRARIES opmsimulators) +opm_add_test(flow_co2 + ONLY_COMPILE + DEFAULT_ENABLE_IF ${FLOW_VARIANTS_DEFAULT_ENABLE_IF} + SOURCES + flow/flow_co2_diffusion.cpp + $ + EXE_NAME flow_co2 + DEPENDS opmsimulators + LIBRARIES opmsimulators) + opm_add_test(flow_onephase_energy ONLY_COMPILE DEFAULT_ENABLE_IF ${FLOW_VARIANTS_DEFAULT_ENABLE_IF} diff --git a/flow/flow_co2_diffusion.cpp b/flow/flow_co2_diffusion.cpp new file mode 100644 index 000000000..548108b63 --- /dev/null +++ b/flow/flow_co2_diffusion.cpp @@ -0,0 +1,64 @@ +/* + 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 "config.h" +#include +#include + +namespace Opm { +namespace Properties { +namespace TTag { +struct EclFlowCo2Problem { + using InheritsFrom = std::tuple; +}; +} + +template +struct EnableDiffusion { + static constexpr bool value = true; +}; + +//! The indices required by the model +template +struct 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. + using BaseTypeTag = TTag::EclFlowProblem; + using FluidSystem = GetPropType; + +public: + typedef Opm::BlackOilTwoPhaseIndices(), + getPropValue(), + getPropValue(), + getPropValue(), + getPropValue(), + getPropValue(), + /*PVOffset=*/0, + /*disabledCompIdx=*/FluidSystem::waterCompIdx> type; +}; +}} + + +// ----------------- Main program ----------------- +int main(int argc, char** argv) +{ + using TypeTag = Opm::Properties::TTag::EclFlowCo2Problem; + auto mainObject = Opm::Main(argc, argv); + return mainObject.runStatic(); +}