PRISMS-PF Manual
Loading...
Searching...
No Matches
io_parameters.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2026 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/data_out_base.h>
7#include <deal.II/base/parameter_handler.h>
8#include <deal.II/base/patterns.h>
9#include <deal.II/base/utilities.h>
10
11#include <boost/serialization/vector.hpp>
12
16#include <prismspf/core/types.h>
17
19
21
22#include <prismspf/config.h>
23
24#include <climits>
25#include <concepts>
26#include <execution>
27#include <set>
28#include <string>
29#include <unordered_map>
30
32
33inline void
34add_equal_spacing_outputs(unsigned int n_outputs,
35 unsigned int n_increments,
36 std::set<unsigned int> &output_list)
37{
38 output_list.clear();
39 if (n_increments == 0)
40 {
41 output_list.insert(0);
42 return;
43 }
44 if (!n_outputs)
45 {
46 return;
47 }
48
49 unsigned int period = std::max(1U, n_increments / n_outputs);
50 for (unsigned int output = 0; output <= n_increments; output += period)
51 {
52 output_list.insert(output);
53 }
54}
55
56inline void
57add_log_spacing_outputs(unsigned int n_outputs,
58 unsigned int n_increments,
59 std::set<unsigned int> &output_list)
60{
61 output_list.clear();
62 if (n_increments == 0)
63 {
64 output_list.insert(0);
65 return;
66 }
67 if (!n_outputs)
68 {
69 return;
70 }
71
72 for (unsigned int output = 1; output <= n_outputs; output++)
73 {
74 output_list.insert((unsigned int) (std::round(
75 std::pow(double(n_increments), double(output) / double(n_outputs)))));
76 }
77}
78
79inline void
80add_n_per_decade_outputs(unsigned int n_outputs,
81 unsigned int n_increments,
82 std::set<unsigned int> &output_list)
83{
84 output_list.clear();
85 if (n_increments == 0)
86 {
87 output_list.insert(0);
88 return;
89 }
90 if (!n_outputs)
91 {
92 return;
93 }
94
95 output_list.insert(0);
96 output_list.insert(1);
97 for (unsigned int iteration = 2; iteration <= n_increments; iteration++)
98 {
99 const auto decade = (unsigned int) (std::ceil(std::log10(iteration)));
100 const auto step_size = (unsigned int) (std::pow(10, decade) / n_outputs);
101 if (iteration % step_size == 0)
102 {
103 output_list.insert(iteration);
104 }
105 }
106}
107
108template <typename T1, typename T2>
109requires std::convertible_to<T1, T2>
110inline void
111add_list_outputs(const std::vector<T1> &list, std::set<T2> &output_list)
112{
113 for (const auto &val : list)
114 {
115 output_list.insert(T2(val));
116 }
117}
118
123{
127 static void
128 declare(dealii::ParameterHandler &parameter_handler,
129 unsigned int n_subsections = Numbers::default_subsections);
130
136 void
137 assign(dealii::ParameterHandler &parameter_handler,
138 unsigned int n_subsections = Numbers::default_subsections) override;
139
143 void
144 assign(dealii::ParameterHandler &parameter_handler,
145 unsigned int n_increments,
146 unsigned int n_subsections = Numbers::default_subsections);
147
151 void
152 validate(const std::vector<FieldAttributes> &field_attributes,
153 const std::vector<SolveBlock> &solve_blocks) const override;
154
165
169 [[nodiscard]] bool
170 should_output(unsigned int increment) const;
171
181
190 unsigned int patch_subdivisions = 0;
191
199 dealii::DataOutBase::CompressionLevel compression_level =
200 dealii::DataOutBase::CompressionLevel::default_compression;
201
207 std::string folder = "solutions";
208
215 std::string file_name = "solution";
216
223 std::set<unsigned int> output_list = {0};
224
237 std::set<std::string> output_fields;
238};
239
244{
248 static void
249 declare(dealii::ParameterHandler &parameter_handler,
250 unsigned int n_subsections = Numbers::default_subsections);
251
257 void
258 assign(dealii::ParameterHandler &parameter_handler,
259 unsigned int n_subsections = Numbers::default_subsections) override;
260
264 void
265 assign(dealii::ParameterHandler &parameter_handler,
266 unsigned int n_increments,
267 unsigned int n_subsections = Numbers::default_subsections);
268
272 void
273 validate(const std::vector<FieldAttributes> &field_attributes,
274 const std::vector<SolveBlock> &solve_blocks) const override;
275
279 [[nodiscard]] bool
280 should_output(unsigned int increment) const;
281
291
297 std::string folder = "solutions";
298
305 std::string file_name = "checkpoint";
306
313 std::set<unsigned int> output_list = {0};
314};
315
320{
332
333 // File name
334 std::string file_name;
335
336 // Data format
338
339 // File variable names
340 std::vector<std::string> file_variable_names;
341
342 // Simulation variable names
343 std::vector<std::string> simulation_variable_names;
344
345 // Number of data points in each direction
346 std::array<unsigned int, 3> n_data_points = {
347 {0, 0, 0}
348 };
349};
350
355{
359 static void
360 declare(dealii::ParameterHandler &parameter_handler,
361 unsigned int n_subsections = Numbers::default_subsections);
362
366 void
367 assign(dealii::ParameterHandler &parameter_handler,
368 unsigned int n_subsections = Numbers::default_subsections) override;
369
373 void
374 validate(const std::vector<FieldAttributes> &field_attributes,
375 const std::vector<SolveBlock> &solve_blocks) const override;
376
380 bool load_from_file = false;
381
382 // Collection of initial condition files
383 std::vector<InitialConditionFile> initial_condition_files;
384};
385
386PRISMS_PF_END_NAMESPACE
void add_list_outputs(const std::vector< T1 > &list, std::set< T2 > &output_list)
Definition io_parameters.h:111
void add_log_spacing_outputs(unsigned int n_outputs, unsigned int n_increments, std::set< unsigned int > &output_list)
Definition io_parameters.h:57
PRISMS_PF_BEGIN_NAMESPACE void add_equal_spacing_outputs(unsigned int n_outputs, unsigned int n_increments, std::set< unsigned int > &output_list)
Definition io_parameters.h:34
void add_n_per_decade_outputs(unsigned int n_outputs, unsigned int n_increments, std::set< unsigned int > &output_list)
Definition io_parameters.h:80
static constexpr unsigned int default_subsections
Max number of subsections.
Definition types.h:33
Definition conditional_ostreams.cc:20
Simple struct for field input.
Definition io_parameters.h:355
void assign(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections) override
Assign the parameters from file.
Definition io_parameters.cc:307
static void declare(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections)
Declare the parameters to be read from file.
Definition io_parameters.cc:258
bool load_from_file
Whether to load initial conditions from file.
Definition io_parameters.h:380
std::vector< InitialConditionFile > initial_condition_files
Definition io_parameters.h:383
void validate(const std::vector< FieldAttributes > &field_attributes, const std::vector< SolveBlock > &solve_blocks) const override
Validate.
Definition io_parameters.cc:369
Simple struct for field output.
Definition io_parameters.h:123
bool should_output(unsigned int increment) const
Whether a given increment should be outputted.
Definition io_parameters.cc:151
void assign(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections) override
Assign the parameters from file.
Definition io_parameters.cc:79
dealii::DataOutBase::CompressionLevel compression_level
Compression level for output.
Definition io_parameters.h:199
unsigned int patch_subdivisions
Number of subdivisions to apply when building patches.
Definition io_parameters.h:190
std::set< std::string > output_fields
A list of fields that are output.
Definition io_parameters.h:237
void validate(const std::vector< FieldAttributes > &field_attributes, const std::vector< SolveBlock > &solve_blocks) const override
Validate.
Definition io_parameters.cc:144
OutputType file_type
File type for field output.
Definition io_parameters.h:180
std::string folder
Folder for field output.
Definition io_parameters.h:207
std::string file_name
Base filename for field output.
Definition io_parameters.h:215
OutputType
VTK output types.
Definition io_parameters.h:159
@ VTU
Definition io_parameters.h:160
@ XDMF
Definition io_parameters.h:163
@ PVTU
Definition io_parameters.h:162
@ VTK
Definition io_parameters.h:161
static void declare(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections)
Declare the parameters to be read from file.
Definition io_parameters.cc:13
std::set< unsigned int > output_list
A list of output steps.
Definition io_parameters.h:223
Initial condition file.
Definition io_parameters.h:320
std::vector< std::string > simulation_variable_names
Definition io_parameters.h:343
DataFormatType format
Definition io_parameters.h:337
std::vector< std::string > file_variable_names
Definition io_parameters.h:340
std::string file_name
Definition io_parameters.h:334
std::array< unsigned int, 3 > n_data_points
Definition io_parameters.h:346
DataFormatType
Data formats for input initial conditions.
Definition io_parameters.h:325
@ VTKXMLImageData
Definition io_parameters.h:330
@ VTKPXMLUnstructuredGrid
Definition io_parameters.h:329
@ FlatBinary
Definition io_parameters.h:326
@ VTKXMLUnstructuredGrid
Definition io_parameters.h:328
@ VTKUnstructuredGrid
Definition io_parameters.h:327
ParameterBase()=default
Simple struct for restart output.
Definition io_parameters.h:244
void assign(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections) override
Assign the parameters from file.
Definition io_parameters.cc:201
std::string file_name
Base filename for checkpoint output.
Definition io_parameters.h:305
bool should_output(unsigned int increment) const
Whether a given increment should be outputted.
Definition io_parameters.cc:252
std::set< unsigned int > output_list
A list of output steps.
Definition io_parameters.h:313
bool load_from_checkpoint
Whether to load from a checkpoint.
Definition io_parameters.h:290
void validate(const std::vector< FieldAttributes > &field_attributes, const std::vector< SolveBlock > &solve_blocks) const override
Validate.
Definition io_parameters.cc:245
static void declare(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections)
Declare the parameters to be read from file.
Definition io_parameters.cc:157
std::string folder
Folder for checkpoint output.
Definition io_parameters.h:297