ASPECT
parameters.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2011 - 2024 by the authors of the ASPECT code.
3 
4  This file is part of ASPECT.
5 
6  ASPECT is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2, or (at your option)
9  any later version.
10 
11  ASPECT is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with ASPECT; see the file LICENSE. If not see
18  <http://www.gnu.org/licenses/>.
19 */
20 
21 
22 #ifndef _aspect_parameters_h
23 #define _aspect_parameters_h
24 
25 #include <deal.II/base/parameter_handler.h>
26 
27 #include <aspect/global.h>
29 
30 
31 namespace aspect
32 {
33  struct CompositionalFieldDescription;
34 
35  // forward declaration:
36  namespace GeometryModel
37  {
38  template <int dim>
39  class Interface;
40  }
41 
55  template <int dim>
56  struct Parameters
57  {
58 
64  {
65  enum Kind
66  {
79  no_Advection_no_Stokes
80  };
81  };
82 
83  static
84  bool
86  {
87  return input == NonlinearSolver::iterated_Advection_and_Newton_Stokes ||
88  input == NonlinearSolver::single_Advection_iterated_Newton_Stokes ||
89  input == NonlinearSolver::no_Advection_iterated_defect_correction_Stokes ||
90  input == NonlinearSolver::single_Advection_iterated_defect_correction_Stokes ||
91  input == NonlinearSolver::iterated_Advection_and_defect_correction_Stokes
92  ?
93  true
94  :
95  false;
96  }
97 
102  {
103  enum Kind
104  {
107  abort_program
108  };
109 
113  static
114  Kind
115  parse(const std::string &input)
116  {
117  if (input == "continue with next timestep")
118  return continue_with_next_timestep;
119  else if (input == "cut timestep size")
120  return cut_timestep_size;
121  else if (input == "abort program")
122  return abort_program;
123  else
124  AssertThrow(false, ExcNotImplemented());
125 
126  return Kind();
127  }
128  };
129 
134  {
135  enum Kind
136  {
137  none = 0,
138  net_translation_x = 0x1,
139  net_translation_y = 0x2,
140  net_translation_z = 0x4,
141  net_translation = 0x1+0x2+0x4,
142  linear_momentum_x = 0x8,
143  linear_momentum_y = 0x10,
144  linear_momentum_z = 0x20,
145  linear_momentum = linear_momentum_x+linear_momentum_y+linear_momentum_z,
146  net_rotation = 0x40,
147  angular_momentum = 0x80,
148  net_surface_rotation = 0x100,
149  any_translation = net_translation+linear_momentum,
150  any_rotation = net_rotation+angular_momentum+net_surface_rotation,
151  };
152  };
153 
165  {
166  enum Kind
167  {
175  prescribed_field_with_diffusion
176  };
177  };
178 
185  struct Formulation
186  {
193  enum Kind
194  {
198  custom
199  };
200 
205  static
206  Kind
207  parse(const std::string &input)
208  {
209  if (input == "isentropic compression")
210  return Formulation::isentropic_compression;
211  else if (input == "anelastic liquid approximation")
212  return Formulation::anelastic_liquid_approximation;
213  else if (input == "Boussinesq approximation")
214  return Formulation::boussinesq_approximation;
215  else if (input == "custom")
216  return Formulation::custom;
217  else
218  AssertThrow(false, ExcNotImplemented());
219 
220  return Formulation::Kind();
221  }
222 
230  {
235  enum Kind
236  {
243  ask_material_model
244  };
245 
250  static Kind
251  parse(const std::string &input)
252  {
253  if (input == "isentropic compression")
254  return Formulation::MassConservation::isentropic_compression;
255  else if (input == "hydrostatic compression")
256  return Formulation::MassConservation::hydrostatic_compression;
257  else if (input == "reference density profile")
258  return Formulation::MassConservation::reference_density_profile;
259  else if (input == "implicit reference density profile")
260  return Formulation::MassConservation::implicit_reference_density_profile;
261  else if (input == "incompressible")
262  return Formulation::MassConservation::incompressible;
263  else if (input == "projected density field")
264  return Formulation::MassConservation::projected_density_field;
265  else if (input == "ask material model")
266  return Formulation::MassConservation::ask_material_model;
267  else
268  AssertThrow(false, ExcNotImplemented());
269 
271  }
272  };
273 
280  {
285  enum Kind
286  {
288  reference_density_profile
289  };
290 
295  static
296  Kind
297  parse(const std::string &input)
298  {
299  if (input == "real density")
300  return Formulation::TemperatureEquation::real_density;
301  else if (input == "reference density profile")
302  return Formulation::TemperatureEquation::reference_density_profile;
303  else
304  AssertThrow(false, ExcNotImplemented());
305 
307  }
308  };
309  };
310 
315  {
316  enum Kind
317  {
319  supg
320  };
321 
326  static
327  Kind
328  parse(const std::string &input)
329  {
330  if (input == "entropy viscosity")
331  return entropy_viscosity;
332  else if (input == "SUPG")
333  return supg;
334  else
335  AssertThrow(false, ExcNotImplemented());
336 
337  return Kind();
338  }
339 
340  static std::string get_options_string()
341  {
342  return "entropy viscosity|SUPG";
343  }
344  };
345 
351  {
352  enum Kind
353  {
357  default_solver
358  };
359 
360  static const std::string pattern()
361  {
362  return "default solver|block AMG|direct solver|block GMG";
363  }
364 
365  static Kind
366  parse(const std::string &input)
367  {
368  if (input == "block AMG")
369  return block_amg;
370  else if (input == "direct solver")
371  return direct_solver;
372  else if (input == "block GMG")
373  return block_gmg;
374  else if (input == "default solver")
375  return default_solver;
376  else
377  AssertThrow(false, ExcNotImplemented());
378 
379  return Kind();
380  }
381  };
382 
388  {
389  enum Kind
390  {
392  idr_s
393  };
394 
395  static const std::string pattern()
396  {
397  return "GMRES|IDR(s)";
398  }
399 
400  static Kind
401  parse(const std::string &input)
402  {
403  if (input == "GMRES")
404  return gmres;
405  else if (input == "IDR(s)")
406  return idr_s;
407  else
408  AssertThrow(false, ExcNotImplemented());
409 
410  return Kind();
411  }
412  };
413 
419  {
420  enum Kind
421  {
423  fixed_step
424  };
425 
426  static const std::string pattern()
427  {
428  return "ARKode|fixed step";
429  }
430 
431  static Kind
432  parse(const std::string &input)
433  {
434  if (input == "ARKode")
435  return ARKode;
436  else if (input == "fixed step")
437  return fixed_step;
438  else
439  AssertThrow(false, ExcNotImplemented());
440 
441  return Kind();
442  }
443  };
444 
449 
461  Parameters (ParameterHandler &prm,
462  const MPI_Comm mpi_communicator);
463 
472  static
473  void declare_parameters (ParameterHandler &prm);
474 
490  void parse_parameters (ParameterHandler &prm,
491  const MPI_Comm mpi_communicator);
492 
509  void parse_geometry_dependent_parameters (ParameterHandler &prm,
510  const GeometryModel::Interface<dim> &geometry_model);
511 
518 
522  double start_time;
523  double end_time;
524  double CFL_number;
531  std::string output_directory;
538  std::string world_builder_file;
539  unsigned int n_particle_managers;
540 
551 
552  // subsection: Advection solver parameters
554 
555  // subsection: Stokes solver parameters
557  bool use_bfbt;
560  unsigned int idr_s_parameter;
561 
570 
571  // subsection: AMG parameters
572  std::string AMG_smoother_type;
573  unsigned int AMG_smoother_sweeps;
576 
577  // subsection: Operator splitting parameters
582 
583  // subsection: Diffusion solver parameters
585 
604 
612 
619 
625 
637 
642  std::set<types::boundary_id> fixed_heat_flux_boundary_indicators;
643 
662  unsigned int min_grid_level;
663  std::vector<double> additional_refinement_times;
678  unsigned int stabilization_alpha;
679  std::vector<double> stabilization_c_R;
680  std::vector<double> stabilization_beta;
687  std::vector<double> global_composition_max_preset;
688  std::vector<double> global_composition_min_preset;
689 
715  unsigned int temperature_degree;
716  std::vector<unsigned int> composition_degrees;
720 
731 
741  std::vector<std::string> names_of_compositional_fields;
742  std::vector<aspect::CompositionalFieldDescription> composition_descriptions;
744  std::vector<unsigned int> chemical_composition_indices;
745 
750  std::vector<typename AdvectionFieldMethod::Kind> compositional_field_methods;
751 
761  std::map<unsigned int, std::pair<std::string,unsigned int>> mapped_particle_properties;
762 
763  std::vector<unsigned int> normalized_fields;
786  };
787 
788 }
789 #endif
The NullspaceRemoval struct.
Definition: parameters.h:133
bool use_full_A_block_preconditioner
Definition: parameters.h:566
unsigned int min_grid_level
Definition: parameters.h:662
unsigned int n_expensive_stokes_solver_steps
Definition: parameters.h:564
std::vector< double > global_composition_min_preset
Definition: parameters.h:688
static Kind parse(const std::string &input)
Definition: parameters.h:401
double linear_stokes_solver_tolerance
Definition: parameters.h:562
unsigned int n_cheap_stokes_solver_steps
Definition: parameters.h:563
double maximum_time_step
Definition: parameters.h:525
static Kind parse(const std::string &input)
Definition: parameters.h:366
unsigned int initial_adaptive_refinement
Definition: parameters.h:658
double coarsening_fraction
Definition: parameters.h:660
std::vector< unsigned int > normalized_fields
Definition: parameters.h:763
double maximum_first_time_step
Definition: parameters.h:527
static Kind parse(const std::string &input)
Definition: parameters.h:297
double global_temperature_max_preset
Definition: parameters.h:685
unsigned int initial_global_refinement
Definition: parameters.h:657
static const std::string pattern()
Definition: parameters.h:360
double AMG_aggregation_threshold
Definition: parameters.h:574
std::vector< bool > use_discontinuous_composition_discretization
Definition: parameters.h:713
unsigned int stabilization_alpha
Definition: parameters.h:678
double linear_solver_A_block_tolerance
Definition: parameters.h:565
std::vector< double > additional_refinement_times
Definition: parameters.h:663
std::map< unsigned int, std::pair< std::string, unsigned int > > mapped_particle_properties
Definition: parameters.h:761
bool use_limiter_for_discontinuous_temperature_solution
Definition: parameters.h:683
bool use_locally_conservative_discretization
Definition: parameters.h:710
double nonlinear_tolerance
Definition: parameters.h:520
unsigned int stokes_gmres_restart_length
Definition: parameters.h:569
static Kind parse(const std::string &input)
Definition: parameters.h:328
unsigned int temperature_degree
Definition: parameters.h:715
unsigned int idr_s_parameter
Definition: parameters.h:560
bool force_nonsymmetric_A_block_solver
Definition: parameters.h:567
bool mesh_deformation_enabled
Definition: parameters.h:771
Formulation::MassConservation::Kind formulation_mass_conservation
Definition: parameters.h:611
bool skip_solvers_on_initial_refinement
Definition: parameters.h:665
bool run_postprocessors_on_initial_refinement
Definition: parameters.h:667
bool adapt_by_fraction_of_cells
Definition: parameters.h:661
AdvectionFieldMethod::Kind temperature_method
Definition: parameters.h:730
bool have_discontinuous_composition_discretization
Definition: parameters.h:714
unsigned int AMG_smoother_sweeps
Definition: parameters.h:573
void declare_parameters(ParameterHandler &prm)
double temperature_solver_tolerance
Definition: parameters.h:549
NonlinearSolver::Kind nonlinear_solver
Definition: parameters.h:516
std::string world_builder_file
Definition: parameters.h:538
std::vector< bool > use_limiter_for_discontinuous_composition_solution
Definition: parameters.h:684
AdvectionStabilizationMethod::Kind advection_stabilization_method
Definition: parameters.h:519
unsigned int stokes_velocity_degree
Definition: parameters.h:709
bool enable_additional_stokes_rhs
Definition: parameters.h:635
NullspaceRemoval::Kind nullspace_removal
Definition: parameters.h:648
static const std::string pattern()
Definition: parameters.h:395
bool use_artificial_viscosity_smoothing
Definition: parameters.h:528
double discontinuous_penalty
Definition: parameters.h:682
bool volume_of_fluid_tracking_enabled
Definition: parameters.h:780
double reaction_time_step
Definition: parameters.h:580
double stabilization_gamma
Definition: parameters.h:681
double linear_solver_S_block_tolerance
Definition: parameters.h:568
bool use_direct_stokes_solver
Definition: parameters.h:556
bool use_operator_splitting
Definition: parameters.h:537
double refinement_fraction
Definition: parameters.h:659
unsigned int n_compositional_fields
Definition: parameters.h:740
unsigned int max_composition_degree
Definition: parameters.h:717
std::vector< unsigned int > composition_degrees
Definition: parameters.h:716
MaterialModel::MaterialAveraging::AveragingOperation material_averaging
Definition: parameters.h:719
unsigned int reaction_steps_per_advection_step
Definition: parameters.h:581
unsigned int n_particle_managers
Definition: parameters.h:539
bool use_conduction_timestep
Definition: parameters.h:529
double maximum_relative_increase_time_step
Definition: parameters.h:526
double composition_solver_tolerance
Definition: parameters.h:550
std::vector< std::string > names_of_compositional_fields
Definition: parameters.h:741
unsigned int max_nonlinear_iterations
Definition: parameters.h:535
NonlinearSolverFailureStrategy::Kind nonlinear_solver_failure_strategy
Definition: parameters.h:517
Definition: compat.h:59
bool run_postprocessors_on_nonlinear_iterations
Definition: parameters.h:668
bool use_discontinuous_temperature_discretization
Definition: parameters.h:712
static Kind parse(const std::string &input)
Definition: parameters.h:251
static Kind parse(const std::string &input)
Definition: parameters.h:115
static bool is_defect_correction(const typename NonlinearSolver::Kind &input)
Definition: parameters.h:85
std::set< types::boundary_id > fixed_heat_flux_boundary_indicators
Definition: parameters.h:642
std::string output_directory
Definition: parameters.h:531
std::vector< double > stabilization_beta
Definition: parameters.h:680
std::vector< aspect::CompositionalFieldDescription > composition_descriptions
Definition: parameters.h:742
std::vector< double > stabilization_c_R
Definition: parameters.h:679
std::vector< std::string > compositional_fields_with_disabled_boundary_entropy_viscosity
Definition: parameters.h:690
std::string pressure_normalization
Definition: parameters.h:718
bool use_equal_order_interpolation_for_stokes
Definition: parameters.h:711
double ARKode_relative_tolerance
Definition: parameters.h:579
StokesSolverType::Kind stokes_solver_type
Definition: parameters.h:558
unsigned int advection_gmres_restart_length
Definition: parameters.h:553
bool enable_prescribed_dilation
Definition: parameters.h:636
static const std::string pattern()
Definition: parameters.h:426
std::string AMG_smoother_type
Definition: parameters.h:572
double surface_pressure
Definition: parameters.h:532
StokesKrylovType::Kind stokes_krylov_type
Definition: parameters.h:559
double global_temperature_min_preset
Definition: parameters.h:686
Formulation::TemperatureEquation::Kind formulation_temperature_equation
Definition: parameters.h:618
static Kind parse(const std::string &input)
Definition: parameters.h:432
bool include_melt_transport
Definition: parameters.h:634
double adiabatic_surface_temperature
Definition: parameters.h:533
std::vector< unsigned int > chemical_composition_indices
Definition: parameters.h:744
unsigned int max_nonlinear_iterations_in_prerefinement
Definition: parameters.h:536
std::vector< double > global_composition_max_preset
Definition: parameters.h:687
unsigned int timing_output_frequency
Definition: parameters.h:534
std::vector< typename AdvectionFieldMethod::Kind > compositional_field_methods
Definition: parameters.h:750
Formulation::Kind formulation
Definition: parameters.h:603
unsigned int n_chemical_compositions
Definition: parameters.h:743
bool skip_setup_initial_conditions_on_initial_refinement
Definition: parameters.h:666
unsigned int adaptive_refinement_interval
Definition: parameters.h:664
ReactionSolverType::Kind reaction_solver_type
Definition: parameters.h:578
double diffusion_length_scale
Definition: parameters.h:584
static Kind parse(const std::string &input)
Definition: parameters.h:207