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_boundary_traction_interface_h
17 #define _aspect_boundary_traction_interface_h
18 
19 #include <aspect/plugins.h>
21 
22 #include <deal.II/base/point.h>
24 
25 namespace aspect
26 {
33  namespace BoundaryTraction
34  {
40  template <int dim>
41  class Interface : public Plugins::InterfaceBase
42  {
43  public:
58  virtual
60  boundary_traction (const types::boundary_id boundary_indicator,
61  const Point<dim> &position,
62  const Tensor<1,dim> &normal_vector) const = 0;
63  };
64 
65  template <int dim>
66  class Manager : public Plugins::ManagerBase<Interface<dim>>, public SimulatorAccess<dim>
67  {
68  public:
75  boundary_traction (const types::boundary_id boundary_indicator,
76  const Point<dim> &position,
77  const Tensor<1,dim> &normal_vector) const;
78 
95  const std::map<types::boundary_id, std::pair<std::string,std::vector<std::string>>> &
96  get_active_boundary_traction_names () const;
97 
111  const std::map<types::boundary_id,std::vector<std::unique_ptr<BoundaryTraction::Interface<dim>>>> &
112  get_active_boundary_traction_conditions () const;
113 
118  const std::set<types::boundary_id> &
119  get_prescribed_boundary_traction_indicators () const;
120 
127  const std::vector<types::boundary_id> &
128  get_active_plugin_boundary_indicators() const;
129 
141  get_component_mask(const types::boundary_id boundary_id) const;
142 
147  static
148  void
150 
156  void
157  parse_parameters (ParameterHandler &prm) override;
158 
168  static
169  void
170  write_plugin_graph (std::ostream &output_stream);
171 
172 
176  DeclException1 (ExcBoundaryTractionNameNotFound,
177  std::string,
178  << "Could not find entry <"
179  << arg1
180  << "> among the names of registered boundary traction objects.");
181 
198  static
199  void
200  register_boundary_traction (const std::string &name,
201  const std::string &description,
202  void (*declare_parameters_function) (ParameterHandler &),
203  std::unique_ptr<Interface<dim>> (*factory_function) ());
204 
205  private:
214  std::vector<types::boundary_id> boundary_indicators;
215 
224  std::vector<ComponentMask> component_masks;
225 
229  std::set<types::boundary_id> prescribed_traction_boundary_indicators;
230 
238  std::map<types::boundary_id,std::vector<std::unique_ptr<BoundaryTraction::Interface<dim>>>> boundary_traction_objects;
239 
253  std::map<types::boundary_id, std::pair<std::string,std::vector<std::string>>> boundary_traction_indicators;
254 
255  };
256 
267  template <int dim>
268  std::unique_ptr<Interface<dim>>
269  create_boundary_traction (const std::string &name);
270 
276  template <int dim>
277  std::string
278  get_names ();
279 
286  template <int dim>
287  void
289 
290 
300  template <int dim>
301  void
302  write_plugin_graph (std::ostream &output_stream);
303 
304 
305 
313 #define ASPECT_REGISTER_BOUNDARY_TRACTION_MODEL(classname,name,description) \
314  template class classname<2>; \
315  template class classname<3>; \
316  namespace ASPECT_REGISTER_BOUNDARY_TRACTION_MODEL_ ## classname \
317  { \
318  aspect::internal::Plugins::RegisterHelper<aspect::BoundaryTraction::Interface<2>,classname<2>> \
319  dummy_ ## classname ## _2d (&aspect::BoundaryTraction::Manager<2>::register_boundary_traction, \
320  name, description); \
321  aspect::internal::Plugins::RegisterHelper<aspect::BoundaryTraction::Interface<3>,classname<3>> \
322  dummy_ ## classname ## _3d (&aspect::BoundaryTraction::Manager<3>::register_boundary_traction, \
323  name, description); \
324  }
325  }
326 }
327 
328 
329 #endif
virtual void parse_parameters(ParameterHandler &prm)
std::vector< ComponentMask > component_masks
Definition: interface.h:224
std::unique_ptr< Interface< dim > > create_boundary_traction(const std::string &name)
void write_plugin_graph(std::ostream &output_stream)
std::map< types::boundary_id, std::pair< std::string, std::vector< std::string > > > boundary_traction_indicators
Definition: interface.h:253
std::map< types::boundary_id, std::vector< std::unique_ptr< BoundaryTraction::Interface< dim > > > > boundary_traction_objects
Definition: interface.h:238
std::vector< types::boundary_id > boundary_indicators
Definition: interface.h:214
std::set< types::boundary_id > prescribed_traction_boundary_indicators
Definition: interface.h:229
#define DEAL_II_DEPRECATED
unsigned int boundary_id
static void declare_parameters(ParameterHandler &prm)
virtual Tensor< 1, dim > boundary_traction(const types::boundary_id boundary_indicator, const Point< dim > &position, const Tensor< 1, dim > &normal_vector) const =0
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.")