ASPECT
parameters.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2011 - 2023 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  using namespace dealii;
34 
35  struct CompositionalFieldDescription;
36 
37  // forward declaration:
38  namespace GeometryModel
39  {
40  template <int dim>
41  class Interface;
42  }
43 
57  template <int dim>
58  struct Parameters
59  {
60 
66  {
67  enum Kind
68  {
81  no_Advection_no_Stokes
82  };
83  };
84 
85  static
86  bool
88  {
89  return input == NonlinearSolver::iterated_Advection_and_Newton_Stokes ||
90  input == NonlinearSolver::single_Advection_iterated_Newton_Stokes ||
91  input == NonlinearSolver::no_Advection_iterated_defect_correction_Stokes ||
92  input == NonlinearSolver::single_Advection_iterated_defect_correction_Stokes ||
93  input == NonlinearSolver::iterated_Advection_and_defect_correction_Stokes
94  ?
95  true
96  :
97  false;
98  }
99 
104  {
105  enum Kind
106  {
107  none = 0,
108  net_translation_x = 0x1,
109  net_translation_y = 0x2,
110  net_translation_z = 0x4,
111  net_translation = 0x1+0x2+0x4,
112  linear_momentum_x = 0x8,
113  linear_momentum_y = 0x10,
114  linear_momentum_z = 0x20,
115  linear_momentum = linear_momentum_x+linear_momentum_y+linear_momentum_z,
116  net_rotation = 0x40,
117  angular_momentum = 0x80,
118  net_surface_rotation = 0x100,
119  any_translation = net_translation+linear_momentum,
120  any_rotation = net_rotation+angular_momentum+net_surface_rotation,
121  };
122  };
123 
135  {
136  enum Kind
137  {
145  prescribed_field_with_diffusion
146  };
147  };
148 
155  struct Formulation
156  {
163  enum Kind
164  {
168  custom
169  };
170 
175  static
176  Kind
177  parse(const std::string &input)
178  {
179  if (input == "isentropic compression")
180  return Formulation::isentropic_compression;
181  else if (input == "anelastic liquid approximation")
182  return Formulation::anelastic_liquid_approximation;
183  else if (input == "Boussinesq approximation")
184  return Formulation::boussinesq_approximation;
185  else if (input == "custom")
186  return Formulation::custom;
187  else
188  AssertThrow(false, ExcNotImplemented());
189 
190  return Formulation::Kind();
191  }
192 
200  {
205  enum Kind
206  {
213  ask_material_model
214  };
215 
220  static Kind
221  parse(const std::string &input)
222  {
223  if (input == "isentropic compression")
224  return Formulation::MassConservation::isentropic_compression;
225  else if (input == "hydrostatic compression")
226  return Formulation::MassConservation::hydrostatic_compression;
227  else if (input == "reference density profile")
228  return Formulation::MassConservation::reference_density_profile;
229  else if (input == "implicit reference density profile")
230  return Formulation::MassConservation::implicit_reference_density_profile;
231  else if (input == "incompressible")
232  return Formulation::MassConservation::incompressible;
233  else if (input == "projected density field")
234  return Formulation::MassConservation::projected_density_field;
235  else if (input == "ask material model")
236  return Formulation::MassConservation::ask_material_model;
237  else
238  AssertThrow(false, ExcNotImplemented());
239 
241  }
242  };
243 
250  {
255  enum Kind
256  {
258  reference_density_profile
259  };
260 
265  static
266  Kind
267  parse(const std::string &input)
268  {
269  if (input == "real density")
270  return Formulation::TemperatureEquation::real_density;
271  else if (input == "reference density profile")
272  return Formulation::TemperatureEquation::reference_density_profile;
273  else
274  AssertThrow(false, ExcNotImplemented());
275 
277  }
278  };
279  };
280 
285  {
286  enum Kind
287  {
289  supg
290  };
291 
296  static
297  Kind
298  parse(const std::string &input)
299  {
300  if (input == "entropy viscosity")
301  return entropy_viscosity;
302  else if (input == "SUPG")
303  return supg;
304  else
305  AssertThrow(false, ExcNotImplemented());
306 
307  return Kind();
308  }
309 
310  static std::string get_options_string()
311  {
312  return "entropy viscosity|SUPG";
313  }
314  };
315 
321  {
322  enum Kind
323  {
326  block_gmg
327  };
328 
329  static const std::string pattern()
330  {
331  return "block AMG|direct solver|block GMG";
332  }
333 
334  static Kind
335  parse(const std::string &input)
336  {
337  if (input == "block AMG")
338  return block_amg;
339  else if (input == "direct solver")
340  return direct_solver;
341  else if (input == "block GMG")
342  return block_gmg;
343  else
344  AssertThrow(false, ExcNotImplemented());
345 
346  return Kind();
347  }
348  };
349 
355  {
356  enum Kind
357  {
359  idr_s
360  };
361 
362  static const std::string pattern()
363  {
364  return "GMRES|IDR(s)";
365  }
366 
367  static Kind
368  parse(const std::string &input)
369  {
370  if (input == "GMRES")
371  return gmres;
372  else if (input == "IDR(s)")
373  return idr_s;
374  else
375  AssertThrow(false, ExcNotImplemented());
376 
377  return Kind();
378  }
379  };
380 
385 
397  Parameters (ParameterHandler &prm,
398  const MPI_Comm mpi_communicator);
399 
408  static
409  void declare_parameters (ParameterHandler &prm);
410 
426  void parse_parameters (ParameterHandler &prm,
427  const MPI_Comm mpi_communicator);
428 
445  void parse_geometry_dependent_parameters (ParameterHandler &prm,
446  const GeometryModel::Interface<dim> &geometry_model);
447 
453 
457  double start_time;
458  double end_time;
459  double CFL_number;
466  std::string output_directory;
473  std::string world_builder_file;
474 
485 
486  // subsection: Advection solver parameters
488 
489  // subsection: Stokes solver parameters
493  unsigned int idr_s_parameter;
494 
502 
503  // subsection: AMG parameters
504  std::string AMG_smoother_type;
505  unsigned int AMG_smoother_sweeps;
508 
509  // subsection: Operator splitting parameters
512 
513  // subsection: Diffusion solver parameters
515 
534 
542 
549 
555 
567 
574  std::map<types::boundary_id, std::pair<std::string,std::string>> prescribed_traction_boundary_indicators;
575 
580  std::set<types::boundary_id> fixed_heat_flux_boundary_indicators;
581 
600  unsigned int min_grid_level;
601  std::vector<double> additional_refinement_times;
616  unsigned int stabilization_alpha;
617  std::vector<double> stabilization_c_R;
618  std::vector<double> stabilization_beta;
625  std::vector<double> global_composition_max_preset;
626  std::vector<double> global_composition_min_preset;
627 
652  unsigned int temperature_degree;
653  unsigned int composition_degree;
656 
667 
677  std::vector<std::string> names_of_compositional_fields;
678  std::vector<aspect::CompositionalFieldDescription> composition_descriptions;
680  std::vector<unsigned int> chemical_composition_indices;
681 
686  std::vector<typename AdvectionFieldMethod::Kind> compositional_field_methods;
687 
697  std::map<unsigned int, std::pair<std::string,unsigned int>> mapped_particle_properties;
698 
699  std::vector<unsigned int> normalized_fields;
722  };
723 
724 }
725 #endif
The NullspaceRemoval struct.
Definition: parameters.h:103
bool use_full_A_block_preconditioner
Definition: parameters.h:499
unsigned int min_grid_level
Definition: parameters.h:600
unsigned int n_expensive_stokes_solver_steps
Definition: parameters.h:497
std::vector< double > global_composition_min_preset
Definition: parameters.h:626
unsigned int composition_degree
Definition: parameters.h:653
static Kind parse(const std::string &input)
Definition: parameters.h:368
double linear_stokes_solver_tolerance
Definition: parameters.h:495
unsigned int n_cheap_stokes_solver_steps
Definition: parameters.h:496
double maximum_time_step
Definition: parameters.h:460
static Kind parse(const std::string &input)
Definition: parameters.h:335
unsigned int initial_adaptive_refinement
Definition: parameters.h:596
double coarsening_fraction
Definition: parameters.h:598
std::vector< unsigned int > normalized_fields
Definition: parameters.h:699
double maximum_first_time_step
Definition: parameters.h:462
static Kind parse(const std::string &input)
Definition: parameters.h:267
double global_temperature_max_preset
Definition: parameters.h:623
std::map< types::boundary_id, std::pair< std::string, std::string > > prescribed_traction_boundary_indicators
Definition: parameters.h:574
unsigned int initial_global_refinement
Definition: parameters.h:595
static const std::string pattern()
Definition: parameters.h:329
double AMG_aggregation_threshold
Definition: parameters.h:506
unsigned int stabilization_alpha
Definition: parameters.h:616
double linear_solver_A_block_tolerance
Definition: parameters.h:498
std::vector< double > additional_refinement_times
Definition: parameters.h:601
std::map< unsigned int, std::pair< std::string, unsigned int > > mapped_particle_properties
Definition: parameters.h:697
bool use_limiter_for_discontinuous_temperature_solution
Definition: parameters.h:621
bool use_locally_conservative_discretization
Definition: parameters.h:648
double nonlinear_tolerance
Definition: parameters.h:455
unsigned int stokes_gmres_restart_length
Definition: parameters.h:501
static Kind parse(const std::string &input)
Definition: parameters.h:298
unsigned int temperature_degree
Definition: parameters.h:652
unsigned int idr_s_parameter
Definition: parameters.h:493
bool mesh_deformation_enabled
Definition: parameters.h:707
Formulation::MassConservation::Kind formulation_mass_conservation
Definition: parameters.h:541
bool skip_solvers_on_initial_refinement
Definition: parameters.h:603
bool run_postprocessors_on_initial_refinement
Definition: parameters.h:605
bool use_discontinuous_composition_discretization
Definition: parameters.h:651
bool adapt_by_fraction_of_cells
Definition: parameters.h:599
AdvectionFieldMethod::Kind temperature_method
Definition: parameters.h:666
unsigned int AMG_smoother_sweeps
Definition: parameters.h:505
double temperature_solver_tolerance
Definition: parameters.h:483
NonlinearSolver::Kind nonlinear_solver
Definition: parameters.h:452
std::string world_builder_file
Definition: parameters.h:473
AdvectionStabilizationMethod::Kind advection_stabilization_method
Definition: parameters.h:454
unsigned int stokes_velocity_degree
Definition: parameters.h:647
void declare_parameters(ParameterHandler &prm)
bool enable_additional_stokes_rhs
Definition: parameters.h:565
NullspaceRemoval::Kind nullspace_removal
Definition: parameters.h:586
static const std::string pattern()
Definition: parameters.h:362
bool use_artificial_viscosity_smoothing
Definition: parameters.h:463
double discontinuous_penalty
Definition: parameters.h:620
bool volume_of_fluid_tracking_enabled
Definition: parameters.h:716
double reaction_time_step
Definition: parameters.h:510
double stabilization_gamma
Definition: parameters.h:619
double linear_solver_S_block_tolerance
Definition: parameters.h:500
bool use_direct_stokes_solver
Definition: parameters.h:490
bool use_limiter_for_discontinuous_composition_solution
Definition: parameters.h:622
bool use_operator_splitting
Definition: parameters.h:472
double refinement_fraction
Definition: parameters.h:597
unsigned int n_compositional_fields
Definition: parameters.h:676
MaterialModel::MaterialAveraging::AveragingOperation material_averaging
Definition: parameters.h:655
unsigned int reaction_steps_per_advection_step
Definition: parameters.h:511
bool use_conduction_timestep
Definition: parameters.h:464
double maximum_relative_increase_time_step
Definition: parameters.h:461
double composition_solver_tolerance
Definition: parameters.h:484
std::vector< std::string > names_of_compositional_fields
Definition: parameters.h:677
unsigned int max_nonlinear_iterations
Definition: parameters.h:470
bool run_postprocessors_on_nonlinear_iterations
Definition: parameters.h:606
bool use_discontinuous_temperature_discretization
Definition: parameters.h:650
static Kind parse(const std::string &input)
Definition: parameters.h:221
static bool is_defect_correction(const typename NonlinearSolver::Kind &input)
Definition: parameters.h:87
std::set< types::boundary_id > fixed_heat_flux_boundary_indicators
Definition: parameters.h:580
std::string output_directory
Definition: parameters.h:466
std::vector< double > stabilization_beta
Definition: parameters.h:618
std::vector< aspect::CompositionalFieldDescription > composition_descriptions
Definition: parameters.h:678
std::vector< double > stabilization_c_R
Definition: parameters.h:617
std::vector< std::string > compositional_fields_with_disabled_boundary_entropy_viscosity
Definition: parameters.h:628
std::string pressure_normalization
Definition: parameters.h:654
bool use_equal_order_interpolation_for_stokes
Definition: parameters.h:649
StokesSolverType::Kind stokes_solver_type
Definition: parameters.h:491
unsigned int advection_gmres_restart_length
Definition: parameters.h:487
bool enable_prescribed_dilation
Definition: parameters.h:566
std::string AMG_smoother_type
Definition: parameters.h:504
double surface_pressure
Definition: parameters.h:467
StokesKrylovType::Kind stokes_krylov_type
Definition: parameters.h:492
double global_temperature_min_preset
Definition: parameters.h:624
Formulation::TemperatureEquation::Kind formulation_temperature_equation
Definition: parameters.h:548
bool include_melt_transport
Definition: parameters.h:564
double adiabatic_surface_temperature
Definition: parameters.h:468
std::vector< unsigned int > chemical_composition_indices
Definition: parameters.h:680
Definition: compat.h:42
unsigned int max_nonlinear_iterations_in_prerefinement
Definition: parameters.h:471
std::vector< double > global_composition_max_preset
Definition: parameters.h:625
unsigned int timing_output_frequency
Definition: parameters.h:469
std::vector< typename AdvectionFieldMethod::Kind > compositional_field_methods
Definition: parameters.h:686
Formulation::Kind formulation
Definition: parameters.h:533
unsigned int n_chemical_compositions
Definition: parameters.h:679
bool skip_setup_initial_conditions_on_initial_refinement
Definition: parameters.h:604
unsigned int adaptive_refinement_interval
Definition: parameters.h:602
double diffusion_length_scale
Definition: parameters.h:514
static Kind parse(const std::string &input)
Definition: parameters.h:177