ASPECT
parameters.h
Go to the documentation of this file.
1 // ------------------------------------------------------
2 //
3 // SPDX-License-Identifier: GPL-2.0-or-later
4 //
5 // SPDX-FileCopyrightText: Copyright (C) 2011-2026 by the ASPECT authors.
6 //
7 // This file is part of ASPECT.
8 //
9 // Detailed license information governing the source code and
10 // contributions can be found in the folder LICENSES and in
11 // LICENSE and CONTRIBUTING.md at the top level directory.
12 //
13 // ------------------------------------------------------
14 
15 
16 #ifndef _aspect_parameters_h
17 #define _aspect_parameters_h
18 
20 
21 #include <aspect/global.h>
23 
24 
25 namespace aspect
26 {
27  struct CompositionalFieldDescription;
28 
29  // forward declaration:
30  namespace GeometryModel
31  {
32  template <int dim>
33  class Interface;
34  }
35 
49  template <int dim>
50  struct Parameters
51  {
52 
58  {
59  enum Kind
60  {
74  iterated_Advection_and_Newton_Stokes
75  };
76  };
77 
78  static
79  bool
81  {
82  return input == NonlinearSolver::iterated_Advection_and_Newton_Stokes ||
83  input == NonlinearSolver::single_Advection_iterated_Newton_Stokes ||
84  input == NonlinearSolver::no_Advection_iterated_defect_correction_Stokes ||
85  input == NonlinearSolver::single_Advection_iterated_defect_correction_Stokes ||
86  input == NonlinearSolver::iterated_Advection_and_defect_correction_Stokes
87  ?
88  true
89  :
90  false;
91  }
92 
93  static
94  bool
96  {
97  return input == NonlinearSolver::no_Advection_iterated_Stokes ||
98  input == NonlinearSolver::no_Advection_iterated_defect_correction_Stokes ||
99  input == NonlinearSolver::single_Advection_iterated_Stokes ||
100  input == NonlinearSolver::single_Advection_iterated_defect_correction_Stokes ||
101  input == NonlinearSolver::single_Advection_iterated_Newton_Stokes ||
102  input == NonlinearSolver::iterated_Advection_and_Stokes ||
103  input == NonlinearSolver::iterated_Advection_and_defect_correction_Stokes ||
104  input == NonlinearSolver::iterated_Advection_and_Newton_Stokes
105  ?
106  true
107  :
108  false;
109  }
110 
115  {
116  enum Kind
117  {
120  abort_program
121  };
122 
126  static
127  Kind
128  parse(const std::string &input)
129  {
130  if (input == "continue with next timestep")
131  return continue_with_next_timestep;
132  else if (input == "cut timestep size")
133  return cut_timestep_size;
134  else if (input == "abort program")
135  return abort_program;
136  else
137  AssertThrow(false, ExcNotImplemented());
138 
139  return Kind();
140  }
141  };
142 
147  {
148  enum Kind
149  {
151  abort
152  };
153 
157  static
158  Kind
159  parse(const std::string &input)
160  {
161  if (input == "continue with nonlinear solver")
162  return continue_with_nonlinear_solver;
163  else if (input == "abort")
164  return abort;
165  else
166  AssertThrow(false, ExcNotImplemented());
167  }
168  };
169 
174  {
175  enum Kind
176  {
177  none = 0,
178  net_translation_x = 0x1,
179  net_translation_y = 0x2,
180  net_translation_z = 0x4,
181  net_translation = 0x1+0x2+0x4,
182  linear_momentum_x = 0x8,
183  linear_momentum_y = 0x10,
184  linear_momentum_z = 0x20,
185  linear_momentum = linear_momentum_x+linear_momentum_y+linear_momentum_z,
186  net_rotation = 0x40,
187  angular_momentum = 0x80,
188  net_surface_rotation = 0x100,
189  any_translation = net_translation+linear_momentum,
190  any_rotation = net_rotation+angular_momentum+net_surface_rotation,
191  };
192  };
193 
205  {
206  enum Kind
207  {
215  prescribed_field_with_diffusion
216  };
217  };
218 
225  struct Formulation
226  {
233  enum Kind
234  {
238  custom
239  };
240 
245  static
246  Kind
247  parse(const std::string &input)
248  {
249  if (input == "isentropic compression")
250  return Formulation::isentropic_compression;
251  else if (input == "anelastic liquid approximation")
252  return Formulation::anelastic_liquid_approximation;
253  else if (input == "Boussinesq approximation")
254  return Formulation::boussinesq_approximation;
255  else if (input == "custom")
256  return Formulation::custom;
257  else
258  AssertThrow(false, ExcNotImplemented());
259 
260  return Formulation::Kind();
261  }
262 
270  {
275  enum Kind
276  {
283  ask_material_model
284  };
285 
290  static Kind
291  parse(const std::string &input)
292  {
293  if (input == "isentropic compression")
294  return Formulation::MassConservation::isentropic_compression;
295  else if (input == "hydrostatic compression")
296  return Formulation::MassConservation::hydrostatic_compression;
297  else if (input == "reference density profile")
298  return Formulation::MassConservation::reference_density_profile;
299  else if (input == "implicit reference density profile")
300  return Formulation::MassConservation::implicit_reference_density_profile;
301  else if (input == "incompressible")
302  return Formulation::MassConservation::incompressible;
303  else if (input == "projected density field")
304  return Formulation::MassConservation::projected_density_field;
305  else if (input == "ask material model")
306  return Formulation::MassConservation::ask_material_model;
307  else
308  AssertThrow(false, ExcNotImplemented());
309 
311  }
312  };
313 
320  {
325  enum Kind
326  {
328  reference_density_profile
329  };
330 
335  static
336  Kind
337  parse(const std::string &input)
338  {
339  if (input == "real density")
340  return Formulation::TemperatureEquation::real_density;
341  else if (input == "reference density profile")
342  return Formulation::TemperatureEquation::reference_density_profile;
343  else
344  AssertThrow(false, ExcNotImplemented());
345 
347  }
348  };
349  };
350 
355  {
356  enum Kind
357  {
359  supg
360  };
361 
366  static
367  Kind
368  parse(const std::string &input)
369  {
370  if (input == "entropy viscosity")
371  return entropy_viscosity;
372  else if (input == "SUPG")
373  return supg;
374  else
375  AssertThrow(false, ExcNotImplemented());
376 
377  return Kind();
378  }
379 
380  static std::string get_options_string()
381  {
382  return "entropy viscosity|SUPG";
383  }
384  };
385 
391  {
392  enum Kind
393  {
397  default_solver
398  };
399 
400  static const std::string pattern()
401  {
402  return "default solver|block AMG|direct solver|block GMG";
403  }
404 
405  static Kind
406  parse(const std::string &input)
407  {
408  if (input == "block AMG")
409  return block_amg;
410  else if (input == "direct solver")
411  return direct_solver;
412  else if (input == "block GMG")
413  return block_gmg;
414  else if (input == "default solver")
415  return default_solver;
416  else
417  AssertThrow(false, ExcNotImplemented());
418 
419  return Kind();
420  }
421  };
422 
428  {
429  enum Kind
430  {
432  global_coarsening
433  };
434 
435  static const std::string pattern()
436  {
437  return "local smoothing|global coarsening";
438  }
439 
440  static Kind
441  parse(const std::string &input)
442  {
443  if (input == "local smoothing")
444  return local_smoothing;
445  else if (input == "global coarsening")
446  return global_coarsening;
447  else
448  AssertThrow(false, ExcNotImplemented());
449 
450  return Kind();
451  }
452  };
453 
459  {
460  enum Kind
461  {
463  idr_s
464  };
465 
466  static const std::string pattern()
467  {
468  return "GMRES|IDR(s)";
469  }
470 
471  static Kind
472  parse(const std::string &input)
473  {
474  if (input == "GMRES")
475  return gmres;
476  else if (input == "IDR(s)")
477  return idr_s;
478  else
479  AssertThrow(false, ExcNotImplemented());
480 
481  return Kind();
482  }
483  };
484 
490  {
491  enum Kind
492  {
494  fixed_step
495  };
496 
497  static const std::string pattern()
498  {
499  return "ARKode|fixed step";
500  }
501 
502  static Kind
503  parse(const std::string &input)
504  {
505  if (input == "ARKode")
506  return ARKode;
507  else if (input == "fixed step")
508  return fixed_step;
509  else
510  AssertThrow(false, ExcNotImplemented());
511 
512  return Kind();
513  }
514  };
515 
520 
533  const MPI_Comm mpi_communicator);
534 
545  static
546  void declare_parameters (ParameterHandler &prm, const unsigned int mpi_rank);
547 
563  void parse_parameters (ParameterHandler &prm,
564  const MPI_Comm mpi_communicator);
565 
582  void parse_geometry_dependent_parameters (ParameterHandler &prm,
583  const GeometryModel::Interface<dim> &geometry_model);
584 
592 
596  double start_time;
597  double end_time;
598  double CFL_number;
605  std::string output_directory;
612  std::string world_builder_file;
613  unsigned int n_particle_managers;
614 
625 
626  // subsection: Advection solver parameters
628 
629  // subsection: Stokes solver parameters
631  bool use_bfbt;
635  unsigned int idr_s_parameter;
636 
645 
646  // subsection: AMG parameters
647  std::string AMG_smoother_type;
648  unsigned int AMG_smoother_sweeps;
651 
652  // subsection: Operator splitting parameters
657 
658  // subsection: Diffusion solver parameters
660 
679 
687 
694 
700 
712 
717  std::set<types::boundary_id> fixed_heat_flux_boundary_indicators;
718 
737  unsigned int min_grid_level;
738  std::vector<double> additional_refinement_times;
753  unsigned int stabilization_alpha;
754  std::vector<double> stabilization_c_R;
755  std::vector<double> stabilization_beta;
762  std::vector<double> global_composition_max_preset;
763  std::vector<double> global_composition_min_preset;
764 
776  std::vector<double> additional_checkpoint_times;
777  unsigned int n_checkpoints_to_keep;
779  unsigned int resume_checkpoint_id;
780  double resume_time;
795  unsigned int temperature_degree;
796  std::vector<unsigned int> composition_degrees;
800 
811 
821  std::vector<std::string> names_of_compositional_fields;
822  std::vector<aspect::CompositionalFieldDescription> composition_descriptions;
824  std::vector<unsigned int> chemical_composition_indices;
827 
832  std::vector<typename AdvectionFieldMethod::Kind> compositional_field_methods;
833 
843  std::map<unsigned int, std::pair<std::string,unsigned int>> mapped_particle_properties;
844 
845  std::vector<unsigned int> normalized_fields;
868  };
869 
870 }
871 #endif
The NullspaceRemoval struct.
Definition: parameters.h:173
bool use_full_A_block_preconditioner
Definition: parameters.h:641
unsigned int min_grid_level
Definition: parameters.h:737
unsigned int n_expensive_stokes_solver_steps
Definition: parameters.h:639
std::vector< double > global_composition_min_preset
Definition: parameters.h:763
static Kind parse(const std::string &input)
Definition: parameters.h:472
double linear_stokes_solver_tolerance
Definition: parameters.h:637
bool use_pressure_gradient_for_darcy_field
Definition: parameters.h:826
unsigned int n_cheap_stokes_solver_steps
Definition: parameters.h:638
double maximum_time_step
Definition: parameters.h:599
static Kind parse(const std::string &input)
Definition: parameters.h:406
unsigned int initial_adaptive_refinement
Definition: parameters.h:733
double coarsening_fraction
Definition: parameters.h:735
std::vector< unsigned int > normalized_fields
Definition: parameters.h:845
double maximum_first_time_step
Definition: parameters.h:601
static Kind parse(const std::string &input)
Definition: parameters.h:337
double global_temperature_max_preset
Definition: parameters.h:760
unsigned int initial_global_refinement
Definition: parameters.h:732
static const std::string pattern()
Definition: parameters.h:400
double AMG_aggregation_threshold
Definition: parameters.h:649
std::vector< bool > use_discontinuous_composition_discretization
Definition: parameters.h:793
unsigned int stabilization_alpha
Definition: parameters.h:753
double linear_solver_A_block_tolerance
Definition: parameters.h:640
std::vector< double > additional_refinement_times
Definition: parameters.h:738
std::map< unsigned int, std::pair< std::string, unsigned int > > mapped_particle_properties
Definition: parameters.h:843
bool use_limiter_for_discontinuous_temperature_solution
Definition: parameters.h:758
bool use_locally_conservative_discretization
Definition: parameters.h:790
#define AssertThrow(cond, exc)
double nonlinear_tolerance
Definition: parameters.h:594
unsigned int stokes_gmres_restart_length
Definition: parameters.h:644
static Kind parse(const std::string &input)
Definition: parameters.h:368
static Kind parse(const std::string &input)
Definition: parameters.h:159
unsigned int temperature_degree
Definition: parameters.h:795
unsigned int idr_s_parameter
Definition: parameters.h:635
bool force_nonsymmetric_A_block_solver
Definition: parameters.h:642
bool mesh_deformation_enabled
Definition: parameters.h:853
Formulation::MassConservation::Kind formulation_mass_conservation
Definition: parameters.h:686
bool skip_solvers_on_initial_refinement
Definition: parameters.h:740
bool run_postprocessors_on_initial_refinement
Definition: parameters.h:742
bool adapt_by_fraction_of_cells
Definition: parameters.h:736
AdvectionFieldMethod::Kind temperature_method
Definition: parameters.h:810
bool have_discontinuous_composition_discretization
Definition: parameters.h:794
unsigned int AMG_smoother_sweeps
Definition: parameters.h:648
void declare_parameters(ParameterHandler &prm)
static ::ExceptionBase & ExcNotImplemented()
unsigned int resume_checkpoint_id
Definition: parameters.h:779
double temperature_solver_tolerance
Definition: parameters.h:623
NonlinearSolver::Kind nonlinear_solver
Definition: parameters.h:589
std::string world_builder_file
Definition: parameters.h:612
std::vector< bool > use_limiter_for_discontinuous_composition_solution
Definition: parameters.h:759
AdvectionStabilizationMethod::Kind advection_stabilization_method
Definition: parameters.h:593
unsigned int stokes_velocity_degree
Definition: parameters.h:789
bool enable_additional_stokes_rhs
Definition: parameters.h:710
NullspaceRemoval::Kind nullspace_removal
Definition: parameters.h:723
static Kind parse(const std::string &input)
Definition: parameters.h:441
static const std::string pattern()
Definition: parameters.h:435
static const std::string pattern()
Definition: parameters.h:466
bool use_artificial_viscosity_smoothing
Definition: parameters.h:602
double discontinuous_penalty
Definition: parameters.h:757
bool volume_of_fluid_tracking_enabled
Definition: parameters.h:862
static bool solve_Stokes_iteratively(const typename NonlinearSolver::Kind &input)
Definition: parameters.h:95
double reaction_time_step
Definition: parameters.h:655
double stabilization_gamma
Definition: parameters.h:756
double linear_solver_S_block_tolerance
Definition: parameters.h:643
bool use_direct_stokes_solver
Definition: parameters.h:630
bool use_operator_splitting
Definition: parameters.h:611
double refinement_fraction
Definition: parameters.h:734
unsigned int n_compositional_fields
Definition: parameters.h:820
unsigned int max_composition_degree
Definition: parameters.h:797
std::vector< unsigned int > composition_degrees
Definition: parameters.h:796
MaterialModel::MaterialAveraging::AveragingOperation material_averaging
Definition: parameters.h:799
unsigned int reaction_steps_per_advection_step
Definition: parameters.h:656
double minimum_composition_fraction
Definition: parameters.h:825
unsigned int n_particle_managers
Definition: parameters.h:613
bool use_conduction_timestep
Definition: parameters.h:603
double maximum_relative_increase_time_step
Definition: parameters.h:600
double composition_solver_tolerance
Definition: parameters.h:624
std::vector< std::string > names_of_compositional_fields
Definition: parameters.h:821
unsigned int max_nonlinear_iterations
Definition: parameters.h:609
NonlinearSolverFailureStrategy::Kind nonlinear_solver_failure_strategy
Definition: parameters.h:590
bool run_postprocessors_on_nonlinear_iterations
Definition: parameters.h:743
bool use_discontinuous_temperature_discretization
Definition: parameters.h:792
static Kind parse(const std::string &input)
Definition: parameters.h:291
static Kind parse(const std::string &input)
Definition: parameters.h:128
static bool is_defect_correction(const typename NonlinearSolver::Kind &input)
Definition: parameters.h:80
StokesGMGType::Kind stokes_gmg_type
Definition: parameters.h:633
std::set< types::boundary_id > fixed_heat_flux_boundary_indicators
Definition: parameters.h:717
std::string output_directory
Definition: parameters.h:605
std::vector< double > stabilization_beta
Definition: parameters.h:755
std::vector< aspect::CompositionalFieldDescription > composition_descriptions
Definition: parameters.h:822
std::vector< double > stabilization_c_R
Definition: parameters.h:754
LinearSolverFailureStrategy::Kind linear_solver_failure_strategy
Definition: parameters.h:591
std::vector< std::string > compositional_fields_with_disabled_boundary_entropy_viscosity
Definition: parameters.h:765
std::string pressure_normalization
Definition: parameters.h:798
bool use_equal_order_interpolation_for_stokes
Definition: parameters.h:791
double ARKode_relative_tolerance
Definition: parameters.h:654
StokesSolverType::Kind stokes_solver_type
Definition: parameters.h:632
unsigned int advection_gmres_restart_length
Definition: parameters.h:627
bool enable_prescribed_dilation
Definition: parameters.h:711
static const std::string pattern()
Definition: parameters.h:497
std::string AMG_smoother_type
Definition: parameters.h:647
double surface_pressure
Definition: parameters.h:606
StokesKrylovType::Kind stokes_krylov_type
Definition: parameters.h:634
double global_temperature_min_preset
Definition: parameters.h:761
Formulation::TemperatureEquation::Kind formulation_temperature_equation
Definition: parameters.h:693
static Kind parse(const std::string &input)
Definition: parameters.h:503
unsigned int n_checkpoints_to_keep
Definition: parameters.h:777
bool include_melt_transport
Definition: parameters.h:709
double adiabatic_surface_temperature
Definition: parameters.h:607
std::vector< unsigned int > chemical_composition_indices
Definition: parameters.h:824
unsigned int max_nonlinear_iterations_in_prerefinement
Definition: parameters.h:610
std::vector< double > global_composition_max_preset
Definition: parameters.h:762
unsigned int timing_output_frequency
Definition: parameters.h:608
std::vector< typename AdvectionFieldMethod::Kind > compositional_field_methods
Definition: parameters.h:832
unsigned int n_additional_checkpoints_to_keep
Definition: parameters.h:778
Formulation::Kind formulation
Definition: parameters.h:678
std::vector< double > additional_checkpoint_times
Definition: parameters.h:776
unsigned int n_chemical_compositions
Definition: parameters.h:823
bool skip_setup_initial_conditions_on_initial_refinement
Definition: parameters.h:741
unsigned int adaptive_refinement_interval
Definition: parameters.h:739
ReactionSolverType::Kind reaction_solver_type
Definition: parameters.h:653
double diffusion_length_scale
Definition: parameters.h:659
static Kind parse(const std::string &input)
Definition: parameters.h:247