21 #ifndef FUB_OUTPUT_MULTIPLE_OUTPUTS_HPP 
   22 #define FUB_OUTPUT_MULTIPLE_OUTPUTS_HPP 
   27 #include <pybind11/stl.h> 
   44     std::vector<int> frequencies =
 
   45         GetOptionOr(opts, 
"frequencies", std::vector<int>{});
 
   46     std::vector<double> intervals =
 
   47         GetOptionOr(opts, 
"intervals", std::vector<double>{});
 
   48     std::vector<pybind11::dict> outputs{};
 
   50     for (
const pybind11::dict& output : outputs) {
 
   51       auto opts = 
ToMap(output);
 
   52       if (
auto type = opts.find(
"type"); type != opts.end()) {
 
   53         using namespace std::literals;
 
   54         const std::string type_name = type->second.cast<std::string>();
 
   55         opts.emplace(std::pair{
"frequencies", pybind11::cast(frequencies)});
 
   56         opts.emplace(std::pair{
"intervals", pybind11::cast(intervals)});
 
   62   template <
typename T> 
void AddOutput(std::unique_ptr<T>&& output) {
 
   63     outputs_.emplace_back(output.release());
 
   69     return std::accumulate(
 
   71         Duration(std::numeric_limits<double>::max()),
 
   74           return output ? std::min(min, output->NextOutputTime(time_point))
 
   83                        [&grid](
const auto& output) {
 
   84                          return output && output->ShallOutputNow(grid);
 
   90     for (
const auto& output : 
outputs_) {
 
   91       if (output && output->ShallOutputNow(grid)) {
 
   99   std::vector<std::unique_ptr<BasicOutput<Grid>>> 
outputs_{};
 
Definition: MultipleOutputs.hpp:36
 
void operator()(const Grid &grid) override
Invoke the actual output logic.
Definition: MultipleOutputs.hpp:89
 
MultipleOutputs()=default
 
std::vector< std::unique_ptr< BasicOutput< Grid > > > outputs_
Definition: MultipleOutputs.hpp:99
 
MultipleOutputs(OutputFactory< Grid > factory, const ProgramOptions &opts)
Definition: MultipleOutputs.hpp:42
 
Duration NextOutputTime(Duration time_point) override
Returns the time point at which the simulation shall stop to do some output.
Definition: MultipleOutputs.hpp:68
 
OutputFactory< Grid > factory_
Definition: MultipleOutputs.hpp:98
 
void AddOutput(std::unique_ptr< T > &&output)
Definition: MultipleOutputs.hpp:62
 
bool ShallOutputNow(const Grid &grid) override
Returns true if this output class shall be invoked at the specified time point.
Definition: MultipleOutputs.hpp:81
 
std::map< std::string, pybind11::object > ProgramOptions
Definition: MultipleOutputs.hpp:38
 
Definition: OutputFactory.hpp:33
 
The fub namespace.
Definition: AnyBoundaryCondition.hpp:31
 
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
 
ProgramOptions ToMap(const pybind11::dict &dict)
 
This is a abstract base class for an output strategy.
Definition: BasicOutput.hpp:33