PRISMS-PF Manual
Loading...
Searching...
No Matches
user_input_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/parameter_handler.h>
7
10
19
20#include <prismspf/config.h>
21
22#include <vector>
23
25
26template <unsigned int dim>
28{
33
39 explicit UserInputParameters(const std::string &file_name,
40 unsigned int n_subsections = Numbers::default_subsections)
41 {
42 // user_constants is a special little princess that needs to know the file contents
43 // before we declare the parameters.
44 user_constants.file_name = file_name;
45
46 dealii::ParameterHandler parameter_handler;
47
48 declare(parameter_handler, n_subsections);
49 parameter_handler.parse_input(file_name);
50 assign(parameter_handler, n_subsections);
51 };
52
56 void
57 declare(dealii::ParameterHandler &parameter_handler,
58 unsigned int n_subsections = Numbers::default_subsections) const
59 {
60 SpatialDiscretization<dim>::declare(parameter_handler, n_subsections);
61 TemporalDiscretization::declare(parameter_handler, n_subsections);
62 BoundaryParameters::declare(parameter_handler, n_subsections);
63
64 LinearSolveParameters::declare(parameter_handler, n_subsections);
65 NonlinearSolveParameters::declare(parameter_handler, n_subsections);
66
67 FieldOutputParameters::declare(parameter_handler, n_subsections);
68 RestartOutputParameters::declare(parameter_handler, n_subsections);
69 FieldInputParameters::declare(parameter_handler, n_subsections);
70
71 MiscellaneousParameters::declare(parameter_handler, n_subsections);
72 NucleationParameters::declare(parameter_handler, n_subsections);
73
74 user_constants.declare_parameters(parameter_handler);
75 };
76
80 void
81 assign(dealii::ParameterHandler &parameter_handler,
82 unsigned int n_subsections = Numbers::default_subsections) override
83 {
84 spatial_discretization.assign(parameter_handler, n_subsections);
85 temporal_discretization.assign(parameter_handler, n_subsections);
86 boundary_parameters.assign<dim>(parameter_handler, n_subsections);
87
88 linear_solve_parameters.assign(parameter_handler, n_subsections);
89 nonlinear_solve_parameters.assign(parameter_handler, n_subsections);
90
91 const auto n_increments = temporal_discretization.n_increments;
92
93 output_parameters.assign(parameter_handler, n_increments, n_subsections);
94 restart_parameters.assign(parameter_handler, n_increments, n_subsections);
95 input_parameters.assign(parameter_handler, n_subsections);
96
97 misc_parameters.assign(parameter_handler, n_subsections);
98 nucleation_parameters.assign(parameter_handler, n_subsections);
99
100 user_constants.assign_parameters(parameter_handler);
101 };
102
108 void
109 validate(const std::vector<FieldAttributes> &field_attributes,
110 const std::vector<SolveBlock> &solve_blocks) const override
111 {
112 spatial_discretization.validate(field_attributes, solve_blocks);
113 temporal_discretization.validate(field_attributes, solve_blocks);
114 boundary_parameters.validate(field_attributes, solve_blocks);
115
116 linear_solve_parameters.validate(field_attributes, solve_blocks);
117 nonlinear_solve_parameters.validate(field_attributes, solve_blocks);
118
119 output_parameters.validate(field_attributes, solve_blocks);
120 restart_parameters.validate(field_attributes, solve_blocks);
121 input_parameters.validate(field_attributes, solve_blocks);
122
123 misc_parameters.validate(field_attributes, solve_blocks);
124 nucleation_parameters.validate(field_attributes, solve_blocks);
125 }
126
130
133
137
139
141
142 // TODO: This one needs to be fixed, but I don't want to touch it with a 9 foot pole.
144};
145
146PRISMS_PF_END_NAMESPACE
Class the stores and manages user-defined constants.
Definition user_constants.h:30
NonlinearSolveParameters nonlinear_solve_parameters
Definition user_input_parameters.h:132
RestartOutputParameters restart_parameters
Definition user_input_parameters.h:135
SpatialDiscretization< dim > spatial_discretization
Definition user_input_parameters.h:127
UserInputParameters(const std::string &file_name, unsigned int n_subsections=Numbers::default_subsections)
Constructor.
Definition user_input_parameters.h:39
LinearSolveParameters linear_solve_parameters
Definition user_input_parameters.h:131
void assign(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections) override
Assign the parameters from file.
Definition user_input_parameters.h:81
MiscellaneousParameters misc_parameters
Definition user_input_parameters.h:138
void declare(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections) const
Declare the parameters to be read from file.
Definition user_input_parameters.h:57
void validate(const std::vector< FieldAttributes > &field_attributes, const std::vector< SolveBlock > &solve_blocks) const override
Ensure that the parameters are compatible with a set of fields and solvers.
Definition user_input_parameters.h:109
FieldInputParameters input_parameters
Definition user_input_parameters.h:136
NucleationParameters nucleation_parameters
Definition user_input_parameters.h:140
TemporalDiscretization temporal_discretization
Definition user_input_parameters.h:128
BoundaryParameters boundary_parameters
Definition user_input_parameters.h:129
FieldOutputParameters output_parameters
Definition user_input_parameters.h:134
UserInputParameters()=default
Constructor.
UserConstants< dim > user_constants
Definition user_input_parameters.h:143
static constexpr unsigned int default_subsections
Max number of subsections.
Definition types.h:33
Definition conditional_ostreams.cc:20
Struct that holds boundary parameters.
Definition constraint_parameters.h:83
static void declare(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections)
Declare the parameters to be read from file.
Definition constraint_parameters.cc:12
Simple struct for field input.
Definition io_parameters.h:355
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
Simple struct for field output.
Definition io_parameters.h:123
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
Struct that holds linear solver parameters.
Definition solve_parameters.h:115
static void declare(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections)
Declare the parameters to be read from file.
Definition solve_parameters.cc:287
Struct that holds miscellaneous parameters.
Definition miscellaneous_parameters.h:29
static void declare(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections)
Declare the parameters to be read from file.
Definition miscellaneous_parameters.cc:11
Struct that holds nonlinear solver parameters.
Definition solve_parameters.h:181
static void declare(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections)
Declare the parameters to be read from file.
Definition solve_parameters.cc:420
Struct that holds nucleation parameters.
Definition nucleation_parameters.h:30
static void declare(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections)
Declare the parameters to be read from file.
Definition nucleation_parameters.cc:11
ParameterBase()=default
Simple struct for restart output.
Definition io_parameters.h:244
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
Struct that holds spatial discretization parameters.
Definition spatial_discretization.h:308
static void declare(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections)
Declare the parameters to be read from file.
Definition spatial_discretization.cc:360
Struct that holds temporal discretization parameters.
Definition temporal_discretization.h:24
static void declare(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections)
Declare the parameters to be read from file.
Definition temporal_discretization.cc:36