ASPECT
simulator_access.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_access_h
23 #define _aspect_simulator_access_h
24 
25 #include <aspect/global.h>
26 #include <aspect/parameters.h>
27 #include <aspect/introspection.h>
28 
29 #include <deal.II/base/table_handler.h>
30 #include <deal.II/base/timer.h>
31 #include <deal.II/base/conditional_ostream.h>
32 #include <deal.II/distributed/tria.h>
33 #include <deal.II/dofs/dof_handler.h>
34 #include <deal.II/fe/fe.h>
35 #include <deal.II/fe/mapping_q.h>
36 #include <deal.II/lac/affine_constraints.h>
37 
38 namespace WorldBuilder
39 {
40  class World;
41 }
42 
43 namespace aspect
44 {
45  // forward declarations:
46  template <int dim> class Simulator;
47  template <int dim> struct SimulatorSignals;
48  template <int dim> class LateralAveraging;
49  template <int dim> struct RotationProperties;
50 
51  namespace GravityModel
52  {
53  template <int dim> class Interface;
54  }
55 
56  namespace HeatingModel
57  {
58  template <int dim> class Manager;
59  }
60 
61  namespace MaterialModel
62  {
63  template <int dim> class Interface;
64  }
65 
66  namespace InitialTemperature
67  {
68  template <int dim> class Manager;
69  template <int dim> class Interface;
70  }
71 
72  namespace BoundaryTemperature
73  {
74  template <int dim> class Manager;
75  template <int dim> class Interface;
76  }
77 
78  namespace BoundaryHeatFlux
79  {
80  template <int dim> class Interface;
81  }
82 
83  namespace BoundaryConvectiveHeating
84  {
85  template <int dim> class Manager;
86  template <int dim> class Interface;
87  }
88 
89  namespace BoundaryComposition
90  {
91  template <int dim> class Manager;
92  template <int dim> class Interface;
93  }
94 
95  namespace BoundaryTraction
96  {
97  template <int dim> class Manager;
98  template <int dim> class Interface;
99  }
100 
101  namespace BoundaryVelocity
102  {
103  template <int dim> class Manager;
104  template <int dim> class Interface;
105  }
106 
107  namespace InitialComposition
108  {
109  template <int dim> class Manager;
110  template <int dim> class Interface;
111  }
112 
113  namespace InitialTopographyModel
114  {
115  template <int dim> class Interface;
116  }
117 
118  namespace MeshRefinement
119  {
120  template <int dim> class Manager;
121  }
122 
123  namespace AdiabaticConditions
124  {
125  template <int dim> class Interface;
126  }
127 
128  namespace Postprocess
129  {
130  template <int dim> class Manager;
131  }
132 
133  template <int dim> class MeltHandler;
134  template <int dim> class VolumeOfFluidHandler;
135 
136  namespace MeshDeformation
137  {
138  template <int dim> class MeshDeformationHandler;
139  }
140 
141  template <int dim> class NewtonHandler;
142 
143  template <int dim> class StokesMatrixFreeHandler;
144 
145  namespace Particle
146  {
147  template <int dim> class Manager;
148  }
149 
150  namespace TimeStepping
151  {
152  template <int dim> class Manager;
153  }
154 
204  template <int dim>
205  class SimulatorAccess
206  {
207  public:
214  SimulatorAccess ();
215 
220  SimulatorAccess (const Simulator<dim> &simulator_object);
221 
226  virtual ~SimulatorAccess ();
227 
237  virtual void initialize_simulator (const Simulator<dim> &simulator_object);
238 
249  const Introspection<dim> &
250  introspection () const;
251 
259  const Simulator<dim> &
260  get_simulator () const;
261 
266  const Parameters<dim> &
267  get_parameters () const;
268 
273  get_signals() const;
274 
278  MPI_Comm
279  get_mpi_communicator () const;
280 
287  TimerOutput &
288  get_computing_timer () const;
289 
295  const ConditionalOStream &
296  get_pcout () const;
297 
301  double get_time () const;
302 
306  double
307  get_timestep () const;
308 
312  double
313  get_old_timestep () const;
314 
318  unsigned int
319  get_timestep_number () const;
320 
327  get_timestepping_manager() const;
328 
332  unsigned int
333  get_nonlinear_iteration () const;
334 
339  const parallel::distributed::Triangulation<dim> &
340  get_triangulation () const;
341 
345  double
346  get_volume () const;
347 
352  const Mapping<dim> &
353  get_mapping () const;
354 
360  std::string
361  get_output_directory () const;
362 
369  unsigned int
370  get_checkpoint_id () const;
371 
375  bool
376  include_adiabatic_heating () const;
377 
381  bool
382  include_latent_heat () const;
383 
387  bool
388  include_melt_transport () const;
389 
393  int
394  get_stokes_velocity_degree () const;
395 
399  double
400  get_adiabatic_surface_temperature () const;
401 
405  double
406  get_surface_pressure () const;
407 
413  bool
414  convert_output_to_years () const;
415 
425  unsigned int
426  get_pre_refinement_step () const;
427 
432  unsigned int
433  n_compositional_fields () const;
434 
438  double
439  get_end_time () const;
440 
447  void
448  get_refinement_criteria(Vector<float> &estimated_error_per_cell) const;
449 
460  void
461  get_artificial_viscosity(Vector<float> &viscosity_per_cell,
462  const bool skip_interior_cells = false) const;
463 
468  void
469  get_artificial_viscosity_composition(Vector<float> &viscosity_per_cell,
470  const unsigned int compositional_variable) const;
489  get_current_linearization_point () const;
490 
502  get_solution () const;
503 
513  get_old_solution () const;
514 
524  get_old_old_solution () const;
525 
534  get_reaction_vector () const;
535 
544  get_mesh_velocity () const;
545 
550  const DoFHandler<dim> &
551  get_dof_handler () const;
552 
561  const FiniteElement<dim> &
562  get_fe () const;
563 
568  get_system_matrix () const;
569 
574  get_system_preconditioner_matrix () const;
575 
587  get_material_model () const;
588 
593  get_gravity_model () const;
594 
599  get_initial_topography_model () const;
600 
606  const std::shared_ptr<const InitialTopographyModel::Interface<dim>>
607  get_initial_topography_model_pointer () const;
608 
613  get_geometry_model () const;
614 
615 
621  get_adiabatic_conditions () const;
622 
631  bool has_boundary_temperature () const;
632 
640  get_boundary_temperature_manager () const;
641 
649  get_boundary_convective_heating_manager () const;
650 
656  get_boundary_heat_flux () const;
657 
665  bool has_boundary_composition () const;
666 
674  get_boundary_composition_manager () const;
675 
683  get_boundary_traction_manager () const;
684 
711  std::shared_ptr<const InitialTemperature::Manager<dim>>
712  get_initial_temperature_manager_pointer () const;
713 
729  get_initial_temperature_manager () const;
730 
756  std::shared_ptr<const InitialComposition::Manager<dim>>
757  get_initial_composition_manager_pointer () const;
758 
774  get_initial_composition_manager () const;
775 
780  const std::set<types::boundary_id> &
781  get_fixed_temperature_boundary_indicators () const;
782 
787  const std::set<types::boundary_id> &
788  get_fixed_heat_flux_boundary_indicators () const;
789 
794  const std::set<types::boundary_id> &
795  get_fixed_convective_heating_boundary_indicators () const;
796 
801  const std::set<types::boundary_id> &
802  get_fixed_composition_boundary_indicators () const;
803 
810  const std::set<types::boundary_id> &
811  get_mesh_deformation_boundary_indicators () const;
812 
820  get_boundary_velocity_manager () const;
821 
828  get_heating_model_manager () const;
829 
837  get_mesh_refinement_manager () const;
838 
842  const MeltHandler<dim> &
843  get_melt_handler () const;
844 
849  get_volume_of_fluid_handler () const;
850 
855  const NewtonHandler<dim> &
856  get_newton_handler () const;
857 
858 #ifdef ASPECT_WITH_WORLD_BUILDER
859 
875  const WorldBuilder::World &
876  get_world_builder () const;
877 
887  std::shared_ptr<const WorldBuilder::World>
888  get_world_builder_pointer () const;
889 #endif
890 
895  get_mesh_deformation_handler () const;
896 
902  const LateralAveraging<dim> &
903  get_lateral_averaging () const;
904 
909  const AffineConstraints<double> &
910  get_current_constraints () const;
911 
944  bool simulator_is_past_initialization () const;
945 
950  double
951  get_pressure_scaling () const;
952 
959  bool
960  pressure_rhs_needs_compatibility_modification() const;
961 
965  bool
966  model_has_prescribed_stokes_solution () const;
967 
973  static
974  void
975  get_composition_values_at_q_point (const std::vector<std::vector<double>> &composition_values,
976  const unsigned int q,
977  std::vector<double> &composition_values_at_q_point);
978 
990  TableHandler &get_statistics_object() const;
991 
996  get_postprocess_manager () const;
997 
1001  unsigned int
1002  n_particle_managers() const;
1003 
1008  const Particle::Manager<dim> &
1009  get_particle_manager(const unsigned int particle_manager_index) const;
1010 
1018  get_particle_manager(const unsigned int particle_manager_index);
1019 
1023  bool is_stokes_matrix_free();
1024 
1030  get_stokes_matrix_free () const;
1031 
1044  compute_net_angular_momentum(const bool use_constant_density,
1045  const LinearAlgebra::BlockVector &solution,
1046  const bool limit_to_top_faces = false) const;
1047 
1057  void remove_nullspace(LinearAlgebra::BlockVector &solution,
1058  LinearAlgebra::BlockVector &distributed_stokes_solution) const;
1059 
1072  double normalize_pressure(LinearAlgebra::BlockVector &vector) const;
1073 
1084  void denormalize_pressure(const double pressure_adjustment,
1085  LinearAlgebra::BlockVector &vector) const;
1086 
1089  private:
1094  };
1095 }
1096 
1097 
1098 #endif
::TrilinosWrappers::MPI::BlockVector BlockVector
Definition: global.h:301
::SmartPointer< T, P > ObserverPointer
Definition: compat.h:75
::TrilinosWrappers::BlockSparseMatrix BlockSparseMatrix
Definition: global.h:312
Manager< dim > World
Definition: world.h:39
ObserverPointer< const Simulator< dim >, SimulatorAccess< dim > > simulator