AdaptiveSimulatorTimer.hpp
Go to the documentation of this file.
1/*
2 Copyright 2014 IRIS AS
3
4 This file is part of the Open Porous Media project (OPM).
5
6 OPM is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 OPM is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with OPM. If not, see <http://www.gnu.org/licenses/>.
18*/
19#ifndef OPM_ADAPTIVESIMULATORTIMER_HEADER_INCLUDED
20#define OPM_ADAPTIVESIMULATORTIMER_HEADER_INCLUDED
21
22#include <cassert>
23#include <iosfwd>
24#include <vector>
25#include <limits>
26#include <algorithm>
27#include <memory>
28#include <numeric>
29
31
32namespace Opm
33{
34
41 {
42 public:
47 AdaptiveSimulatorTimer( const boost::posix_time::ptime simulation_start_time,
48 const double step_length,
49 const double elapsed_time,
50 const double last_step_taken,
51 const int report_step,
52 const double max_time_step = std::numeric_limits<double>::max() );
53
56
58 void advance() override { this->operator++ (); }
59
61 void provideTimeStepEstimate( const double dt_estimate );
62
64 bool initialStep () const override;
65
67 int currentStepNum () const override;
68
70 int reportStepNum() const override;
71
73 double currentStepLength () const override;
74
75 // \brief Set next step length
76 void setCurrentStepLength(double dt);
77
79 double totalTime() const;
80
82 double simulationTimeElapsed() const override;
83
85 bool done () const override;
86
88 double averageStepLength() const;
89
91 double maxStepLength () const;
92
94 double minStepLength () const;
95
98 double stepLengthTaken () const override;
99
101 void report(std::ostream& os) const;
102
104 boost::posix_time::ptime startDateTime() const override;
105
107 bool lastStepFailed() const override { return last_step_failed_; }
108
110 void setLastStepFailed(bool last_step_failed) { last_step_failed_ = last_step_failed; }
111
113 std::unique_ptr<SimulatorTimerInterface> clone() const override;
114
115 protected:
116 std::shared_ptr<boost::posix_time::ptime> start_date_time_;
117 const double start_time_;
118 const double total_time_;
119 const int report_step_;
120 const double max_time_step_;
121
123 double dt_;
125
126 std::vector< double > steps_;
128
129 };
130
131} // namespace Opm
132
133#endif // OPM_SIMULATORTIMER_HEADER_INCLUDED
Simulation timer for adaptive time stepping.
Definition: AdaptiveSimulatorTimer.hpp:41
const double start_time_
Definition: AdaptiveSimulatorTimer.hpp:117
bool last_step_failed_
Definition: AdaptiveSimulatorTimer.hpp:127
void advance() override
advance time by currentStepLength
Definition: AdaptiveSimulatorTimer.hpp:58
int current_step_
Definition: AdaptiveSimulatorTimer.hpp:124
double stepLengthTaken() const override
Previous step length. This is the length of the step that was taken to arrive at this time.
std::vector< double > steps_
Definition: AdaptiveSimulatorTimer.hpp:126
const int report_step_
Definition: AdaptiveSimulatorTimer.hpp:119
double minStepLength() const
return min step length used so far
std::unique_ptr< SimulatorTimerInterface > clone() const override
return copy of object
bool lastStepFailed() const override
Return true if last time step failed.
Definition: AdaptiveSimulatorTimer.hpp:107
bool initialStep() const override
Whether this is the first step.
void provideTimeStepEstimate(const double dt_estimate)
provide and estimate for new time step size
double current_time_
Definition: AdaptiveSimulatorTimer.hpp:122
boost::posix_time::ptime startDateTime() const override
start date time of simulation
void report(std::ostream &os) const
report start and end time as well as used steps so far
const double total_time_
Definition: AdaptiveSimulatorTimer.hpp:118
void setLastStepFailed(bool last_step_failed)
tell the timestepper whether timestep failed or not
Definition: AdaptiveSimulatorTimer.hpp:110
double currentStepLength() const override
std::shared_ptr< boost::posix_time::ptime > start_date_time_
Definition: AdaptiveSimulatorTimer.hpp:116
AdaptiveSimulatorTimer(const boost::posix_time::ptime simulation_start_time, const double step_length, const double elapsed_time, const double last_step_taken, const int report_step, const double max_time_step=std::numeric_limits< double >::max())
constructor taking a simulator timer to determine start and end time
bool done() const override
void setCurrentStepLength(double dt)
int currentStepNum() const override
double averageStepLength() const
return average step length used so far
const double max_time_step_
Definition: AdaptiveSimulatorTimer.hpp:120
int reportStepNum() const override
return current report step
double maxStepLength() const
return max step length used so far
AdaptiveSimulatorTimer & operator++()
advance time by currentStepLength
double simulationTimeElapsed() const override
double dt_
Definition: AdaptiveSimulatorTimer.hpp:123
Interface class for SimulatorTimer objects, to be improved.
Definition: SimulatorTimerInterface.hpp:34
Definition: blackoilboundaryratevector.hh:39