PRISMS-PF Manual
Loading...
Searching...
No Matches
output_parameters.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2025 PRISMS Center at the University of Michigan
2// SPDX-License-Identifier: GNU Lesser General Public Version 2.1
3
4#pragma once
5
6#include <deal.II/base/exceptions.h>
7
10
12
14
15#include <prismspf/config.h>
16
17#include <climits>
18#include <set>
19#include <string>
20
22
27{
31 [[nodiscard]] bool
32 should_output(unsigned int increment) const;
33
37 void
38 validate();
39
43 void
45
49 template <typename ListType>
50 void
52 {
53 output_list.insert(list.begin(), list.end());
54 }
55
59 void
60 add_equal_spacing_outputs(unsigned int num_outputs, unsigned int num_increments)
61 {
62 AssertThrow(num_increments > 0,
63 dealii::ExcMessage("num_increments must be greater than 0.\n"));
64 if (!num_outputs)
65 {
66 return;
67 }
68 unsigned int period = std::max(1U, num_increments / num_outputs);
69 for (unsigned int output = 0; output <= num_increments; output += period)
70 {
71 output_list.insert(output);
72 }
73 }
74
78 void
79 add_log_spacing_outputs(unsigned int num_outputs, unsigned int num_increments)
80 {
81 if (!num_outputs)
82 {
83 return;
84 }
85 for (unsigned int output = 1; output <= num_outputs; output++)
86 {
87 output_list.insert(static_cast<unsigned int>(std::round(
88 std::pow(double(num_increments), double(output) / double(num_outputs)))));
89 }
90 }
91
95 void
96 add_n_per_decade_outputs(unsigned int num_outputs, unsigned int num_increments)
97 {
98 if (!num_outputs)
99 {
100 return;
101 }
102 AssertThrow(num_increments > 1,
103 dealii::ExcMessage("For n per decaded spaced outputs, the number of "
104 "increments must be greater than 1."));
105
106 output_list.insert(0);
107 output_list.insert(1);
108 for (unsigned int iteration = 2; iteration <= num_increments; iteration++)
109 {
110 const auto decade = static_cast<unsigned int>(std::ceil(std::log10(iteration)));
111 const auto step_size =
112 static_cast<unsigned int>(std::pow(10, decade) / num_outputs);
113 if (iteration % step_size == 0)
114 {
115 output_list.insert(iteration);
116 }
117 }
118 }
119
123 void
125 {
126 output_list = {0};
127 }
128
132 [[nodiscard]] unsigned int
134 {
135 return output_list.size();
136 }
137
138 // Output file type ()
139 std::string file_type;
140
141 // Output file name
142 std::string file_name;
143
144 // The number of subdivisions to apply when building patches. By default this is the
145 // element degree.
146 unsigned int patch_subdivisions = 0;
147
148 // The number of steps between outputting relevant information to screen
150
151 // Whether to print timing information with output
152 // TODO (landinjm): Implement this.
154
155 // List of increments that output the solution to file
156 std::set<unsigned int> output_list = {0};
157};
158
159inline bool
160OutputParameters::should_output(unsigned int increment) const
161{
162 return output_list.contains(increment);
163}
164
165inline void
168
169inline void
171{
173 << "================================================\n"
174 << " Output Parameters\n"
175 << "================================================\n"
176 << "Output file type: " << file_type << "\n"
177 << "Output file name: " << file_name << "\n"
178 << "Output subdivisions: " << patch_subdivisions << "\n"
179 << "Print output period: " << print_output_period << "\n"
180 << "Number of outputs: " << get_num_outputs() << "\n"
181 << "Print timing info: " << bool_to_string(print_timing_with_output) << "\n";
182
183 ConditionalOStreams::pout_summary() << "Output increment list: ";
184 for (const auto &iteration : output_list)
185 {
187 }
188 ConditionalOStreams::pout_summary() << "\n\n" << std::flush;
189}
190
static dealii::ConditionalOStream & pout_summary()
Log output stream for writing a summary.log file.
Definition conditional_ostreams.cc:34
@ Value
Use value of the variable as a criterion for refinement.
Definition grid_refiner_criterion.h:31
Definition conditional_ostreams.cc:20
Struct that holds output parameters.
Definition output_parameters.h:27
bool print_timing_with_output
Definition output_parameters.h:153
unsigned int patch_subdivisions
Definition output_parameters.h:146
void add_log_spacing_outputs(unsigned int num_outputs, unsigned int num_increments)
Set the user output list.
Definition output_parameters.h:79
void clear_output_list()
Set the user output list.
Definition output_parameters.h:124
unsigned int print_output_period
Definition output_parameters.h:149
void add_output_list(const ListType &list)
Set the user output list.
Definition output_parameters.h:51
std::string file_name
Definition output_parameters.h:142
void print_parameter_summary() const
Print parameters to summary.log.
Definition output_parameters.h:170
std::set< unsigned int > output_list
Definition output_parameters.h:156
bool should_output(unsigned int increment) const
Return if the increment should be outputted.
Definition output_parameters.h:160
std::string file_type
Definition output_parameters.h:139
void add_n_per_decade_outputs(unsigned int num_outputs, unsigned int num_increments)
Set the user output list.
Definition output_parameters.h:96
void validate()
Postprocess and validate parameters.
Definition output_parameters.h:166
unsigned int get_num_outputs() const
Get the number of outputs that will be made.
Definition output_parameters.h:133
void add_equal_spacing_outputs(unsigned int num_outputs, unsigned int num_increments)
Set the user output list.
Definition output_parameters.h:60
const char * bool_to_string(bool boolean)
Convert bool to string.
Definition utilities.h:232