PRISMS-PF Manual
Loading...
Searching...
No Matches
nucleation_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
9
11
13
15
16#include <prismspf/config.h>
17
18#include <climits>
19#include <string>
20
22
27{
28public:
32 [[nodiscard]] bool
33 should_attempt_nucleation(unsigned int increment) const;
34
38 void
39 validate() const;
40
44 void
46
50 void
55
59 [[nodiscard]] unsigned int
61 {
62 return nucleation_period;
63 }
64
68 void
70 {
72 dealii::ExcMessage("Nucleus exclusion distance must be non-negative."));
74 }
75
79 [[nodiscard]] double
84
88 void
90 {
92 dealii::ExcMessage("Nucleus exclusion distance must be non-negative."));
94 }
95
99 [[nodiscard]] double
104
108 void
110 {
112 dealii::ExcMessage("Nucleation refinement radius must be non-negative."));
114 }
115
119 [[nodiscard]] double
121 {
122 return refinement_radius;
123 }
124
128 void
130 {
132 }
133
137 [[nodiscard]] double
139 {
140 return seeding_time;
141 }
142
146 void
151
155 [[nodiscard]] unsigned int
157 {
158 return seeding_increments;
159 }
160
167 template <unsigned int dim>
168 [[nodiscard]] bool
170 {
171 return nucleus.seed_increment <= time_info.get_increment() &&
172 ((time_info.get_increment() - nucleus.seed_increment) < seeding_increments ||
173 time_info.get_time() - nucleus.seed_time < seeding_time);
174 }
175
179 [[nodiscard]] bool
184
185private:
186 // The number of steps between nucleationting relevant information to screen
188
189 // Whether a postprocess field is being used for nucleation
191
192 // The radius around a nucleus to exclude other nuclei
194
195 // The radius around a nucleus to exclude other nuclei in the same field
197
198 // The radius around a nucleus to refine the mesh
199 double refinement_radius = 0.0;
200
201 // Seeding time
202 double seeding_time = 0.0;
203
204 // Seeding increments
205 unsigned int seeding_increments = 1;
206};
207
208inline bool
210{
211 return !bool(increment % nucleation_period);
212}
213
214inline void
216{
217 // Check if the nucleation period is valid
219 dealii::ExcMessage("Nucleation period must be positive."));
220}
221
222inline void
224{
226 << "================================================\n"
227 << " Nucleation Parameters\n"
228 << "================================================\n"
229 << "Nucleation period: " << nucleation_period << "\n"
230 << "\n\n"
231 << std::flush;
232}
233
static dealii::ConditionalOStream & pout_summary()
Log output stream for writing a summary.log file.
Definition conditional_ostreams.cc:34
Definition simulation_timer.h:13
@ 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 nucleation parameters.
Definition nucleation_parameters.h:27
double get_seeding_time() const
Get the seeding time.
Definition nucleation_parameters.h:138
unsigned int nucleation_period
Definition nucleation_parameters.h:187
bool should_attempt_nucleation(unsigned int increment) const
Return if the increment should be nucleationted.
Definition nucleation_parameters.h:209
double get_exclusion_distance() const
Get the nucleus exclusion distance.
Definition nucleation_parameters.h:80
unsigned int seeding_increments
Definition nucleation_parameters.h:205
void set_seeding_time(const double &_seeding_time)
Set the seeding time.
Definition nucleation_parameters.h:129
double get_same_field_exclusion_distance() const
Get the nucleus exclusion distance.
Definition nucleation_parameters.h:100
bool check_active(const Nucleus< dim > &nucleus, const SimulationTimer &time_info) const
Check if a nucleus is still active based on its seed time and increment. A nucleus is considered acti...
Definition nucleation_parameters.h:169
unsigned int get_seeding_increments() const
Get the seeding increments.
Definition nucleation_parameters.h:156
void set_same_field_exclusion_distance(const double &exclusion_distance)
Set the nucleus exclusion distance.
Definition nucleation_parameters.h:89
bool postprocessed_nucleation_rate_exists() const
Whether a postprocessed nucleation rate exists.
Definition nucleation_parameters.h:180
double refinement_radius
Definition nucleation_parameters.h:199
void set_refinement_radius(const double &_refinement_radius)
Set the refinement radius.
Definition nucleation_parameters.h:109
void set_exclusion_distance(const double &_nucleus_exclusion_distance)
Set the nucleus exclusion distance.
Definition nucleation_parameters.h:69
double same_field_nucleus_exclusion_distance
Definition nucleation_parameters.h:196
double nucleus_exclusion_distance
Definition nucleation_parameters.h:193
void print_parameter_summary() const
Print parameters to summary.log.
Definition nucleation_parameters.h:223
unsigned int get_nucleation_period() const
Get the nucleation period.
Definition nucleation_parameters.h:60
void validate() const
Postprocess and validate parameters.
Definition nucleation_parameters.h:215
bool pp_nucleation_rate_exists
Definition nucleation_parameters.h:190
void set_nucleation_period(const unsigned int &_nucleation_period)
Set the print nucleation period.
Definition nucleation_parameters.h:51
double seeding_time
Definition nucleation_parameters.h:202
void set_seeding_increments(const unsigned int &_seeding_increments)
Set the seeding increments.
Definition nucleation_parameters.h:147
double get_refinement_radius() const
Get the refinement radius.
Definition nucleation_parameters.h:120
This class contains mutable utilities for phase field problems.
Definition nucleus.h:23