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>
71 #include <aspect/advection_field.h>
72 
73 #include <boost/iostreams/tee.hpp>
74 #include <boost/iostreams/stream.hpp>
75 
76 #include <memory>
77 #include <thread>
78 
79 namespace WorldBuilder
80 {
81  class World;
82 }
83 
84 
85 namespace aspect
86 {
87  template <int dim>
88  class MeltHandler;
89 
90  template <int dim>
91  class NewtonHandler;
92 
93  template <int dim>
95 
96  namespace StokesSolver
97  {
98  template <int dim>
99  class Direct;
100  }
101 
102  template <int dim, int velocity_degree>
104 
105  namespace MeshDeformation
106  {
107  template <int dim>
109  }
110 
111  template <int dim>
113 
114  namespace internal
115  {
116  namespace Assembly
117  {
118  namespace Scratch
119  {
120  template <int dim> struct StokesPreconditioner;
121  template <int dim> struct StokesSystem;
122  template <int dim> struct AdvectionSystem;
123  }
124 
125  namespace CopyData
126  {
127  template <int dim> struct StokesPreconditioner;
128  template <int dim> struct StokesSystem;
129  template <int dim> struct AdvectionSystem;
130  }
131  }
132  }
133 
134  namespace Assemblers
135  {
136  template <int dim> class Interface;
137  template <int dim> class Manager;
138  }
139 
141  {
145  double residual;
146  double residual_old;
149  std::pair<double,double> stokes_residuals;
150  };
151 
155  template <int dim>
157  {
159  :
160  scalar_moment_of_inertia(numbers::signaling_nan<double>()),
161  scalar_angular_momentum(numbers::signaling_nan<double>()),
162  scalar_rotation(numbers::signaling_nan<double>()),
163  tensor_moment_of_inertia(numbers::signaling_nan<SymmetricTensor<2,dim>>()),
164  tensor_angular_momentum(numbers::signaling_nan<Tensor<1,dim>>()),
165  tensor_rotation(numbers::signaling_nan<Tensor<1,dim>>())
166  {};
167 
175 
179  SymmetricTensor<2,dim> tensor_moment_of_inertia;
180  Tensor<1,dim> tensor_angular_momentum;
181  Tensor<1,dim> tensor_rotation;
182  };
183 
187  DeclExceptionMsg(ExcNonlinearSolverNoConvergence,
188  "Nonlinear solver failed to converge in the prescribed number of steps. "
189  "Consider changing `Max nonlinear iterations` or `Nonlinear solver failure "
190  "strategy`.");
191 
199  template <int dim>
200  class Simulator
201  {
202  public:
216  Simulator (const MPI_Comm mpi_communicator,
217  ParameterHandler &prm);
218 
223  ~Simulator ();
224 
239  static
240  void declare_parameters (ParameterHandler &prm, const unsigned int mpi_rank);
241 
250  void run ();
251 
263  void
264  write_plugin_graph (std::ostream &output_stream) const;
265 
270 
275 
277 
278  private:
279 
299 
317  {
318  IntermediaryConstructorAction (const std::function<void ()> &action);
319  };
320 
335  void setup_dofs ();
336 
345  void setup_introspection ();
346 
358  void set_initial_temperature_and_compositional_fields ();
359 
375  void compute_initial_pressure_field ();
376 
382  void compute_initial_velocity_boundary_constraints (AffineConstraints<double> &constraints);
383 
389  void compute_current_velocity_boundary_constraints (AffineConstraints<double> &constraints);
390 
403  void compute_current_constraints ();
404 
418  double compute_pressure_scaling_factor () const;
419 
431  void start_timestep ();
432 
440  void solve_timestep ();
441 
453  void solve_no_advection_no_stokes ();
454 
465  void solve_no_advection_single_stokes ();
466 
478  void solve_no_advection_single_stokes_first_timestep_only ();
479 
492  void solve_no_advection_iterated_stokes ();
493 
506  void solve_no_advection_iterated_defect_correction_stokes ();
507 
519  void solve_single_advection_no_stokes ();
520 
532  void solve_single_advection_single_stokes ();
533 
546  void solve_single_advection_iterated_stokes ();
547 
560  void solve_single_advection_iterated_defect_correction_stokes ();
561 
581  void solve_single_advection_iterated_newton_stokes (bool use_newton_iterations);
582 
594  void solve_iterated_advection_no_stokes ();
595 
608  void solve_iterated_advection_and_stokes ();
609 
623  void solve_iterated_advection_and_defect_correction_stokes ();
624 
643  void solve_iterated_advection_and_newton_stokes (bool use_newton_iterations);
644 
653  void build_stokes_preconditioner ();
654 
662  void build_advection_preconditioner (const AdvectionField &advection_field,
664  const double diagonal_strengthening);
665 
672  void assemble_stokes_system ();
673 
688  double assemble_and_solve_temperature (const double &initial_residual = 0,
689  double *residual = nullptr);
690 
706  std::vector<double> assemble_and_solve_composition (const std::vector<double> &initial_residual = {},
707  const unsigned int nonlinear_iteration = 0,
708  std::vector<double> *residual = nullptr);
709 
724  double assemble_and_solve_stokes (const double &initial_nonlinear_residual = 0,
725  double *nonlinear_residual = nullptr);
726 
739  void do_one_defect_correction_Stokes_step(DefectCorrectionResiduals &dcr,
740  const bool use_picard);
741 
749  void assemble_advection_system (const AdvectionField &advection_field);
750 
761  double solve_advection (const AdvectionField &advection_field);
762 
767  void interpolate_particle_properties (const std::vector<AdvectionField> &advection_fields);
768 
845  std::pair<double,double>
846  solve_stokes (LinearAlgebra::BlockVector &solution_vector);
847 
860  void postprocess ();
861 
877  void refine_mesh (const unsigned int max_grid_level);
878 
894  unsigned int determine_last_good_snapshot() const;
895 
907  void create_snapshot();
908 
922  void resume_from_snapshot();
923 
930  template <class Archive>
931  void serialize (Archive &ar, const unsigned int version);
948  Table<2,DoFTools::Coupling>
949  setup_system_matrix_coupling () const;
950 
958  void setup_system_matrix (const std::vector<IndexSet> &system_partitioning);
959 
971  void setup_system_preconditioner (const std::vector<IndexSet> &system_partitioning);
972 
994  std::unique_ptr<Assemblers::Manager<dim>> assemblers;
995 
1004  void set_assemblers ();
1005 
1016  void set_advection_assemblers ();
1017 
1027  void set_stokes_assemblers ();
1028 
1035  void assemble_stokes_preconditioner ();
1036 
1044  void
1045  local_assemble_stokes_preconditioner (const typename DoFHandler<dim>::active_cell_iterator &cell,
1048 
1056  void
1057  copy_local_to_global_stokes_preconditioner (const internal::Assembly::CopyData::StokesPreconditioner<dim> &data);
1058 
1066  void
1067  local_assemble_stokes_system (const typename DoFHandler<dim>::active_cell_iterator &cell,
1070 
1078  void
1079  copy_local_to_global_stokes_system (const internal::Assembly::CopyData::StokesSystem<dim> &data);
1080 
1088  void
1089  local_assemble_advection_face_terms(const AdvectionField &advection_field,
1090  const typename DoFHandler<dim>::active_cell_iterator &cell,
1100  void
1101  local_assemble_advection_system (const AdvectionField &advection_field,
1102  const Vector<double> &viscosity_per_cell,
1103  const typename DoFHandler<dim>::active_cell_iterator &cell,
1106 
1114  void
1115  copy_local_to_global_advection_system (const AdvectionField &advection_field,
1117 
1142  void make_pressure_rhs_compatible(LinearAlgebra::BlockVector &vector);
1143 
1153  template <typename T>
1154  void get_artificial_viscosity (Vector<T> &viscosity_per_cell,
1155  const AdvectionField &advection_field,
1156  const bool skip_interior_cells = false) const;
1157 
1190  double normalize_pressure(LinearAlgebra::BlockVector &vector) const;
1191 
1231  void denormalize_pressure(const double pressure_adjustment,
1232  LinearAlgebra::BlockVector &vector) const;
1233 
1242  void apply_limiter_to_dg_solutions (const AdvectionField &advection_field);
1243 
1260  void compute_unique_advection_support_points (const std::vector<AdvectionField> &advection_fields,
1261  std::vector<Point<dim>> &unique_support_points,
1262  std::vector<std::vector<unsigned int>> &support_point_index_by_field) const;
1263 
1286  void compute_reactions ();
1287 
1297  void update_solution_vectors_with_reaction_results (const unsigned int block_index,
1298  const LinearAlgebra::BlockVector &distributed_vector,
1299  const LinearAlgebra::BlockVector &distributed_reaction_vector);
1300 
1311  void initialize_current_linearization_point ();
1312 
1332  void interpolate_material_output_into_advection_field (const std::vector<AdvectionField> &adv_field);
1333 
1334 
1342  void interpolate_onto_velocity_system(const TensorFunction<1,dim> &func,
1343  LinearAlgebra::Vector &vec) const;
1344 
1362  double perform_line_search(const DefectCorrectionResiduals &dcr,
1363  const bool use_picard,
1364  const LinearAlgebra::BlockVector &search_direction);
1365 
1380  void setup_nullspace_constraints(AffineConstraints<double> &constraints);
1381 
1382 
1395  void remove_nullspace(LinearAlgebra::BlockVector &solution,
1396  LinearAlgebra::BlockVector &distributed_stokes_solution) const;
1397 
1413  compute_net_angular_momentum(const bool use_constant_density,
1414  const LinearAlgebra::BlockVector &solution,
1415  const bool limit_to_top_faces = false) const;
1416 
1433  void remove_net_angular_momentum(const bool use_constant_density,
1434  LinearAlgebra::BlockVector &relevant_dst,
1435  LinearAlgebra::BlockVector &tmp_distributed_stokes,
1436  const bool limit_to_top_faces = false) const;
1437 
1445  void replace_outflow_boundary_ids(const unsigned int boundary_id_offset,
1446  const bool is_composition,
1447  const unsigned int composition_index);
1448 
1456  void restore_outflow_boundary_ids(const unsigned int boundary_id_offset);
1457 
1471  void remove_net_linear_momentum(const bool use_constant_density,
1472  LinearAlgebra::BlockVector &relevant_dst,
1473  LinearAlgebra::BlockVector &tmp_distributed_stokes) const;
1474 
1482  double get_maximal_velocity (const LinearAlgebra::BlockVector &solution) const;
1483 
1496  double get_entropy_variation (const double average_field,
1497  const AdvectionField &advection_field) const;
1498 
1507  std::pair<double,double>
1508  get_extrapolated_advection_field_range (const AdvectionField &advection_field) const;
1509 
1518  void exchange_refinement_flags();
1519 
1520 
1529  void maybe_write_timing_output () const;
1530 
1538  bool maybe_write_checkpoint (const std::time_t last_checkpoint_time,
1539  const bool force_writing_checkpoint);
1540 
1557  bool maybe_do_initial_refinement (const unsigned int max_refinement_level);
1558 
1567  void maybe_refine_mesh (const double new_time_step,
1568  unsigned int &max_refinement_level);
1569 
1577  void advance_time (const double step_size);
1578 
1586  double
1587  compute_viscosity(internal::Assembly::Scratch::AdvectionSystem<dim> &scratch,
1588  const double global_u_infty,
1589  const double global_field_variation,
1590  const double average_field,
1591  const double global_entropy_variation,
1592  const double cell_diameter,
1593  const AdvectionField &advection_field) const;
1594 
1603  void
1604  compute_advection_system_residual(internal::Assembly::Scratch::AdvectionSystem<dim> &scratch,
1605  const double average_field,
1606  const AdvectionField &advection_field,
1607  double &max_residual,
1608  double &max_velocity,
1609  double &max_density,
1610  double &max_specific_heat,
1611  double &conductivity) const;
1612 
1627  bool
1628  stokes_matrix_depends_on_solution () const;
1629 
1639  bool
1640  stokes_A_block_is_symmetric () const;
1641 
1654  void
1655  check_consistency_of_formulation ();
1656 
1662  void
1663  select_default_solver_and_averaging ();
1664 
1675  void
1676  check_consistency_of_boundary_conditions () const;
1677 
1681  double
1682  compute_initial_newton_residual ();
1683 
1692  double
1693  compute_Eisenstat_Walker_linear_tolerance(const bool EisenstatWalkerChoiceOne,
1694  const double maximum_linear_stokes_solver_tolerance,
1695  const double linear_stokes_solver_tolerance,
1696  const double stokes_residual,
1697  const double newton_residual,
1698  const double newton_residual_old);
1699 
1709  void output_statistics();
1710 
1722  double
1723  compute_initial_stokes_residual();
1724 
1735 
1741  std::unique_ptr<MeltHandler<dim>> melt_handler;
1742 
1748  std::unique_ptr<NewtonHandler<dim>> newton_handler;
1749 
1751 
1753 
1761  std::unique_ptr<VolumeOfFluidHandler<dim>> volume_of_fluid_handler;
1762 
1764 
1765 
1767 
1772  std::ofstream log_file_stream;
1773 
1774  using TeeDevice = boost::iostreams::tee_device<std::ostream, std::ofstream>;
1775  using TeeStream = boost::iostreams::stream<TeeDevice>;
1776 
1779 
1784  ConditionalOStream pcout;
1785 
1795  TableHandler statistics;
1796 
1813 
1814  mutable TimerOutput computing_timer;
1815 
1820  Timer wall_timer;
1821 
1827 
1833  unsigned int last_checkpoint_id;
1834 
1843 
1852  const std::shared_ptr<InitialTopographyModel::Interface<dim>> initial_topography_model;
1853  const std::unique_ptr<GeometryModel::Interface<dim>> geometry_model;
1855  const std::unique_ptr<MaterialModel::Interface<dim>> material_model;
1856  const std::unique_ptr<GravityModel::Interface<dim>> gravity_model;
1857 
1862  const std::unique_ptr<PrescribedStokesSolution::Interface<dim>> prescribed_stokes_solution;
1863 
1874  std::shared_ptr<InitialTemperature::Manager<dim>> initial_temperature_manager;
1875  std::shared_ptr<InitialComposition::Manager<dim>> initial_composition_manager;
1876 
1877  const std::unique_ptr<AdiabaticConditions::Interface<dim>> adiabatic_conditions;
1878 #ifdef ASPECT_WITH_WORLD_BUILDER
1879 
1890  std::shared_ptr<WorldBuilder::World> world_builder;
1891 #endif
1894  const std::unique_ptr<BoundaryHeatFlux::Interface<dim>> boundary_heat_flux;
1895 
1903  double time;
1904  double time_step;
1906  unsigned int timestep_number;
1907  unsigned int pre_refinement_step;
1908  unsigned int nonlinear_iteration;
1936  parallel::distributed::Triangulation<dim> triangulation;
1939 
1942 
1951  std::unique_ptr<Mapping<dim>> mapping;
1952 
1953  const FESystem<dim> finite_element;
1954 
1955  DoFHandler<dim> dof_handler;
1956 
1958 
1962  std::vector<Particle::Manager<dim>> particle_managers;
1963 
1975  AffineConstraints<double> constraints;
1976  AffineConstraints<double> current_constraints;
1977 
1983 
1990 
1998 
2018 
2024 
2038 
2043 
2045 
2046  // only used if is_compressible()
2048 
2049  // only used if operator split is enabled
2051 
2052 
2053 
2054  std::unique_ptr<LinearAlgebra::PreconditionAMG> Amg_preconditioner;
2055  std::unique_ptr<LinearAlgebra::PreconditionBase> Mp_preconditioner;
2056 
2062 
2067  private:
2068 
2074  std::unique_ptr<MeshDeformation::MeshDeformationHandler<dim>> mesh_deformation;
2075 
2079  std::unique_ptr<StokesMatrixFreeHandler<dim>> stokes_matrix_free;
2080 
2084  std::unique_ptr<StokesSolver::Direct<dim>> stokes_direct;
2085 
2086 
2087  friend class boost::serialization::access;
2088  friend class SimulatorAccess<dim>;
2090  friend class VolumeOfFluidHandler<dim>;
2091  friend class StokesMatrixFreeHandler<dim>;
2092  template <int dimension, int velocity_degree> friend class StokesMatrixFreeHandlerLocalSmoothingImplementation;
2093  template <int dimension, int velocity_degree> friend class StokesMatrixFreeHandlerGlobalCoarseningImplementation;
2094  friend struct Parameters<dim>;
2095  };
2096 }
2097 
2098 
2099 #endif
The NullspaceRemoval struct.
Definition: parameters.h:134
unsigned int nonlinear_iteration
Definition: simulator.h:1908
BoundaryVelocity::Manager< dim > boundary_velocity_manager
Definition: simulator.h:1892
const std::unique_ptr< AdiabaticConditions::Interface< dim > > adiabatic_conditions
Definition: simulator.h:1877
std::shared_ptr< InitialComposition::Manager< dim > > initial_composition_manager
Definition: simulator.h:1875
void write_plugin_graph(std::ostream &output_stream)
parallel::distributed::Triangulation< dim > triangulation
Definition: simulator.h:1936
TimerOutput computing_timer
Definition: simulator.h:1814
BoundaryTemperature::Manager< dim > boundary_temperature_manager
Definition: simulator.h:1858
boost::iostreams::tee_device< std::ostream, std::ofstream > TeeDevice
Definition: simulator.h:1774
std::unique_ptr< StokesSolver::Direct< dim > > stokes_direct
Definition: simulator.h:2084
::TrilinosWrappers::MPI::BlockVector BlockVector
Definition: global.h:270
double pressure_scaling
Definition: simulator.h:1989
Tensor< 1, dim > tensor_rotation
Definition: simulator.h:181
double old_time_step
Definition: simulator.h:1905
Tensor< 1, dim > tensor_angular_momentum
Definition: simulator.h:180
AffineConstraints< double > constraints
Definition: simulator.h:1975
bool assemble_newton_stokes_system
Definition: simulator.h:2060
LinearAlgebra::BlockVector old_solution
Definition: simulator.h:2040
const IntermediaryConstructorAction post_geometry_model_creation_action
Definition: simulator.h:1854
std::unique_ptr< VolumeOfFluidHandler< dim > > volume_of_fluid_handler
Definition: simulator.h:1761
bool rebuild_stokes_matrix
Definition: simulator.h:2058
Parameters< dim > parameters
Definition: simulator.h:1734
SymmetricTensor< 2, dim > tensor_moment_of_inertia
Definition: simulator.h:179
AffineConstraints< double > current_constraints
Definition: simulator.h:1976
std::unique_ptr< MeshDeformation::MeshDeformationHandler< dim > > mesh_deformation
Definition: simulator.h:2074
LinearAlgebra::BlockVector system_rhs
Definition: simulator.h:2042
std::pair< double, double > stokes_residuals
Definition: simulator.h:149
std::vector< Particle::Manager< dim > > particle_managers
Definition: simulator.h:1962
std::thread output_statistics_thread
Definition: simulator.h:1842
LateralAveraging< dim > lateral_averaging
Definition: simulator.h:1927
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:1778
::TrilinosWrappers::MPI::Vector Vector
Definition: global.h:264
MeshRefinement::Manager< dim > mesh_refinement_manager
Definition: simulator.h:1940
std::size_t statistics_last_write_size
Definition: simulator.h:1811
const std::unique_ptr< MaterialModel::Interface< dim > > material_model
Definition: simulator.h:1855
unsigned int nonlinear_solver_failures
Definition: simulator.h:1909
double last_pressure_normalization_adjustment
Definition: simulator.h:1982
::TrilinosWrappers::BlockSparseMatrix BlockSparseMatrix
Definition: global.h:281
double total_walltime_until_last_snapshot
Definition: simulator.h:1826
void declare_parameters(ParameterHandler &prm)
const std::unique_ptr< GeometryModel::Interface< dim > > geometry_model
Definition: simulator.h:1853
LinearAlgebra::BlockVector operator_split_reaction_vector
Definition: simulator.h:2050
DoFHandler< dim > dof_handler
Definition: simulator.h:1955
std::unique_ptr< StokesMatrixFreeHandler< dim > > stokes_matrix_free
Definition: simulator.h:2079
unsigned int last_checkpoint_id
Definition: simulator.h:1833
std::unique_ptr< Assemblers::Manager< dim > > assemblers
Definition: simulator.h:994
bool rebuild_sparsity_and_matrices
Definition: simulator.h:2057
const IntermediaryConstructorAction post_signal_creation
Definition: simulator.h:1752
double global_Omega_diameter
Definition: simulator.h:1937
unsigned int timestep_number
Definition: simulator.h:1906
bool assemble_newton_stokes_matrix
Definition: simulator.h:2059
Manager< dim > World
Definition: world.h:39
ConditionalOStream pcout
Definition: simulator.h:1784
unsigned int pre_refinement_step
Definition: simulator.h:1907
TimeStepping::Manager< dim > time_stepping_manager
Definition: simulator.h:1918
std::size_t statistics_last_hash
Definition: simulator.h:1812
TableHandler statistics
Definition: simulator.h:1795
Introspection< dim > introspection
Definition: simulator.h:1763
MPI_Comm mpi_communicator
Definition: simulator.h:1766
typename Parameters< dim >::NullspaceRemoval NullspaceRemoval
Definition: simulator.h:274
LinearAlgebra::BlockSparseMatrix system_preconditioner_matrix
Definition: simulator.h:2037
bool do_pressure_rhs_compatibility_modification
Definition: simulator.h:1997
LinearAlgebra::BlockVector current_linearization_point
Definition: simulator.h:2044
BoundaryConvectiveHeating::Manager< dim > boundary_convective_heating_manager
Definition: simulator.h:1859
LinearAlgebra::BlockVector old_old_solution
Definition: simulator.h:2041
BoundaryTraction::Manager< dim > boundary_traction_manager
Definition: simulator.h:1893
LinearAlgebra::BlockVector pressure_shape_function_integrals
Definition: simulator.h:2047
std::ofstream log_file_stream
Definition: simulator.h:1772
std::unique_ptr< LinearAlgebra::PreconditionAMG > Amg_preconditioner
Definition: simulator.h:2054
std::shared_ptr< InitialTemperature::Manager< dim > > initial_temperature_manager
Definition: simulator.h:1874
TeeDevice iostream_tee_device
Definition: simulator.h:1777
boost::iostreams::stream< TeeDevice > TeeStream
Definition: simulator.h:1775
LinearAlgebra::BlockSparseMatrix system_matrix
Definition: simulator.h:2017
std::unique_ptr< MeltHandler< dim > > melt_handler
Definition: simulator.h:1741
LinearAlgebra::BlockVector inverse_lumped_mass_matrix
Definition: simulator.h:2023
bool rebuild_stokes_preconditioner
Definition: simulator.h:2061
PrescribedSolution::Manager< dim > prescribed_solution_manager
Definition: simulator.h:1861
const std::shared_ptr< InitialTopographyModel::Interface< dim > > initial_topography_model
Definition: simulator.h:1852
std::unique_ptr< Mapping< dim > > mapping
Definition: simulator.h:1951
const std::unique_ptr< PrescribedStokesSolution::Interface< dim > > prescribed_stokes_solution
Definition: simulator.h:1862
HeatingModel::Manager< dim > heating_model_manager
Definition: simulator.h:1941
SimulatorSignals< dim > signals
Definition: simulator.h:1750
const std::unique_ptr< BoundaryHeatFlux::Interface< dim > > boundary_heat_flux
Definition: simulator.h:1894
const FESystem< dim > finite_element
Definition: simulator.h:1953
bool simulator_is_past_initialization
Definition: simulator.h:298
LinearAlgebra::BlockVector solution
Definition: simulator.h:2039
std::unique_ptr< NewtonHandler< dim > > newton_handler
Definition: simulator.h:1748
typename Parameters< dim >::NonlinearSolver NonlinearSolver
Definition: simulator.h:269
Postprocess::Manager< dim > postprocess_manager
Definition: simulator.h:1957
const std::unique_ptr< GravityModel::Interface< dim > > gravity_model
Definition: simulator.h:1856
double newton_residual_for_derivative_scaling_factor
Definition: simulator.h:148
double global_volume
Definition: simulator.h:1938
BoundaryComposition::Manager< dim > boundary_composition_manager
Definition: simulator.h:1860
std::unique_ptr< LinearAlgebra::PreconditionBase > Mp_preconditioner
Definition: simulator.h:2055
::TrilinosWrappers::PreconditionILU PreconditionILU