SimulatorFullyImplicit.hpp
Go to the documentation of this file.
1/*
2 Copyright 2013, 2015, 2020 SINTEF Digital, Mathematics and Cybernetics.
3 Copyright 2015 Andreas Lauser
4 Copyright 2017 IRIS
5
6 This file is part of the Open Porous Media project (OPM).
7
8 OPM is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12
13 OPM is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with OPM. If not, see <http://www.gnu.org/licenses/>.
20*/
21
22#ifndef OPM_SIMULATOR_FULLY_IMPLICIT_HEADER_HPP
23#define OPM_SIMULATOR_FULLY_IMPLICIT_HEADER_HPP
24
25#include <opm/common/ErrorMacros.hpp>
27
28#ifdef RESERVOIR_COUPLING_ENABLED
29#include <opm/input/eclipse/Schedule/ResCoup/ReservoirCouplingInfo.hpp>
30#include <opm/input/eclipse/Schedule/ResCoup/MasterGroup.hpp>
31#include <opm/input/eclipse/Schedule/ResCoup/Slaves.hpp>
34#include <opm/common/Exceptions.hpp>
35#endif
36
37#include <opm/grid/utility/StopWatch.hpp>
38
51
52#if HAVE_HDF5
54#endif
55
56#include <array>
57#include <memory>
58#include <string>
59#include <vector>
60
61namespace Opm::Parameters {
62
63struct EnableAdaptiveTimeStepping { static constexpr bool value = true; };
64struct OutputExtraConvergenceInfo { static constexpr auto* value = "none"; };
65struct SaveStep { static constexpr auto* value = ""; };
66struct SaveFile { static constexpr auto* value = ""; };
67struct LoadFile { static constexpr auto* value = ""; };
68struct LoadStep { static constexpr int value = -1; };
69struct Slave { static constexpr bool value = false; };
70
71} // namespace Opm::Parameters
72
73namespace Opm::detail {
74
76
80void logTuning(const Tuning& tuning);
81
82}
83
84namespace Opm {
85
112template<class TypeTag>
114{
115protected:
116 struct MPI_Comm_Deleter;
117public:
130
132 static constexpr bool enablePolymer = getPropValue<TypeTag, Properties::EnablePolymer>();
133 using PolymerModule = BlackOilPolymerModule<TypeTag, enablePolymer>;
134 static constexpr bool enableBioeffects = getPropValue<TypeTag, Properties::EnableBioeffects>();
135 using BioeffectsModule = BlackOilBioeffectsModule<TypeTag, enableBioeffects>;
136
138 using ModelParameters = typename Model::ModelParameters;
141
151 explicit SimulatorFullyImplicit(Simulator& simulator);
152
154 ~SimulatorFullyImplicit() override;
155
166 static void registerParameters();
167
168#ifdef RESERVOIR_COUPLING_ENABLED
181 SimulatorReport run(SimulatorTimer& timer, int argc, char** argv);
182
194 bool checkRunningAsReservoirCouplingMaster();
195
209 void init(const SimulatorTimer& timer, int argc, char** argv);
210#else
220
229 void init(const SimulatorTimer& timer);
230#endif
231
245 void updateTUNING(const Tuning& tuning);
246
254 void updateTUNINGDP(const TuningDp& tuning_dp);
255
273 bool runStep(SimulatorTimer& timer);
274
283
284 const Grid& grid() const { return simulator_.vanguard().grid(); }
285
289 template<class Serializer>
290 void serializeOp(Serializer& serializer);
291
292 const Model& model() const { return solver_->model(); }
293
294protected:
296 void loadState(HDF5Serializer& serializer, const std::string& groupName) override;
297
299 void saveState(HDF5Serializer& serializer, const std::string& groupName) const override;
300
303 std::array<std::string,5> getHeader() const override;
304
306 const std::vector<int>& getCellMapping() const override {
307 return simulator_.vanguard().globalCell();
308 }
309
318 std::unique_ptr<Solver> createSolver(WellModel& wellModel);
319
320 const EclipseState& eclState() const { return simulator_.vanguard().eclState(); }
321
322 const Schedule& schedule() const { return simulator_.vanguard().schedule(); }
323
324 bool isRestart() const { return eclState().getInitConfig().restartRequested(); }
325
326 WellModel& wellModel_() { return simulator_.problem().wellModel(); }
327
328 const WellModel& wellModel_() const { return simulator_.problem().wellModel(); }
329
332
335
338
340 std::unique_ptr<Solver> solver_;
341
344
347
349 std::unique_ptr<time::StopWatch> solverTimer_;
350
352 std::unique_ptr<time::StopWatch> totalTimer_;
353
355 std::unique_ptr<TimeStepper> adaptiveTimeStepping_;
356
359
360#ifdef RESERVOIR_COUPLING_ENABLED
362 bool slaveMode_{false};
363
365 std::unique_ptr<ReservoirCouplingMaster<Scalar>> reservoirCouplingMaster_{nullptr};
366
368 std::unique_ptr<ReservoirCouplingSlave<Scalar>> reservoirCouplingSlave_{nullptr};
369#endif
370
373};
374
375} // namespace Opm
376
378
379#endif // OPM_SIMULATOR_FULLY_IMPLICIT_HEADER_HPP
Adaptive time-stepping coordinator for the black-oil simulator.
Definition: AdaptiveTimeStepping.hpp:93
Class for handling the blackoil well model.
Definition: BlackoilWellModel.hpp:99
Class for (de-)serializing using HDF5.
Definition: HDF5Serializer.hpp:37
Definition: NonlinearSolver.hpp:97
NonlinearSolverParameters< Scalar > SolverParameters
Definition: NonlinearSolver.hpp:101
Class handling convergence history output for a simulator.
Definition: SimulatorConvergenceOutput.hpp:44
Top-level driver for a fully implicit black-oil simulation.
Definition: SimulatorFullyImplicit.hpp:114
const EclipseState & eclState() const
Definition: SimulatorFullyImplicit.hpp:320
typename Model::ModelParameters ModelParameters
Definition: SimulatorFullyImplicit.hpp:138
SimulatorReport finalize()
Stop the timers and emit the final OPMRST output.
Definition: SimulatorFullyImplicit_impl.hpp:495
GetPropType< TypeTag, Properties::FluidSystem > FluidSystem
Definition: SimulatorFullyImplicit.hpp:120
std::unique_ptr< TimeStepper > adaptiveTimeStepping_
Set iff adaptive time stepping is enabled.
Definition: SimulatorFullyImplicit.hpp:355
GetPropType< TypeTag, Properties::ElementContext > ElementContext
Definition: SimulatorFullyImplicit.hpp:121
GetPropType< TypeTag, Properties::MaterialLaw > MaterialLaw
Definition: SimulatorFullyImplicit.hpp:124
void init(const SimulatorTimer &timer)
One-shot setup performed before the first runStep.
Definition: SimulatorFullyImplicit_impl.hpp:204
void serializeOp(Serializer &serializer)
Definition: SimulatorFullyImplicit_impl.hpp:518
GetPropType< TypeTag, Properties::Simulator > Simulator
Definition: SimulatorFullyImplicit.hpp:118
void saveState(HDF5Serializer &serializer, const std::string &groupName) const override
Save this simulator's data block to an OPMRST file via HDF5.
Definition: SimulatorFullyImplicit_impl.hpp:539
const std::vector< int > & getCellMapping() const override
Local-to-global cell index mapping.
Definition: SimulatorFullyImplicit.hpp:306
std::unique_ptr< Solver > solver_
Built lazily on the first runStep call; reused thereafter.
Definition: SimulatorFullyImplicit.hpp:340
SimulatorReport run(SimulatorTimer &timer)
Run the entire simulation to completion.
Definition: SimulatorFullyImplicit_impl.hpp:109
BlackOilPolymerModule< TypeTag, enablePolymer > PolymerModule
Definition: SimulatorFullyImplicit.hpp:133
GetPropType< TypeTag, Properties::NonlinearSystem > Model
Definition: SimulatorFullyImplicit.hpp:128
GetPropType< TypeTag, Properties::Grid > Grid
Definition: SimulatorFullyImplicit.hpp:119
SimulatorFullyImplicit(Simulator &simulator)
Construct from the surrounding eWoms Simulator.
Definition: SimulatorFullyImplicit_impl.hpp:46
std::unique_ptr< Solver > createSolver(WellModel &wellModel)
Build the Solver used during the current report step.
Definition: SimulatorFullyImplicit_impl.hpp:564
BlackOilBioeffectsModule< TypeTag, enableBioeffects > BioeffectsModule
Definition: SimulatorFullyImplicit.hpp:135
bool terminalOutput_
Emit high-level progress to std::cout (rank 0 only).
Definition: SimulatorFullyImplicit.hpp:343
ModelParameters modelParam_
Cached model parameters; mutated by TUNING / TUNINGDP application.
Definition: SimulatorFullyImplicit.hpp:334
BlackoilWellModel< TypeTag > WellModel
Definition: SimulatorFullyImplicit.hpp:140
GetPropType< TypeTag, Properties::PrimaryVariables > PrimaryVariables
Definition: SimulatorFullyImplicit.hpp:123
void updateTUNINGDP(const TuningDp &tuning_dp)
Apply a TUNINGDP keyword to the cached model parameters.
Definition: SimulatorFullyImplicit_impl.hpp:256
SolverParameters solverParam_
Cached nonlinear-solver parameters.
Definition: SimulatorFullyImplicit.hpp:337
GetPropType< TypeTag, Properties::Scalar > Scalar
Definition: SimulatorFullyImplicit.hpp:129
GetPropType< TypeTag, Properties::AquiferModel > AquiferModel
Definition: SimulatorFullyImplicit.hpp:127
GetPropType< TypeTag, Properties::SolutionVector > SolutionVector
Definition: SimulatorFullyImplicit.hpp:125
const Model & model() const
Definition: SimulatorFullyImplicit.hpp:292
const WellModel & wellModel_() const
Definition: SimulatorFullyImplicit.hpp:328
SimulatorSerializer serializer_
OPMRST save / load.
Definition: SimulatorFullyImplicit.hpp:372
void loadState(HDF5Serializer &serializer, const std::string &groupName) override
Load this simulator's data block from an OPMRST file via HDF5.
Definition: SimulatorFullyImplicit_impl.hpp:528
static constexpr bool enableBioeffects
Definition: SimulatorFullyImplicit.hpp:134
typename Solver::SolverParameters SolverParameters
Definition: SimulatorFullyImplicit.hpp:139
GetPropType< TypeTag, Properties::MaterialLawParams > MaterialLawParams
Definition: SimulatorFullyImplicit.hpp:126
std::array< std::string, 5 > getHeader() const override
Definition: SimulatorFullyImplicit_impl.hpp:550
static void registerParameters()
Register all parameters consumed by this class and its major collaborators.
Definition: SimulatorFullyImplicit_impl.hpp:87
std::unique_ptr< time::StopWatch > totalTimer_
Wall-clock for the entire simulation.
Definition: SimulatorFullyImplicit.hpp:352
GetPropType< TypeTag, Properties::Indices > BlackoilIndices
Definition: SimulatorFullyImplicit.hpp:122
static constexpr bool enablePolymer
Definition: SimulatorFullyImplicit.hpp:132
const Schedule & schedule() const
Definition: SimulatorFullyImplicit.hpp:322
std::unique_ptr< time::StopWatch > solverTimer_
Wall-clock for the current report step's solve.
Definition: SimulatorFullyImplicit.hpp:349
WellModel & wellModel_()
Definition: SimulatorFullyImplicit.hpp:326
SimulatorConvergenceOutput convergence_output_
Background thread for INFOSTEP / INFOITER files.
Definition: SimulatorFullyImplicit.hpp:358
Simulator & simulator_
Surrounding eWoms simulator; observed, not owned.
Definition: SimulatorFullyImplicit.hpp:331
bool isRestart() const
Definition: SimulatorFullyImplicit.hpp:324
~SimulatorFullyImplicit() override
Ends the convergence-output thread cleanly on all ranks.
Definition: SimulatorFullyImplicit_impl.hpp:78
const Grid & grid() const
Definition: SimulatorFullyImplicit.hpp:284
void updateTUNING(const Tuning &tuning)
Apply a TUNING keyword to the cached model parameters.
Definition: SimulatorFullyImplicit_impl.hpp:240
SimulatorReport report_
Aggregated report across the entire simulation.
Definition: SimulatorFullyImplicit.hpp:346
bool runStep(SimulatorTimer &timer)
Advance the simulation by one report step.
Definition: SimulatorFullyImplicit_impl.hpp:279
Class handling simulator serialization.
Definition: SimulatorSerializer.hpp:55
Definition: SimulatorTimer.hpp:39
Definition: blackoilnewtonmethodparams.hpp:31
Definition: alignedallocator.hh:32
void logTuning(const Tuning &tuning)
Log tuning parameters.
void registerSimulatorParameters()
Definition: blackoilbioeffectsmodules.hh:45
typename Properties::Detail::GetPropImpl< TypeTag, Property >::type::type GetPropType
get the type alias defined in the property (equivalent to old macro GET_PROP_TYPE(....
Definition: propertysystem.hh:233
Definition: SimulatorFullyImplicit.hpp:63
static constexpr bool value
Definition: SimulatorFullyImplicit.hpp:63
Definition: SimulatorFullyImplicit.hpp:67
static constexpr auto * value
Definition: SimulatorFullyImplicit.hpp:67
Definition: SimulatorFullyImplicit.hpp:68
static constexpr int value
Definition: SimulatorFullyImplicit.hpp:68
Definition: SimulatorFullyImplicit.hpp:64
static constexpr auto * value
Definition: SimulatorFullyImplicit.hpp:64
Definition: SimulatorFullyImplicit.hpp:66
static constexpr auto * value
Definition: SimulatorFullyImplicit.hpp:66
Definition: SimulatorFullyImplicit.hpp:65
static constexpr auto * value
Definition: SimulatorFullyImplicit.hpp:65
Definition: SimulatorFullyImplicit.hpp:69
static constexpr bool value
Definition: SimulatorFullyImplicit.hpp:69
Abstract interface for simulator serialization ops.
Definition: SimulatorSerializer.hpp:36
Definition: SimulatorReport.hpp:122