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_);