diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a86a729b..0fd84d842 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -388,7 +388,7 @@ add_dependencies(moduleVersion opmsimulators) set(FLOW_MODELS blackoil brine energy extbo foam gasoil gaswater oilwater oilwater_brine gaswater_brine oilwater_polymer oilwater_polymer_injectivity micp polymer solvent - gasoil_energy) + gasoil_energy brine_saltprecipitation) set(FLOW_VARIANT_MODELS brine_energy onephase onephase_energy) set(FLOW_TGTS) diff --git a/flow/flow_brine_saltprecipitation.cpp b/flow/flow_brine_saltprecipitation.cpp new file mode 100644 index 000000000..fea54837e --- /dev/null +++ b/flow/flow_brine_saltprecipitation.cpp @@ -0,0 +1,24 @@ +/* + 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 + + +int main(int argc, char** argv) +{ + return Opm::flowEbosBrineSaltPrecipitationMainStandalone(argc, argv); +} diff --git a/flow/flow_ebos_brine_saltprecipitation.cpp b/flow/flow_ebos_brine_saltprecipitation.cpp new file mode 100644 index 000000000..74483e601 --- /dev/null +++ b/flow/flow_ebos_brine_saltprecipitation.cpp @@ -0,0 +1,80 @@ +/* + 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 +#include +#include +#include + +namespace Opm { +namespace Properties { +namespace TTag { +struct EclFlowBrineProblem { + using InheritsFrom = std::tuple; +}; +} +template +struct EnableBrine { + static constexpr bool value = true; +}; + +template +struct EnableSaltPrecipitation { + static constexpr bool value = true; +}; +}} + +namespace Opm { +void flowEbosBrineSaltPrecipitationSetDeck(double setupTime, std::shared_ptr deck, + std::shared_ptr eclState, + std::shared_ptr schedule, + std::shared_ptr summaryConfig) +{ + using TypeTag = Properties::TTag::EclFlowBrineProblem; + using Vanguard = GetPropType; + + Vanguard::setExternalSetupTime(setupTime); + Vanguard::setExternalDeck(std::move(deck)); + Vanguard::setExternalEclState(std::move(eclState)); + Vanguard::setExternalSchedule(std::move(schedule)); + Vanguard::setExternalSummaryConfig(std::move(summaryConfig)); +} + + +// ----------------- Main program ----------------- +int flowEbosBrineSaltPrecipitationMain(int argc, char** argv, bool outputCout, bool outputFiles) +{ + // we always want to use the default locale, and thus spare us the trouble + // with incorrect locale settings. + resetLocale(); + + FlowMainEbos + mainfunc {argc, argv, outputCout, outputFiles}; + return mainfunc.execute(); +} + +int flowEbosBrineSaltPrecipitationMainStandalone(int argc, char** argv) +{ + using TypeTag = Properties::TTag::EclFlowBrineProblem; + auto mainObject = Opm::Main(argc, argv); + return mainObject.runStatic(); +} + +} diff --git a/flow/flow_ebos_brine_saltprecipitation.hpp b/flow/flow_ebos_brine_saltprecipitation.hpp new file mode 100644 index 000000000..c3b8ffb10 --- /dev/null +++ b/flow/flow_ebos_brine_saltprecipitation.hpp @@ -0,0 +1,42 @@ +/* + 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 FLOW_EBOS_BRINE_SALTPRECIPITATION_HPP +#define FLOW_EBOS_BRINE_SALTPRECIPITATION_HPP + +#include + +namespace Opm { + +class Deck; +class EclipseState; +class Schedule; +class SummaryConfig; + +void flowEbosBrineSaltPrecipitationSetDeck(double setupTime, std::shared_ptr deck, + std::shared_ptr eclState, + std::shared_ptr schedule, + std::shared_ptr summaryConfig); + +//! \brief Main function used in flow binary. +int flowEbosBrineSaltPrecipitationMain(int argc, char** argv, bool outputCout, bool outputFiles); + +//! \brief Main function used in flow_brine binary. +int flowEbosBrineSaltPrecipitationMainStandalone(int argc, char** argv); + +} + +#endif // FLOW_EBOS_BRINE_HPP diff --git a/opm/simulators/flow/BlackoilModelEbos.hpp b/opm/simulators/flow/BlackoilModelEbos.hpp index 50c3d3bec..3eb5a1fb3 100644 --- a/opm/simulators/flow/BlackoilModelEbos.hpp +++ b/opm/simulators/flow/BlackoilModelEbos.hpp @@ -127,6 +127,10 @@ struct EnableBrine { static constexpr bool value = false; }; template +struct EnableSaltPrecipitation { + static constexpr bool value = false; +}; +template struct EnableMICP { static constexpr bool value = false; }; diff --git a/opm/simulators/flow/Main.hpp b/opm/simulators/flow/Main.hpp index a2af1605a..aa27e6c8d 100644 --- a/opm/simulators/flow/Main.hpp +++ b/opm/simulators/flow/Main.hpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -668,6 +669,11 @@ private: return flowEbosGasWaterBrineMain(argc_, argv_, outputCout_, outputFiles_); } } + else if (eclipseState_->getSimulationConfig().hasPRECSALT()) { + flowEbosBrineSaltPrecipitationSetDeck( + setupTime_, deck_, eclipseState_, schedule_, summaryConfig_); + return flowEbosBrineSaltPrecipitationMain(argc_, argv_, outputCout_, outputFiles_); + } else { flowEbosBrineSetDeck( setupTime_, deck_, eclipseState_, schedule_, summaryConfig_);