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 
30 #include <deal.II/base/timer.h>
34 #include <deal.II/fe/fe.h>
35 #include <deal.II/fe/mapping_q.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 PrescribedDilation
62  {
63  template <int dim> class Manager;
64  }
65 
66  namespace MaterialModel
67  {
68  template <int dim> class Interface;
69  }
70 
71  namespace InitialTemperature
72  {
73  template <int dim> class Manager;
74  template <int dim> class Interface;
75  }
76 
77  namespace BoundaryTemperature
78  {
79  template <int dim> class Manager;
80  template <int dim> class Interface;
81  }
82 
83  namespace BoundaryHeatFlux
84  {
85  template <int dim> class Interface;
86  }
87 
88  namespace BoundaryConvectiveHeating
89  {
90  template <int dim> class Manager;
91  template <int dim> class Interface;
92  }
93 
94  namespace BoundaryComposition
95  {
96  template <int dim> class Manager;
97  template <int dim> class Interface;
98  }
99 
100  namespace BoundaryTraction
101  {
102  template <int dim> class Manager;
103  template <int dim> class Interface;
104  }
105 
106  namespace BoundaryVelocity
107  {
108  template <int dim> class Manager;
109  template <int dim> class Interface;
110  }
111 
112  namespace InitialComposition
113  {
114  template <int dim> class Manager;
115  template <int dim> class Interface;
116  }
117 
118  namespace InitialTopographyModel
119  {
120  template <int dim> class Interface;
121  }
122 
123  namespace MeshRefinement
124  {
125  template <int dim> class Manager;
126  }
127 
128  namespace AdiabaticConditions
129  {
130  template <int dim> class Interface;
131  }
132 
133  namespace Postprocess
134  {
135  template <int dim> class Manager;
136  }
137 
138  template <int dim> class MeltHandler;
139  template <int dim> class VolumeOfFluidHandler;
140 
141  namespace MeshDeformation
142  {
143  template <int dim> class MeshDeformationHandler;
144  }
145 
146  template <int dim> class NewtonHandler;
147 
148  template <int dim> class StokesMatrixFreeHandler;
149 
150  namespace Particle
151  {
152  template <int dim> class Manager;
153  }
154 
155  namespace TimeStepping
156  {
157  template <int dim> class Manager;
158  }
159 
160  namespace PrescribedSolution
161  {
162  template <int dim> class Manager;
163  }
164 
214  template <int dim>
215  class SimulatorAccess
216  {
217  public:
224  SimulatorAccess ();
225 
230  SimulatorAccess (const Simulator<dim> &simulator_object);
231 
236  virtual ~SimulatorAccess ();
237 
247  virtual void initialize_simulator (const Simulator<dim> &simulator_object);
248 
259  const Introspection<dim> &
260  introspection () const;
261 
269  const Simulator<dim> &
270  get_simulator () const;
271 
276  const Parameters<dim> &
277  get_parameters () const;
278 
283  get_signals() const;
284 
288  MPI_Comm
289  get_mpi_communicator () const;
290 
297  TimerOutput &
298  get_computing_timer () const;
299 
305  const ConditionalOStream &
306  get_pcout () const;
307 
311  double get_time () const;
312 
316  double
317  get_timestep () const;
318 
322  double
323  get_old_timestep () const;
324 
328  unsigned int
329  get_timestep_number () const;
330 
337  get_timestepping_manager() const;
338 
342  unsigned int
343  get_nonlinear_iteration () const;
344 
350  get_triangulation () const;
351 
355  double
356  get_volume () const;
357 
362  const Mapping<dim> &
363  get_mapping () const;
364 
370  std::string
371  get_output_directory () const;
372 
379  unsigned int
380  get_checkpoint_id () const;
381 
385  bool
386  include_adiabatic_heating () const;
387 
391  bool
392  include_latent_heat () const;
393 
397  bool
398  include_melt_transport () const;
399 
403  int
404  get_stokes_velocity_degree () const;
405 
409  double
410  get_adiabatic_surface_temperature () const;
411 
415  double
416  get_surface_pressure () const;
417 
423  bool
424  convert_output_to_years () const;
425 
435  unsigned int
436  get_pre_refinement_step () const;
437 
442  unsigned int
443  n_compositional_fields () const;
444 
448  double
449  get_end_time () const;
450 
457  void
458  get_refinement_criteria(Vector<float> &estimated_error_per_cell) const;
459 
470  void
471  get_artificial_viscosity(Vector<float> &viscosity_per_cell,
472  const bool skip_interior_cells = false) const;
473 
478  void
479  get_artificial_viscosity_composition(Vector<float> &viscosity_per_cell,
480  const unsigned int compositional_variable) const;
499  get_current_linearization_point () const;
500 
512  get_solution () const;
513 
523  get_old_solution () const;
524 
534  get_old_old_solution () const;
535 
544  get_reaction_vector () const;
545 
554  get_mesh_velocity () const;
555 
560  const DoFHandler<dim> &
561  get_dof_handler () const;
562 
571  const FiniteElement<dim> &
572  get_fe () const;
573 
578  get_system_matrix () const;
579 
584  get_system_preconditioner_matrix () const;
585 
597  get_material_model () const;
598 
603  get_gravity_model () const;
604 
609  get_initial_topography_model () const;
610 
616  const std::shared_ptr<const InitialTopographyModel::Interface<dim>>
617  get_initial_topography_model_pointer () const;
618 
623  get_geometry_model () const;
624 
625 
631  get_adiabatic_conditions () const;
632 
641  bool has_boundary_temperature () const;
642 
650  get_boundary_temperature_manager () const;
651 
659  get_boundary_convective_heating_manager () const;
660 
666  get_boundary_heat_flux () const;
667 
675  bool has_boundary_composition () const;
676 
684  get_boundary_composition_manager () const;
685 
693  get_boundary_traction_manager () const;
694 
721  std::shared_ptr<const InitialTemperature::Manager<dim>>
722  get_initial_temperature_manager_pointer () const;
723 
739  get_initial_temperature_manager () const;
740 
766  std::shared_ptr<const InitialComposition::Manager<dim>>
767  get_initial_composition_manager_pointer () const;
768 
784  get_initial_composition_manager () const;
785 
790  const std::set<types::boundary_id> &
791  get_fixed_temperature_boundary_indicators () const;
792 
797  const std::set<types::boundary_id> &
798  get_fixed_heat_flux_boundary_indicators () const;
799 
804  const std::set<types::boundary_id> &
805  get_fixed_convective_heating_boundary_indicators () const;
806 
811  const std::set<types::boundary_id> &
812  get_fixed_composition_boundary_indicators () const;
813 
820  const std::set<types::boundary_id> &
821  get_mesh_deformation_boundary_indicators () const;
822 
830  get_boundary_velocity_manager () const;
831 
838  get_heating_model_manager () const;
839 
846  get_prescribed_dilation_manager () const;
847 
855  get_mesh_refinement_manager () const;
856 
860  const MeltHandler<dim> &
861  get_melt_handler () const;
862 
867  get_volume_of_fluid_handler () const;
868 
873  const NewtonHandler<dim> &
874  get_newton_handler () const;
875 
876 #ifdef ASPECT_WITH_WORLD_BUILDER
877 
893  const WorldBuilder::World &
894  get_world_builder () const;
895 
905  std::shared_ptr<const WorldBuilder::World>
906  get_world_builder_pointer () const;
907 #endif
908 
913  get_mesh_deformation_handler () const;
914 
920  const LateralAveraging<dim> &
921  get_lateral_averaging () const;
922 
928  get_current_constraints () const;
929 
962  bool simulator_is_past_initialization () const;
963 
968  double
969  get_pressure_scaling () const;
970 
977  bool
978  pressure_rhs_needs_compatibility_modification() const;
979 
983  bool
984  model_has_prescribed_stokes_solution () const;
985 
991  static
992  void
993  get_composition_values_at_q_point (const std::vector<std::vector<double>> &composition_values,
994  const unsigned int q,
995  std::vector<double> &composition_values_at_q_point);
996 
1008  TableHandler &get_statistics_object() const;
1009 
1014  get_postprocess_manager () const;
1015 
1019  unsigned int
1020  n_particle_managers() const;
1021 
1026  const Particle::Manager<dim> &
1027  get_particle_manager(const unsigned int particle_manager_index) const;
1028 
1036  get_particle_manager(const unsigned int particle_manager_index);
1037 
1041  bool is_stokes_matrix_free();
1042 
1048  get_stokes_matrix_free () const;
1049 
1055  get_prescribed_solution () const;
1056 
1069  compute_net_angular_momentum(const bool use_constant_density,
1070  const LinearAlgebra::BlockVector &solution,
1071  const bool limit_to_top_faces = false) const;
1072 
1082  void remove_nullspace(LinearAlgebra::BlockVector &solution,
1083  LinearAlgebra::BlockVector &distributed_stokes_solution) const;
1084 
1097  double normalize_pressure(LinearAlgebra::BlockVector &vector) const;
1098 
1109  void denormalize_pressure(const double pressure_adjustment,
1110  LinearAlgebra::BlockVector &vector) const;
1111 
1114  private:
1119  };
1120 }
1121 
1122 
1123 #endif
Manager< dim > World
Definition: world.h:39
ObserverPointer< const Simulator< dim >, SimulatorAccess< dim > > simulator