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 
155  namespace PrescribedSolution
156  {
157  template <int dim> class Manager;
158  }
159 
209  template <int dim>
210  class SimulatorAccess
211  {
212  public:
219  SimulatorAccess ();
220 
225  SimulatorAccess (const Simulator<dim> &simulator_object);
226 
231  virtual ~SimulatorAccess ();
232 
242  virtual void initialize_simulator (const Simulator<dim> &simulator_object);
243 
254  const Introspection<dim> &
255  introspection () const;
256 
264  const Simulator<dim> &
265  get_simulator () const;
266 
271  const Parameters<dim> &
272  get_parameters () const;
273 
278  get_signals() const;
279 
283  MPI_Comm
284  get_mpi_communicator () const;
285 
292  TimerOutput &
293  get_computing_timer () const;
294 
300  const ConditionalOStream &
301  get_pcout () const;
302 
306  double get_time () const;
307 
311  double
312  get_timestep () const;
313 
317  double
318  get_old_timestep () const;
319 
323  unsigned int
324  get_timestep_number () const;
325 
332  get_timestepping_manager() const;
333 
337  unsigned int
338  get_nonlinear_iteration () const;
339 
344  const parallel::distributed::Triangulation<dim> &
345  get_triangulation () const;
346 
350  double
351  get_volume () const;
352 
357  const Mapping<dim> &
358  get_mapping () const;
359 
365  std::string
366  get_output_directory () const;
367 
374  unsigned int
375  get_checkpoint_id () const;
376 
380  bool
381  include_adiabatic_heating () const;
382 
386  bool
387  include_latent_heat () const;
388 
392  bool
393  include_melt_transport () const;
394 
398  int
399  get_stokes_velocity_degree () const;
400 
404  double
405  get_adiabatic_surface_temperature () const;
406 
410  double
411  get_surface_pressure () const;
412 
418  bool
419  convert_output_to_years () const;
420 
430  unsigned int
431  get_pre_refinement_step () const;
432 
437  unsigned int
438  n_compositional_fields () const;
439 
443  double
444  get_end_time () const;
445 
452  void
453  get_refinement_criteria(Vector<float> &estimated_error_per_cell) const;
454 
465  void
466  get_artificial_viscosity(Vector<float> &viscosity_per_cell,
467  const bool skip_interior_cells = false) const;
468 
473  void
474  get_artificial_viscosity_composition(Vector<float> &viscosity_per_cell,
475  const unsigned int compositional_variable) const;
494  get_current_linearization_point () const;
495 
507  get_solution () const;
508 
518  get_old_solution () const;
519 
529  get_old_old_solution () const;
530 
539  get_reaction_vector () const;
540 
549  get_mesh_velocity () const;
550 
555  const DoFHandler<dim> &
556  get_dof_handler () const;
557 
566  const FiniteElement<dim> &
567  get_fe () const;
568 
573  get_system_matrix () const;
574 
579  get_system_preconditioner_matrix () const;
580 
592  get_material_model () const;
593 
598  get_gravity_model () const;
599 
604  get_initial_topography_model () const;
605 
611  const std::shared_ptr<const InitialTopographyModel::Interface<dim>>
612  get_initial_topography_model_pointer () const;
613 
618  get_geometry_model () const;
619 
620 
626  get_adiabatic_conditions () const;
627 
636  bool has_boundary_temperature () const;
637 
645  get_boundary_temperature_manager () const;
646 
654  get_boundary_convective_heating_manager () const;
655 
661  get_boundary_heat_flux () const;
662 
670  bool has_boundary_composition () const;
671 
679  get_boundary_composition_manager () const;
680 
688  get_boundary_traction_manager () const;
689 
716  std::shared_ptr<const InitialTemperature::Manager<dim>>
717  get_initial_temperature_manager_pointer () const;
718 
734  get_initial_temperature_manager () const;
735 
761  std::shared_ptr<const InitialComposition::Manager<dim>>
762  get_initial_composition_manager_pointer () const;
763 
779  get_initial_composition_manager () const;
780 
785  const std::set<types::boundary_id> &
786  get_fixed_temperature_boundary_indicators () const;
787 
792  const std::set<types::boundary_id> &
793  get_fixed_heat_flux_boundary_indicators () const;
794 
799  const std::set<types::boundary_id> &
800  get_fixed_convective_heating_boundary_indicators () const;
801 
806  const std::set<types::boundary_id> &
807  get_fixed_composition_boundary_indicators () const;
808 
815  const std::set<types::boundary_id> &
816  get_mesh_deformation_boundary_indicators () const;
817 
825  get_boundary_velocity_manager () const;
826 
833  get_heating_model_manager () const;
834 
842  get_mesh_refinement_manager () const;
843 
847  const MeltHandler<dim> &
848  get_melt_handler () const;
849 
854  get_volume_of_fluid_handler () const;
855 
860  const NewtonHandler<dim> &
861  get_newton_handler () const;
862 
863 #ifdef ASPECT_WITH_WORLD_BUILDER
864 
880  const WorldBuilder::World &
881  get_world_builder () const;
882 
892  std::shared_ptr<const WorldBuilder::World>
893  get_world_builder_pointer () const;
894 #endif
895 
900  get_mesh_deformation_handler () const;
901 
907  const LateralAveraging<dim> &
908  get_lateral_averaging () const;
909 
914  const AffineConstraints<double> &
915  get_current_constraints () const;
916 
949  bool simulator_is_past_initialization () const;
950 
955  double
956  get_pressure_scaling () const;
957 
964  bool
965  pressure_rhs_needs_compatibility_modification() const;
966 
970  bool
971  model_has_prescribed_stokes_solution () const;
972 
978  static
979  void
980  get_composition_values_at_q_point (const std::vector<std::vector<double>> &composition_values,
981  const unsigned int q,
982  std::vector<double> &composition_values_at_q_point);
983 
995  TableHandler &get_statistics_object() const;
996 
1001  get_postprocess_manager () const;
1002 
1006  unsigned int
1007  n_particle_managers() const;
1008 
1013  const Particle::Manager<dim> &
1014  get_particle_manager(const unsigned int particle_manager_index) const;
1015 
1023  get_particle_manager(const unsigned int particle_manager_index);
1024 
1028  bool is_stokes_matrix_free();
1029 
1035  get_stokes_matrix_free () const;
1036 
1042  get_prescribed_solution () const;
1043 
1056  compute_net_angular_momentum(const bool use_constant_density,
1057  const LinearAlgebra::BlockVector &solution,
1058  const bool limit_to_top_faces = false) const;
1059 
1069  void remove_nullspace(LinearAlgebra::BlockVector &solution,
1070  LinearAlgebra::BlockVector &distributed_stokes_solution) const;
1071 
1084  double normalize_pressure(LinearAlgebra::BlockVector &vector) const;
1085 
1096  void denormalize_pressure(const double pressure_adjustment,
1097  LinearAlgebra::BlockVector &vector) const;
1098 
1101  private:
1106  };
1107 }
1108 
1109 
1110 #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