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  template <int dim, int velocity_degree>
89 
90  namespace MeshDeformation
91  {
92  template <int dim>
94  }
95 
96  template <int dim>
98 
99  namespace internal
100  {
101  namespace Assembly
102  {
103  namespace Scratch
104  {
105  template <int dim> struct StokesPreconditioner;
106  template <int dim> struct StokesSystem;
107  template <int dim> struct AdvectionSystem;
108  }
109 
110  namespace CopyData
111  {
112  template <int dim> struct StokesPreconditioner;
113  template <int dim> struct StokesSystem;
114  template <int dim> struct AdvectionSystem;
115  }
116  }
117  }
118 
119  namespace Assemblers
120  {
121  template <int dim> class Interface;
122  template <int dim> class Manager;
123  }
124 
126  {
130  double residual;
131  double residual_old;
134  std::pair<double,double> stokes_residuals;
135  };
136 
140  template <int dim>
142  {
144  :
145  scalar_moment_of_inertia(numbers::signaling_nan<double>()),
146  scalar_angular_momentum(numbers::signaling_nan<double>()),
147  scalar_rotation(numbers::signaling_nan<double>()),
148  tensor_moment_of_inertia(numbers::signaling_nan<SymmetricTensor<2,dim>>()),
149  tensor_angular_momentum(numbers::signaling_nan<Tensor<1,dim>>()),
150  tensor_rotation(numbers::signaling_nan<Tensor<1,dim>>())
151  {};
152 
160 
164  SymmetricTensor<2,dim> tensor_moment_of_inertia;
165  Tensor<1,dim> tensor_angular_momentum;
166  Tensor<1,dim> tensor_rotation;
167  };
168 
172  DeclExceptionMsg(ExcNonlinearSolverNoConvergence,
173  "Nonlinear solver failed to converge in the prescribed number of steps. "
174  "Consider changing `Max nonlinear iterations` or `Nonlinear solver failure "
175  "strategy`.");
176 
184  template <int dim>
185  class Simulator
186  {
187  public:
201  Simulator (const MPI_Comm mpi_communicator,
202  ParameterHandler &prm);
203 
208  ~Simulator ();
209 
221  static
222  void declare_parameters (ParameterHandler &prm);
223 
232  void run ();
233 
245  void
246  write_plugin_graph (std::ostream &output_stream) const;
247 
252 
257 
258 
266  {
271  enum FieldType { temperature_field, compositional_field };
272 
278 
284  const unsigned int compositional_variable;
285 
297  AdvectionField (const FieldType field_type,
298  const unsigned int compositional_variable = numbers::invalid_unsigned_int);
299 
307  static
309 
317  static
318  AdvectionField composition (const unsigned int compositional_variable);
319 
323  bool
324  is_temperature () const;
325 
330  bool
331  is_discontinuous (const Introspection<dim> &introspection) const;
332 
338  advection_method (const Introspection<dim> &introspection) const;
339 
344  unsigned int component_index(const Introspection<dim> &introspection) const;
345 
350  unsigned int block_index(const Introspection<dim> &introspection) const;
351 
359  unsigned int sparsity_pattern_block_index(const Introspection<dim> &introspection) const;
360 
367  unsigned int field_index() const;
368 
374  unsigned int base_element(const Introspection<dim> &introspection) const;
375 
382  FEValuesExtractors::Scalar scalar_extractor(const Introspection<dim> &introspection) const;
383 
388  unsigned int polynomial_degree(const Introspection<dim> &introspection) const;
389 
394  std::string
395  name(const Introspection<dim> &introspection) const;
396  };
397 
398  private:
399 
419 
437  {
438  IntermediaryConstructorAction (const std::function<void ()> &action);
439  };
440 
455  void setup_dofs ();
456 
465  void setup_introspection ();
466 
478  void set_initial_temperature_and_compositional_fields ();
479 
495  void compute_initial_pressure_field ();
496 
502  void compute_initial_velocity_boundary_constraints (AffineConstraints<double> &constraints);
503 
509  void compute_current_velocity_boundary_constraints (AffineConstraints<double> &constraints);
510 
523  void compute_current_constraints ();
524 
538  double compute_pressure_scaling_factor () const;
539 
551  void start_timestep ();
552 
560  void solve_timestep ();
561 
573  void solve_single_advection_single_stokes ();
574 
587  void solve_no_advection_iterated_stokes ();
588 
599  void solve_no_advection_single_stokes ();
600 
612  void solve_first_timestep_only_single_stokes ();
613 
626  void solve_iterated_advection_and_stokes ();
627 
640  void solve_single_advection_iterated_stokes ();
641 
654  void solve_no_advection_iterated_defect_correction_stokes ();
655 
668  void solve_single_advection_iterated_defect_correction_stokes ();
669 
683  void solve_iterated_advection_and_defect_correction_stokes ();
684 
703  void solve_iterated_advection_and_newton_stokes (bool use_newton_iterations);
704 
724  void solve_single_advection_and_iterated_newton_stokes (bool use_newton_iterations);
725 
737  void solve_single_advection_no_stokes ();
738 
750  void solve_no_advection_no_stokes ();
751 
760  void build_stokes_preconditioner ();
761 
769  void build_advection_preconditioner (const AdvectionField &advection_field,
771  const double diagonal_strengthening);
772 
779  void assemble_stokes_system ();
780 
795  double assemble_and_solve_temperature (const double &initial_residual = 0,
796  double *residual = nullptr);
797 
813  std::vector<double> assemble_and_solve_composition (const std::vector<double> &initial_residual = {},
814  std::vector<double> *residual = nullptr);
815 
830  double assemble_and_solve_stokes (const double &initial_nonlinear_residual = 0,
831  double *nonlinear_residual = nullptr);
832 
845  void do_one_defect_correction_Stokes_step(DefectCorrectionResiduals &dcr,
846  const bool use_picard);
847 
855  void assemble_advection_system (const AdvectionField &advection_field);
856 
867  double solve_advection (const AdvectionField &advection_field);
868 
873  void interpolate_particle_properties (const std::vector<AdvectionField> &advection_fields);
874 
951  std::pair<double,double>
952  solve_stokes (LinearAlgebra::BlockVector &solution_vector);
953 
966  void postprocess ();
967 
983  void refine_mesh (const unsigned int max_grid_level);
984 
1005  void create_snapshot();
1006 
1020  void resume_from_snapshot();
1021 
1028  template <class Archive>
1029  void serialize (Archive &ar, const unsigned int version);
1046  Table<2,DoFTools::Coupling>
1047  setup_system_matrix_coupling () const;
1048 
1056  void setup_system_matrix (const std::vector<IndexSet> &system_partitioning);
1057 
1069  void setup_system_preconditioner (const std::vector<IndexSet> &system_partitioning);
1070 
1092  std::unique_ptr<Assemblers::Manager<dim>> assemblers;
1093 
1102  void set_assemblers ();
1103 
1114  void set_advection_assemblers ();
1115 
1125  void set_stokes_assemblers ();
1126 
1133  void assemble_stokes_preconditioner ();
1134 
1142  void
1143  local_assemble_stokes_preconditioner (const typename DoFHandler<dim>::active_cell_iterator &cell,
1146 
1154  void
1155  copy_local_to_global_stokes_preconditioner (const internal::Assembly::CopyData::StokesPreconditioner<dim> &data);
1156 
1164  void
1165  local_assemble_stokes_system (const typename DoFHandler<dim>::active_cell_iterator &cell,
1168 
1176  void
1177  copy_local_to_global_stokes_system (const internal::Assembly::CopyData::StokesSystem<dim> &data);
1178 
1186  void
1187  local_assemble_advection_face_terms(const AdvectionField &advection_field,
1188  const typename DoFHandler<dim>::active_cell_iterator &cell,
1198  void
1199  local_assemble_advection_system (const AdvectionField &advection_field,
1200  const Vector<double> &viscosity_per_cell,
1201  const typename DoFHandler<dim>::active_cell_iterator &cell,
1204 
1212  void
1213  copy_local_to_global_advection_system (const AdvectionField &advection_field,
1215 
1240  void make_pressure_rhs_compatible(LinearAlgebra::BlockVector &vector);
1241 
1251  template <typename T>
1252  void get_artificial_viscosity (Vector<T> &viscosity_per_cell,
1253  const AdvectionField &advection_field,
1254  const bool skip_interior_cells = false) const;
1255 
1267  void compute_Vs_anomaly(Vector<float> &values) const;
1268 
1283  void compute_Vp_anomaly(Vector<float> &values) const;
1284 
1317  double normalize_pressure(LinearAlgebra::BlockVector &vector) const;
1318 
1358  void denormalize_pressure(const double pressure_adjustment,
1359  LinearAlgebra::BlockVector &vector) const;
1360 
1369  void apply_limiter_to_dg_solutions (const AdvectionField &advection_field);
1370 
1387  void compute_unique_advection_support_points (const std::vector<AdvectionField> &advection_fields,
1388  std::vector<Point<dim>> &unique_support_points,
1389  std::vector<std::vector<unsigned int>> &support_point_index_by_field) const;
1390 
1413  void compute_reactions ();
1414 
1424  void update_solution_vectors_with_reaction_results (const unsigned int block_index,
1425  const LinearAlgebra::BlockVector &distributed_vector,
1426  const LinearAlgebra::BlockVector &distributed_reaction_vector);
1427 
1438  void initialize_current_linearization_point ();
1439 
1459  void interpolate_material_output_into_advection_field (const std::vector<AdvectionField> &adv_field);
1460 
1461 
1469  void interpolate_onto_velocity_system(const TensorFunction<1,dim> &func,
1470  LinearAlgebra::Vector &vec) const;
1471 
1472 
1487  void setup_nullspace_constraints(AffineConstraints<double> &constraints);
1488 
1489 
1501  void remove_nullspace(LinearAlgebra::BlockVector &relevant_dst,
1502  LinearAlgebra::BlockVector &tmp_distributed_stokes) const;
1503 
1519  compute_net_angular_momentum(const bool use_constant_density,
1520  const LinearAlgebra::BlockVector &solution,
1521  const bool limit_to_top_faces = false) const;
1522 
1539  void remove_net_angular_momentum(const bool use_constant_density,
1540  LinearAlgebra::BlockVector &relevant_dst,
1541  LinearAlgebra::BlockVector &tmp_distributed_stokes,
1542  const bool limit_to_top_faces = false) const;
1543 
1551  void replace_outflow_boundary_ids(const unsigned int boundary_id_offset);
1552 
1560  void restore_outflow_boundary_ids(const unsigned int boundary_id_offset);
1561 
1575  void remove_net_linear_momentum(const bool use_constant_density,
1576  LinearAlgebra::BlockVector &relevant_dst,
1577  LinearAlgebra::BlockVector &tmp_distributed_stokes) const;
1578 
1586  double get_maximal_velocity (const LinearAlgebra::BlockVector &solution) const;
1587 
1600  double get_entropy_variation (const double average_field,
1601  const AdvectionField &advection_field) const;
1602 
1611  std::pair<double,double>
1612  get_extrapolated_advection_field_range (const AdvectionField &advection_field) const;
1613 
1622  void exchange_refinement_flags();
1623 
1624 
1633  void maybe_write_timing_output () const;
1634 
1642  bool maybe_write_checkpoint (const time_t last_checkpoint_time,
1643  const bool force_writing_checkpoint);
1644 
1661  bool maybe_do_initial_refinement (const unsigned int max_refinement_level);
1662 
1671  void maybe_refine_mesh (const double new_time_step,
1672  unsigned int &max_refinement_level);
1673 
1681  void advance_time (const double step_size);
1682 
1690  double
1691  compute_viscosity(internal::Assembly::Scratch::AdvectionSystem<dim> &scratch,
1692  const double global_u_infty,
1693  const double global_field_variation,
1694  const double average_field,
1695  const double global_entropy_variation,
1696  const double cell_diameter,
1697  const AdvectionField &advection_field) const;
1698 
1707  void
1708  compute_advection_system_residual(internal::Assembly::Scratch::AdvectionSystem<dim> &scratch,
1709  const double average_field,
1710  const AdvectionField &advection_field,
1711  double &max_residual,
1712  double &max_velocity,
1713  double &max_density,
1714  double &max_specific_heat,
1715  double &conductivity) const;
1716 
1731  bool
1732  stokes_matrix_depends_on_solution () const;
1733 
1743  bool
1744  stokes_A_block_is_symmetric () const;
1745 
1758  void
1759  check_consistency_of_formulation ();
1760 
1766  void
1767  select_default_solver_and_averaging ();
1768 
1779  void
1780  check_consistency_of_boundary_conditions () const;
1781 
1785  double
1786  compute_initial_newton_residual ();
1787 
1796  double
1797  compute_Eisenstat_Walker_linear_tolerance(const bool EisenstatWalkerChoiceOne,
1798  const double maximum_linear_stokes_solver_tolerance,
1799  const double linear_stokes_solver_tolerance,
1800  const double stokes_residual,
1801  const double newton_residual,
1802  const double newton_residual_old);
1803 
1813  void output_statistics();
1814 
1826  double
1827  compute_initial_stokes_residual();
1828 
1839 
1845  std::unique_ptr<MeltHandler<dim>> melt_handler;
1846 
1852  std::unique_ptr<NewtonHandler<dim>> newton_handler;
1853 
1855 
1857 
1865  std::unique_ptr<VolumeOfFluidHandler<dim>> volume_of_fluid_handler;
1866 
1868 
1869 
1871 
1876  std::ofstream log_file_stream;
1877 
1878  using TeeDevice = boost::iostreams::tee_device<std::ostream, std::ofstream>;
1879  using TeeStream = boost::iostreams::stream<TeeDevice>;
1880 
1883 
1888  ConditionalOStream pcout;
1889 
1899  TableHandler statistics;
1900 
1917 
1918  mutable TimerOutput computing_timer;
1919 
1924  Timer wall_timer;
1925 
1931 
1940 
1949  const std::unique_ptr<InitialTopographyModel::Interface<dim>> initial_topography_model;
1950  const std::unique_ptr<GeometryModel::Interface<dim>> geometry_model;
1952  const std::unique_ptr<MaterialModel::Interface<dim>> material_model;
1953  const std::unique_ptr<GravityModel::Interface<dim>> gravity_model;
1956  const std::unique_ptr<PrescribedStokesSolution::Interface<dim>> prescribed_stokes_solution;
1957 
1968  std::shared_ptr<InitialTemperature::Manager<dim>> initial_temperature_manager;
1969  std::shared_ptr<InitialComposition::Manager<dim>> initial_composition_manager;
1970 
1971  const std::unique_ptr<AdiabaticConditions::Interface<dim>> adiabatic_conditions;
1972 #ifdef ASPECT_WITH_WORLD_BUILDER
1973 
1984  std::shared_ptr<WorldBuilder::World> world_builder;
1985 #endif
1988  const std::unique_ptr<BoundaryHeatFlux::Interface<dim>> boundary_heat_flux;
1989 
1993  std::vector<Particle::Manager<dim>> particle_managers;
1994 
2002  double time;
2003  double time_step;
2005  unsigned int timestep_number;
2006  unsigned int pre_refinement_step;
2007  unsigned int nonlinear_iteration;
2035  parallel::distributed::Triangulation<dim> triangulation;
2038 
2041 
2050  std::unique_ptr<Mapping<dim>> mapping;
2051 
2052  const FESystem<dim> finite_element;
2053 
2054  DoFHandler<dim> dof_handler;
2055 
2057 
2069  AffineConstraints<double> constraints;
2070  AffineConstraints<double> current_constraints;
2071 
2077 
2084 
2092 
2112 
2118 
2132 
2137 
2139 
2140  // only used if is_compressible()
2142 
2143  // only used if operator split is enabled
2145 
2146 
2147 
2148  std::unique_ptr<LinearAlgebra::PreconditionAMG> Amg_preconditioner;
2149  std::unique_ptr<LinearAlgebra::PreconditionBase> Mp_preconditioner;
2150 
2156 
2161  private:
2162 
2168  std::unique_ptr<MeshDeformation::MeshDeformationHandler<dim>> mesh_deformation;
2169 
2173  std::unique_ptr<StokesMatrixFreeHandler<dim>> stokes_matrix_free;
2174 
2175  friend class boost::serialization::access;
2176  friend class SimulatorAccess<dim>;
2177  friend class MeshDeformation::MeshDeformationHandler<dim>; // MeshDeformationHandler needs access to the internals of the Simulator
2178  friend class VolumeOfFluidHandler<dim>; // VolumeOfFluidHandler needs access to the internals of the Simulator
2179  friend class StokesMatrixFreeHandler<dim>;
2180  template <int dimension, int velocity_degree>
2182  friend struct Parameters<dim>;
2183  };
2184 }
2185 
2186 
2187 #endif
The NullspaceRemoval struct.
Definition: parameters.h:133
unsigned int nonlinear_iteration
Definition: simulator.h:2007
BoundaryVelocity::Manager< dim > boundary_velocity_manager
Definition: simulator.h:1986
const std::unique_ptr< AdiabaticConditions::Interface< dim > > adiabatic_conditions
Definition: simulator.h:1971
std::shared_ptr< InitialComposition::Manager< dim > > initial_composition_manager
Definition: simulator.h:1969
void write_plugin_graph(std::ostream &output_stream)
parallel::distributed::Triangulation< dim > triangulation
Definition: simulator.h:2035
TimerOutput computing_timer
Definition: simulator.h:1918
BoundaryTemperature::Manager< dim > boundary_temperature_manager
Definition: simulator.h:1954
boost::iostreams::tee_device< std::ostream, std::ofstream > TeeDevice
Definition: simulator.h:1878
::TrilinosWrappers::MPI::BlockVector BlockVector
Definition: global.h:268
double pressure_scaling
Definition: simulator.h:2083
Tensor< 1, dim > tensor_rotation
Definition: simulator.h:166
double old_time_step
Definition: simulator.h:2004
Tensor< 1, dim > tensor_angular_momentum
Definition: simulator.h:165
AffineConstraints< double > constraints
Definition: simulator.h:2069
bool assemble_newton_stokes_system
Definition: simulator.h:2154
LinearAlgebra::BlockVector old_solution
Definition: simulator.h:2134
const IntermediaryConstructorAction post_geometry_model_creation_action
Definition: simulator.h:1951
std::unique_ptr< VolumeOfFluidHandler< dim > > volume_of_fluid_handler
Definition: simulator.h:1865
bool rebuild_stokes_matrix
Definition: simulator.h:2152
Parameters< dim > parameters
Definition: simulator.h:1838
SymmetricTensor< 2, dim > tensor_moment_of_inertia
Definition: simulator.h:164
AffineConstraints< double > current_constraints
Definition: simulator.h:2070
std::unique_ptr< MeshDeformation::MeshDeformationHandler< dim > > mesh_deformation
Definition: simulator.h:2168
LinearAlgebra::BlockVector system_rhs
Definition: simulator.h:2136
std::pair< double, double > stokes_residuals
Definition: simulator.h:134
std::vector< Particle::Manager< dim > > particle_managers
Definition: simulator.h:1993
std::thread output_statistics_thread
Definition: simulator.h:1939
LateralAveraging< dim > lateral_averaging
Definition: simulator.h:2026
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:1882
::TrilinosWrappers::MPI::Vector Vector
Definition: global.h:262
MeshRefinement::Manager< dim > mesh_refinement_manager
Definition: simulator.h:2039
std::size_t statistics_last_write_size
Definition: simulator.h:1915
const std::unique_ptr< MaterialModel::Interface< dim > > material_model
Definition: simulator.h:1952
unsigned int nonlinear_solver_failures
Definition: simulator.h:2008
double last_pressure_normalization_adjustment
Definition: simulator.h:2076
::TrilinosWrappers::BlockSparseMatrix BlockSparseMatrix
Definition: global.h:279
double total_walltime_until_last_snapshot
Definition: simulator.h:1930
void declare_parameters(ParameterHandler &prm)
const std::unique_ptr< GeometryModel::Interface< dim > > geometry_model
Definition: simulator.h:1950
LinearAlgebra::BlockVector operator_split_reaction_vector
Definition: simulator.h:2144
DoFHandler< dim > dof_handler
Definition: simulator.h:2054
std::unique_ptr< StokesMatrixFreeHandler< dim > > stokes_matrix_free
Definition: simulator.h:2173
std::unique_ptr< Assemblers::Manager< dim > > assemblers
Definition: simulator.h:1092
bool rebuild_sparsity_and_matrices
Definition: simulator.h:2151
const IntermediaryConstructorAction post_signal_creation
Definition: simulator.h:1856
double global_Omega_diameter
Definition: simulator.h:2036
unsigned int timestep_number
Definition: simulator.h:2005
bool assemble_newton_stokes_matrix
Definition: simulator.h:2153
ConditionalOStream pcout
Definition: simulator.h:1888
unsigned int pre_refinement_step
Definition: simulator.h:2006
TimeStepping::Manager< dim > time_stepping_manager
Definition: simulator.h:2017
std::size_t statistics_last_hash
Definition: simulator.h:1916
TableHandler statistics
Definition: simulator.h:1899
Introspection< dim > introspection
Definition: simulator.h:1867
MPI_Comm mpi_communicator
Definition: simulator.h:1870
typename Parameters< dim >::NullspaceRemoval NullspaceRemoval
Definition: simulator.h:256
LinearAlgebra::BlockSparseMatrix system_preconditioner_matrix
Definition: simulator.h:2131
bool do_pressure_rhs_compatibility_modification
Definition: simulator.h:2091
LinearAlgebra::BlockVector current_linearization_point
Definition: simulator.h:2138
LinearAlgebra::BlockVector old_old_solution
Definition: simulator.h:2135
BoundaryTraction::Manager< dim > boundary_traction_manager
Definition: simulator.h:1987
Definition: compat.h:59
LinearAlgebra::BlockVector pressure_shape_function_integrals
Definition: simulator.h:2141
std::ofstream log_file_stream
Definition: simulator.h:1876
std::unique_ptr< LinearAlgebra::PreconditionAMG > Amg_preconditioner
Definition: simulator.h:2148
std::shared_ptr< InitialTemperature::Manager< dim > > initial_temperature_manager
Definition: simulator.h:1968
TeeDevice iostream_tee_device
Definition: simulator.h:1881
boost::iostreams::stream< TeeDevice > TeeStream
Definition: simulator.h:1879
LinearAlgebra::BlockSparseMatrix system_matrix
Definition: simulator.h:2111
std::unique_ptr< MeltHandler< dim > > melt_handler
Definition: simulator.h:1845
LinearAlgebra::BlockVector inverse_lumped_mass_matrix
Definition: simulator.h:2117
bool rebuild_stokes_preconditioner
Definition: simulator.h:2155
const unsigned int compositional_variable
Definition: simulator.h:284
std::unique_ptr< Mapping< dim > > mapping
Definition: simulator.h:2050
const std::unique_ptr< PrescribedStokesSolution::Interface< dim > > prescribed_stokes_solution
Definition: simulator.h:1956
HeatingModel::Manager< dim > heating_model_manager
Definition: simulator.h:2040
SimulatorSignals< dim > signals
Definition: simulator.h:1854
const std::unique_ptr< BoundaryHeatFlux::Interface< dim > > boundary_heat_flux
Definition: simulator.h:1988
const FESystem< dim > finite_element
Definition: simulator.h:2052
bool simulator_is_past_initialization
Definition: simulator.h:418
const std::unique_ptr< InitialTopographyModel::Interface< dim > > initial_topography_model
Definition: simulator.h:1949
LinearAlgebra::BlockVector solution
Definition: simulator.h:2133
std::unique_ptr< NewtonHandler< dim > > newton_handler
Definition: simulator.h:1852
typename Parameters< dim >::NonlinearSolver NonlinearSolver
Definition: simulator.h:251
Postprocess::Manager< dim > postprocess_manager
Definition: simulator.h:2056
const std::unique_ptr< GravityModel::Interface< dim > > gravity_model
Definition: simulator.h:1953
double newton_residual_for_derivative_scaling_factor
Definition: simulator.h:133
double global_volume
Definition: simulator.h:2037
BoundaryComposition::Manager< dim > boundary_composition_manager
Definition: simulator.h:1955
std::unique_ptr< LinearAlgebra::PreconditionBase > Mp_preconditioner
Definition: simulator.h:2149
::TrilinosWrappers::PreconditionILU PreconditionILU
Definition: global.h:302