16 std::set<std::string>&& output_variables_,
17 std::vector<double>&& fixed_output_times_,
18 std::vector<PairRepeatEachSteps>&& repeats_each_steps_,
19 bool const output_residuals_)
20 : output_variables(std::move(output_variables_)),
21 fixed_output_times(std::move(fixed_output_times_)),
22 repeats_each_steps(std::move(repeats_each_steps_)),
23 output_residuals(output_residuals_)
28 "Vector of fixed output time steps passed to the "
29 "OutputDataSpecification constructor must be sorted");
34 if (pair.each_steps == 0)
37 "Step in pair of <repeats><steps> is zero but has to be "
38 "greater than zero.");
48 double const time)
const
50 auto isFixedOutputStep = [
this](
double const time) ->
bool
52 auto const fixed_output_time = std::lower_bound(
55 (std::abs(*fixed_output_time - time) <
56 std::numeric_limits<double>::epsilon()));
59 auto isPairRepeatsEachTimeStepOutput = [
this](
int timestep) ->
bool
65 each_steps = pair.each_steps;
67 if (timestep > pair.repeat * each_steps)
69 timestep -= pair.repeat * each_steps;
77 return timestep % each_steps == 0;
80 return isFixedOutputStep(time) || isPairRepeatsEachTimeStepOutput(timestep);
92 os <<
"OuputDataSpecification" << std::endl;
93 os <<
"\toutput_variables: ";
95 std::ostream_iterator<std::string>(os,
" "));
97 os <<
"\tfixed_output_times: ";
99 std::ostream_iterator<double>(os,
" "));
101 os <<
"\trepeats_each_steps: ";
103 std::ostream_iterator<PairRepeatEachSteps>(os,
" "));
std::ostream & operator<<(std::ostream &os, Output const &output)
Holds information about which variables to write to output files.
std::vector< PairRepeatEachSteps > repeats_each_steps
Describes after which timesteps to write output.
std::vector< double > fixed_output_times
Given times that steps have to reach.
bool output_residuals
Tells if also to output extrapolation residuals.
std::set< std::string > output_variables
All variables that shall be output.
bool isOutputStep(int timestep, double const time) const
OutputDataSpecification(std::set< std::string > &&output_variables_, std::vector< double > &&fixed_output_times_, std::vector< PairRepeatEachSteps > &&repeats_each_steps_, bool const output_residuals_)
const int repeat
Apply each_steps repeat times.
const int each_steps
Do output every each_steps timestep.