PRISMS-PF Manual
Loading...
Searching...
No Matches
temporal_discretization.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/parameter_handler.h>
7
10
11#include <prismspf/config.h>
12
13#include <cfloat>
14
16
21{
22public:
26 explicit TemporalDiscretization(double _dt = 1.0, unsigned int _num_increments = 1)
27 : dt(_dt)
28 , num_increments(_num_increments)
29 {}
30
34 TemporalDiscretization(double _dt, double final_time)
35 : dt(_dt)
36 , num_increments(static_cast<unsigned int>((final_time + dt) / _dt))
37 {}
38
42 void
44 {}
45
49 void
51
55 void
56 declare_parameters(dealii::ParameterHandler &parameter_handler) const;
57
61 void
62 assign_parameters(dealii::ParameterHandler &parameter_handler);
63
64 // Timestep
65 double dt = 1.0;
66
67 // Total number of increments
68 unsigned int num_increments = 0;
69};
70
71inline void
73{
75 << "================================================\n"
76 << " Temporal Discretization\n"
77 << "================================================\n"
78 << "Timestep: " << dt << "\n"
79 << "Total increments: " << num_increments << "\n\n"
80 << std::flush;
81}
82
83inline void
85 dealii::ParameterHandler &parameter_handler) const
86{
87 parameter_handler.declare_entry("final increment",
88 "0",
89 dealii::Patterns::Integer(0, INT_MAX),
90 "The final increment for the simulation.");
91 parameter_handler.declare_entry("time step",
92 "0.0",
93 dealii::Patterns::Double(0.0, DBL_MAX),
94 "The time step size for the simulation.");
95 parameter_handler.declare_entry("end time",
96 "0.0",
97 dealii::Patterns::Double(0.0, DBL_MAX),
98 "The value of simulated time where the simulation "
99 "ends. Overrides final increment if greater than 0.");
100
101 parameter_handler.declare_alias("final increment", "number steps");
102 parameter_handler.declare_alias("final increment", "number of steps");
103 parameter_handler.declare_alias("final increment", "num steps");
104 parameter_handler.declare_alias("final increment", "n steps");
105 parameter_handler.declare_alias("final increment", "last increment");
106 parameter_handler.declare_alias("final increment", "end increment");
107 parameter_handler.declare_alias("final increment", "final_increment");
108 parameter_handler.declare_alias("final increment", "number_steps");
109 parameter_handler.declare_alias("final increment", "number_of_steps");
110 parameter_handler.declare_alias("final increment", "num_steps");
111 parameter_handler.declare_alias("final increment", "n_steps");
112 parameter_handler.declare_alias("final increment", "last_increment");
113 parameter_handler.declare_alias("final increment", "end_increment");
114 parameter_handler.declare_alias("final increment", "steps"); //
115 parameter_handler.declare_alias("final increment", "iterations");
116 parameter_handler.declare_alias("final increment", "increments");
117
118 parameter_handler.declare_alias("time step", "timestep");
119 parameter_handler.declare_alias("time step", "time_step");
120 parameter_handler.declare_alias("time step", "dt");
121
122 parameter_handler.declare_alias("end time", "final time");
123 parameter_handler.declare_alias("end time", "end_time");
124}
125
126inline void
127TemporalDiscretization::assign_parameters(dealii::ParameterHandler &parameter_handler)
128{
129 dt = parameter_handler.get_double("time step");
131 static_cast<unsigned int>(parameter_handler.get_integer("final increment"));
132 double final_time = parameter_handler.get_double("end time");
133 if (final_time > 0.0)
134 {
135 num_increments = std::ceil(final_time / dt);
136 }
137}
138
139PRISMS_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
void validate()
Postprocess and validate parameters.
Definition temporal_discretization.h:43
double dt
Definition temporal_discretization.h:65
unsigned int num_increments
Definition temporal_discretization.h:68
void assign_parameters(dealii::ParameterHandler &parameter_handler)
Assign the parameters read from an input file to this object.
Definition temporal_discretization.h:127
TemporalDiscretization(double _dt, double final_time)
Construct from timestep and final time.
Definition temporal_discretization.h:34
TemporalDiscretization(double _dt=1.0, unsigned int _num_increments=1)
Construct from timestep and total number of increments,.
Definition temporal_discretization.h:26
void declare_parameters(dealii::ParameterHandler &parameter_handler) const
Declare the parameters to be read from an input file.
Definition temporal_discretization.h:84
void print_parameter_summary() const
Print parameters to summary.log.
Definition temporal_discretization.h:72