SimulatorFullyImplicitBlackoil.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_BLACKOIL_HEADER_INCLUDED
23#define OPM_SIMULATOR_FULLY_IMPLICIT_BLACKOIL_HEADER_INCLUDED
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
134
136 using ModelParameters = typename Model::ModelParameters;
139
149 explicit SimulatorFullyImplicitBlackoil(Simulator& simulator);
150
153
164 static void registerParameters();
165
166#ifdef RESERVOIR_COUPLING_ENABLED
179 SimulatorReport run(SimulatorTimer& timer, int argc, char** argv);
180
192 bool checkRunningAsReservoirCouplingMaster();
193
207 void init(const SimulatorTimer& timer, int argc, char** argv);
208#else
218
227 void init(const SimulatorTimer& timer);
228#endif
229
243 void updateTUNING(const Tuning& tuning);
244
252 void updateTUNINGDP(const TuningDp& tuning_dp);
253
271 bool runStep(SimulatorTimer& timer);
272
281
282 const Grid& grid() const { return simulator_.vanguard().grid(); }
283
287 template<class Serializer>
288 void serializeOp(Serializer& serializer);
289
290 const Model& model() const { return solver_->model(); }
291
292protected:
294 void loadState(HDF5Serializer& serializer, const std::string& groupName) override;
295
297 void saveState(HDF5Serializer& serializer, const std::string& groupName) const override;
298
301 std::array<std::string,5> getHeader() const override;
302
304 const std::vector<int>& getCellMapping() const override {
305 return simulator_.vanguard().globalCell();
306 }
307
316 std::unique_ptr<Solver> createSolver(WellModel& wellModel);
317
318 const EclipseState& eclState() const { return simulator_.vanguard().eclState(); }
319
320 const Schedule& schedule() const { return simulator_.vanguard().schedule(); }
321
322 bool isRestart() const { return eclState().getInitConfig().restartRequested(); }
323
324 WellModel& wellModel_() { return simulator_.problem().wellModel(); }
325
326 const WellModel& wellModel_() const { return simulator_.problem().wellModel(); }
327
330
333
336
338 std::unique_ptr<Solver> solver_;
339
342
345
347 std::unique_ptr<time::StopWatch> solverTimer_;
348
350 std::unique_ptr<time::StopWatch> totalTimer_;
351
353 std::unique_ptr<TimeStepper> adaptiveTimeStepping_;
354
357
358#ifdef RESERVOIR_COUPLING_ENABLED
360 bool slaveMode_{false};
361
363 std::unique_ptr<ReservoirCouplingMaster<Scalar>> reservoirCouplingMaster_{nullptr};
364
366 std::unique_ptr<ReservoirCouplingSlave<Scalar>> reservoirCouplingSlave_{nullptr};
367#endif
368
371};
372
373} // namespace Opm
374
376
377#endif // OPM_SIMULATOR_FULLY_IMPLICIT_BLACKOIL_HEADER_INCLUDED
Adaptive time-stepping coordinator for the black-oil simulator.
Definition: AdaptiveTimeStepping.hpp:93
Contains the high level supplements required to extend the black oil model by bioeffects.
Definition: blackoilbioeffectsmodules.hh:95
Contains the high level supplements required to extend the black oil model by polymer.
Definition: blackoilpolymermodules.hh:65
Class for handling the blackoil well model.
Definition: BlackoilWellModel.hpp:98
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: SimulatorFullyImplicitBlackoil.hpp:114
SolverParameters solverParam_
Cached nonlinear-solver parameters.
Definition: SimulatorFullyImplicitBlackoil.hpp:335
GetPropType< TypeTag, Properties::Simulator > Simulator
Definition: SimulatorFullyImplicitBlackoil.hpp:118
void loadState(HDF5Serializer &serializer, const std::string &groupName) override
Load this simulator's data block from an OPMRST file via HDF5.
Definition: SimulatorFullyImplicitBlackoil_impl.hpp:528
void updateTUNINGDP(const TuningDp &tuning_dp)
Apply a TUNINGDP keyword to the cached model parameters.
Definition: SimulatorFullyImplicitBlackoil_impl.hpp:256
const WellModel & wellModel_() const
Definition: SimulatorFullyImplicitBlackoil.hpp:326
GetPropType< TypeTag, Properties::FluidSystem > FluidSystem
Definition: SimulatorFullyImplicitBlackoil.hpp:120
std::unique_ptr< TimeStepper > adaptiveTimeStepping_
Set iff adaptive time stepping is enabled.
Definition: SimulatorFullyImplicitBlackoil.hpp:353
GetPropType< TypeTag, Properties::MaterialLawParams > MaterialLawParams
Definition: SimulatorFullyImplicitBlackoil.hpp:126
void init(const SimulatorTimer &timer)
One-shot setup performed before the first runStep.
Definition: SimulatorFullyImplicitBlackoil_impl.hpp:204
bool isRestart() const
Definition: SimulatorFullyImplicitBlackoil.hpp:322
GetPropType< TypeTag, Properties::MaterialLaw > MaterialLaw
Definition: SimulatorFullyImplicitBlackoil.hpp:124
typename Model::ModelParameters ModelParameters
Definition: SimulatorFullyImplicitBlackoil.hpp:136
void updateTUNING(const Tuning &tuning)
Apply a TUNING keyword to the cached model parameters.
Definition: SimulatorFullyImplicitBlackoil_impl.hpp:240
GetPropType< TypeTag, Properties::Scalar > Scalar
Definition: SimulatorFullyImplicitBlackoil.hpp:129
SimulatorReport run(SimulatorTimer &timer)
Run the entire simulation to completion.
Definition: SimulatorFullyImplicitBlackoil_impl.hpp:109
~SimulatorFullyImplicitBlackoil() override
Ends the convergence-output thread cleanly on all ranks.
Definition: SimulatorFullyImplicitBlackoil_impl.hpp:78
BlackoilWellModel< TypeTag > WellModel
Definition: SimulatorFullyImplicitBlackoil.hpp:138
void serializeOp(Serializer &serializer)
Definition: SimulatorFullyImplicitBlackoil_impl.hpp:518
typename Solver::SolverParameters SolverParameters
Definition: SimulatorFullyImplicitBlackoil.hpp:137
std::unique_ptr< Solver > createSolver(WellModel &wellModel)
Build the Solver used during the current report step.
Definition: SimulatorFullyImplicitBlackoil_impl.hpp:564
GetPropType< TypeTag, Properties::NonlinearSystem > Model
Definition: SimulatorFullyImplicitBlackoil.hpp:128
SimulatorSerializer serializer_
OPMRST save / load.
Definition: SimulatorFullyImplicitBlackoil.hpp:370
const std::vector< int > & getCellMapping() const override
Local-to-global cell index mapping.
Definition: SimulatorFullyImplicitBlackoil.hpp:304
GetPropType< TypeTag, Properties::PrimaryVariables > PrimaryVariables
Definition: SimulatorFullyImplicitBlackoil.hpp:123
const EclipseState & eclState() const
Definition: SimulatorFullyImplicitBlackoil.hpp:318
std::unique_ptr< time::StopWatch > totalTimer_
Wall-clock for the entire simulation.
Definition: SimulatorFullyImplicitBlackoil.hpp:350
void saveState(HDF5Serializer &serializer, const std::string &groupName) const override
Save this simulator's data block to an OPMRST file via HDF5.
Definition: SimulatorFullyImplicitBlackoil_impl.hpp:539
const Grid & grid() const
Definition: SimulatorFullyImplicitBlackoil.hpp:282
GetPropType< TypeTag, Properties::SolutionVector > SolutionVector
Definition: SimulatorFullyImplicitBlackoil.hpp:125
GetPropType< TypeTag, Properties::Indices > BlackoilIndices
Definition: SimulatorFullyImplicitBlackoil.hpp:122
const Model & model() const
Definition: SimulatorFullyImplicitBlackoil.hpp:290
SimulatorFullyImplicitBlackoil(Simulator &simulator)
Construct from the surrounding eWoms Simulator.
Definition: SimulatorFullyImplicitBlackoil_impl.hpp:46
static void registerParameters()
Register all parameters consumed by this class and its major collaborators.
Definition: SimulatorFullyImplicitBlackoil_impl.hpp:87
std::unique_ptr< time::StopWatch > solverTimer_
Wall-clock for the current report step's solve.
Definition: SimulatorFullyImplicitBlackoil.hpp:347
SimulatorConvergenceOutput convergence_output_
Background thread for INFOSTEP / INFOITER files.
Definition: SimulatorFullyImplicitBlackoil.hpp:356
std::unique_ptr< Solver > solver_
Built lazily on the first runStep call; reused thereafter.
Definition: SimulatorFullyImplicitBlackoil.hpp:338
bool terminalOutput_
Emit high-level progress to std::cout (rank 0 only).
Definition: SimulatorFullyImplicitBlackoil.hpp:341
ModelParameters modelParam_
Cached model parameters; mutated by TUNING / TUNINGDP application.
Definition: SimulatorFullyImplicitBlackoil.hpp:332
bool runStep(SimulatorTimer &timer)
Advance the simulation by one report step.
Definition: SimulatorFullyImplicitBlackoil_impl.hpp:279
GetPropType< TypeTag, Properties::AquiferModel > AquiferModel
Definition: SimulatorFullyImplicitBlackoil.hpp:127
GetPropType< TypeTag, Properties::Grid > Grid
Definition: SimulatorFullyImplicitBlackoil.hpp:119
SimulatorReport finalize()
Stop the timers and emit the final OPMRST output.
Definition: SimulatorFullyImplicitBlackoil_impl.hpp:495
SimulatorReport report_
Aggregated report across the entire simulation.
Definition: SimulatorFullyImplicitBlackoil.hpp:344
WellModel & wellModel_()
Definition: SimulatorFullyImplicitBlackoil.hpp:324
const Schedule & schedule() const
Definition: SimulatorFullyImplicitBlackoil.hpp:320
GetPropType< TypeTag, Properties::ElementContext > ElementContext
Definition: SimulatorFullyImplicitBlackoil.hpp:121
std::array< std::string, 5 > getHeader() const override
Definition: SimulatorFullyImplicitBlackoil_impl.hpp:550
Simulator & simulator_
Surrounding eWoms simulator; observed, not owned.
Definition: SimulatorFullyImplicitBlackoil.hpp:329
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: SimulatorFullyImplicitBlackoil.hpp:63
static constexpr bool value
Definition: SimulatorFullyImplicitBlackoil.hpp:63
Definition: SimulatorFullyImplicitBlackoil.hpp:67
static constexpr auto * value
Definition: SimulatorFullyImplicitBlackoil.hpp:67
Definition: SimulatorFullyImplicitBlackoil.hpp:68
static constexpr int value
Definition: SimulatorFullyImplicitBlackoil.hpp:68
Definition: SimulatorFullyImplicitBlackoil.hpp:64
static constexpr auto * value
Definition: SimulatorFullyImplicitBlackoil.hpp:64
Definition: SimulatorFullyImplicitBlackoil.hpp:66
static constexpr auto * value
Definition: SimulatorFullyImplicitBlackoil.hpp:66
Definition: SimulatorFullyImplicitBlackoil.hpp:65
static constexpr auto * value
Definition: SimulatorFullyImplicitBlackoil.hpp:65
Definition: SimulatorFullyImplicitBlackoil.hpp:69
static constexpr bool value
Definition: SimulatorFullyImplicitBlackoil.hpp:69
Abstract interface for simulator serialization ops.
Definition: SimulatorSerializer.hpp:36
Definition: SimulatorReport.hpp:122