ASPECT
simulator.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_simulator_h
23 #define _aspect_simulator_h
24 
25 #include <deal.II/base/timer.h>
26 #include <deal.II/base/parameter_handler.h>
27 #include <deal.II/base/conditional_ostream.h>
28 #include <deal.II/base/symmetric_tensor.h>
29 
30 DEAL_II_DISABLE_EXTRA_DIAGNOSTICS
31 
32 #include <deal.II/lac/affine_constraints.h>
33 
34 #include <deal.II/distributed/tria.h>
35 
36 #include <deal.II/dofs/dof_handler.h>
37 #include <deal.II/dofs/dof_tools.h>
38 
39 #include <deal.II/fe/fe_system.h>
40 #include <deal.II/fe/mapping.h>
41 #include <deal.II/base/tensor_function.h>
42 
43 DEAL_II_ENABLE_EXTRA_DIAGNOSTICS
44 
45 #include <aspect/global.h>
68 
69 #include <boost/iostreams/tee.hpp>
70 #include <boost/iostreams/stream.hpp>
71 
72 #include <memory>
73 #include <thread>
74 
75 
76 namespace aspect
77 {
78  using namespace dealii;
79 
80  template <int dim>
81  class MeltHandler;
82 
83  template <int dim>
84  class NewtonHandler;
85 
86  template <int dim>
88 
89  template <int dim, int velocity_degree>
91 
92  namespace MeshDeformation
93  {
94  template <int dim>
96  }
97 
98  template <int dim>
100 
101  namespace internal
102  {
103  namespace Assembly
104  {
105  namespace Scratch
106  {
107  template <int dim> struct StokesPreconditioner;
108  template <int dim> struct StokesSystem;
109  template <int dim> struct AdvectionSystem;
110  }
111 
112  namespace CopyData
113  {
114  template <int dim> struct StokesPreconditioner;
115  template <int dim> struct StokesSystem;
116  template <int dim> struct AdvectionSystem;
117  }
118  }
119  }
120 
121  namespace Assemblers
122  {
123  template <int dim> class Interface;
124  template <int dim> class Manager;
125  }
126 
128  {
132  double residual;
133  double residual_old;
136  std::pair<double,double> stokes_residuals;
137  };
138 
142  template <int dim>
144  {
146  :
147  scalar_moment_of_inertia(numbers::signaling_nan<double>()),
148  scalar_angular_momentum(numbers::signaling_nan<double>()),
149  scalar_rotation(numbers::signaling_nan<double>()),
150  tensor_moment_of_inertia(numbers::signaling_nan<SymmetricTensor<2,dim>>()),
151  tensor_angular_momentum(numbers::signaling_nan<Tensor<1,dim>>()),
152  tensor_rotation(numbers::signaling_nan<Tensor<1,dim>>())
153  {};
154 
162 
166  SymmetricTensor<2,dim> tensor_moment_of_inertia;
167  Tensor<1,dim> tensor_angular_momentum;
168  Tensor<1,dim> tensor_rotation;
169  };
170 
174  DeclExceptionMsg(ExcNonlinearSolverNoConvergence,
175  "Nonlinear solver failed to converge in the prescribed number of steps. "
176  "Consider changing `Max nonlinear iterations` or `Nonlinear solver failure "
177  "strategy`.");
178 
186  template <int dim>
187  class Simulator
188  {
189  public:
203  Simulator (const MPI_Comm mpi_communicator,
204  ParameterHandler &prm);
205 
210  ~Simulator ();
211 
223  static
224  void declare_parameters (ParameterHandler &prm);
225 
234  void run ();
235 
247  void
248  write_plugin_graph (std::ostream &output_stream) const;
249 
254 
259 
260 
268  {
273  enum FieldType { temperature_field, compositional_field };
274 
280 
286  const unsigned int compositional_variable;
287 
299  AdvectionField (const FieldType field_type,
300  const unsigned int compositional_variable = numbers::invalid_unsigned_int);
301 
309  static
311 
319  static
320  AdvectionField composition (const unsigned int compositional_variable);
321 
325  bool
326  is_temperature () const;
327 
332  bool
333  is_discontinuous (const Introspection<dim> &introspection) const;
334 
340  advection_method (const Introspection<dim> &introspection) const;
341 
346  unsigned int component_index(const Introspection<dim> &introspection) const;
347 
352  unsigned int block_index(const Introspection<dim> &introspection) const;
353 
361  unsigned int sparsity_pattern_block_index(const Introspection<dim> &introspection) const;
362 
369  unsigned int field_index() const;
370 
376  unsigned int base_element(const Introspection<dim> &introspection) const;
377 
384  FEValuesExtractors::Scalar scalar_extractor(const Introspection<dim> &introspection) const;
385 
390  unsigned int polynomial_degree(const Introspection<dim> &introspection) const;
391 
396  std::string
397  name(const Introspection<dim> &introspection) const;
398  };
399 
400  private:
401 
421 
439  {
440  IntermediaryConstructorAction (const std::function<void ()> &action);
441  };
442 
457  void setup_dofs ();
458 
467  void setup_introspection ();
468 
480  void set_initial_temperature_and_compositional_fields ();
481 
497  void compute_initial_pressure_field ();
498 
504  void compute_initial_velocity_boundary_constraints (AffineConstraints<double> &constraints);
505 
511  void compute_current_velocity_boundary_constraints (AffineConstraints<double> &constraints);
512 
525  void compute_current_constraints ();
526 
540  double compute_pressure_scaling_factor () const;
541 
553  void start_timestep ();
554 
562  void solve_timestep ();
563 
575  void solve_single_advection_single_stokes ();
576 
589  void solve_no_advection_iterated_stokes ();
590 
601  void solve_no_advection_single_stokes ();
602 
614  void solve_first_timestep_only_single_stokes ();
615 
628  void solve_iterated_advection_and_stokes ();
629 
642  void solve_single_advection_iterated_stokes ();
643 
656  void solve_no_advection_iterated_defect_correction_stokes ();
657 
670  void solve_single_advection_iterated_defect_correction_stokes ();
671 
685  void solve_iterated_advection_and_defect_correction_stokes ();
686 
705  void solve_iterated_advection_and_newton_stokes (bool use_newton_iterations);
706 
726  void solve_single_advection_and_iterated_newton_stokes (bool use_newton_iterations);
727 
739  void solve_single_advection_no_stokes ();
740 
752  void solve_no_advection_no_stokes ();
753 
762  void build_stokes_preconditioner ();
763 
771  void build_advection_preconditioner (const AdvectionField &advection_field,
773  const double diagonal_strengthening);
774 
781  void assemble_stokes_system ();
782 
797  double assemble_and_solve_temperature (const double &initial_residual = 0,
798  double *residual = nullptr);
799 
815  std::vector<double> assemble_and_solve_composition (const std::vector<double> &initial_residual = {},
816  std::vector<double> *residual = nullptr);
817 
832  double assemble_and_solve_stokes (const double &initial_nonlinear_residual = 0,
833  double *nonlinear_residual = nullptr);
834 
847  void do_one_defect_correction_Stokes_step(DefectCorrectionResiduals &dcr,
848  const bool use_picard);
849 
857  void assemble_advection_system (const AdvectionField &advection_field);
858 
869  double solve_advection (const AdvectionField &advection_field);
870 
875  void interpolate_particle_properties (const std::vector<AdvectionField> &advection_fields);
876 
953  std::pair<double,double>
954  solve_stokes (LinearAlgebra::BlockVector &solution_vector);
955 
968  void postprocess ();
969 
985  void refine_mesh (const unsigned int max_grid_level);
986 
1007  void create_snapshot();
1008 
1022  void resume_from_snapshot();
1023 
1030  template <class Archive>
1031  void serialize (Archive &ar, const unsigned int version);
1048  Table<2,DoFTools::Coupling>
1049  setup_system_matrix_coupling () const;
1050 
1058  void setup_system_matrix (const std::vector<IndexSet> &system_partitioning);
1059 
1071  void setup_system_preconditioner (const std::vector<IndexSet> &system_partitioning);
1072 
1094  std::unique_ptr<Assemblers::Manager<dim>> assemblers;
1095 
1104  void set_assemblers ();
1105 
1116  void set_advection_assemblers ();
1117 
1127  void set_stokes_assemblers ();
1128 
1135  void assemble_stokes_preconditioner ();
1136 
1144  void
1145  local_assemble_stokes_preconditioner (const typename DoFHandler<dim>::active_cell_iterator &cell,
1148 
1156  void
1157  copy_local_to_global_stokes_preconditioner (const internal::Assembly::CopyData::StokesPreconditioner<dim> &data);
1158 
1166  void
1167  local_assemble_stokes_system (const typename DoFHandler<dim>::active_cell_iterator &cell,
1170 
1178  void
1179  copy_local_to_global_stokes_system (const internal::Assembly::CopyData::StokesSystem<dim> &data);
1180 
1188  void
1189  local_assemble_advection_face_terms(const AdvectionField &advection_field,
1190  const typename DoFHandler<dim>::active_cell_iterator &cell,
1200  void
1201  local_assemble_advection_system (const AdvectionField &advection_field,
1202  const Vector<double> &viscosity_per_cell,
1203  const typename DoFHandler<dim>::active_cell_iterator &cell,
1206 
1214  void
1215  copy_local_to_global_advection_system (const AdvectionField &advection_field,
1217 
1242  void make_pressure_rhs_compatible(LinearAlgebra::BlockVector &vector);
1243 
1253  template <typename T>
1254  void get_artificial_viscosity (Vector<T> &viscosity_per_cell,
1255  const AdvectionField &advection_field,
1256  const bool skip_interior_cells = false) const;
1257 
1269  void compute_Vs_anomaly(Vector<float> &values) const;
1270 
1285  void compute_Vp_anomaly(Vector<float> &values) const;
1286 
1319  double normalize_pressure(LinearAlgebra::BlockVector &vector) const;
1320 
1360  void denormalize_pressure(const double pressure_adjustment,
1361  LinearAlgebra::BlockVector &vector) const;
1362 
1371  void apply_limiter_to_dg_solutions (const AdvectionField &advection_field);
1372 
1373 
1396  void compute_reactions ();
1397 
1407  void update_solution_vectors_with_reaction_results (const unsigned int block_index,
1408  const LinearAlgebra::BlockVector &distributed_vector,
1409  const LinearAlgebra::BlockVector &distributed_reaction_vector);
1410 
1421  void initialize_current_linearization_point ();
1422 
1442  void interpolate_material_output_into_advection_field (const AdvectionField &adv_field);
1443 
1444 
1452  void interpolate_onto_velocity_system(const TensorFunction<1,dim> &func,
1453  LinearAlgebra::Vector &vec) const;
1454 
1455 
1470  void setup_nullspace_constraints(AffineConstraints<double> &constraints);
1471 
1472 
1484  void remove_nullspace(LinearAlgebra::BlockVector &relevant_dst,
1485  LinearAlgebra::BlockVector &tmp_distributed_stokes) const;
1486 
1502  compute_net_angular_momentum(const bool use_constant_density,
1503  const LinearAlgebra::BlockVector &solution,
1504  const bool limit_to_top_faces = false) const;
1505 
1522  void remove_net_angular_momentum(const bool use_constant_density,
1523  LinearAlgebra::BlockVector &relevant_dst,
1524  LinearAlgebra::BlockVector &tmp_distributed_stokes,
1525  const bool limit_to_top_faces = false) const;
1526 
1534  void replace_outflow_boundary_ids(const unsigned int boundary_id_offset);
1535 
1543  void restore_outflow_boundary_ids(const unsigned int boundary_id_offset);
1544 
1558  void remove_net_linear_momentum(const bool use_constant_density,
1559  LinearAlgebra::BlockVector &relevant_dst,
1560  LinearAlgebra::BlockVector &tmp_distributed_stokes) const;
1561 
1569  double get_maximal_velocity (const LinearAlgebra::BlockVector &solution) const;
1570 
1583  double get_entropy_variation (const double average_field,
1584  const AdvectionField &advection_field) const;
1585 
1594  std::pair<double,double>
1595  get_extrapolated_advection_field_range (const AdvectionField &advection_field) const;
1596 
1605  void exchange_refinement_flags();
1606 
1607 
1616  void maybe_write_timing_output () const;
1617 
1625  bool maybe_write_checkpoint (const time_t last_checkpoint_time,
1626  const bool force_writing_checkpoint);
1627 
1644  bool maybe_do_initial_refinement (const unsigned int max_refinement_level);
1645 
1654  void maybe_refine_mesh (const double new_time_step,
1655  unsigned int &max_refinement_level);
1656 
1664  void advance_time (const double step_size);
1665 
1673  double
1674  compute_viscosity(internal::Assembly::Scratch::AdvectionSystem<dim> &scratch,
1675  const double global_u_infty,
1676  const double global_field_variation,
1677  const double average_field,
1678  const double global_entropy_variation,
1679  const double cell_diameter,
1680  const AdvectionField &advection_field) const;
1681 
1690  void
1691  compute_advection_system_residual(internal::Assembly::Scratch::AdvectionSystem<dim> &scratch,
1692  const double average_field,
1693  const AdvectionField &advection_field,
1694  double &max_residual,
1695  double &max_velocity,
1696  double &max_density,
1697  double &max_specific_heat,
1698  double &conductivity) const;
1699 
1714  bool
1715  stokes_matrix_depends_on_solution () const;
1716 
1726  bool
1727  stokes_A_block_is_symmetric () const;
1728 
1741  void
1742  check_consistency_of_formulation ();
1743 
1749  void
1750  select_default_solver_and_averaging ();
1751 
1762  void
1763  check_consistency_of_boundary_conditions () const;
1764 
1768  double
1769  compute_initial_newton_residual ();
1770 
1779  double
1780  compute_Eisenstat_Walker_linear_tolerance(const bool EisenstatWalkerChoiceOne,
1781  const double maximum_linear_stokes_solver_tolerance,
1782  const double linear_stokes_solver_tolerance,
1783  const double stokes_residual,
1784  const double newton_residual,
1785  const double newton_residual_old);
1786 
1796  void output_statistics();
1797 
1809  double
1810  compute_initial_stokes_residual();
1811 
1822 
1828  std::unique_ptr<MeltHandler<dim>> melt_handler;
1829 
1835  std::unique_ptr<NewtonHandler<dim>> newton_handler;
1836 
1838 
1840 
1848  std::unique_ptr<VolumeOfFluidHandler<dim>> volume_of_fluid_handler;
1849 
1851 
1852 
1854 
1859  std::ofstream log_file_stream;
1860 
1861  using TeeDevice = boost::iostreams::tee_device<std::ostream, std::ofstream>;
1862  using TeeStream = boost::iostreams::stream<TeeDevice>;
1863 
1866 
1871  ConditionalOStream pcout;
1872 
1882  TableHandler statistics;
1883 
1900 
1901  mutable TimerOutput computing_timer;
1902 
1907  Timer wall_timer;
1908 
1914 
1923 
1932  const std::unique_ptr<InitialTopographyModel::Interface<dim>> initial_topography_model;
1933  const std::unique_ptr<GeometryModel::Interface<dim>> geometry_model;
1935  const std::unique_ptr<MaterialModel::Interface<dim>> material_model;
1936  const std::unique_ptr<GravityModel::Interface<dim>> gravity_model;
1939  const std::unique_ptr<PrescribedStokesSolution::Interface<dim>> prescribed_stokes_solution;
1940 
1951  std::shared_ptr<InitialTemperature::Manager<dim>> initial_temperature_manager;
1952  std::shared_ptr<InitialComposition::Manager<dim>> initial_composition_manager;
1953 
1954  const std::unique_ptr<AdiabaticConditions::Interface<dim>> adiabatic_conditions;
1955 #ifdef ASPECT_WITH_WORLD_BUILDER
1956 
1967  std::shared_ptr<WorldBuilder::World> world_builder;
1968 #endif
1971  const std::unique_ptr<BoundaryHeatFlux::Interface<dim>> boundary_heat_flux;
1972 
1976  std::vector<Particle::Manager<dim>> particle_managers;
1977 
1985  double time;
1986  double time_step;
1988  unsigned int timestep_number;
1989  unsigned int pre_refinement_step;
1990  unsigned int nonlinear_iteration;
2018  parallel::distributed::Triangulation<dim> triangulation;
2021 
2024 
2033  std::unique_ptr<Mapping<dim>> mapping;
2034 
2035  const FESystem<dim> finite_element;
2036 
2037  DoFHandler<dim> dof_handler;
2038 
2040 
2052  AffineConstraints<double> constraints;
2053  AffineConstraints<double> current_constraints;
2054 
2060 
2067 
2075 
2095 
2101 
2115 
2120 
2122 
2123  // only used if is_compressible()
2125 
2126  // only used if operator split is enabled
2128 
2129 
2130 
2131  std::unique_ptr<LinearAlgebra::PreconditionAMG> Amg_preconditioner;
2132  std::unique_ptr<LinearAlgebra::PreconditionBase> Mp_preconditioner;
2133 
2139 
2144  private:
2145 
2151  std::unique_ptr<MeshDeformation::MeshDeformationHandler<dim>> mesh_deformation;
2152 
2156  std::unique_ptr<StokesMatrixFreeHandler<dim>> stokes_matrix_free;
2157 
2158  friend class boost::serialization::access;
2159  friend class SimulatorAccess<dim>;
2160  friend class MeshDeformation::MeshDeformationHandler<dim>; // MeshDeformationHandler needs access to the internals of the Simulator
2161  friend class VolumeOfFluidHandler<dim>; // VolumeOfFluidHandler needs access to the internals of the Simulator
2162  friend class StokesMatrixFreeHandler<dim>;
2163  template <int dimension, int velocity_degree>
2165  friend struct Parameters<dim>;
2166  };
2167 }
2168 
2169 
2170 #endif
The NullspaceRemoval struct.
Definition: parameters.h:135
unsigned int nonlinear_iteration
Definition: simulator.h:1990
BoundaryVelocity::Manager< dim > boundary_velocity_manager
Definition: simulator.h:1969
const std::unique_ptr< AdiabaticConditions::Interface< dim > > adiabatic_conditions
Definition: simulator.h:1954
std::shared_ptr< InitialComposition::Manager< dim > > initial_composition_manager
Definition: simulator.h:1952
void write_plugin_graph(std::ostream &output_stream)
parallel::distributed::Triangulation< dim > triangulation
Definition: simulator.h:2018
TimerOutput computing_timer
Definition: simulator.h:1901
BoundaryTemperature::Manager< dim > boundary_temperature_manager
Definition: simulator.h:1937
boost::iostreams::tee_device< std::ostream, std::ofstream > TeeDevice
Definition: simulator.h:1861
::TrilinosWrappers::MPI::BlockVector BlockVector
Definition: global.h:261
double pressure_scaling
Definition: simulator.h:2066
Tensor< 1, dim > tensor_rotation
Definition: simulator.h:168
double old_time_step
Definition: simulator.h:1987
Tensor< 1, dim > tensor_angular_momentum
Definition: simulator.h:167
AffineConstraints< double > constraints
Definition: simulator.h:2052
bool assemble_newton_stokes_system
Definition: simulator.h:2137
LinearAlgebra::BlockVector old_solution
Definition: simulator.h:2117
const IntermediaryConstructorAction post_geometry_model_creation_action
Definition: simulator.h:1934
std::unique_ptr< VolumeOfFluidHandler< dim > > volume_of_fluid_handler
Definition: simulator.h:1848
bool rebuild_stokes_matrix
Definition: simulator.h:2135
Parameters< dim > parameters
Definition: simulator.h:1821
SymmetricTensor< 2, dim > tensor_moment_of_inertia
Definition: simulator.h:166
AffineConstraints< double > current_constraints
Definition: simulator.h:2053
std::unique_ptr< MeshDeformation::MeshDeformationHandler< dim > > mesh_deformation
Definition: simulator.h:2151
LinearAlgebra::BlockVector system_rhs
Definition: simulator.h:2119
std::pair< double, double > stokes_residuals
Definition: simulator.h:136
std::vector< Particle::Manager< dim > > particle_managers
Definition: simulator.h:1976
std::thread output_statistics_thread
Definition: simulator.h:1922
LateralAveraging< dim > lateral_averaging
Definition: simulator.h:2009
DeclExceptionMsg(ExcNonlinearSolverNoConvergence, "Nonlinear solver failed to converge in the prescribed number of steps. " "Consider changing `Max nonlinear iterations` or `Nonlinear solver failure " "strategy`.")
TeeStream iostream_tee_stream
Definition: simulator.h:1865
::TrilinosWrappers::MPI::Vector Vector
Definition: global.h:255
MeshRefinement::Manager< dim > mesh_refinement_manager
Definition: simulator.h:2022
std::size_t statistics_last_write_size
Definition: simulator.h:1898
const std::unique_ptr< MaterialModel::Interface< dim > > material_model
Definition: simulator.h:1935
unsigned int nonlinear_solver_failures
Definition: simulator.h:1991
double last_pressure_normalization_adjustment
Definition: simulator.h:2059
::TrilinosWrappers::BlockSparseMatrix BlockSparseMatrix
Definition: global.h:272
double total_walltime_until_last_snapshot
Definition: simulator.h:1913
void declare_parameters(ParameterHandler &prm)
const std::unique_ptr< GeometryModel::Interface< dim > > geometry_model
Definition: simulator.h:1933
LinearAlgebra::BlockVector operator_split_reaction_vector
Definition: simulator.h:2127
DoFHandler< dim > dof_handler
Definition: simulator.h:2037
std::unique_ptr< StokesMatrixFreeHandler< dim > > stokes_matrix_free
Definition: simulator.h:2156
std::unique_ptr< Assemblers::Manager< dim > > assemblers
Definition: simulator.h:1094
bool rebuild_sparsity_and_matrices
Definition: simulator.h:2134
const IntermediaryConstructorAction post_signal_creation
Definition: simulator.h:1839
double global_Omega_diameter
Definition: simulator.h:2019
unsigned int timestep_number
Definition: simulator.h:1988
bool assemble_newton_stokes_matrix
Definition: simulator.h:2136
ConditionalOStream pcout
Definition: simulator.h:1871
unsigned int pre_refinement_step
Definition: simulator.h:1989
TimeStepping::Manager< dim > time_stepping_manager
Definition: simulator.h:2000
std::size_t statistics_last_hash
Definition: simulator.h:1899
TableHandler statistics
Definition: simulator.h:1882
Introspection< dim > introspection
Definition: simulator.h:1850
MPI_Comm mpi_communicator
Definition: simulator.h:1853
typename Parameters< dim >::NullspaceRemoval NullspaceRemoval
Definition: simulator.h:258
LinearAlgebra::BlockSparseMatrix system_preconditioner_matrix
Definition: simulator.h:2114
bool do_pressure_rhs_compatibility_modification
Definition: simulator.h:2074
LinearAlgebra::BlockVector current_linearization_point
Definition: simulator.h:2121
LinearAlgebra::BlockVector old_old_solution
Definition: simulator.h:2118
BoundaryTraction::Manager< dim > boundary_traction_manager
Definition: simulator.h:1970
Definition: compat.h:59
LinearAlgebra::BlockVector pressure_shape_function_integrals
Definition: simulator.h:2124
std::ofstream log_file_stream
Definition: simulator.h:1859
std::unique_ptr< LinearAlgebra::PreconditionAMG > Amg_preconditioner
Definition: simulator.h:2131
std::shared_ptr< InitialTemperature::Manager< dim > > initial_temperature_manager
Definition: simulator.h:1951
TeeDevice iostream_tee_device
Definition: simulator.h:1864
boost::iostreams::stream< TeeDevice > TeeStream
Definition: simulator.h:1862
LinearAlgebra::BlockSparseMatrix system_matrix
Definition: simulator.h:2094
std::unique_ptr< MeltHandler< dim > > melt_handler
Definition: simulator.h:1828
LinearAlgebra::BlockVector inverse_lumped_mass_matrix
Definition: simulator.h:2100
bool rebuild_stokes_preconditioner
Definition: simulator.h:2138
const unsigned int compositional_variable
Definition: simulator.h:286
std::unique_ptr< Mapping< dim > > mapping
Definition: simulator.h:2033
const std::unique_ptr< PrescribedStokesSolution::Interface< dim > > prescribed_stokes_solution
Definition: simulator.h:1939
HeatingModel::Manager< dim > heating_model_manager
Definition: simulator.h:2023
SimulatorSignals< dim > signals
Definition: simulator.h:1837
const std::unique_ptr< BoundaryHeatFlux::Interface< dim > > boundary_heat_flux
Definition: simulator.h:1971
const FESystem< dim > finite_element
Definition: simulator.h:2035
bool simulator_is_past_initialization
Definition: simulator.h:420
Definition: compat.h:42
const std::unique_ptr< InitialTopographyModel::Interface< dim > > initial_topography_model
Definition: simulator.h:1932
LinearAlgebra::BlockVector solution
Definition: simulator.h:2116
std::unique_ptr< NewtonHandler< dim > > newton_handler
Definition: simulator.h:1835
typename Parameters< dim >::NonlinearSolver NonlinearSolver
Definition: simulator.h:253
Postprocess::Manager< dim > postprocess_manager
Definition: simulator.h:2039
const std::unique_ptr< GravityModel::Interface< dim > > gravity_model
Definition: simulator.h:1936
double newton_residual_for_derivative_scaling_factor
Definition: simulator.h:135
double global_volume
Definition: simulator.h:2020
BoundaryComposition::Manager< dim > boundary_composition_manager
Definition: simulator.h:1938
std::unique_ptr< LinearAlgebra::PreconditionBase > Mp_preconditioner
Definition: simulator.h:2132
::TrilinosWrappers::PreconditionILU PreconditionILU
Definition: global.h:295