1 #ifndef pf_parameters_h
2 #define pf_parameters_h
45 using namespace dealii;
136 prm.enter_subsection(
"meta");
138 prm.declare_entry(
"dim", std::to_string(dim), Patterns::Integer(1, 3));
140 prm.leave_subsection();
143 prm.enter_subsection(
"physics");
145 prm.declare_entry(
"gravity",
"0., -1, 0.", Patterns::List(Patterns::Double()));
146 prm.declare_entry(
"liquid_dynamic_viscosity",
"1.", Patterns::Double(0.));
148 prm.leave_subsection();
151 prm.enter_subsection(
"source_function");
153 Functions::ParsedFunction<dim>::declare_parameters(prm, dim + 2);
155 prm.leave_subsection();
158 prm.enter_subsection (
"geometry");
161 prm.declare_entry(
"grid_name",
"hyper_rectangle",
162 Patterns::Selection(
"hyper_rectangle | hyper_shell"),
163 "Select the name of the geometry and grid to generate.");
165 prm.declare_entry(
"sizes",
"0., 0., 1., 1.",
166 Patterns::List(Patterns::Double(0.)),
167 "Set the sizes for the grid's geometry.");
170 prm.leave_subsection ();
173 prm.enter_subsection (
"initial_values");
175 Functions::ParsedFunction<dim>::declare_parameters(prm, dim + 2);
177 prm.leave_subsection ();
180 prm.enter_subsection (
"boundary_conditions");
185 Patterns::List(Patterns::Integer(0)),
186 "Strong boundary conditions will be applied to boundaries with these boundary ID's.");
194 "velocity; pressure; temperature, velocity; pressure; temperature, velocity; pressure, velocity; pressure",
195 Patterns::Anything(),
196 "The parsed functions will only be applied as strong boundary conditions to components included in the mask."
197 "\nSemi-colons separate components, while commas separate boundaries."
198 "Masks are required for every boundary ID in strong_boundaries.");
200 Functions::ParsedFunction<dim>::declare_parameters(prm, dim + 2);
203 prm.leave_subsection ();
206 prm.enter_subsection (
"refinement");
208 prm.declare_entry(
"initial_global_cycles",
"2",
210 "Initially globally refine the grid this many times "
211 "without using any error measure");
213 prm.declare_entry(
"initial_boundary_cycles",
"0",
215 "Initially refine the grid this many times"
216 "near the boundaries that are listed for refinement");
218 prm.declare_entry(
"boundaries_to_refine",
"0",
219 Patterns::List(Patterns::Integer()),
220 "Refine cells that contain these boundaries");
223 prm.leave_subsection();
226 prm.enter_subsection (
"time");
228 prm.declare_entry(
"end",
"0.",
229 Patterns::Double(0.),
230 "End the time-dependent simulation once this time is reached.");
232 prm.declare_entry(
"initial_step_size",
"1.",
233 Patterns::Double(0.),
234 "Begin with this time step size.");
236 prm.declare_entry(
"min_step_size",
"1.",
237 Patterns::Double(0.),
238 "Minimum step size for adaptive time steppinig.");
240 prm.declare_entry(
"max_step_size",
"1.",
241 Patterns::Double(0.),
242 "Maximum step size for adaptive time steppinig.");
244 prm.declare_entry(
"max_steps",
"1000000",
245 Patterns::Integer(0),
246 "Maximum number of time steps.");
248 prm.declare_entry(
"stop_when_steady",
"false", Patterns::Bool());
250 prm.declare_entry(
"steady_tolerance",
"1.e-8", Patterns::Double(0.));
253 prm.leave_subsection();
256 prm.enter_subsection(
"nonlinear_solver");
258 prm.declare_entry(
"method",
"Newton",
259 Patterns::Selection(
"Newton"));
261 prm.declare_entry(
"max_iterations",
"50",
262 Patterns::Integer(0));
264 prm.declare_entry(
"tolerance",
"1e-9",
265 Patterns::Double(0.));
268 prm.leave_subsection();
271 prm.enter_subsection(
"output");
273 prm.declare_entry(
"write_solution_vtk",
"true", Patterns::Bool());
275 prm.leave_subsection();
278 prm.enter_subsection(
"verification");
280 prm.declare_entry(
"enabled",
"false", Patterns::Bool());
282 prm.enter_subsection(
"exact_solution_function");
284 Functions::ParsedFunction<dim>::declare_parameters(prm, dim + 2);
286 prm.leave_subsection();
288 prm.leave_subsection();
297 ParameterHandler prm;
300 if (parameter_file !=
"")
302 prm.parse_input(parameter_file);
305 prm.enter_subsection(
"meta");
307 mp.
dim = prm.get_integer(
"dim");
309 prm.leave_subsection();
316 const std::string parameter_file,
317 Functions::ParsedFunction<dim> &source_function,
318 Functions::ParsedFunction<dim> &initial_values_function,
319 Functions::ParsedFunction<dim> &boundary_function,
320 Functions::ParsedFunction<dim> &exact_solution_function)
325 ParameterHandler prm;
326 Parameters::declare<dim>(prm);
328 if (parameter_file !=
"")
330 prm.parse_input(parameter_file);
334 std::ofstream parameter_log_file(
"used_parameters.prm");
335 assert(parameter_log_file.good());
336 prm.print_parameters(parameter_log_file, ParameterHandler::Text);
338 prm.enter_subsection(
"physics");
340 params.
physics.
gravity = MyParameterHandler::get_vector<double>(prm,
"gravity");
343 prm.leave_subsection();
345 prm.enter_subsection(
"geometry");
348 params.
geometry.
sizes = MyParameterHandler::get_vector<double>(prm,
"sizes");
350 prm.leave_subsection();
353 prm.enter_subsection(
"source_function");
355 source_function.parse_parameters(prm);
357 prm.leave_subsection();
360 prm.enter_subsection(
"verification");
365 prm.enter_subsection(
"exact_solution_function");
367 exact_solution_function.parse_parameters(prm);
369 prm.leave_subsection();
372 prm.leave_subsection();
375 prm.enter_subsection(
"initial_values");
378 initial_values_function.parse_parameters(prm);
381 prm.leave_subsection();
384 prm.enter_subsection (
"boundary_conditions");
387 MyParameterHandler::get_vector<unsigned int>(prm,
"strong_boundaries");
389 std::string strong_masks_string = prm.get(
"strong_masks");
391 std::vector<std::string> mask_strings = Utilities::split_string_list(strong_masks_string,
',');
395 for (
auto mask_string : mask_strings)
397 std::vector<std::string> mask = Utilities::split_string_list(mask_string,
';');
400 for (
auto name : mask)
408 boundary_function.parse_parameters(prm);
410 prm.leave_subsection ();
413 prm.enter_subsection(
"refinement");
419 MyParameterHandler::get_vector<unsigned int>(prm,
"boundaries_to_refine");
422 prm.leave_subsection();
425 prm.enter_subsection(
"time");
427 params.
time.
end = prm.get_double(
"end");
435 prm.leave_subsection();
438 prm.enter_subsection(
"nonlinear_solver");
444 prm.leave_subsection();
447 prm.enter_subsection(
"output");
451 prm.leave_subsection();
double end
Definition: pf_parameters.h:93
StructuredParameters read(const std::string parameter_file, Functions::ParsedFunction< dim > &source_function, Functions::ParsedFunction< dim > &initial_values_function, Functions::ParsedFunction< dim > &boundary_function, Functions::ParsedFunction< dim > &exact_solution_function)
Definition: pf_parameters.h:315
Definition: pf_parameters.h:91
unsigned int cycles_at_interval
Definition: pf_parameters.h:78
Refinement refinement
Definition: pf_parameters.h:125
Meta read_meta_parameters(const std::string parameter_file="")
Definition: pf_parameters.h:293
Definition: pf_parameters.h:52
std::string method
Definition: pf_parameters.h:104
Definition: pf_parameters.h:83
std::vector< unsigned int > boundaries_to_refine
Definition: pf_parameters.h:87
unsigned int initial_boundary_cycles
Definition: pf_parameters.h:86
double min_step_size
Definition: pf_parameters.h:95
std::vector< std::vector< std::string > > strong_masks
Definition: pf_parameters.h:69
std::vector< unsigned int > strong_boundaries
Definition: pf_parameters.h:68
BoundaryConditions boundary_conditions
Definition: pf_parameters.h:123
std::string grid_name
Definition: pf_parameters.h:61
void declare(ParameterHandler &prm)
Definition: pf_parameters.h:133
double coarsen_fraction
Definition: pf_parameters.h:80
Definition: pf_parameters.h:72
unsigned int max_iterations
Definition: pf_parameters.h:105
Geometry geometry
Definition: pf_parameters.h:124
AdaptiveRefinement adaptive
Definition: pf_parameters.h:88
double liquid_dynamic_viscosity
Definition: pf_parameters.h:55
Definition: pf_parameters.h:58
Definition: pf_parameters.h:66
unsigned int dim
Definition: pf_parameters.h:60
Definition: pf_parameters.h:102
Meta meta
Definition: pf_parameters.h:121
PhysicalModel physics
Definition: pf_parameters.h:122
std::vector< std::string > FIELD_NAMES({"velocity","pressure","temperature"})
std::vector< double > sizes
Definition: pf_parameters.h:62
unsigned int interval
Definition: pf_parameters.h:77
std::vector< double > gravity
Definition: pf_parameters.h:54
double initial_step_size
Definition: pf_parameters.h:94
Definition: pf_parameters.h:114
Definition: pf_parameters.h:119
std::vector< double > transformations
Definition: pf_parameters.h:63
double tolerance
Definition: pf_parameters.h:106
Verification verification
Definition: pf_parameters.h:129
bool enabled
Definition: pf_parameters.h:116
Definition: pf_parameters.h:109
bool write_solution_vtk
Definition: pf_parameters.h:111
Time time
Definition: pf_parameters.h:126
double max_step_size
Definition: pf_parameters.h:96
IterativeSolver nonlinear_solver
Definition: pf_parameters.h:127
unsigned int max_level
Definition: pf_parameters.h:75
bool stop_when_steady
Definition: pf_parameters.h:98
unsigned int initial_cycles
Definition: pf_parameters.h:74
double steady_tolerance
Definition: pf_parameters.h:99
unsigned int initial_global_cycles
Definition: pf_parameters.h:85
Output output
Definition: pf_parameters.h:128
unsigned int max_cells
Definition: pf_parameters.h:76
unsigned int max_steps
Definition: pf_parameters.h:97
Definition: phaseflow.h:71
double refine_fraction
Definition: pf_parameters.h:79