ASPECT
simulator_signals.h
Go to the documentation of this file.
1 // ------------------------------------------------------
2 //
3 // SPDX-License-Identifier: GPL-2.0-or-later
4 //
5 // SPDX-FileCopyrightText: Copyright (C) 2015-2026 by the ASPECT authors.
6 //
7 // This file is part of ASPECT.
8 //
9 // Detailed license information governing the source code and
10 // contributions can be found in the folder LICENSES and in
11 // LICENSE and CONTRIBUTING.md at the top level directory.
12 //
13 // ------------------------------------------------------
14 
15 
16 #ifndef _aspect_simulator_signals_h
17 #define _aspect_simulator_signals_h
18 
19 #include <aspect/global.h>
21 #include <aspect/parameters.h>
22 
26 
27 #include <boost/signals2.hpp>
28 
29 namespace aspect
30 {
31  namespace Assemblers
32  {
33  template <int dim>
34  class Manager;
35 
36  template <int dim>
37  class Interface;
38  }
39 
58  template <int dim>
59  struct SimulatorSignals
60  {
71  boost::signals2::signal<void (std::vector<VariableDeclaration<dim>> &)>
72  edit_finite_element_variables;
73 
80  boost::signals2::signal<void (typename parallel::distributed::Triangulation<dim> &)> pre_set_initial_state;
81 
88  boost::signals2::signal<void (const SimulatorAccess<dim> &)> post_set_initial_state;
89 
96  boost::signals2::signal<void (const SimulatorAccess<dim> &)> start_timestep;
97 
109  boost::signals2::signal<void (const SimulatorAccess<dim> &,
110  AffineConstraints<double> &)> post_constraints_creation;
111 
123  boost::signals2::signal<void (const SimulatorAccess<dim> &,
124  Parameters<dim> &parameters)> edit_parameters_pre_setup_dofs;
125 
136  boost::signals2::signal<void (typename parallel::distributed::Triangulation<dim> &)> pre_refinement_store_user_data;
137 
147  boost::signals2::signal<void (typename parallel::distributed::Triangulation<dim> &)> post_refinement_load_user_data;
148 
161  boost::signals2::signal<void (typename parallel::distributed::Triangulation<dim> &)> pre_compute_no_normal_flux_constraints;
162 
175  boost::signals2::signal<void (typename parallel::distributed::Triangulation<dim> &)> post_compute_no_normal_flux_constraints;
176 
186  boost::signals2::signal<void (typename parallel::distributed::Triangulation<dim> &)> pre_checkpoint_store_user_data;
187 
200  boost::signals2::signal<void (typename parallel::distributed::Triangulation<dim> &)> post_resume_load_user_data;
201 
214  boost::signals2::signal<double (const double pressure_scaling, const double reference_viscosity, const double length_scale)> modify_pressure_scaling;
215 
228  static boost::signals2::signal<void (const unsigned int aspect_dim,
230 
241  static boost::signals2::signal<void (const Parameters<dim> &,
242  ParameterHandler &)> parse_additional_parameters;
243 
256  boost::signals2::signal<void (const SimulatorAccess<dim> &,
257  const unsigned int number_S_iterations,
258  const unsigned int number_A_iterations,
259  const SolverControl &solver_control_cheap,
260  const SolverControl &solver_control_expensive)> post_stokes_solver;
261 
270  boost::signals2::signal<void (const SimulatorAccess<dim> &,
271  const bool solved_temperature_field,
272  const unsigned int compositional_index,
273  const SolverControl &solver_control)> post_advection_solver;
274 
284  boost::signals2::signal<void (const SolverControl &)> post_nonlinear_solver;
285 
292  boost::signals2::signal<void (const SimulatorAccess<dim> &,
293  const unsigned int iteration_count)> post_ARKode_solve;
294 
300  boost::signals2::signal<void (const SimulatorAccess<dim> &)> post_mesh_deformation;
301 
307  boost::signals2::signal<void (const SimulatorAccess<dim> &)> pre_nonlinear_solver;
308 
313  boost::signals2::signal<void (const SimulatorAccess<dim> &,
315  set_assemblers;
316 
324  boost::signals2::signal<void (DataOut<dim> &)> pre_data_out_build_patches;
325 
333  boost::signals2::signal<void (Particle::Manager<dim> &)> post_restore_particles;
334 
335  };
336 
337 
338  // Explain to the compiler that we instantiate this class elsewhere, along
339  // with its static members. This is necessary to avoid warnings by some
340  // compilers.
341  extern template struct SimulatorSignals<2>;
342  extern template
343  boost::signals2::signal<void (const unsigned int aspect_dim, ParameterHandler &prm)>
345  extern template
346  boost::signals2::signal<void (const Parameters<2> &, ParameterHandler &)>
348 
349  extern template struct SimulatorSignals<3>;
350  extern template
351  boost::signals2::signal<void (const unsigned int aspect_dim, ParameterHandler &prm)>
353  extern template
354  boost::signals2::signal<void (const Parameters<3> &, ParameterHandler &)>
356 
357 
358  namespace internals
359  {
365  {
373 
381  template <int dim>
383  }
384  }
385 
386 
397 #define ASPECT_REGISTER_SIGNALS_CONNECTOR(connector_function_2d,connector_function_3d) \
398  namespace ASPECT_REGISTER_SIGNALS_CONNECTOR \
399  { \
400  struct dummy_do_register \
401  { \
402  dummy_do_register () \
403  { \
404  aspect::internals::SimulatorSignals::register_connector_function_2d (connector_function_2d); \
405  aspect::internals::SimulatorSignals::register_connector_function_3d (connector_function_3d); \
406  } \
407  } dummy_variable; \
408  }
409 
410 
419 #define ASPECT_REGISTER_SIGNALS_PARAMETER_CONNECTOR(connector_function) \
420  namespace ASPECT_REGISTER_SIGNALS_PARAMETER_CONNECTOR_ ## connector_function \
421  { \
422  struct dummy_do_register_ ## connector_function \
423  { \
424  dummy_do_register_ ## connector_function () \
425  { \
426  connector_function (); \
427  } \
428  } dummy_variable_ ## classname; \
429  }
430 
431 }
432 #endif
void register_connector_function_2d(const std::function< void(aspect::SimulatorSignals< 2 > &)> &connector)
boost::signals2::signal< double(const double pressure_scaling, const double reference_viscosity, const double length_scale)> modify_pressure_scaling
boost::signals2::signal< void(const SolverControl &)> post_nonlinear_solver
void call_connector_functions(aspect::SimulatorSignals< dim > &signals)
void register_connector_function_3d(const std::function< void(aspect::SimulatorSignals< 3 > &)> &connector)
static boost::signals2::signal< void(const unsigned int aspect_dim, ParameterHandler &prm)> declare_additional_parameters