6#include <deal.II/base/parameter_handler.h>
18#include <prismspf/config.h>
61 [[nodiscard]]
unsigned int
73 AssertThrow(_nucleus_exclusion_distance >= 0.0,
74 dealii::ExcMessage(
"Nucleus exclusion distance must be non-negative."));
93 AssertThrow(exclusion_distance >= 0.0,
94 dealii::ExcMessage(
"Nucleus exclusion distance must be non-negative."));
113 AssertThrow(_refinement_radius >= 0.0,
114 dealii::ExcMessage(
"Nucleation refinement radius must be non-negative."));
157 [[nodiscard]]
unsigned int
169 template <
unsigned int dim>
233 dealii::ExcMessage(
"Nucleation period must be positive."));
240 <<
"================================================\n"
241 <<
" Nucleation Parameters\n"
242 <<
"================================================\n"
250 dealii::ParameterHandler ¶meter_handler)
const
252 parameter_handler.enter_subsection(
"nucleation");
254 parameter_handler.declare_entry(
"nucleus exclusion distance",
256 dealii::Patterns::Double(),
257 "The minimum distance between nuclei.");
258 parameter_handler.declare_entry(
"same field nucleus exclusion distance",
260 dealii::Patterns::Double(),
261 "The minimum distance between nuclei.");
262 parameter_handler.declare_entry(
265 dealii::Patterns::Integer(1),
266 "The number of increments between nucleation attempts.");
267 parameter_handler.declare_entry(
270 dealii::Patterns::Double(0.0),
271 "The radius around a nucleus in which AMR is applied.");
272 parameter_handler.declare_entry(
275 dealii::Patterns::Double(0.0),
276 "The time duration over which nuclei are considered \"active\" and refinement and "
277 "exclusion zones are applied. Same as \"seeding increments\" but in time.");
278 parameter_handler.declare_entry(
279 "seeding increments",
281 dealii::Patterns::Integer(1, INT_MAX),
282 "The number of increments over which nuclei are considered \"active\" and "
283 "refinement and exclusion zones are applied. Same as \"seeding time\" but in "
287 parameter_handler.declare_alias(
"nucleus exclusion distance",
288 "nucleus_exclusion_distance");
289 parameter_handler.declare_alias(
"nucleus exclusion distance",
290 "nucleus exclusion radius");
291 parameter_handler.declare_alias(
"nucleus exclusion distance",
292 "nucleus_exclusion_radius");
293 parameter_handler.declare_alias(
"nucleus exclusion distance",
"exclusion distance");
294 parameter_handler.declare_alias(
"nucleus exclusion distance",
"exclusion_distance");
295 parameter_handler.declare_alias(
"nucleus exclusion distance",
"exclusion radius");
296 parameter_handler.declare_alias(
"nucleus exclusion distance",
"exclusion_radius");
298 parameter_handler.declare_alias(
"same field nucleus exclusion distance",
299 "same_field_nucleus_exclusion_distance");
300 parameter_handler.declare_alias(
"same field nucleus exclusion distance",
301 "same field nucleus exclusion radius");
302 parameter_handler.declare_alias(
"same field nucleus exclusion distance",
303 "same_field_nucleus_exclusion_radius");
304 parameter_handler.declare_alias(
"same field nucleus exclusion distance",
305 "same field exclusion distance");
306 parameter_handler.declare_alias(
"same field nucleus exclusion distance",
307 "same_field_exclusion_distance");
308 parameter_handler.declare_alias(
"same field nucleus exclusion distance",
309 "same field exclusion radius");
310 parameter_handler.declare_alias(
"same field nucleus exclusion distance",
311 "same_field_exclusion_radius");
314 parameter_handler.leave_subsection();
320 parameter_handler.enter_subsection(
"nucleation");
325 parameter_handler.get_double(
"same field nucleus exclusion distance"));
328 static_cast<unsigned int>(parameter_handler.get_integer(
"nucleation period")));
335 static_cast<unsigned int>(parameter_handler.get_integer(
"seeding increments")));
337 parameter_handler.leave_subsection();
340PRISMS_PF_END_NAMESPACE
static dealii::ConditionalOStream & pout_summary()
Log output stream for writing a summary.log file.
Definition conditional_ostreams.cc:35
Definition simulation_timer.h:13
unsigned int get_increment() const
Definition simulation_timer.h:22
double get_time() const
Definition simulation_timer.h:28
Definition conditional_ostreams.cc:20
Struct that holds nucleation parameters.
Definition nucleation_parameters.h:29
double get_seeding_time() const
Get the seeding time.
Definition nucleation_parameters.h:140
unsigned int nucleation_period
Definition nucleation_parameters.h:201
bool should_attempt_nucleation(unsigned int increment) const
Return if the increment should be nucleationted.
Definition nucleation_parameters.h:223
double get_exclusion_distance() const
Get the nucleus exclusion distance.
Definition nucleation_parameters.h:82
unsigned int seeding_increments
Definition nucleation_parameters.h:219
void set_seeding_time(const double &_seeding_time)
Set the seeding time.
Definition nucleation_parameters.h:131
double get_same_field_exclusion_distance() const
Get the nucleus exclusion distance.
Definition nucleation_parameters.h:102
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:171
unsigned int get_seeding_increments() const
Get the seeding increments.
Definition nucleation_parameters.h:158
void set_same_field_exclusion_distance(const double &exclusion_distance)
Set the nucleus exclusion distance.
Definition nucleation_parameters.h:91
bool postprocessed_nucleation_rate_exists() const
Whether a postprocessed nucleation rate exists.
Definition nucleation_parameters.h:182
double refinement_radius
Definition nucleation_parameters.h:213
void declare_parameters(dealii::ParameterHandler ¶meter_handler) const
Declare the parameters to be read from an input file.
Definition nucleation_parameters.h:249
void set_refinement_radius(const double &_refinement_radius)
Set the refinement radius.
Definition nucleation_parameters.h:111
void set_exclusion_distance(const double &_nucleus_exclusion_distance)
Set the nucleus exclusion distance.
Definition nucleation_parameters.h:71
double same_field_nucleus_exclusion_distance
Definition nucleation_parameters.h:210
double nucleus_exclusion_distance
Definition nucleation_parameters.h:207
void print_parameter_summary() const
Print parameters to summary.log.
Definition nucleation_parameters.h:237
unsigned int get_nucleation_period() const
Get the nucleation period.
Definition nucleation_parameters.h:62
void validate() const
Postprocess and validate parameters.
Definition nucleation_parameters.h:229
bool pp_nucleation_rate_exists
Definition nucleation_parameters.h:204
void set_nucleation_period(const unsigned int &_nucleation_period)
Set the print nucleation period.
Definition nucleation_parameters.h:53
double seeding_time
Definition nucleation_parameters.h:216
void assign_parameters(dealii::ParameterHandler ¶meter_handler)
Assign the parameters read from an input file to this object.
Definition nucleation_parameters.h:318
void set_seeding_increments(const unsigned int &_seeding_increments)
Set the seeding increments.
Definition nucleation_parameters.h:149
double get_refinement_radius() const
Get the refinement radius.
Definition nucleation_parameters.h:122
This class contains mutable utilities for phase field problems.
Definition nucleus.h:23
double seed_time
Definition nucleus.h:45
unsigned int seed_increment
Definition nucleus.h:46