71 if (condition ==
"LIST")
73 for (
const auto &increment : user_checkpoint_list)
75 checkpoint_list.insert(
static_cast<unsigned int>(increment));
81 if (n_checkpoints == 0)
88 n_checkpoints = std::min(n_checkpoints, temporal_discretization.total_increments);
91 if (condition ==
"EQUAL_SPACING")
93 for (
unsigned int iteration = 0;
94 iteration <= temporal_discretization.total_increments;
95 iteration += temporal_discretization.total_increments / n_checkpoints)
97 checkpoint_list.insert(iteration);
100 else if (condition ==
"LOG_SPACING")
102 checkpoint_list.insert(0);
103 for (
unsigned int output = 1; output <= n_checkpoints; output++)
105 checkpoint_list.insert(
static_cast<unsigned int>(std::round(
106 std::pow(
static_cast<double>(temporal_discretization.total_increments),
107 static_cast<double>(output) /
static_cast<double>(n_checkpoints)))));
110 else if (condition ==
"N_PER_DECADE")
112 AssertThrow(temporal_discretization.total_increments > 1,
113 dealii::ExcMessage(
"For n per decaded spaced outputs, the number of "
114 "increments must be greater than 1."));
116 checkpoint_list.insert(0);
117 checkpoint_list.insert(1);
118 for (
unsigned int iteration = 2;
119 iteration <= temporal_discretization.total_increments;
122 const auto decade =
static_cast<unsigned int>(std::ceil(std::log10(iteration)));
123 const auto step_size =
124 static_cast<unsigned int>(std::pow(10, decade) / n_checkpoints);
125 if (iteration % step_size == 0)
127 checkpoint_list.insert(iteration);
133 AssertThrow(
false, UnreachableCode());