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 
99  static
100  bool
102  {
103  return input == NonlinearSolver::no_Advection_iterated_Stokes ||
104  input == NonlinearSolver::no_Advection_iterated_defect_correction_Stokes ||
105  input == NonlinearSolver::single_Advection_iterated_Stokes ||
106  input == NonlinearSolver::single_Advection_iterated_defect_correction_Stokes ||
107  input == NonlinearSolver::single_Advection_iterated_Newton_Stokes ||
108  input == NonlinearSolver::iterated_Advection_and_Stokes ||
109  input == NonlinearSolver::iterated_Advection_and_defect_correction_Stokes ||
110  input == NonlinearSolver::iterated_Advection_and_Newton_Stokes
111  ?
112  true
113  :
114  false;
115  }
116 
121  {
122  enum Kind
123  {
126  abort_program
127  };
128 
132  static
133  Kind
134  parse(const std::string &input)
135  {
136  if (input == "continue with next timestep")
137  return continue_with_next_timestep;
138  else if (input == "cut timestep size")
139  return cut_timestep_size;
140  else if (input == "abort program")
141  return abort_program;
142  else
143  AssertThrow(false, ExcNotImplemented());
144 
145  return Kind();
146  }
147  };
148 
153  {
154  enum Kind
155  {
157  abort
158  };
159 
163  static
164  Kind
165  parse(const std::string &input)
166  {
167  if (input == "continue with nonlinear solver")
168  return continue_with_nonlinear_solver;
169  else if (input == "abort")
170  return abort;
171  else
172  AssertThrow(false, ExcNotImplemented());
173  }
174  };
175 
180  {
181  enum Kind
182  {
183  none = 0,
184  net_translation_x = 0x1,
185  net_translation_y = 0x2,
186  net_translation_z = 0x4,
187  net_translation = 0x1+0x2+0x4,
188  linear_momentum_x = 0x8,
189  linear_momentum_y = 0x10,
190  linear_momentum_z = 0x20,
191  linear_momentum = linear_momentum_x+linear_momentum_y+linear_momentum_z,
192  net_rotation = 0x40,
193  angular_momentum = 0x80,
194  net_surface_rotation = 0x100,
195  any_translation = net_translation+linear_momentum,
196  any_rotation = net_rotation+angular_momentum+net_surface_rotation,
197  };
198  };
199 
211  {
212  enum Kind
213  {
221  prescribed_field_with_diffusion
222  };
223  };
224 
231  struct Formulation
232  {
239  enum Kind
240  {
244  custom
245  };
246 
251  static
252  Kind
253  parse(const std::string &input)
254  {
255  if (input == "isentropic compression")
256  return Formulation::isentropic_compression;
257  else if (input == "anelastic liquid approximation")
258  return Formulation::anelastic_liquid_approximation;
259  else if (input == "Boussinesq approximation")
260  return Formulation::boussinesq_approximation;
261  else if (input == "custom")
262  return Formulation::custom;
263  else
264  AssertThrow(false, ExcNotImplemented());
265 
266  return Formulation::Kind();
267  }
268 
276  {
281  enum Kind
282  {
289  ask_material_model
290  };
291 
296  static Kind
297  parse(const std::string &input)
298  {
299  if (input == "isentropic compression")
300  return Formulation::MassConservation::isentropic_compression;
301  else if (input == "hydrostatic compression")
302  return Formulation::MassConservation::hydrostatic_compression;
303  else if (input == "reference density profile")
304  return Formulation::MassConservation::reference_density_profile;
305  else if (input == "implicit reference density profile")
306  return Formulation::MassConservation::implicit_reference_density_profile;
307  else if (input == "incompressible")
308  return Formulation::MassConservation::incompressible;
309  else if (input == "projected density field")
310  return Formulation::MassConservation::projected_density_field;
311  else if (input == "ask material model")
312  return Formulation::MassConservation::ask_material_model;
313  else
314  AssertThrow(false, ExcNotImplemented());
315 
317  }
318  };
319 
326  {
331  enum Kind
332  {
334  reference_density_profile
335  };
336 
341  static
342  Kind
343  parse(const std::string &input)
344  {
345  if (input == "real density")
346  return Formulation::TemperatureEquation::real_density;
347  else if (input == "reference density profile")
348  return Formulation::TemperatureEquation::reference_density_profile;
349  else
350  AssertThrow(false, ExcNotImplemented());
351 
353  }
354  };
355  };
356 
361  {
362  enum Kind
363  {
365  supg
366  };
367 
372  static
373  Kind
374  parse(const std::string &input)
375  {
376  if (input == "entropy viscosity")
377  return entropy_viscosity;
378  else if (input == "SUPG")
379  return supg;
380  else
381  AssertThrow(false, ExcNotImplemented());
382 
383  return Kind();
384  }
385 
386  static std::string get_options_string()
387  {
388  return "entropy viscosity|SUPG";
389  }
390  };
391 
397  {
398  enum Kind
399  {
403  default_solver
404  };
405 
406  static const std::string pattern()
407  {
408  return "default solver|block AMG|direct solver|block GMG";
409  }
410 
411  static Kind
412  parse(const std::string &input)
413  {
414  if (input == "block AMG")
415  return block_amg;
416  else if (input == "direct solver")
417  return direct_solver;
418  else if (input == "block GMG")
419  return block_gmg;
420  else if (input == "default solver")
421  return default_solver;
422  else
423  AssertThrow(false, ExcNotImplemented());
424 
425  return Kind();
426  }
427  };
428 
434  {
435  enum Kind
436  {
438  global_coarsening
439  };
440 
441  static const std::string pattern()
442  {
443  return "local smoothing|global coarsening";
444  }
445 
446  static Kind
447  parse(const std::string &input)
448  {
449  if (input == "local smoothing")
450  return local_smoothing;
451  else if (input == "global coarsening")
452  return global_coarsening;
453  else
454  AssertThrow(false, ExcNotImplemented());
455 
456  return Kind();
457  }
458  };
459 
465  {
466  enum Kind
467  {
469  idr_s
470  };
471 
472  static const std::string pattern()
473  {
474  return "GMRES|IDR(s)";
475  }
476 
477  static Kind
478  parse(const std::string &input)
479  {
480  if (input == "GMRES")
481  return gmres;
482  else if (input == "IDR(s)")
483  return idr_s;
484  else
485  AssertThrow(false, ExcNotImplemented());
486 
487  return Kind();
488  }
489  };
490 
496  {
497  enum Kind
498  {
500  fixed_step
501  };
502 
503  static const std::string pattern()
504  {
505  return "ARKode|fixed step";
506  }
507 
508  static Kind
509  parse(const std::string &input)
510  {
511  if (input == "ARKode")
512  return ARKode;
513  else if (input == "fixed step")
514  return fixed_step;
515  else
516  AssertThrow(false, ExcNotImplemented());
517 
518  return Kind();
519  }
520  };
521 
526 
538  Parameters (ParameterHandler &prm,
539  const MPI_Comm mpi_communicator);
540 
551  static
552  void declare_parameters (ParameterHandler &prm, const unsigned int mpi_rank);
553 
569  void parse_parameters (ParameterHandler &prm,
570  const MPI_Comm mpi_communicator);
571 
588  void parse_geometry_dependent_parameters (ParameterHandler &prm,
589  const GeometryModel::Interface<dim> &geometry_model);
590 
598 
602  double start_time;
603  double end_time;
604  double CFL_number;
611  std::string output_directory;
618  std::string world_builder_file;
619  unsigned int n_particle_managers;
620 
631 
632  // subsection: Advection solver parameters
634 
635  // subsection: Stokes solver parameters
637  bool use_bfbt;
641  unsigned int idr_s_parameter;
642 
651 
652  // subsection: AMG parameters
653  std::string AMG_smoother_type;
654  unsigned int AMG_smoother_sweeps;
657 
658  // subsection: Operator splitting parameters
663 
664  // subsection: Diffusion solver parameters
666 
685 
693 
700 
706 
718 
723  std::set<types::boundary_id> fixed_heat_flux_boundary_indicators;
724 
743  unsigned int min_grid_level;
744  std::vector<double> additional_refinement_times;
759  unsigned int stabilization_alpha;
760  std::vector<double> stabilization_c_R;
761  std::vector<double> stabilization_beta;
768  std::vector<double> global_composition_max_preset;
769  std::vector<double> global_composition_min_preset;
770 
782  unsigned int n_checkpoints_to_keep;
783  unsigned int resume_checkpoint_id;
784  double resume_time;
799  unsigned int temperature_degree;
800  std::vector<unsigned int> composition_degrees;
804 
815 
825  std::vector<std::string> names_of_compositional_fields;
826  std::vector<aspect::CompositionalFieldDescription> composition_descriptions;
828  std::vector<unsigned int> chemical_composition_indices;
829 
834  std::vector<typename AdvectionFieldMethod::Kind> compositional_field_methods;
835 
845  std::map<unsigned int, std::pair<std::string,unsigned int>> mapped_particle_properties;
846 
847  std::vector<unsigned int> normalized_fields;
870  };
871 
872 }
873 #endif
The NullspaceRemoval struct.
Definition: parameters.h:179
bool use_full_A_block_preconditioner
Definition: parameters.h:647
unsigned int min_grid_level
Definition: parameters.h:743
unsigned int n_expensive_stokes_solver_steps
Definition: parameters.h:645
std::vector< double > global_composition_min_preset
Definition: parameters.h:769
static Kind parse(const std::string &input)
Definition: parameters.h:478
double linear_stokes_solver_tolerance
Definition: parameters.h:643
unsigned int n_cheap_stokes_solver_steps
Definition: parameters.h:644
double maximum_time_step
Definition: parameters.h:605
static Kind parse(const std::string &input)
Definition: parameters.h:412
unsigned int initial_adaptive_refinement
Definition: parameters.h:739
double coarsening_fraction
Definition: parameters.h:741
std::vector< unsigned int > normalized_fields
Definition: parameters.h:847
double maximum_first_time_step
Definition: parameters.h:607
static Kind parse(const std::string &input)
Definition: parameters.h:343
double global_temperature_max_preset
Definition: parameters.h:766
unsigned int initial_global_refinement
Definition: parameters.h:738
static const std::string pattern()
Definition: parameters.h:406
double AMG_aggregation_threshold
Definition: parameters.h:655
std::vector< bool > use_discontinuous_composition_discretization
Definition: parameters.h:797
unsigned int stabilization_alpha
Definition: parameters.h:759
double linear_solver_A_block_tolerance
Definition: parameters.h:646
std::vector< double > additional_refinement_times
Definition: parameters.h:744
std::map< unsigned int, std::pair< std::string, unsigned int > > mapped_particle_properties
Definition: parameters.h:845
bool use_limiter_for_discontinuous_temperature_solution
Definition: parameters.h:764
bool use_locally_conservative_discretization
Definition: parameters.h:794
double nonlinear_tolerance
Definition: parameters.h:600
unsigned int stokes_gmres_restart_length
Definition: parameters.h:650
static Kind parse(const std::string &input)
Definition: parameters.h:374
static Kind parse(const std::string &input)
Definition: parameters.h:165
unsigned int temperature_degree
Definition: parameters.h:799
unsigned int idr_s_parameter
Definition: parameters.h:641
bool force_nonsymmetric_A_block_solver
Definition: parameters.h:648
bool mesh_deformation_enabled
Definition: parameters.h:855
Formulation::MassConservation::Kind formulation_mass_conservation
Definition: parameters.h:692
bool skip_solvers_on_initial_refinement
Definition: parameters.h:746
bool run_postprocessors_on_initial_refinement
Definition: parameters.h:748
bool adapt_by_fraction_of_cells
Definition: parameters.h:742
AdvectionFieldMethod::Kind temperature_method
Definition: parameters.h:814
bool have_discontinuous_composition_discretization
Definition: parameters.h:798
unsigned int AMG_smoother_sweeps
Definition: parameters.h:654
void declare_parameters(ParameterHandler &prm)
unsigned int resume_checkpoint_id
Definition: parameters.h:783
double temperature_solver_tolerance
Definition: parameters.h:629
NonlinearSolver::Kind nonlinear_solver
Definition: parameters.h:595
std::string world_builder_file
Definition: parameters.h:618
std::vector< bool > use_limiter_for_discontinuous_composition_solution
Definition: parameters.h:765
AdvectionStabilizationMethod::Kind advection_stabilization_method
Definition: parameters.h:599
unsigned int stokes_velocity_degree
Definition: parameters.h:793
bool enable_additional_stokes_rhs
Definition: parameters.h:716
NullspaceRemoval::Kind nullspace_removal
Definition: parameters.h:729
static Kind parse(const std::string &input)
Definition: parameters.h:447
static const std::string pattern()
Definition: parameters.h:441
static const std::string pattern()
Definition: parameters.h:472
bool use_artificial_viscosity_smoothing
Definition: parameters.h:608
double discontinuous_penalty
Definition: parameters.h:763
bool volume_of_fluid_tracking_enabled
Definition: parameters.h:864
static bool solve_Stokes_iteratively(const typename NonlinearSolver::Kind &input)
Definition: parameters.h:101
double reaction_time_step
Definition: parameters.h:661
double stabilization_gamma
Definition: parameters.h:762
double linear_solver_S_block_tolerance
Definition: parameters.h:649
bool use_direct_stokes_solver
Definition: parameters.h:636
bool use_operator_splitting
Definition: parameters.h:617
double refinement_fraction
Definition: parameters.h:740
unsigned int n_compositional_fields
Definition: parameters.h:824
unsigned int max_composition_degree
Definition: parameters.h:801
std::vector< unsigned int > composition_degrees
Definition: parameters.h:800
MaterialModel::MaterialAveraging::AveragingOperation material_averaging
Definition: parameters.h:803
unsigned int reaction_steps_per_advection_step
Definition: parameters.h:662
unsigned int n_particle_managers
Definition: parameters.h:619
bool use_conduction_timestep
Definition: parameters.h:609
double maximum_relative_increase_time_step
Definition: parameters.h:606
double composition_solver_tolerance
Definition: parameters.h:630
std::vector< std::string > names_of_compositional_fields
Definition: parameters.h:825
unsigned int max_nonlinear_iterations
Definition: parameters.h:615
NonlinearSolverFailureStrategy::Kind nonlinear_solver_failure_strategy
Definition: parameters.h:596
bool run_postprocessors_on_nonlinear_iterations
Definition: parameters.h:749
bool use_discontinuous_temperature_discretization
Definition: parameters.h:796
static Kind parse(const std::string &input)
Definition: parameters.h:297
static Kind parse(const std::string &input)
Definition: parameters.h:134
static bool is_defect_correction(const typename NonlinearSolver::Kind &input)
Definition: parameters.h:86
StokesGMGType::Kind stokes_gmg_type
Definition: parameters.h:639
std::set< types::boundary_id > fixed_heat_flux_boundary_indicators
Definition: parameters.h:723
std::string output_directory
Definition: parameters.h:611
std::vector< double > stabilization_beta
Definition: parameters.h:761
std::vector< aspect::CompositionalFieldDescription > composition_descriptions
Definition: parameters.h:826
std::vector< double > stabilization_c_R
Definition: parameters.h:760
LinearSolverFailureStrategy::Kind linear_solver_failure_strategy
Definition: parameters.h:597
std::vector< std::string > compositional_fields_with_disabled_boundary_entropy_viscosity
Definition: parameters.h:771
std::string pressure_normalization
Definition: parameters.h:802
bool use_equal_order_interpolation_for_stokes
Definition: parameters.h:795
double ARKode_relative_tolerance
Definition: parameters.h:660
StokesSolverType::Kind stokes_solver_type
Definition: parameters.h:638
unsigned int advection_gmres_restart_length
Definition: parameters.h:633
bool enable_prescribed_dilation
Definition: parameters.h:717
static const std::string pattern()
Definition: parameters.h:503
std::string AMG_smoother_type
Definition: parameters.h:653
double surface_pressure
Definition: parameters.h:612
StokesKrylovType::Kind stokes_krylov_type
Definition: parameters.h:640
double global_temperature_min_preset
Definition: parameters.h:767
Formulation::TemperatureEquation::Kind formulation_temperature_equation
Definition: parameters.h:699
static Kind parse(const std::string &input)
Definition: parameters.h:509
unsigned int n_checkpoints_to_keep
Definition: parameters.h:782
bool include_melt_transport
Definition: parameters.h:715
double adiabatic_surface_temperature
Definition: parameters.h:613
std::vector< unsigned int > chemical_composition_indices
Definition: parameters.h:828
unsigned int max_nonlinear_iterations_in_prerefinement
Definition: parameters.h:616
std::vector< double > global_composition_max_preset
Definition: parameters.h:768
unsigned int timing_output_frequency
Definition: parameters.h:614
std::vector< typename AdvectionFieldMethod::Kind > compositional_field_methods
Definition: parameters.h:834
Formulation::Kind formulation
Definition: parameters.h:684
unsigned int n_chemical_compositions
Definition: parameters.h:827
bool skip_setup_initial_conditions_on_initial_refinement
Definition: parameters.h:747
unsigned int adaptive_refinement_interval
Definition: parameters.h:745
ReactionSolverType::Kind reaction_solver_type
Definition: parameters.h:659
double diffusion_length_scale
Definition: parameters.h:665
static Kind parse(const std::string &input)
Definition: parameters.h:253