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  template <int dim>
79  class MeltHandler;
80 
81  template <int dim>
82  class NewtonHandler;
83 
84  template <int dim>
86 
87  namespace StokesSolver
88  {
89  template <int dim>
90  class Direct;
91  }
92 
93  template <int dim, int velocity_degree>
95 
96  namespace MeshDeformation
97  {
98  template <int dim>
100  }
101 
102  template <int dim>
104 
105  namespace internal
106  {
107  namespace Assembly
108  {
109  namespace Scratch
110  {
111  template <int dim> struct StokesPreconditioner;
112  template <int dim> struct StokesSystem;
113  template <int dim> struct AdvectionSystem;
114  }
115 
116  namespace CopyData
117  {
118  template <int dim> struct StokesPreconditioner;
119  template <int dim> struct StokesSystem;
120  template <int dim> struct AdvectionSystem;
121  }
122  }
123  }
124 
125  namespace Assemblers
126  {
127  template <int dim> class Interface;
128  template <int dim> class Manager;
129  }
130 
132  {
136  double residual;
137  double residual_old;
140  std::pair<double,double> stokes_residuals;
141  };
142 
146  template <int dim>
148  {
150  :
151  scalar_moment_of_inertia(numbers::signaling_nan<double>()),
152  scalar_angular_momentum(numbers::signaling_nan<double>()),
153  scalar_rotation(numbers::signaling_nan<double>()),
154  tensor_moment_of_inertia(numbers::signaling_nan<SymmetricTensor<2,dim>>()),
155  tensor_angular_momentum(numbers::signaling_nan<Tensor<1,dim>>()),
156  tensor_rotation(numbers::signaling_nan<Tensor<1,dim>>())
157  {};
158 
166 
170  SymmetricTensor<2,dim> tensor_moment_of_inertia;
171  Tensor<1,dim> tensor_angular_momentum;
172  Tensor<1,dim> tensor_rotation;
173  };
174 
178  DeclExceptionMsg(ExcNonlinearSolverNoConvergence,
179  "Nonlinear solver failed to converge in the prescribed number of steps. "
180  "Consider changing `Max nonlinear iterations` or `Nonlinear solver failure "
181  "strategy`.");
182 
190  template <int dim>
191  class Simulator
192  {
193  public:
207  Simulator (const MPI_Comm mpi_communicator,
208  ParameterHandler &prm);
209 
214  ~Simulator ();
215 
227  static
228  void declare_parameters (ParameterHandler &prm);
229 
238  void run ();
239 
251  void
252  write_plugin_graph (std::ostream &output_stream) const;
253 
258 
263 
264 
272  {
277  enum FieldType { temperature_field, compositional_field };
278 
284 
290  const unsigned int compositional_variable;
291 
303  AdvectionField (const FieldType field_type,
304  const unsigned int compositional_variable = numbers::invalid_unsigned_int);
305 
313  static
315 
323  static
324  AdvectionField composition (const unsigned int compositional_variable);
325 
329  bool
330  is_temperature () const;
331 
336  bool
337  is_discontinuous (const Introspection<dim> &introspection) const;
338 
344  advection_method (const Introspection<dim> &introspection) const;
345 
350  unsigned int component_index(const Introspection<dim> &introspection) const;
351 
356  unsigned int block_index(const Introspection<dim> &introspection) const;
357 
365  unsigned int sparsity_pattern_block_index(const Introspection<dim> &introspection) const;
366 
373  unsigned int field_index() const;
374 
380  unsigned int base_element(const Introspection<dim> &introspection) const;
381 
388  FEValuesExtractors::Scalar scalar_extractor(const Introspection<dim> &introspection) const;
389 
394  unsigned int polynomial_degree(const Introspection<dim> &introspection) const;
395 
400  std::string
401  name(const Introspection<dim> &introspection) const;
402  };
403 
404  private:
405 
425 
443  {
444  IntermediaryConstructorAction (const std::function<void ()> &action);
445  };
446 
461  void setup_dofs ();
462 
471  void setup_introspection ();
472 
484  void set_initial_temperature_and_compositional_fields ();
485 
501  void compute_initial_pressure_field ();
502 
508  void compute_initial_velocity_boundary_constraints (AffineConstraints<double> &constraints);
509 
515  void compute_current_velocity_boundary_constraints (AffineConstraints<double> &constraints);
516 
529  void compute_current_constraints ();
530 
544  double compute_pressure_scaling_factor () const;
545 
557  void start_timestep ();
558 
566  void solve_timestep ();
567 
579  void solve_single_advection_single_stokes ();
580 
593  void solve_no_advection_iterated_stokes ();
594 
605  void solve_no_advection_single_stokes ();
606 
618  void solve_first_timestep_only_single_stokes ();
619 
632  void solve_iterated_advection_and_stokes ();
633 
646  void solve_single_advection_iterated_stokes ();
647 
660  void solve_no_advection_iterated_defect_correction_stokes ();
661 
674  void solve_single_advection_iterated_defect_correction_stokes ();
675 
689  void solve_iterated_advection_and_defect_correction_stokes ();
690 
709  void solve_iterated_advection_and_newton_stokes (bool use_newton_iterations);
710 
730  void solve_single_advection_and_iterated_newton_stokes (bool use_newton_iterations);
731 
743  void solve_single_advection_no_stokes ();
744 
756  void solve_no_advection_no_stokes ();
757 
766  void build_stokes_preconditioner ();
767 
775  void build_advection_preconditioner (const AdvectionField &advection_field,
777  const double diagonal_strengthening);
778 
785  void assemble_stokes_system ();
786 
801  double assemble_and_solve_temperature (const double &initial_residual = 0,
802  double *residual = nullptr);
803 
819  std::vector<double> assemble_and_solve_composition (const std::vector<double> &initial_residual = {},
820  std::vector<double> *residual = nullptr);
821 
836  double assemble_and_solve_stokes (const double &initial_nonlinear_residual = 0,
837  double *nonlinear_residual = nullptr);
838 
851  void do_one_defect_correction_Stokes_step(DefectCorrectionResiduals &dcr,
852  const bool use_picard);
853 
861  void assemble_advection_system (const AdvectionField &advection_field);
862 
873  double solve_advection (const AdvectionField &advection_field);
874 
879  void interpolate_particle_properties (const std::vector<AdvectionField> &advection_fields);
880 
957  std::pair<double,double>
958  solve_stokes (LinearAlgebra::BlockVector &solution_vector);
959 
972  void postprocess ();
973 
989  void refine_mesh (const unsigned int max_grid_level);
990 
1011  void create_snapshot();
1012 
1026  void resume_from_snapshot();
1027 
1034  template <class Archive>
1035  void serialize (Archive &ar, const unsigned int version);
1052  Table<2,DoFTools::Coupling>
1053  setup_system_matrix_coupling () const;
1054 
1062  void setup_system_matrix (const std::vector<IndexSet> &system_partitioning);
1063 
1075  void setup_system_preconditioner (const std::vector<IndexSet> &system_partitioning);
1076 
1098  std::unique_ptr<Assemblers::Manager<dim>> assemblers;
1099 
1108  void set_assemblers ();
1109 
1120  void set_advection_assemblers ();
1121 
1131  void set_stokes_assemblers ();
1132 
1139  void assemble_stokes_preconditioner ();
1140 
1148  void
1149  local_assemble_stokes_preconditioner (const typename DoFHandler<dim>::active_cell_iterator &cell,
1152 
1160  void
1161  copy_local_to_global_stokes_preconditioner (const internal::Assembly::CopyData::StokesPreconditioner<dim> &data);
1162 
1170  void
1171  local_assemble_stokes_system (const typename DoFHandler<dim>::active_cell_iterator &cell,
1174 
1182  void
1183  copy_local_to_global_stokes_system (const internal::Assembly::CopyData::StokesSystem<dim> &data);
1184 
1192  void
1193  local_assemble_advection_face_terms(const AdvectionField &advection_field,
1194  const typename DoFHandler<dim>::active_cell_iterator &cell,
1204  void
1205  local_assemble_advection_system (const AdvectionField &advection_field,
1206  const Vector<double> &viscosity_per_cell,
1207  const typename DoFHandler<dim>::active_cell_iterator &cell,
1210 
1218  void
1219  copy_local_to_global_advection_system (const AdvectionField &advection_field,
1221 
1246  void make_pressure_rhs_compatible(LinearAlgebra::BlockVector &vector);
1247 
1257  template <typename T>
1258  void get_artificial_viscosity (Vector<T> &viscosity_per_cell,
1259  const AdvectionField &advection_field,
1260  const bool skip_interior_cells = false) const;
1261 
1273  void compute_Vs_anomaly(Vector<float> &values) const;
1274 
1289  void compute_Vp_anomaly(Vector<float> &values) const;
1290 
1323  double normalize_pressure(LinearAlgebra::BlockVector &vector) const;
1324 
1364  void denormalize_pressure(const double pressure_adjustment,
1365  LinearAlgebra::BlockVector &vector) const;
1366 
1375  void apply_limiter_to_dg_solutions (const AdvectionField &advection_field);
1376 
1393  void compute_unique_advection_support_points (const std::vector<AdvectionField> &advection_fields,
1394  std::vector<Point<dim>> &unique_support_points,
1395  std::vector<std::vector<unsigned int>> &support_point_index_by_field) const;
1396 
1419  void compute_reactions ();
1420 
1430  void update_solution_vectors_with_reaction_results (const unsigned int block_index,
1431  const LinearAlgebra::BlockVector &distributed_vector,
1432  const LinearAlgebra::BlockVector &distributed_reaction_vector);
1433 
1444  void initialize_current_linearization_point ();
1445 
1465  void interpolate_material_output_into_advection_field (const std::vector<AdvectionField> &adv_field);
1466 
1467 
1475  void interpolate_onto_velocity_system(const TensorFunction<1,dim> &func,
1476  LinearAlgebra::Vector &vec) const;
1477 
1478 
1493  void setup_nullspace_constraints(AffineConstraints<double> &constraints);
1494 
1495 
1508  void remove_nullspace(LinearAlgebra::BlockVector &solution,
1509  LinearAlgebra::BlockVector &distributed_stokes_solution) const;
1510 
1526  compute_net_angular_momentum(const bool use_constant_density,
1527  const LinearAlgebra::BlockVector &solution,
1528  const bool limit_to_top_faces = false) const;
1529 
1546  void remove_net_angular_momentum(const bool use_constant_density,
1547  LinearAlgebra::BlockVector &relevant_dst,
1548  LinearAlgebra::BlockVector &tmp_distributed_stokes,
1549  const bool limit_to_top_faces = false) const;
1550 
1558  void replace_outflow_boundary_ids(const unsigned int boundary_id_offset);
1559 
1567  void restore_outflow_boundary_ids(const unsigned int boundary_id_offset);
1568 
1582  void remove_net_linear_momentum(const bool use_constant_density,
1583  LinearAlgebra::BlockVector &relevant_dst,
1584  LinearAlgebra::BlockVector &tmp_distributed_stokes) const;
1585 
1593  double get_maximal_velocity (const LinearAlgebra::BlockVector &solution) const;
1594 
1607  double get_entropy_variation (const double average_field,
1608  const AdvectionField &advection_field) const;
1609 
1618  std::pair<double,double>
1619  get_extrapolated_advection_field_range (const AdvectionField &advection_field) const;
1620 
1629  void exchange_refinement_flags();
1630 
1631 
1640  void maybe_write_timing_output () const;
1641 
1649  bool maybe_write_checkpoint (const time_t last_checkpoint_time,
1650  const bool force_writing_checkpoint);
1651 
1668  bool maybe_do_initial_refinement (const unsigned int max_refinement_level);
1669 
1678  void maybe_refine_mesh (const double new_time_step,
1679  unsigned int &max_refinement_level);
1680 
1688  void advance_time (const double step_size);
1689 
1697  double
1698  compute_viscosity(internal::Assembly::Scratch::AdvectionSystem<dim> &scratch,
1699  const double global_u_infty,
1700  const double global_field_variation,
1701  const double average_field,
1702  const double global_entropy_variation,
1703  const double cell_diameter,
1704  const AdvectionField &advection_field) const;
1705 
1714  void
1715  compute_advection_system_residual(internal::Assembly::Scratch::AdvectionSystem<dim> &scratch,
1716  const double average_field,
1717  const AdvectionField &advection_field,
1718  double &max_residual,
1719  double &max_velocity,
1720  double &max_density,
1721  double &max_specific_heat,
1722  double &conductivity) const;
1723 
1738  bool
1739  stokes_matrix_depends_on_solution () const;
1740 
1750  bool
1751  stokes_A_block_is_symmetric () const;
1752 
1765  void
1766  check_consistency_of_formulation ();
1767 
1773  void
1774  select_default_solver_and_averaging ();
1775 
1786  void
1787  check_consistency_of_boundary_conditions () const;
1788 
1792  double
1793  compute_initial_newton_residual ();
1794 
1803  double
1804  compute_Eisenstat_Walker_linear_tolerance(const bool EisenstatWalkerChoiceOne,
1805  const double maximum_linear_stokes_solver_tolerance,
1806  const double linear_stokes_solver_tolerance,
1807  const double stokes_residual,
1808  const double newton_residual,
1809  const double newton_residual_old);
1810 
1820  void output_statistics();
1821 
1833  double
1834  compute_initial_stokes_residual();
1835 
1846 
1852  std::unique_ptr<MeltHandler<dim>> melt_handler;
1853 
1859  std::unique_ptr<NewtonHandler<dim>> newton_handler;
1860 
1862 
1864 
1872  std::unique_ptr<VolumeOfFluidHandler<dim>> volume_of_fluid_handler;
1873 
1875 
1876 
1878 
1883  std::ofstream log_file_stream;
1884 
1885  using TeeDevice = boost::iostreams::tee_device<std::ostream, std::ofstream>;
1886  using TeeStream = boost::iostreams::stream<TeeDevice>;
1887 
1890 
1895  ConditionalOStream pcout;
1896 
1906  TableHandler statistics;
1907 
1924 
1925  mutable TimerOutput computing_timer;
1926 
1931  Timer wall_timer;
1932 
1938 
1947 
1956  const std::unique_ptr<InitialTopographyModel::Interface<dim>> initial_topography_model;
1957  const std::unique_ptr<GeometryModel::Interface<dim>> geometry_model;
1959  const std::unique_ptr<MaterialModel::Interface<dim>> material_model;
1960  const std::unique_ptr<GravityModel::Interface<dim>> gravity_model;
1963  const std::unique_ptr<PrescribedStokesSolution::Interface<dim>> prescribed_stokes_solution;
1964 
1975  std::shared_ptr<InitialTemperature::Manager<dim>> initial_temperature_manager;
1976  std::shared_ptr<InitialComposition::Manager<dim>> initial_composition_manager;
1977 
1978  const std::unique_ptr<AdiabaticConditions::Interface<dim>> adiabatic_conditions;
1979 #ifdef ASPECT_WITH_WORLD_BUILDER
1980 
1991  std::shared_ptr<WorldBuilder::World> world_builder;
1992 #endif
1995  const std::unique_ptr<BoundaryHeatFlux::Interface<dim>> boundary_heat_flux;
1996 
2000  std::vector<Particle::Manager<dim>> particle_managers;
2001 
2009  double time;
2010  double time_step;
2012  unsigned int timestep_number;
2013  unsigned int pre_refinement_step;
2014  unsigned int nonlinear_iteration;
2042  parallel::distributed::Triangulation<dim> triangulation;
2045 
2048 
2057  std::unique_ptr<Mapping<dim>> mapping;
2058 
2059  const FESystem<dim> finite_element;
2060 
2061  DoFHandler<dim> dof_handler;
2062 
2064 
2076  AffineConstraints<double> constraints;
2077  AffineConstraints<double> current_constraints;
2078 
2084 
2091 
2099 
2119 
2125 
2139 
2144 
2146 
2147  // only used if is_compressible()
2149 
2150  // only used if operator split is enabled
2152 
2153 
2154 
2155  std::unique_ptr<LinearAlgebra::PreconditionAMG> Amg_preconditioner;
2156  std::unique_ptr<LinearAlgebra::PreconditionBase> Mp_preconditioner;
2157 
2163 
2168  private:
2169 
2175  std::unique_ptr<MeshDeformation::MeshDeformationHandler<dim>> mesh_deformation;
2176 
2180  std::unique_ptr<StokesMatrixFreeHandler<dim>> stokes_matrix_free;
2181 
2185  std::unique_ptr<StokesSolver::Direct<dim>> stokes_direct;
2186 
2187 
2188  friend class boost::serialization::access;
2189  friend class SimulatorAccess<dim>;
2190  friend class MeshDeformation::MeshDeformationHandler<dim>; // MeshDeformationHandler needs access to the internals of the Simulator
2191  friend class VolumeOfFluidHandler<dim>; // VolumeOfFluidHandler needs access to the internals of the Simulator
2192  friend class StokesMatrixFreeHandler<dim>;
2193  template <int dimension, int velocity_degree>
2195  friend struct Parameters<dim>;
2196  };
2197 }
2198 
2199 
2200 #endif
The NullspaceRemoval struct.
Definition: parameters.h:133
unsigned int nonlinear_iteration
Definition: simulator.h:2014
BoundaryVelocity::Manager< dim > boundary_velocity_manager
Definition: simulator.h:1993
const std::unique_ptr< AdiabaticConditions::Interface< dim > > adiabatic_conditions
Definition: simulator.h:1978
std::shared_ptr< InitialComposition::Manager< dim > > initial_composition_manager
Definition: simulator.h:1976
void write_plugin_graph(std::ostream &output_stream)
parallel::distributed::Triangulation< dim > triangulation
Definition: simulator.h:2042
TimerOutput computing_timer
Definition: simulator.h:1925
BoundaryTemperature::Manager< dim > boundary_temperature_manager
Definition: simulator.h:1961
boost::iostreams::tee_device< std::ostream, std::ofstream > TeeDevice
Definition: simulator.h:1885
std::unique_ptr< StokesSolver::Direct< dim > > stokes_direct
Definition: simulator.h:2185
::TrilinosWrappers::MPI::BlockVector BlockVector
Definition: global.h:268
double pressure_scaling
Definition: simulator.h:2090
Tensor< 1, dim > tensor_rotation
Definition: simulator.h:172
double old_time_step
Definition: simulator.h:2011
Tensor< 1, dim > tensor_angular_momentum
Definition: simulator.h:171
AffineConstraints< double > constraints
Definition: simulator.h:2076
bool assemble_newton_stokes_system
Definition: simulator.h:2161
LinearAlgebra::BlockVector old_solution
Definition: simulator.h:2141
const IntermediaryConstructorAction post_geometry_model_creation_action
Definition: simulator.h:1958
std::unique_ptr< VolumeOfFluidHandler< dim > > volume_of_fluid_handler
Definition: simulator.h:1872
bool rebuild_stokes_matrix
Definition: simulator.h:2159
Parameters< dim > parameters
Definition: simulator.h:1845
SymmetricTensor< 2, dim > tensor_moment_of_inertia
Definition: simulator.h:170
AffineConstraints< double > current_constraints
Definition: simulator.h:2077
std::unique_ptr< MeshDeformation::MeshDeformationHandler< dim > > mesh_deformation
Definition: simulator.h:2175
LinearAlgebra::BlockVector system_rhs
Definition: simulator.h:2143
std::pair< double, double > stokes_residuals
Definition: simulator.h:140
std::vector< Particle::Manager< dim > > particle_managers
Definition: simulator.h:2000
std::thread output_statistics_thread
Definition: simulator.h:1946
LateralAveraging< dim > lateral_averaging
Definition: simulator.h:2033
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:1889
::TrilinosWrappers::MPI::Vector Vector
Definition: global.h:262
MeshRefinement::Manager< dim > mesh_refinement_manager
Definition: simulator.h:2046
std::size_t statistics_last_write_size
Definition: simulator.h:1922
const std::unique_ptr< MaterialModel::Interface< dim > > material_model
Definition: simulator.h:1959
unsigned int nonlinear_solver_failures
Definition: simulator.h:2015
double last_pressure_normalization_adjustment
Definition: simulator.h:2083
::TrilinosWrappers::BlockSparseMatrix BlockSparseMatrix
Definition: global.h:279
double total_walltime_until_last_snapshot
Definition: simulator.h:1937
void declare_parameters(ParameterHandler &prm)
const std::unique_ptr< GeometryModel::Interface< dim > > geometry_model
Definition: simulator.h:1957
LinearAlgebra::BlockVector operator_split_reaction_vector
Definition: simulator.h:2151
DoFHandler< dim > dof_handler
Definition: simulator.h:2061
std::unique_ptr< StokesMatrixFreeHandler< dim > > stokes_matrix_free
Definition: simulator.h:2180
std::unique_ptr< Assemblers::Manager< dim > > assemblers
Definition: simulator.h:1098
bool rebuild_sparsity_and_matrices
Definition: simulator.h:2158
const IntermediaryConstructorAction post_signal_creation
Definition: simulator.h:1863
double global_Omega_diameter
Definition: simulator.h:2043
unsigned int timestep_number
Definition: simulator.h:2012
bool assemble_newton_stokes_matrix
Definition: simulator.h:2160
ConditionalOStream pcout
Definition: simulator.h:1895
unsigned int pre_refinement_step
Definition: simulator.h:2013
TimeStepping::Manager< dim > time_stepping_manager
Definition: simulator.h:2024
std::size_t statistics_last_hash
Definition: simulator.h:1923
TableHandler statistics
Definition: simulator.h:1906
Introspection< dim > introspection
Definition: simulator.h:1874
MPI_Comm mpi_communicator
Definition: simulator.h:1877
typename Parameters< dim >::NullspaceRemoval NullspaceRemoval
Definition: simulator.h:262
LinearAlgebra::BlockSparseMatrix system_preconditioner_matrix
Definition: simulator.h:2138
bool do_pressure_rhs_compatibility_modification
Definition: simulator.h:2098
LinearAlgebra::BlockVector current_linearization_point
Definition: simulator.h:2145
LinearAlgebra::BlockVector old_old_solution
Definition: simulator.h:2142
BoundaryTraction::Manager< dim > boundary_traction_manager
Definition: simulator.h:1994
Definition: compat.h:59
LinearAlgebra::BlockVector pressure_shape_function_integrals
Definition: simulator.h:2148
std::ofstream log_file_stream
Definition: simulator.h:1883
std::unique_ptr< LinearAlgebra::PreconditionAMG > Amg_preconditioner
Definition: simulator.h:2155
std::shared_ptr< InitialTemperature::Manager< dim > > initial_temperature_manager
Definition: simulator.h:1975
TeeDevice iostream_tee_device
Definition: simulator.h:1888
boost::iostreams::stream< TeeDevice > TeeStream
Definition: simulator.h:1886
LinearAlgebra::BlockSparseMatrix system_matrix
Definition: simulator.h:2118
std::unique_ptr< MeltHandler< dim > > melt_handler
Definition: simulator.h:1852
LinearAlgebra::BlockVector inverse_lumped_mass_matrix
Definition: simulator.h:2124
bool rebuild_stokes_preconditioner
Definition: simulator.h:2162
const unsigned int compositional_variable
Definition: simulator.h:290
std::unique_ptr< Mapping< dim > > mapping
Definition: simulator.h:2057
const std::unique_ptr< PrescribedStokesSolution::Interface< dim > > prescribed_stokes_solution
Definition: simulator.h:1963
HeatingModel::Manager< dim > heating_model_manager
Definition: simulator.h:2047
SimulatorSignals< dim > signals
Definition: simulator.h:1861
const std::unique_ptr< BoundaryHeatFlux::Interface< dim > > boundary_heat_flux
Definition: simulator.h:1995
const FESystem< dim > finite_element
Definition: simulator.h:2059
bool simulator_is_past_initialization
Definition: simulator.h:424
const std::unique_ptr< InitialTopographyModel::Interface< dim > > initial_topography_model
Definition: simulator.h:1956
LinearAlgebra::BlockVector solution
Definition: simulator.h:2140
std::unique_ptr< NewtonHandler< dim > > newton_handler
Definition: simulator.h:1859
typename Parameters< dim >::NonlinearSolver NonlinearSolver
Definition: simulator.h:257
Postprocess::Manager< dim > postprocess_manager
Definition: simulator.h:2063
const std::unique_ptr< GravityModel::Interface< dim > > gravity_model
Definition: simulator.h:1960
double newton_residual_for_derivative_scaling_factor
Definition: simulator.h:139
double global_volume
Definition: simulator.h:2044
BoundaryComposition::Manager< dim > boundary_composition_manager
Definition: simulator.h:1962
std::unique_ptr< LinearAlgebra::PreconditionBase > Mp_preconditioner
Definition: simulator.h:2156
::TrilinosWrappers::PreconditionILU PreconditionILU
Definition: global.h:302