ASPECT
interface.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) 2011-2025 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_initial_composition_interface_h
17 #define _aspect_initial_composition_interface_h
18 
19 #include <aspect/plugins.h>
20 #include <aspect/utilities.h>
22 
23 #include <deal.II/base/point.h>
25 
26 #include <boost/core/demangle.hpp>
27 #include <typeinfo>
28 
29 
30 namespace aspect
31 {
32  template <int dim> class SimulatorAccess;
33 
40  namespace InitialComposition
41  {
47  template <int dim>
48  class Interface : public Plugins::InterfaceBase
49  {
50  public:
54  virtual
55  double initial_composition (const Point<dim> &position, const unsigned int n_comp) const = 0;
56  };
57 
58 
59 
65  template <int dim>
66  class Manager : public Plugins::ManagerBase<Interface<dim>>, public SimulatorAccess<dim>
67  {
68  public:
73  static
74  void
76 
82  void
83  parse_parameters (ParameterHandler &prm) override;
84 
91  double
92  initial_composition (const Point<dim> &position,
93  const unsigned int n_comp) const;
94 
112  static
113  void
114  register_initial_composition (const std::string &name,
115  const std::string &description,
116  void (*declare_parameters_function) (ParameterHandler &),
117  std::unique_ptr<Interface<dim>> (*factory_function) ());
118 
119 
128  const std::vector<std::string> &
129  get_active_initial_composition_names () const;
130 
139  const std::list<std::unique_ptr<Interface<dim>>> &
140  get_active_initial_composition_conditions () const;
141 
156  template <typename InitialCompositionType,
157  typename = typename std::enable_if_t<std::is_base_of<Interface<dim>,InitialCompositionType>::value>>
159  bool
160  has_matching_initial_composition_model () const;
161 
178  template <typename InitialCompositionType,
179  typename = typename std::enable_if_t<std::is_base_of<Interface<dim>,InitialCompositionType>::value>>
181  const InitialCompositionType &
182  get_matching_initial_composition_model () const;
183 
193  static
194  void
195  write_plugin_graph (std::ostream &output_stream);
196 
200  DeclException1 (ExcInitialCompositionNameNotFound,
201  std::string,
202  << "Could not find entry <"
203  << arg1
204  << "> among the names of registered initial composition objects.");
205  private:
212  std::vector<aspect::Utilities::Operator> model_operators;
213  };
214 
215 
216 
217  template <int dim>
218  template <typename InitialCompositionType, typename>
219  inline
220  bool
222  {
223  return this->template has_matching_active_plugin<InitialCompositionType>();
224  }
225 
226 
227  template <int dim>
228  template <typename InitialCompositionType, typename>
229  inline
230  const InitialCompositionType &
232  {
233  return this->template get_matching_active_plugin<InitialCompositionType>();
234  }
235 
236 
245  template <int dim>
246  std::string
248 
249 
250 
258 #define ASPECT_REGISTER_INITIAL_COMPOSITION_MODEL(classname,name,description) \
259  template class classname<2>; \
260  template class classname<3>; \
261  namespace ASPECT_REGISTER_INITIAL_COMPOSITION_MODEL_ ## classname \
262  { \
263  aspect::internal::Plugins::RegisterHelper<aspect::InitialComposition::Interface<2>,classname<2>> \
264  dummy_ ## classname ## _2d (&aspect::InitialComposition::Manager<2>::register_initial_composition, \
265  name, description); \
266  aspect::internal::Plugins::RegisterHelper<aspect::InitialComposition::Interface<3>,classname<3>> \
267  dummy_ ## classname ## _3d (&aspect::InitialComposition::Manager<3>::register_initial_composition, \
268  name, description); \
269  }
270  }
271 }
272 
273 
274 #endif
virtual void parse_parameters(ParameterHandler &prm)
DEAL_II_DEPRECATED bool has_matching_initial_composition_model() const
void write_plugin_graph(std::ostream &output_stream)
DEAL_II_DEPRECATED const InitialCompositionType & get_matching_initial_composition_model() const
virtual double initial_composition(const Point< dim > &position, const unsigned int n_comp) const =0
std::string get_valid_model_names_pattern()
std::vector< aspect::Utilities::Operator > model_operators
Definition: interface.h:212
#define DEAL_II_DEPRECATED
static void declare_parameters(ParameterHandler &prm)
DeclException1(ProbabilityFunctionNegative, Point< dim >,<< "Your probability density function in the particle generator " "returned a negative probability density for the following position: "<< arg1<< ". Please check your function expression.")