TimeStepControl.hpp
Go to the documentation of this file.
1/*
2 Copyright 2014 IRIS AS
3 Copyright 2015 Dr. Blatt - HPC-Simulation-Software & Services
4 Copyright 2015 Statoil AS
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#ifndef OPM_TIMESTEPCONTROL_HEADER_INCLUDED
22#define OPM_TIMESTEPCONTROL_HEADER_INCLUDED
23
25
26#include <string>
27#include <vector>
28
29namespace Opm
30{
33 PID,
36 };
37
41 //
44 {
45 public:
48
51 // \param decayrate decayrate of time step when target iterations are not met (should be <= 1)
52 // \param growthrate growthrate of time step when target iterations are not met (should be >= 1)
54 SimpleIterationCountTimeStepControl( const int target_iterations,
55 const double decayrate,
56 const double growthrate,
57 const bool verbose = false);
58
60
62 double computeTimeStepSize( const double dt, const int iterations, const RelativeChangeInterface& /* relativeChange */, const double /*simulationTimeElapsed */ ) const;
63
64 template<class Serializer>
65 void serializeOp(Serializer& serializer)
66 {
67 serializer(target_iterations_);
68 serializer(decayrate_);
69 serializer(growthrate_);
70 serializer(verbose_);
71 }
72
74
75 protected:
76 const int target_iterations_ = 0;
77 const double decayrate_ = 0.0;
78 const double growthrate_ = 0.0;
79 const bool verbose_ = false;
80 };
81
97 {
98 public:
104 PIDTimeStepControl( const double tol = 1e-3,
105 const bool verbose = false );
106
108
110 double computeTimeStepSize( const double dt, const int /* iterations */, const RelativeChangeInterface& relativeChange, const double /*simulationTimeElapsed */ ) const;
111
112 template<class Serializer>
113 void serializeOp(Serializer& serializer)
114 {
115 serializer(tol_);
116 serializer(errors_);
117 serializer(verbose_);
118 }
119
120 bool operator==(const PIDTimeStepControl&) const;
121
122 protected:
123 const double tol_ = 1e-3;
124 mutable std::vector< double > errors_{};
125
126 const bool verbose_ = false;
127 };
128
133 //
136 {
138 public:
140
146 PIDAndIterationCountTimeStepControl( const int target_iterations = 20,
147 const double decayDampingFactor = 1.0,
148 const double growthDampingFactor = 1.0/1.2,
149 const double tol = 1e-3,
150 const double minTimeStepBasedOnIterations = 0.,
151 const bool verbose = false);
152
154
156 double computeTimeStepSize( const double dt, const int iterations, const RelativeChangeInterface& relativeChange, const double /*simulationTimeElapsed */ ) const;
157
158 template<class Serializer>
159 void serializeOp(Serializer& serializer)
160 {
161 serializer(static_cast<PIDTimeStepControl&>(*this));
162 serializer(target_iterations_);
163 serializer(decayDampingFactor_);
164 serializer(growthDampingFactor_);
166 }
167
169
170 protected:
175 };
176
187 {
188 public:
191
194 explicit HardcodedTimeStepControl( const std::string& filename);
195
197
199 double computeTimeStepSize( const double dt, const int /* iterations */, const RelativeChangeInterface& /*relativeChange */, const double simulationTimeElapsed) const;
200
201 template<class Serializer>
202 void serializeOp(Serializer& serializer)
203 {
204 serializer(subStepTime_);
205 }
206
208
209 protected:
210 // store the time (in days) of the substeps the simulator should use
211 std::vector<double> subStepTime_;
212 };
213
214
215} // end namespace Opm
216#endif
217
Definition: TimeStepControl.hpp:187
double computeTimeStepSize(const double dt, const int, const RelativeChangeInterface &, const double simulationTimeElapsed) const
static constexpr TimeStepControlType Type
Definition: TimeStepControl.hpp:189
void serializeOp(Serializer &serializer)
Definition: TimeStepControl.hpp:202
static HardcodedTimeStepControl serializationTestObject()
bool operator==(const HardcodedTimeStepControl &) const
std::vector< double > subStepTime_
Definition: TimeStepControl.hpp:211
HardcodedTimeStepControl(const std::string &filename)
constructor
Definition: TimeStepControl.hpp:136
const double growthDampingFactor_
Definition: TimeStepControl.hpp:173
void serializeOp(Serializer &serializer)
Definition: TimeStepControl.hpp:159
const int target_iterations_
Definition: TimeStepControl.hpp:171
const double decayDampingFactor_
Definition: TimeStepControl.hpp:172
PIDAndIterationCountTimeStepControl(const int target_iterations=20, const double decayDampingFactor=1.0, const double growthDampingFactor=1.0/1.2, const double tol=1e-3, const double minTimeStepBasedOnIterations=0., const bool verbose=false)
constructor
static PIDAndIterationCountTimeStepControl serializationTestObject()
const double minTimeStepBasedOnIterations_
Definition: TimeStepControl.hpp:174
double computeTimeStepSize(const double dt, const int iterations, const RelativeChangeInterface &relativeChange, const double) const
bool operator==(const PIDAndIterationCountTimeStepControl &) const
static constexpr TimeStepControlType Type
Definition: TimeStepControl.hpp:139
Definition: TimeStepControl.hpp:97
const bool verbose_
Definition: TimeStepControl.hpp:126
static constexpr TimeStepControlType Type
Definition: TimeStepControl.hpp:99
void serializeOp(Serializer &serializer)
Definition: TimeStepControl.hpp:113
bool operator==(const PIDTimeStepControl &) const
PIDTimeStepControl(const double tol=1e-3, const bool verbose=false)
constructor
static PIDTimeStepControl serializationTestObject()
std::vector< double > errors_
Definition: TimeStepControl.hpp:124
double computeTimeStepSize(const double dt, const int, const RelativeChangeInterface &relativeChange, const double) const
const double tol_
Definition: TimeStepControl.hpp:123
Definition: TimeStepControlInterface.hpp:32
Definition: TimeStepControl.hpp:44
const bool verbose_
Definition: TimeStepControl.hpp:79
SimpleIterationCountTimeStepControl(const int target_iterations, const double decayrate, const double growthrate, const bool verbose=false)
constructor
const double decayrate_
Definition: TimeStepControl.hpp:77
bool operator==(const SimpleIterationCountTimeStepControl &) const
static constexpr TimeStepControlType Type
Definition: TimeStepControl.hpp:46
const int target_iterations_
Definition: TimeStepControl.hpp:76
const double growthrate_
Definition: TimeStepControl.hpp:78
double computeTimeStepSize(const double dt, const int iterations, const RelativeChangeInterface &, const double) const
static SimpleIterationCountTimeStepControl serializationTestObject()
void serializeOp(Serializer &serializer)
Definition: TimeStepControl.hpp:65
Definition: TimeStepControlInterface.hpp:49
Definition: BlackoilPhases.hpp:27
TimeStepControlType
Definition: TimeStepControl.hpp:31