ASPECT
simulator_signals.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2015 - 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_signals_h
23 #define _aspect_simulator_signals_h
24 
25 #include <aspect/global.h>
27 #include <aspect/parameters.h>
28 
32 
33 #include <boost/signals2.hpp>
34 
35 namespace aspect
36 {
37  namespace Assemblers
38  {
39  template <int dim>
40  class Manager;
41 
42  template <int dim>
43  class Interface;
44  }
45 
64  template <int dim>
65  struct SimulatorSignals
66  {
77  boost::signals2::signal<void (std::vector<VariableDeclaration<dim>> &)>
78  edit_finite_element_variables;
79 
86  boost::signals2::signal<void (typename parallel::distributed::Triangulation<dim> &)> pre_set_initial_state;
87 
94  boost::signals2::signal<void (const SimulatorAccess<dim> &)> post_set_initial_state;
95 
102  boost::signals2::signal<void (const SimulatorAccess<dim> &)> start_timestep;
103 
115  boost::signals2::signal<void (const SimulatorAccess<dim> &,
116  AffineConstraints<double> &)> post_constraints_creation;
117 
129  boost::signals2::signal<void (const SimulatorAccess<dim> &,
130  Parameters<dim> &parameters)> edit_parameters_pre_setup_dofs;
131 
142  boost::signals2::signal<void (typename parallel::distributed::Triangulation<dim> &)> pre_refinement_store_user_data;
143 
153  boost::signals2::signal<void (typename parallel::distributed::Triangulation<dim> &)> post_refinement_load_user_data;
154 
167  boost::signals2::signal<void (typename parallel::distributed::Triangulation<dim> &)> pre_compute_no_normal_flux_constraints;
168 
181  boost::signals2::signal<void (typename parallel::distributed::Triangulation<dim> &)> post_compute_no_normal_flux_constraints;
182 
192  boost::signals2::signal<void (typename parallel::distributed::Triangulation<dim> &)> pre_checkpoint_store_user_data;
193 
206  boost::signals2::signal<void (typename parallel::distributed::Triangulation<dim> &)> post_resume_load_user_data;
207 
220  boost::signals2::signal<double (const double pressure_scaling, const double reference_viscosity, const double length_scale)> modify_pressure_scaling;
221 
234  static boost::signals2::signal<void (const unsigned int aspect_dim,
236 
247  static boost::signals2::signal<void (const Parameters<dim> &,
248  ParameterHandler &)> parse_additional_parameters;
249 
262  boost::signals2::signal<void (const SimulatorAccess<dim> &,
263  const unsigned int number_S_iterations,
264  const unsigned int number_A_iterations,
265  const SolverControl &solver_control_cheap,
266  const SolverControl &solver_control_expensive)> post_stokes_solver;
267 
276  boost::signals2::signal<void (const SimulatorAccess<dim> &,
277  const bool solved_temperature_field,
278  const unsigned int compositional_index,
279  const SolverControl &solver_control)> post_advection_solver;
280 
290  boost::signals2::signal<void (const SolverControl &)> post_nonlinear_solver;
291 
298  boost::signals2::signal<void (const SimulatorAccess<dim> &,
299  const unsigned int iteration_count)> post_ARKode_solve;
300 
306  boost::signals2::signal<void (const SimulatorAccess<dim> &)> post_mesh_deformation;
307 
313  boost::signals2::signal<void (const SimulatorAccess<dim> &)> pre_nonlinear_solver;
314 
319  boost::signals2::signal<void (const SimulatorAccess<dim> &,
321  set_assemblers;
322 
330  boost::signals2::signal<void (DataOut<dim> &)> pre_data_out_build_patches;
331 
339  boost::signals2::signal<void (Particle::Manager<dim> &)> post_restore_particles;
340 
341  };
342 
343 
344  // Explain to the compiler that we instantiate this class elsewhere, along
345  // with its static members. This is necessary to avoid warnings by some
346  // compilers.
347  extern template struct SimulatorSignals<2>;
348  extern template
349  boost::signals2::signal<void (const unsigned int aspect_dim, ParameterHandler &prm)>
351  extern template
352  boost::signals2::signal<void (const Parameters<2> &, ParameterHandler &)>
354 
355  extern template struct SimulatorSignals<3>;
356  extern template
357  boost::signals2::signal<void (const unsigned int aspect_dim, ParameterHandler &prm)>
359  extern template
360  boost::signals2::signal<void (const Parameters<3> &, ParameterHandler &)>
362 
363 
364  namespace internals
365  {
371  {
379 
387  template <int dim>
389  }
390  }
391 
392 
403 #define ASPECT_REGISTER_SIGNALS_CONNECTOR(connector_function_2d,connector_function_3d) \
404  namespace ASPECT_REGISTER_SIGNALS_CONNECTOR \
405  { \
406  struct dummy_do_register \
407  { \
408  dummy_do_register () \
409  { \
410  aspect::internals::SimulatorSignals::register_connector_function_2d (connector_function_2d); \
411  aspect::internals::SimulatorSignals::register_connector_function_3d (connector_function_3d); \
412  } \
413  } dummy_variable; \
414  }
415 
416 
425 #define ASPECT_REGISTER_SIGNALS_PARAMETER_CONNECTOR(connector_function) \
426  namespace ASPECT_REGISTER_SIGNALS_PARAMETER_CONNECTOR_ ## connector_function \
427  { \
428  struct dummy_do_register_ ## connector_function \
429  { \
430  dummy_do_register_ ## connector_function () \
431  { \
432  connector_function (); \
433  } \
434  } dummy_variable_ ## classname; \
435  }
436 
437 }
438 #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