ASPECT
simulator_access.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2011 - 2026 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 StokesSolver
156  {
157  template <int dim> class Interface;
158  }
159 
160  namespace TimeStepping
161  {
162  template <int dim> class Manager;
163  }
164 
165  namespace PrescribedSolution
166  {
167  template <int dim> class Manager;
168  }
169 
219  template <int dim>
221  {
222  public:
230 
235  SimulatorAccess (const Simulator<dim> &simulator_object);
236 
241  virtual ~SimulatorAccess ();
242 
252  virtual void initialize_simulator (const Simulator<dim> &simulator_object);
253 
264  const Introspection<dim> &
265  introspection () const;
266 
274  const Simulator<dim> &
275  get_simulator () const;
276 
281  const Parameters<dim> &
282  get_parameters () const;
283 
288  get_signals() const;
289 
293  MPI_Comm
295 
302  TimerOutput &
304 
310  const ConditionalOStream &
311  get_pcout () const;
312 
316  double get_time () const;
317 
321  double
322  get_timestep () const;
323 
327  double
329 
333  unsigned int
335 
343 
347  unsigned int
349 
356 
360  double
361  get_volume () const;
362 
367  const Mapping<dim> &
368  get_mapping () const;
369 
375  std::string
377 
384  unsigned int
386 
390  bool
392 
396  bool
398 
402  bool
404 
408  int
410 
414  double
416 
420  double
422 
428  bool
430 
440  unsigned int
442 
447  unsigned int
449 
453  double
454  get_end_time () const;
455 
462  void
463  get_refinement_criteria(Vector<float> &estimated_error_per_cell) const;
464 
475  void
477  const bool skip_interior_cells = false) const;
478 
483  void
485  const unsigned int compositional_variable) const;
505 
517  get_solution () const;
518 
529 
540 
550 
560 
565  const DoFHandler<dim> &
566  get_dof_handler () const;
567 
576  const FiniteElement<dim> &
577  get_fe () const;
578 
584 
590 
603 
609 
615 
621  const std::shared_ptr<const InitialTopographyModel::Interface<dim>>
623 
629 
630 
637 
647 
656 
665 
672 
681 
690 
699 
726  std::shared_ptr<const InitialTemperature::Manager<dim>>
728 
745 
771  std::shared_ptr<const InitialComposition::Manager<dim>>
773 
790 
795  const std::set<types::boundary_id> &
797 
802  const std::set<types::boundary_id> &
804 
809  const std::set<types::boundary_id> &
811 
816  const std::set<types::boundary_id> &
818 
825  const std::set<types::boundary_id> &
827 
836 
844 
852 
861 
865  const MeltHandler<dim> &
867 
873 
878  const NewtonHandler<dim> &
880 
881 #ifdef ASPECT_WITH_WORLD_BUILDER
898  const WorldBuilder::World &
899  get_world_builder () const;
900 
910  std::shared_ptr<const WorldBuilder::World>
911  get_world_builder_pointer () const;
912 #endif
919 
925  const LateralAveraging<dim> &
927 
934 
968 
973  double
975 
982  bool
984 
992  bool
994 
998  bool
1000 
1006  static
1007  void
1008  get_composition_values_at_q_point (const std::vector<std::vector<double>> &composition_values,
1009  const unsigned int q,
1010  std::vector<double> &composition_values_at_q_point);
1011 
1024 
1030 
1034  unsigned int
1036 
1041  const Particle::Manager<dim> &
1042  get_particle_manager(const unsigned int particle_manager_index) const;
1043 
1051  get_particle_manager(const unsigned int particle_manager_index);
1052 
1057 
1064 
1070 
1077 
1090  compute_net_angular_momentum(const bool use_constant_density,
1091  const LinearAlgebra::BlockVector &solution,
1092  const bool limit_to_top_faces = false) const;
1093 
1104  LinearAlgebra::BlockVector &distributed_stokes_solution) const;
1105 
1119 
1130  void denormalize_pressure(const double pressure_adjustment,
1131  LinearAlgebra::BlockVector &vector) const;
1132 
1135  private:
1140  };
1141 }
1142 
1143 
1144 #endif
const LinearAlgebra::BlockVector & get_current_linearization_point() const
const BoundaryVelocity::Manager< dim > & get_boundary_velocity_manager() const
const VolumeOfFluidHandler< dim > & get_volume_of_fluid_handler() const
bool simulator_is_past_initialization() const
const Mapping< dim > & get_mapping() const
const Parameters< dim > & get_parameters() const
double get_timestep() const
bool model_has_prescribed_stokes_solution() const
const BoundaryTemperature::Manager< dim > & get_boundary_temperature_manager() const
const InitialTemperature::Manager< dim > & get_initial_temperature_manager() const
bool include_adiabatic_heating() const
const StokesMatrixFreeHandler< dim > & get_stokes_matrix_free() const
const ConditionalOStream & get_pcout() const
const Introspection< dim > & introspection() const
double get_end_time() const
unsigned int n_compositional_fields() const
const MaterialModel::Interface< dim > & get_material_model() const
const GravityModel::Interface< dim > & get_gravity_model() const
bool has_boundary_composition() const
unsigned int get_checkpoint_id() const
bool include_latent_heat() const
const GeometryModel::Interface< dim > & get_geometry_model() const
const InitialComposition::Manager< dim > & get_initial_composition_manager() const
const LinearAlgebra::BlockSparseMatrix & get_system_matrix() const
const parallel::distributed::Triangulation< dim > & get_triangulation() const
const AffineConstraints< double > & get_current_constraints() const
const Postprocess::Manager< dim > & get_postprocess_manager() const
const std::set< types::boundary_id > & get_fixed_temperature_boundary_indicators() const
const NewtonHandler< dim > & get_newton_handler() const
const LinearAlgebra::BlockSparseMatrix & get_system_preconditioner_matrix() const
double get_pressure_scaling() const
std::shared_ptr< const InitialTemperature::Manager< dim > > get_initial_temperature_manager_pointer() const
Particle::Manager< dim > & get_particle_manager(const unsigned int particle_manager_index)
SimulatorSignals< dim > & get_signals() const
void remove_nullspace(LinearAlgebra::BlockVector &solution, LinearAlgebra::BlockVector &distributed_stokes_solution) const
const TimeStepping::Manager< dim > & get_timestepping_manager() const
const BoundaryComposition::Manager< dim > & get_boundary_composition_manager() const
const LinearAlgebra::BlockVector & get_reaction_vector() const
static void get_composition_values_at_q_point(const std::vector< std::vector< double >> &composition_values, const unsigned int q, std::vector< double > &composition_values_at_q_point)
SimulatorAccess(const Simulator< dim > &simulator_object)
bool stokes_A_block_is_symmetric() const
const HeatingModel::Manager< dim > & get_heating_model_manager() const
virtual void initialize_simulator(const Simulator< dim > &simulator_object)
bool convert_output_to_years() const
const MeshDeformation::MeshDeformationHandler< dim > & get_mesh_deformation_handler() const
const std::set< types::boundary_id > & get_fixed_composition_boundary_indicators() const
unsigned int get_nonlinear_iteration() const
const MeshRefinement::Manager< dim > & get_mesh_refinement_manager() const
const LinearAlgebra::BlockVector & get_solution() const
const AdiabaticConditions::Interface< dim > & get_adiabatic_conditions() const
bool include_melt_transport() const
double get_adiabatic_surface_temperature() const
const std::shared_ptr< const InitialTopographyModel::Interface< dim > > get_initial_topography_model_pointer() const
bool has_boundary_temperature() const
void get_artificial_viscosity(Vector< float > &viscosity_per_cell, const bool skip_interior_cells=false) const
const StokesSolver::Interface< dim > & get_stokes_solver() const
ObserverPointer< const Simulator< dim >, SimulatorAccess< dim > > simulator
const BoundaryHeatFlux::Interface< dim > & get_boundary_heat_flux() const
double get_time() const
std::string get_output_directory() const
const LinearAlgebra::BlockVector & get_old_solution() const
TableHandler & get_statistics_object() const
double get_old_timestep() const
const InitialTopographyModel::Interface< dim > & get_initial_topography_model() const
double normalize_pressure(LinearAlgebra::BlockVector &vector) const
void get_artificial_viscosity_composition(Vector< float > &viscosity_per_cell, const unsigned int compositional_variable) const
unsigned int n_particle_managers() const
unsigned int get_pre_refinement_step() const
const BoundaryConvectiveHeating::Manager< dim > & get_boundary_convective_heating_manager() const
const std::set< types::boundary_id > & get_fixed_heat_flux_boundary_indicators() const
const Particle::Manager< dim > & get_particle_manager(const unsigned int particle_manager_index) const
void get_refinement_criteria(Vector< float > &estimated_error_per_cell) const
const std::set< types::boundary_id > & get_fixed_convective_heating_boundary_indicators() const
const LinearAlgebra::BlockVector & get_old_old_solution() const
double get_volume() const
MPI_Comm get_mpi_communicator() const
unsigned int get_timestep_number() const
const PrescribedDilation::Manager< dim > & get_prescribed_dilation_manager() const
const LateralAveraging< dim > & get_lateral_averaging() const
const FiniteElement< dim > & get_fe() const
bool is_stokes_matrix_free() const
int get_stokes_velocity_degree() const
const PrescribedSolution::Manager< dim > & get_prescribed_solution() const
std::shared_ptr< const InitialComposition::Manager< dim > > get_initial_composition_manager_pointer() const
bool pressure_rhs_needs_compatibility_modification() const
const DoFHandler< dim > & get_dof_handler() const
TimerOutput & get_computing_timer() const
void denormalize_pressure(const double pressure_adjustment, LinearAlgebra::BlockVector &vector) const
const MeltHandler< dim > & get_melt_handler() const
const std::set< types::boundary_id > & get_mesh_deformation_boundary_indicators() const
const LinearAlgebra::BlockVector & get_mesh_velocity() const
RotationProperties< dim > compute_net_angular_momentum(const bool use_constant_density, const LinearAlgebra::BlockVector &solution, const bool limit_to_top_faces=false) const
double get_surface_pressure() const
const BoundaryTraction::Manager< dim > & get_boundary_traction_manager() const
const Simulator< dim > & get_simulator() const
Manager< dim > World
Definition: world.h:39