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  {
80  iterated_Advection_and_Newton_Stokes
81  };
82  };
83 
84  static
85  bool
87  {
88  return input == NonlinearSolver::iterated_Advection_and_Newton_Stokes ||
89  input == NonlinearSolver::single_Advection_iterated_Newton_Stokes ||
90  input == NonlinearSolver::no_Advection_iterated_defect_correction_Stokes ||
91  input == NonlinearSolver::single_Advection_iterated_defect_correction_Stokes ||
92  input == NonlinearSolver::iterated_Advection_and_defect_correction_Stokes
93  ?
94  true
95  :
96  false;
97  }
98 
103  {
104  enum Kind
105  {
108  abort_program
109  };
110 
114  static
115  Kind
116  parse(const std::string &input)
117  {
118  if (input == "continue with next timestep")
119  return continue_with_next_timestep;
120  else if (input == "cut timestep size")
121  return cut_timestep_size;
122  else if (input == "abort program")
123  return abort_program;
124  else
125  AssertThrow(false, ExcNotImplemented());
126 
127  return Kind();
128  }
129  };
130 
135  {
136  enum Kind
137  {
138  none = 0,
139  net_translation_x = 0x1,
140  net_translation_y = 0x2,
141  net_translation_z = 0x4,
142  net_translation = 0x1+0x2+0x4,
143  linear_momentum_x = 0x8,
144  linear_momentum_y = 0x10,
145  linear_momentum_z = 0x20,
146  linear_momentum = linear_momentum_x+linear_momentum_y+linear_momentum_z,
147  net_rotation = 0x40,
148  angular_momentum = 0x80,
149  net_surface_rotation = 0x100,
150  any_translation = net_translation+linear_momentum,
151  any_rotation = net_rotation+angular_momentum+net_surface_rotation,
152  };
153  };
154 
166  {
167  enum Kind
168  {
176  prescribed_field_with_diffusion
177  };
178  };
179 
186  struct Formulation
187  {
194  enum Kind
195  {
199  custom
200  };
201 
206  static
207  Kind
208  parse(const std::string &input)
209  {
210  if (input == "isentropic compression")
211  return Formulation::isentropic_compression;
212  else if (input == "anelastic liquid approximation")
213  return Formulation::anelastic_liquid_approximation;
214  else if (input == "Boussinesq approximation")
215  return Formulation::boussinesq_approximation;
216  else if (input == "custom")
217  return Formulation::custom;
218  else
219  AssertThrow(false, ExcNotImplemented());
220 
221  return Formulation::Kind();
222  }
223 
231  {
236  enum Kind
237  {
244  ask_material_model
245  };
246 
251  static Kind
252  parse(const std::string &input)
253  {
254  if (input == "isentropic compression")
255  return Formulation::MassConservation::isentropic_compression;
256  else if (input == "hydrostatic compression")
257  return Formulation::MassConservation::hydrostatic_compression;
258  else if (input == "reference density profile")
259  return Formulation::MassConservation::reference_density_profile;
260  else if (input == "implicit reference density profile")
261  return Formulation::MassConservation::implicit_reference_density_profile;
262  else if (input == "incompressible")
263  return Formulation::MassConservation::incompressible;
264  else if (input == "projected density field")
265  return Formulation::MassConservation::projected_density_field;
266  else if (input == "ask material model")
267  return Formulation::MassConservation::ask_material_model;
268  else
269  AssertThrow(false, ExcNotImplemented());
270 
272  }
273  };
274 
281  {
286  enum Kind
287  {
289  reference_density_profile
290  };
291 
296  static
297  Kind
298  parse(const std::string &input)
299  {
300  if (input == "real density")
301  return Formulation::TemperatureEquation::real_density;
302  else if (input == "reference density profile")
303  return Formulation::TemperatureEquation::reference_density_profile;
304  else
305  AssertThrow(false, ExcNotImplemented());
306 
308  }
309  };
310  };
311 
316  {
317  enum Kind
318  {
320  supg
321  };
322 
327  static
328  Kind
329  parse(const std::string &input)
330  {
331  if (input == "entropy viscosity")
332  return entropy_viscosity;
333  else if (input == "SUPG")
334  return supg;
335  else
336  AssertThrow(false, ExcNotImplemented());
337 
338  return Kind();
339  }
340 
341  static std::string get_options_string()
342  {
343  return "entropy viscosity|SUPG";
344  }
345  };
346 
352  {
353  enum Kind
354  {
358  default_solver
359  };
360 
361  static const std::string pattern()
362  {
363  return "default solver|block AMG|direct solver|block GMG";
364  }
365 
366  static Kind
367  parse(const std::string &input)
368  {
369  if (input == "block AMG")
370  return block_amg;
371  else if (input == "direct solver")
372  return direct_solver;
373  else if (input == "block GMG")
374  return block_gmg;
375  else if (input == "default solver")
376  return default_solver;
377  else
378  AssertThrow(false, ExcNotImplemented());
379 
380  return Kind();
381  }
382  };
383 
389  {
390  enum Kind
391  {
393  global_coarsening
394  };
395 
396  static const std::string pattern()
397  {
398  return "local smoothing|global coarsening";
399  }
400 
401  static Kind
402  parse(const std::string &input)
403  {
404  if (input == "local smoothing")
405  return local_smoothing;
406  else if (input == "global coarsening")
407  return global_coarsening;
408  else
409  AssertThrow(false, ExcNotImplemented());
410 
411  return Kind();
412  }
413  };
414 
420  {
421  enum Kind
422  {
424  idr_s
425  };
426 
427  static const std::string pattern()
428  {
429  return "GMRES|IDR(s)";
430  }
431 
432  static Kind
433  parse(const std::string &input)
434  {
435  if (input == "GMRES")
436  return gmres;
437  else if (input == "IDR(s)")
438  return idr_s;
439  else
440  AssertThrow(false, ExcNotImplemented());
441 
442  return Kind();
443  }
444  };
445 
451  {
452  enum Kind
453  {
455  fixed_step
456  };
457 
458  static const std::string pattern()
459  {
460  return "ARKode|fixed step";
461  }
462 
463  static Kind
464  parse(const std::string &input)
465  {
466  if (input == "ARKode")
467  return ARKode;
468  else if (input == "fixed step")
469  return fixed_step;
470  else
471  AssertThrow(false, ExcNotImplemented());
472 
473  return Kind();
474  }
475  };
476 
481 
493  Parameters (ParameterHandler &prm,
494  const MPI_Comm mpi_communicator);
495 
504  static
505  void declare_parameters (ParameterHandler &prm, const unsigned int mpi_rank);
506 
522  void parse_parameters (ParameterHandler &prm,
523  const MPI_Comm mpi_communicator);
524 
541  void parse_geometry_dependent_parameters (ParameterHandler &prm,
542  const GeometryModel::Interface<dim> &geometry_model);
543 
550 
554  double start_time;
555  double end_time;
556  double CFL_number;
563  std::string output_directory;
570  std::string world_builder_file;
571  unsigned int n_particle_managers;
572 
583 
584  // subsection: Advection solver parameters
586 
587  // subsection: Stokes solver parameters
589  bool use_bfbt;
593  unsigned int idr_s_parameter;
594 
603 
604  // subsection: AMG parameters
605  std::string AMG_smoother_type;
606  unsigned int AMG_smoother_sweeps;
609 
610  // subsection: Operator splitting parameters
615 
616  // subsection: Diffusion solver parameters
618 
637 
645 
652 
658 
670 
675  std::set<types::boundary_id> fixed_heat_flux_boundary_indicators;
676 
695  unsigned int min_grid_level;
696  std::vector<double> additional_refinement_times;
711  unsigned int stabilization_alpha;
712  std::vector<double> stabilization_c_R;
713  std::vector<double> stabilization_beta;
720  std::vector<double> global_composition_max_preset;
721  std::vector<double> global_composition_min_preset;
722 
748  unsigned int temperature_degree;
749  std::vector<unsigned int> composition_degrees;
753 
764 
774  std::vector<std::string> names_of_compositional_fields;
775  std::vector<aspect::CompositionalFieldDescription> composition_descriptions;
777  std::vector<unsigned int> chemical_composition_indices;
778 
783  std::vector<typename AdvectionFieldMethod::Kind> compositional_field_methods;
784 
794  std::map<unsigned int, std::pair<std::string,unsigned int>> mapped_particle_properties;
795 
796  std::vector<unsigned int> normalized_fields;
819  };
820 
821 }
822 #endif
The NullspaceRemoval struct.
Definition: parameters.h:134
bool use_full_A_block_preconditioner
Definition: parameters.h:599
unsigned int min_grid_level
Definition: parameters.h:695
unsigned int n_expensive_stokes_solver_steps
Definition: parameters.h:597
std::vector< double > global_composition_min_preset
Definition: parameters.h:721
static Kind parse(const std::string &input)
Definition: parameters.h:433
double linear_stokes_solver_tolerance
Definition: parameters.h:595
unsigned int n_cheap_stokes_solver_steps
Definition: parameters.h:596
double maximum_time_step
Definition: parameters.h:557
static Kind parse(const std::string &input)
Definition: parameters.h:367
unsigned int initial_adaptive_refinement
Definition: parameters.h:691
double coarsening_fraction
Definition: parameters.h:693
std::vector< unsigned int > normalized_fields
Definition: parameters.h:796
double maximum_first_time_step
Definition: parameters.h:559
static Kind parse(const std::string &input)
Definition: parameters.h:298
double global_temperature_max_preset
Definition: parameters.h:718
unsigned int initial_global_refinement
Definition: parameters.h:690
static const std::string pattern()
Definition: parameters.h:361
double AMG_aggregation_threshold
Definition: parameters.h:607
std::vector< bool > use_discontinuous_composition_discretization
Definition: parameters.h:746
unsigned int stabilization_alpha
Definition: parameters.h:711
double linear_solver_A_block_tolerance
Definition: parameters.h:598
std::vector< double > additional_refinement_times
Definition: parameters.h:696
std::map< unsigned int, std::pair< std::string, unsigned int > > mapped_particle_properties
Definition: parameters.h:794
bool use_limiter_for_discontinuous_temperature_solution
Definition: parameters.h:716
bool use_locally_conservative_discretization
Definition: parameters.h:743
double nonlinear_tolerance
Definition: parameters.h:552
unsigned int stokes_gmres_restart_length
Definition: parameters.h:602
static Kind parse(const std::string &input)
Definition: parameters.h:329
unsigned int temperature_degree
Definition: parameters.h:748
unsigned int idr_s_parameter
Definition: parameters.h:593
bool force_nonsymmetric_A_block_solver
Definition: parameters.h:600
bool mesh_deformation_enabled
Definition: parameters.h:804
Formulation::MassConservation::Kind formulation_mass_conservation
Definition: parameters.h:644
bool skip_solvers_on_initial_refinement
Definition: parameters.h:698
bool run_postprocessors_on_initial_refinement
Definition: parameters.h:700
bool adapt_by_fraction_of_cells
Definition: parameters.h:694
AdvectionFieldMethod::Kind temperature_method
Definition: parameters.h:763
bool have_discontinuous_composition_discretization
Definition: parameters.h:747
unsigned int AMG_smoother_sweeps
Definition: parameters.h:606
void declare_parameters(ParameterHandler &prm)
double temperature_solver_tolerance
Definition: parameters.h:581
NonlinearSolver::Kind nonlinear_solver
Definition: parameters.h:548
std::string world_builder_file
Definition: parameters.h:570
std::vector< bool > use_limiter_for_discontinuous_composition_solution
Definition: parameters.h:717
AdvectionStabilizationMethod::Kind advection_stabilization_method
Definition: parameters.h:551
unsigned int stokes_velocity_degree
Definition: parameters.h:742
bool enable_additional_stokes_rhs
Definition: parameters.h:668
NullspaceRemoval::Kind nullspace_removal
Definition: parameters.h:681
static Kind parse(const std::string &input)
Definition: parameters.h:402
static const std::string pattern()
Definition: parameters.h:396
static const std::string pattern()
Definition: parameters.h:427
bool use_artificial_viscosity_smoothing
Definition: parameters.h:560
double discontinuous_penalty
Definition: parameters.h:715
bool volume_of_fluid_tracking_enabled
Definition: parameters.h:813
double reaction_time_step
Definition: parameters.h:613
double stabilization_gamma
Definition: parameters.h:714
double linear_solver_S_block_tolerance
Definition: parameters.h:601
bool use_direct_stokes_solver
Definition: parameters.h:588
bool use_operator_splitting
Definition: parameters.h:569
double refinement_fraction
Definition: parameters.h:692
unsigned int n_compositional_fields
Definition: parameters.h:773
unsigned int max_composition_degree
Definition: parameters.h:750
std::vector< unsigned int > composition_degrees
Definition: parameters.h:749
MaterialModel::MaterialAveraging::AveragingOperation material_averaging
Definition: parameters.h:752
unsigned int reaction_steps_per_advection_step
Definition: parameters.h:614
unsigned int n_particle_managers
Definition: parameters.h:571
bool use_conduction_timestep
Definition: parameters.h:561
double maximum_relative_increase_time_step
Definition: parameters.h:558
double composition_solver_tolerance
Definition: parameters.h:582
std::vector< std::string > names_of_compositional_fields
Definition: parameters.h:774
unsigned int max_nonlinear_iterations
Definition: parameters.h:567
NonlinearSolverFailureStrategy::Kind nonlinear_solver_failure_strategy
Definition: parameters.h:549
bool run_postprocessors_on_nonlinear_iterations
Definition: parameters.h:701
bool use_discontinuous_temperature_discretization
Definition: parameters.h:745
static Kind parse(const std::string &input)
Definition: parameters.h:252
static Kind parse(const std::string &input)
Definition: parameters.h:116
static bool is_defect_correction(const typename NonlinearSolver::Kind &input)
Definition: parameters.h:86
StokesGMGType::Kind stokes_gmg_type
Definition: parameters.h:591
std::set< types::boundary_id > fixed_heat_flux_boundary_indicators
Definition: parameters.h:675
std::string output_directory
Definition: parameters.h:563
std::vector< double > stabilization_beta
Definition: parameters.h:713
std::vector< aspect::CompositionalFieldDescription > composition_descriptions
Definition: parameters.h:775
std::vector< double > stabilization_c_R
Definition: parameters.h:712
std::vector< std::string > compositional_fields_with_disabled_boundary_entropy_viscosity
Definition: parameters.h:723
std::string pressure_normalization
Definition: parameters.h:751
bool use_equal_order_interpolation_for_stokes
Definition: parameters.h:744
double ARKode_relative_tolerance
Definition: parameters.h:612
StokesSolverType::Kind stokes_solver_type
Definition: parameters.h:590
unsigned int advection_gmres_restart_length
Definition: parameters.h:585
bool enable_prescribed_dilation
Definition: parameters.h:669
static const std::string pattern()
Definition: parameters.h:458
std::string AMG_smoother_type
Definition: parameters.h:605
double surface_pressure
Definition: parameters.h:564
StokesKrylovType::Kind stokes_krylov_type
Definition: parameters.h:592
double global_temperature_min_preset
Definition: parameters.h:719
Formulation::TemperatureEquation::Kind formulation_temperature_equation
Definition: parameters.h:651
static Kind parse(const std::string &input)
Definition: parameters.h:464
bool include_melt_transport
Definition: parameters.h:667
double adiabatic_surface_temperature
Definition: parameters.h:565
std::vector< unsigned int > chemical_composition_indices
Definition: parameters.h:777
unsigned int max_nonlinear_iterations_in_prerefinement
Definition: parameters.h:568
std::vector< double > global_composition_max_preset
Definition: parameters.h:720
unsigned int timing_output_frequency
Definition: parameters.h:566
std::vector< typename AdvectionFieldMethod::Kind > compositional_field_methods
Definition: parameters.h:783
Formulation::Kind formulation
Definition: parameters.h:636
unsigned int n_chemical_compositions
Definition: parameters.h:776
bool skip_setup_initial_conditions_on_initial_refinement
Definition: parameters.h:699
unsigned int adaptive_refinement_interval
Definition: parameters.h:697
ReactionSolverType::Kind reaction_solver_type
Definition: parameters.h:611
double diffusion_length_scale
Definition: parameters.h:617
static Kind parse(const std::string &input)
Definition: parameters.h:208