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
51 add_output_list(const ListType &list)
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 if (num_increments == 0)
63 {
64 output_list.insert(0);
65 return;
66 }
67 if (!num_outputs)
68 {
69 return;
70 }
71 unsigned int period = std::max(1U, num_increments / num_outputs);
72 for (unsigned int output = 0; output <= num_increments; output += period)
73 {
74 output_list.insert(output);
75 }
76 }
77
81 void
82 add_log_spacing_outputs(unsigned int num_outputs, unsigned int num_increments)
83 {
84 if (!num_outputs)
85 {
86 return;
87 }
88 for (unsigned int output = 1; output <= num_outputs; output++)
89 {
90 output_list.insert(static_cast<unsigned int>(std::round(
91 std::pow(double(num_increments), double(output) / double(num_outputs)))));
92 }
93 }
94
98 void
99 add_n_per_decade_outputs(unsigned int num_outputs, unsigned int num_increments)
100 {
101 if (!num_outputs)
102 {
103 return;
104 }
105 AssertThrow(num_increments > 1,
106 dealii::ExcMessage("For n per decaded spaced outputs, the number of "
107 "increments must be greater than 1."));
108
109 output_list.insert(0);
110 output_list.insert(1);
111 for (unsigned int iteration = 2; iteration <= num_increments; iteration++)
112 {
113 const auto decade = static_cast<unsigned int>(std::ceil(std::log10(iteration)));
114 const auto step_size =
115 static_cast<unsigned int>(std::pow(10, decade) / num_outputs);
116 if (iteration % step_size == 0)
117 {
118 output_list.insert(iteration);
119 }
120 }
121 }
122
126 void
128 {
129 output_list = {0};
130 }
131
135 [[nodiscard]] unsigned int
137 {
138 return output_list.size();
139 }
140
141 // Output directory
142 std::string directory = "solutions";
143
144 // Output file type ()
145 std::string file_type = "vtu";
146
147 // Output file name
148 std::string file_name = "solution";
149
150 // The number of subdivisions to apply when building patches. By default this is the
151 // element degree.
152 unsigned int patch_subdivisions = 0;
153
154 // The number of steps between outputting relevant information to screen
155 unsigned int print_output_period = UINT_MAX;
156
157 // Whether to print timing information with output
158 // TODO (landinjm): Implement this.
160
161 // List of increments that output the solution to file
162 std::set<unsigned int> output_list = {0};
163};
164
165inline bool
166OutputParameters::should_output(unsigned int increment) const
167{
168 return output_list.contains(increment);
169}
170
171inline void
174
175inline void
177{
179 << "================================================\n"
180 << " Output Parameters\n"
181 << "================================================\n"
182 << "Output file type: " << file_type << "\n"
183 << "Output file name: " << file_name << "\n"
184 << "Output subdivisions: " << patch_subdivisions << "\n"
185 << "Print output period: " << print_output_period << "\n"
186 << "Number of outputs: " << get_num_outputs() << "\n"
187 << "Print timing info: " << bool_to_string(print_timing_with_output) << "\n";
188
189 ConditionalOStreams::pout_summary() << "Output increment list: ";
190 for (const auto &iteration : output_list)
191 {
192 ConditionalOStreams::pout_summary() << iteration << " ";
193 }
194 ConditionalOStreams::pout_summary() << "\n\n" << std::flush;
195}
196
197PRISMS_PF_END_NAMESPACE
static dealii::ConditionalOStream & pout_summary()
Log output stream for writing a summary.log file.
Definition conditional_ostreams.cc:35
Definition conditional_ostreams.cc:20
Struct that holds output parameters.
Definition output_parameters.h:27
bool print_timing_with_output
Definition output_parameters.h:159
unsigned int patch_subdivisions
Definition output_parameters.h:152
void add_log_spacing_outputs(unsigned int num_outputs, unsigned int num_increments)
Set the user output list.
Definition output_parameters.h:82
void clear_output_list()
Set the user output list.
Definition output_parameters.h:127
unsigned int print_output_period
Definition output_parameters.h:155
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:148
void print_parameter_summary() const
Print parameters to summary.log.
Definition output_parameters.h:176
std::set< unsigned int > output_list
Definition output_parameters.h:162
bool should_output(unsigned int increment) const
Return if the increment should be outputted.
Definition output_parameters.h:166
std::string file_type
Definition output_parameters.h:145
void add_n_per_decade_outputs(unsigned int num_outputs, unsigned int num_increments)
Set the user output list.
Definition output_parameters.h:99
void validate()
Postprocess and validate parameters.
Definition output_parameters.h:172
unsigned int get_num_outputs() const
Get the number of outputs that will be made.
Definition output_parameters.h:136
void add_equal_spacing_outputs(unsigned int num_outputs, unsigned int num_increments)
Set the user output list.
Definition output_parameters.h:60
std::string directory
Definition output_parameters.h:142
const char * bool_to_string(bool boolean)
Convert bool to string.
Definition utilities.h:254