21 #ifndef FUB_OTPUT_OUTPUT_AT_FREQ_AND_INTERV_HPP 
   22 #define FUB_OTPUT_OUTPUT_AT_FREQ_AND_INTERV_HPP 
   27 #include <pybind11/stl.h> 
   31 template <
typename Gr
iddingAlgorithm>
 
   38       const std::map<std::string, pybind11::object>& options) {
 
   40     std::vector<double> intervals =
 
   41         GetOptionOr(options, 
"intervals", std::vector<double>{});
 
   42     std::transform(intervals.begin(), intervals.end(),
 
   44                    [](
double dur) { return Duration(dur); });
 
   50       std::vector<std::ptrdiff_t> frequencies,
 
   51       std::vector<fub::Duration> intervals,
 
   57     Duration next_output_time(std::numeric_limits<double>::max());
 
   58     for (std::size_t i = 0; i < 
intervals_.size(); ++i) {
 
   61                     std::fmod(time_point.count(), 
intervals_[i].count()));
 
   63         next_output_time = std::min(next_output_time, time_point + dt);
 
   66     return next_output_time;
 
   70     const std::ptrdiff_t cycle = grid.GetCycles();
 
   73             [cycle](std::ptrdiff_t freq) { return cycle % freq == 0; })) {
 
   76     const Duration time_point = grid.GetTimePoint();
 
   81                                  std::fmod(time_point.count(), freq.count())) <
 
   82                              2 * smallest_time_step_size_.count();
 
   89   template <
typename Log>
 
   91     BOOST_LOG(log) << fmt::format(
" - frequencies = {{{}}} [-]", fmt::join(
frequencies_, 
", "));
 
   92     std::vector<double> interval_counts(
intervals_.size());
 
   96     BOOST_LOG(log) << fmt::format(
" - intervals = {{{}}} [s]", fmt::join(interval_counts, 
", "));
 
Definition: OutputAtFrequencyOrInterval.hpp:32
 
std::vector< std::ptrdiff_t > frequencies_
Definition: OutputAtFrequencyOrInterval.hpp:101
 
OutputAtFrequencyOrInterval()=default
 
Duration NextOutputTime(Duration time_point) override
Returns the time point at which the simulation shall stop to do some output.
Definition: OutputAtFrequencyOrInterval.hpp:56
 
OutputAtFrequencyOrInterval(std::vector< std::ptrdiff_t > frequencies, std::vector< fub::Duration > intervals, Duration smallest_time_step_size=Duration(1e-12))
Definition: OutputAtFrequencyOrInterval.hpp:49
 
OutputAtFrequencyOrInterval(const std::map< std::string, pybind11::object > &options)
Initialize this module by a program options map.
Definition: OutputAtFrequencyOrInterval.hpp:37
 
void Print(Log &log)
Definition: OutputAtFrequencyOrInterval.hpp:90
 
Duration smallest_time_step_size_
Definition: OutputAtFrequencyOrInterval.hpp:103
 
bool ShallOutputNow(const GriddingAlgorithm &grid) override
Returns true if this output class shall be invoked at the specified time point.
Definition: OutputAtFrequencyOrInterval.hpp:69
 
std::vector< fub::Duration > intervals_
Definition: OutputAtFrequencyOrInterval.hpp:102
 
The fub namespace.
Definition: AnyBoundaryCondition.hpp:31
 
void Log(std::string message, Duration timepoint, boost::log::trivial::severity_level level=boost::log::trivial::severity_level::info)
 
std::chrono::duration< double > Duration
Definition: Duration.hpp:31
 
T GetOptionOr(const ProgramOptions &map, const std::string &name, const T &value)
Definition: ProgramOptions.hpp:48
 
This is a abstract base class for an output strategy.
Definition: BasicOutput.hpp:33