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>
29 
31 
33 
35 
37 #include <deal.II/dofs/dof_tools.h>
38 
39 #include <deal.II/fe/fe_system.h>
40 #include <deal.II/fe/mapping.h>
42 
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>
94  class StokesMatrixFreeHandler;
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>
112  class VolumeOfFluidHandler;
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 
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>
201  {
202  public:
216  Simulator (const MPI_Comm mpi_communicator,
217  ParameterHandler &prm);
218 
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  {
319  };
320 
335  void setup_dofs ();
336 
346 
359 
376 
383 
390 
404 
419 
431  void start_timestep ();
432 
440  void solve_timestep ();
441 
454 
466 
479 
493 
507 
520 
533 
547 
561 
581  void solve_single_advection_iterated_newton_stokes (bool use_newton_iterations);
582 
595 
609 
624 
643  void solve_iterated_advection_and_newton_stokes (bool use_newton_iterations);
644 
654 
662  void build_advection_preconditioner (const AdvectionField &advection_field,
664  const double diagonal_strengthening);
665 
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 
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>
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 
903  unsigned int determine_resume_snapshot() const;
904 
917 
932 
939  template <class Archive>
940  void serialize (Archive &ar, const unsigned int version);
959 
967  void setup_system_matrix (const std::vector<IndexSet> &system_partitioning);
968 
980  void setup_system_preconditioner (const std::vector<IndexSet> &system_partitioning);
981 
1003  std::unique_ptr<Assemblers::Manager<dim>> assemblers;
1004 
1014 
1026 
1037 
1045 
1053  void
1057 
1065  void
1067 
1075  void
1079 
1087  void
1089 
1097  void
1099  const typename DoFHandler<dim>::active_cell_iterator &cell,
1109  void
1111  const Vector<double> &viscosity_per_cell,
1112  const typename DoFHandler<dim>::active_cell_iterator &cell,
1115 
1123  void
1126 
1152 
1162  template <typename T>
1163  void get_artificial_viscosity (Vector<T> &viscosity_per_cell,
1164  const AdvectionField &advection_field,
1165  const bool skip_interior_cells = false) const;
1166 
1200 
1240  void denormalize_pressure(const double pressure_adjustment,
1241  LinearAlgebra::BlockVector &vector) const;
1242 
1251  void apply_limiter_to_dg_solutions (const AdvectionField &advection_field);
1252 
1269  void compute_unique_advection_support_points (const std::vector<AdvectionField> &advection_fields,
1270  std::vector<Point<dim>> &unique_support_points,
1271  std::vector<std::vector<unsigned int>> &support_point_index_by_field) const;
1272 
1296 
1306  void update_solution_vectors_with_reaction_results (const unsigned int block_index,
1307  const LinearAlgebra::BlockVector &distributed_vector,
1308  const LinearAlgebra::BlockVector &distributed_reaction_vector);
1309 
1321 
1341  void interpolate_material_output_into_advection_field (const std::vector<AdvectionField> &adv_field);
1342 
1343 
1352  LinearAlgebra::Vector &vec) const;
1353 
1372  const bool use_picard,
1373  const LinearAlgebra::BlockVector &search_direction);
1374 
1390 
1391 
1405  LinearAlgebra::BlockVector &distributed_stokes_solution) const;
1406 
1422  compute_net_angular_momentum(const bool use_constant_density,
1424  const bool limit_to_top_faces = false) const;
1425 
1442  void remove_net_angular_momentum(const bool use_constant_density,
1443  LinearAlgebra::BlockVector &relevant_dst,
1444  LinearAlgebra::BlockVector &tmp_distributed_stokes,
1445  const bool limit_to_top_faces = false) const;
1446 
1454  void replace_outflow_boundary_ids(const unsigned int boundary_id_offset,
1455  const bool is_composition,
1456  const unsigned int composition_index);
1457 
1465  void restore_outflow_boundary_ids(const unsigned int boundary_id_offset);
1466 
1480  void remove_net_linear_momentum(const bool use_constant_density,
1481  LinearAlgebra::BlockVector &relevant_dst,
1482  LinearAlgebra::BlockVector &tmp_distributed_stokes) const;
1483 
1492 
1505  double get_entropy_variation (const double average_field,
1506  const AdvectionField &advection_field) const;
1507 
1516  std::pair<double,double>
1518 
1528 
1529 
1539 
1547  bool maybe_write_checkpoint (const std::time_t last_checkpoint_time,
1548  const bool force_writing_checkpoint);
1549 
1566  bool maybe_do_initial_refinement (const unsigned int max_refinement_level);
1567 
1576  void maybe_refine_mesh (const double new_time_step,
1577  unsigned int &max_refinement_level);
1578 
1586  void advance_time (const double step_size);
1587 
1595  double
1597  const double global_u_infty,
1598  const double global_field_variation,
1599  const double average_field,
1600  const double global_entropy_variation,
1601  const double cell_diameter,
1602  const AdvectionField &advection_field) const;
1603 
1612  void
1614  const double average_field,
1615  const AdvectionField &advection_field,
1616  double &max_residual,
1617  double &max_velocity,
1618  double &max_density,
1619  double &max_specific_heat,
1620  double &conductivity) const;
1621 
1636  bool
1638 
1648  bool
1650 
1663  void
1665 
1671  void
1673 
1684  void
1686 
1690  double
1692 
1701  double
1702  compute_Eisenstat_Walker_linear_tolerance(const bool EisenstatWalkerChoiceOne,
1703  const double maximum_linear_stokes_solver_tolerance,
1704  const double linear_stokes_solver_tolerance,
1705  const double stokes_residual,
1706  const double newton_residual,
1707  const double newton_residual_old);
1708 
1719 
1731  double
1733 
1744 
1750  std::unique_ptr<MeltHandler<dim>> melt_handler;
1751 
1757  std::unique_ptr<NewtonHandler<dim>> newton_handler;
1758 
1760 
1762 
1770  std::unique_ptr<VolumeOfFluidHandler<dim>> volume_of_fluid_handler;
1771 
1773 
1774 
1776 
1781  std::ofstream log_file_stream;
1782 
1783  using TeeDevice = boost::iostreams::tee_device<std::ostream, std::ofstream>;
1784  using TeeStream = boost::iostreams::stream<TeeDevice>;
1785 
1788 
1794 
1805 
1822 
1824 
1830 
1836 
1842  unsigned int last_checkpoint_id;
1843 
1852 
1861  const std::shared_ptr<InitialTopographyModel::Interface<dim>> initial_topography_model;
1862  const std::unique_ptr<GeometryModel::Interface<dim>> geometry_model;
1864  const std::unique_ptr<MaterialModel::Interface<dim>> material_model;
1865  const std::unique_ptr<GravityModel::Interface<dim>> gravity_model;
1866 
1871  const std::unique_ptr<PrescribedStokesSolution::Interface<dim>> prescribed_stokes_solution;
1872 
1883  std::shared_ptr<InitialTemperature::Manager<dim>> initial_temperature_manager;
1884  std::shared_ptr<InitialComposition::Manager<dim>> initial_composition_manager;
1885 
1886  const std::unique_ptr<AdiabaticConditions::Interface<dim>> adiabatic_conditions;
1887 #ifdef ASPECT_WITH_WORLD_BUILDER
1899  std::shared_ptr<WorldBuilder::World> world_builder;
1900 #endif
1903  const std::unique_ptr<BoundaryHeatFlux::Interface<dim>> boundary_heat_flux;
1904 
1912  double time;
1913  double time_step;
1915  unsigned int timestep_number;
1916  unsigned int pre_refinement_step;
1917  unsigned int nonlinear_iteration;
1949 
1952 
1961  std::unique_ptr<Mapping<dim>> mapping;
1962 
1964 
1966 
1968 
1972  std::vector<Particle::Manager<dim>> particle_managers;
1973 
1987 
1993 
2000 
2008 
2028 
2034 
2048 
2053 
2055 
2056  // only used if is_compressible()
2058 
2059  // only used if operator split is enabled
2061 
2062 
2063 
2064  std::unique_ptr<LinearAlgebra::PreconditionAMG> Amg_preconditioner;
2065  std::unique_ptr<LinearAlgebra::PreconditionBase> Mp_preconditioner;
2066 
2072 
2088 
2094 
2100 
2105 
2115  std::unique_ptr<MeshDeformation::MeshDeformationHandler<dim>> mesh_deformation;
2116 
2120  std::unique_ptr<StokesMatrixFreeHandler<dim>> stokes_matrix_free;
2121 
2125  std::unique_ptr<StokesSolver::Direct<dim>> stokes_direct;
2126 
2127 
2129  friend class SimulatorAccess<dim>;
2130  friend class MeshDeformation::MeshDeformationHandler<dim>;
2131  friend class VolumeOfFluidHandler<dim>;
2132  friend class StokesMatrixFreeHandler<dim>;
2133  template <int dimension, int velocity_degree> friend class StokesMatrixFreeHandlerLocalSmoothingImplementation;
2134  template <int dimension, int velocity_degree> friend class StokesMatrixFreeHandlerGlobalCoarseningImplementation;
2135  friend struct Parameters<dim>;
2136  };
2137 }
2138 
2139 
2140 #endif
void solve_single_advection_iterated_defect_correction_stokes()
std::unique_ptr< Assemblers::Manager< dim > > assemblers
Definition: simulator.h:1003
bool maybe_do_initial_refinement(const unsigned int max_refinement_level)
TimeStepping::Manager< dim > time_stepping_manager
Definition: simulator.h:1928
void setup_introspection()
SimulatorSignals< dim > signals
Definition: simulator.h:1759
void compute_reactions()
std::thread output_statistics_thread
Definition: simulator.h:1851
AffineConstraints< double > current_constraints
Definition: simulator.h:1986
void maybe_write_timing_output() const
bool rebuild_sparsity_and_matrices
Definition: simulator.h:2071
TeeStream iostream_tee_stream
Definition: simulator.h:1787
void replace_outflow_boundary_ids(const unsigned int boundary_id_offset, const bool is_composition, const unsigned int composition_index)
void solve_iterated_advection_and_defect_correction_stokes()
double solve_advection(const AdvectionField &advection_field)
double last_pressure_normalization_adjustment
Definition: simulator.h:1992
MeshRefinement::Manager< dim > mesh_refinement_manager
Definition: simulator.h:1950
bool assemble_newton_stokes_matrix
Definition: simulator.h:2093
double get_maximal_velocity(const LinearAlgebra::BlockVector &solution) const
std::pair< double, double > solve_stokes(LinearAlgebra::BlockVector &solution_vector)
void denormalize_pressure(const double pressure_adjustment, LinearAlgebra::BlockVector &vector) const
std::size_t statistics_last_hash
Definition: simulator.h:1821
LinearAlgebra::BlockVector old_solution
Definition: simulator.h:2050
void setup_nullspace_constraints(AffineConstraints< double > &constraints)
void build_stokes_preconditioner()
bool maybe_write_checkpoint(const std::time_t last_checkpoint_time, const bool force_writing_checkpoint)
void compute_current_velocity_boundary_constraints(AffineConstraints< double > &constraints)
bool simulator_is_past_initialization
Definition: simulator.h:298
unsigned int timestep_number
Definition: simulator.h:1915
void remove_net_linear_momentum(const bool use_constant_density, LinearAlgebra::BlockVector &relevant_dst, LinearAlgebra::BlockVector &tmp_distributed_stokes) const
void apply_limiter_to_dg_solutions(const AdvectionField &advection_field)
LinearAlgebra::BlockVector current_linearization_point
Definition: simulator.h:2054
std::ofstream log_file_stream
Definition: simulator.h:1781
void set_advection_assemblers()
LinearAlgebra::BlockVector system_rhs
Definition: simulator.h:2052
void build_advection_preconditioner(const AdvectionField &advection_field, aspect::LinearAlgebra::PreconditionILU &preconditioner, const double diagonal_strengthening)
void refine_mesh(const unsigned int max_grid_level)
std::vector< Particle::Manager< dim > > particle_managers
Definition: simulator.h:1972
std::shared_ptr< InitialTemperature::Manager< dim > > initial_temperature_manager
Definition: simulator.h:1883
std::unique_ptr< MeltHandler< dim > > melt_handler
Definition: simulator.h:1750
void resume_from_snapshot()
void set_initial_temperature_and_compositional_fields()
double old_time_step
Definition: simulator.h:1914
Postprocess::Manager< dim > postprocess_manager
Definition: simulator.h:1967
void restore_outflow_boundary_ids(const unsigned int boundary_id_offset)
void local_assemble_stokes_preconditioner(const typename DoFHandler< dim >::active_cell_iterator &cell, internal::Assembly::Scratch::StokesPreconditioner< dim > &scratch, internal::Assembly::CopyData::StokesPreconditioner< dim > &data)
const std::unique_ptr< GeometryModel::Interface< dim > > geometry_model
Definition: simulator.h:1862
void select_default_solver_and_averaging()
void check_consistency_of_formulation()
unsigned int nonlinear_solver_failures
Definition: simulator.h:1918
typename Parameters< dim >::NullspaceRemoval NullspaceRemoval
Definition: simulator.h:274
void compute_initial_velocity_boundary_constraints(AffineConstraints< double > &constraints)
BoundaryTraction::Manager< dim > boundary_traction_manager
Definition: simulator.h:1902
unsigned int nonlinear_iteration
Definition: simulator.h:1917
unsigned int determine_resume_snapshot() const
void initialize_current_linearization_point()
PrescribedSolution::Manager< dim > prescribed_solution_manager
Definition: simulator.h:1870
const std::unique_ptr< PrescribedStokesSolution::Interface< dim > > prescribed_stokes_solution
Definition: simulator.h:1871
double pressure_scaling
Definition: simulator.h:1999
Introspection< dim > introspection
Definition: simulator.h:1772
unsigned int last_checkpoint_id
Definition: simulator.h:1842
void make_pressure_rhs_compatible(LinearAlgebra::BlockVector &vector)
HeatingModel::Manager< dim > heating_model_manager
Definition: simulator.h:1951
std::pair< double, double > get_extrapolated_advection_field_range(const AdvectionField &advection_field) const
double compute_pressure_scaling_factor() const
void solve_no_advection_no_stokes()
double global_volume
Definition: simulator.h:1948
void copy_local_to_global_stokes_preconditioner(const internal::Assembly::CopyData::StokesPreconditioner< dim > &data)
void compute_unique_advection_support_points(const std::vector< AdvectionField > &advection_fields, std::vector< Point< dim >> &unique_support_points, std::vector< std::vector< unsigned int >> &support_point_index_by_field) const
void maybe_refine_mesh(const double new_time_step, unsigned int &max_refinement_level)
BoundaryComposition::Manager< dim > boundary_composition_manager
Definition: simulator.h:1869
void compute_initial_pressure_field()
void solve_no_advection_single_stokes()
BoundaryVelocity::Manager< dim > boundary_velocity_manager
Definition: simulator.h:1901
void set_stokes_assemblers()
void setup_system_preconditioner(const std::vector< IndexSet > &system_partitioning)
LateralAveraging< dim > lateral_averaging
Definition: simulator.h:1937
double get_entropy_variation(const double average_field, const AdvectionField &advection_field) const
const FESystem< dim > finite_element
Definition: simulator.h:1963
void compute_advection_system_residual(internal::Assembly::Scratch::AdvectionSystem< dim > &scratch, const double average_field, const AdvectionField &advection_field, double &max_residual, double &max_velocity, double &max_density, double &max_specific_heat, double &conductivity) const
void exchange_refinement_flags()
bool stokes_matrix_depends_on_solution() const
void output_statistics()
std::shared_ptr< InitialComposition::Manager< dim > > initial_composition_manager
Definition: simulator.h:1884
Table< 2, DoFTools::Coupling > setup_system_matrix_coupling() const
const std::unique_ptr< BoundaryHeatFlux::Interface< dim > > boundary_heat_flux
Definition: simulator.h:1903
std::size_t statistics_last_write_size
Definition: simulator.h:1820
void interpolate_material_output_into_advection_field(const std::vector< AdvectionField > &adv_field)
const std::unique_ptr< AdiabaticConditions::Interface< dim > > adiabatic_conditions
Definition: simulator.h:1886
void solve_no_advection_single_stokes_first_timestep_only()
LinearAlgebra::BlockVector solution
Definition: simulator.h:2049
void solve_iterated_advection_and_stokes()
TableHandler statistics
Definition: simulator.h:1804
void solve_single_advection_iterated_newton_stokes(bool use_newton_iterations)
double perform_line_search(const DefectCorrectionResiduals &dcr, const bool use_picard, const LinearAlgebra::BlockVector &search_direction)
ConditionalOStream pcout
Definition: simulator.h:1793
void do_one_defect_correction_Stokes_step(DefectCorrectionResiduals &dcr, const bool use_picard)
std::unique_ptr< VolumeOfFluidHandler< dim > > volume_of_fluid_handler
Definition: simulator.h:1770
Simulator(const MPI_Comm mpi_communicator, ParameterHandler &prm)
double assemble_and_solve_temperature(const double &initial_residual=0, double *residual=nullptr)
const IntermediaryConstructorAction post_signal_creation
Definition: simulator.h:1761
TeeDevice iostream_tee_device
Definition: simulator.h:1786
std::unique_ptr< LinearAlgebra::PreconditionBase > Mp_preconditioner
Definition: simulator.h:2065
parallel::distributed::Triangulation< dim > triangulation
Definition: simulator.h:1946
void solve_no_advection_iterated_defect_correction_stokes()
AffineConstraints< double > constraints
Definition: simulator.h:1985
std::unique_ptr< StokesSolver::Direct< dim > > stokes_direct
Definition: simulator.h:2125
unsigned int determine_last_good_snapshot() const
void setup_system_matrix(const std::vector< IndexSet > &system_partitioning)
std::unique_ptr< NewtonHandler< dim > > newton_handler
Definition: simulator.h:1757
std::unique_ptr< Mapping< dim > > mapping
Definition: simulator.h:1961
unsigned int pre_refinement_step
Definition: simulator.h:1916
double assemble_and_solve_stokes(const double &initial_nonlinear_residual=0, double *nonlinear_residual=nullptr)
void interpolate_onto_velocity_system(const TensorFunction< 1, dim > &func, LinearAlgebra::Vector &vec) const
void assemble_stokes_preconditioner()
void solve_no_advection_iterated_stokes()
void interpolate_particle_properties(const std::vector< AdvectionField > &advection_fields)
void solve_single_advection_no_stokes()
void solve_iterated_advection_and_newton_stokes(bool use_newton_iterations)
void advance_time(const double step_size)
Parameters< dim > parameters
Definition: simulator.h:1743
LinearAlgebra::BlockVector pressure_shape_function_integrals
Definition: simulator.h:2057
void copy_local_to_global_stokes_system(const internal::Assembly::CopyData::StokesSystem< dim > &data)
void serialize(Archive &ar, const unsigned int version)
void remove_nullspace(LinearAlgebra::BlockVector &solution, LinearAlgebra::BlockVector &distributed_stokes_solution) const
LinearAlgebra::BlockVector inverse_lumped_mass_matrix
Definition: simulator.h:2033
void solve_iterated_advection_no_stokes()
typename Parameters< dim >::NonlinearSolver NonlinearSolver
Definition: simulator.h:269
boost::iostreams::tee_device< std::ostream, std::ofstream > TeeDevice
Definition: simulator.h:1783
bool stokes_A_block_is_symmetric() const
BoundaryConvectiveHeating::Manager< dim > boundary_convective_heating_manager
Definition: simulator.h:1868
bool rebuild_stokes_preconditioner
Definition: simulator.h:2104
const std::unique_ptr< MaterialModel::Interface< dim > > material_model
Definition: simulator.h:1864
const std::unique_ptr< GravityModel::Interface< dim > > gravity_model
Definition: simulator.h:1865
double compute_initial_newton_residual()
RotationProperties< dim > compute_net_angular_momentum(const bool use_constant_density, const LinearAlgebra::BlockVector &solution, const bool limit_to_top_faces=false) const
LinearAlgebra::BlockVector old_old_solution
Definition: simulator.h:2051
double total_walltime_until_last_snapshot
Definition: simulator.h:1835
const IntermediaryConstructorAction post_geometry_model_creation_action
Definition: simulator.h:1863
void check_consistency_of_boundary_conditions() const
double global_Omega_diameter
Definition: simulator.h:1947
unsigned int linear_solver_failures
Definition: simulator.h:1919
const std::shared_ptr< InitialTopographyModel::Interface< dim > > initial_topography_model
Definition: simulator.h:1861
friend class boost::serialization::access
Definition: simulator.h:2128
static void declare_parameters(ParameterHandler &prm, const unsigned int mpi_rank)
void solve_single_advection_single_stokes()
void assemble_stokes_system()
DoFHandler< dim > dof_handler
Definition: simulator.h:1965
void write_plugin_graph(std::ostream &output_stream) const
double compute_Eisenstat_Walker_linear_tolerance(const bool EisenstatWalkerChoiceOne, const double maximum_linear_stokes_solver_tolerance, const double linear_stokes_solver_tolerance, const double stokes_residual, const double newton_residual, const double newton_residual_old)
bool assemble_newton_stokes_system
Definition: simulator.h:2099
bool do_pressure_rhs_compatibility_modification
Definition: simulator.h:2007
LinearAlgebra::BlockSparseMatrix system_matrix
Definition: simulator.h:2027
BoundaryTemperature::Manager< dim > boundary_temperature_manager
Definition: simulator.h:1867
double compute_viscosity(internal::Assembly::Scratch::AdvectionSystem< dim > &scratch, const double global_u_infty, const double global_field_variation, const double average_field, const double global_entropy_variation, const double cell_diameter, const AdvectionField &advection_field) const
std::unique_ptr< LinearAlgebra::PreconditionAMG > Amg_preconditioner
Definition: simulator.h:2064
void remove_net_angular_momentum(const bool use_constant_density, LinearAlgebra::BlockVector &relevant_dst, LinearAlgebra::BlockVector &tmp_distributed_stokes, const bool limit_to_top_faces=false) const
void solve_single_advection_iterated_stokes()
void local_assemble_advection_system(const AdvectionField &advection_field, const Vector< double > &viscosity_per_cell, const typename DoFHandler< dim >::active_cell_iterator &cell, internal::Assembly::Scratch::AdvectionSystem< dim > &scratch, internal::Assembly::CopyData::AdvectionSystem< dim > &data)
std::unique_ptr< StokesMatrixFreeHandler< dim > > stokes_matrix_free
Definition: simulator.h:2120
double normalize_pressure(LinearAlgebra::BlockVector &vector) const
void local_assemble_stokes_system(const typename DoFHandler< dim >::active_cell_iterator &cell, internal::Assembly::Scratch::StokesSystem< dim > &scratch, internal::Assembly::CopyData::StokesSystem< dim > &data)
void update_solution_vectors_with_reaction_results(const unsigned int block_index, const LinearAlgebra::BlockVector &distributed_vector, const LinearAlgebra::BlockVector &distributed_reaction_vector)
LinearAlgebra::BlockVector operator_split_reaction_vector
Definition: simulator.h:2060
void assemble_advection_system(const AdvectionField &advection_field)
std::unique_ptr< MeshDeformation::MeshDeformationHandler< dim > > mesh_deformation
Definition: simulator.h:2115
boost::iostreams::stream< TeeDevice > TeeStream
Definition: simulator.h:1784
void copy_local_to_global_advection_system(const AdvectionField &advection_field, const internal::Assembly::CopyData::AdvectionSystem< dim > &data)
void get_artificial_viscosity(Vector< T > &viscosity_per_cell, const AdvectionField &advection_field, const bool skip_interior_cells=false) const
void compute_current_constraints()
MPI_Comm mpi_communicator
Definition: simulator.h:1775
void local_assemble_advection_face_terms(const AdvectionField &advection_field, const typename DoFHandler< dim >::active_cell_iterator &cell, internal::Assembly::Scratch::AdvectionSystem< dim > &scratch, internal::Assembly::CopyData::AdvectionSystem< dim > &data)
bool rebuild_stokes_matrix
Definition: simulator.h:2087
LinearAlgebra::BlockSparseMatrix system_preconditioner_matrix
Definition: simulator.h:2047
TimerOutput computing_timer
Definition: simulator.h:1823
std::vector< double > assemble_and_solve_composition(const std::vector< double > &initial_residual={}, const unsigned int nonlinear_iteration=0, std::vector< double > *residual=nullptr)
double compute_initial_stokes_residual()
#define DEAL_II_DISABLE_EXTRA_DIAGNOSTICS
#define DEAL_II_ENABLE_EXTRA_DIAGNOSTICS
Manager< dim > World
Definition: world.h:39
DeclExceptionMsg(ExcNonlinearSolverNoConvergence, "Nonlinear solver failed to converge in the prescribed number of steps. " "Consider changing `Max nonlinear iterations` or `Nonlinear solver failure " "strategy`.")
std::pair< double, double > stokes_residuals
Definition: simulator.h:149
double newton_residual_for_derivative_scaling_factor
Definition: simulator.h:148
The NullspaceRemoval struct.
Definition: parameters.h:180
SymmetricTensor< 2, dim > tensor_moment_of_inertia
Definition: simulator.h:179
Tensor< 1, dim > tensor_angular_momentum
Definition: simulator.h:180
Tensor< 1, dim > tensor_rotation
Definition: simulator.h:181
IntermediaryConstructorAction(const std::function< void()> &action)