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_geometry_model_interface_h
17 #define _aspect_geometry_model_interface_h
18 
19 #include <aspect/plugins.h>
22 #include <array>
23 #include <aspect/utilities.h>
25 
26 #include <set>
27 
28 
29 namespace aspect
30 {
41  namespace GeometryModel
42  {
50  template <int dim>
51  class Interface : public Plugins::InterfaceBase
52  {
53  public:
57  virtual
59 
73  virtual
74  double length_scale () const = 0;
75 
113  virtual
114  double depth(const Point<dim> &position) const = 0;
115 
125  virtual
126  double height_above_reference_surface(const Point<dim> &position) const = 0;
127 
133  Utilities::NaturalCoordinate<dim>
135  const Utilities::Coordinates::CoordinateSystem &coordinate_system) const;
136 
140  virtual
142 
150  virtual
151  std::array<double,dim> cartesian_to_natural_coordinates(const Point<dim> &position) const;
152 
158  virtual
159  Point<dim> natural_to_cartesian_coordinates(const std::array<double,dim> &position) const;
160 
178  virtual
179  Point<dim> representative_point(const double depth) const = 0;
180 
189  virtual
190  double maximal_depth() const = 0;
191 
192 
198  virtual
199  std::set<types::boundary_id>
200  get_used_boundary_indicators () const = 0;
201 
237  virtual
238  std::map<std::string,types::boundary_id>
240 
256  translate_symbolic_boundary_name_to_id (const std::string &name) const;
257 
272  std::vector<types::boundary_id>
273  translate_symbolic_boundary_names_to_ids (const std::vector<std::string> &names) const;
274 
284  std::string
285  translate_id_to_symbol_name (const types::boundary_id boundary_id) const;
286 
293  virtual
294  std::set<std::pair<std::pair<types::boundary_id, types::boundary_id>, unsigned int>>
296 
318  virtual
319  void
321  const ArrayView<Point<dim>> &connected_positions = {},
322  const ArrayView<Tensor<1,dim>> &connected_velocities = {}) const;
323 
330  virtual
331  bool
332  has_curved_elements() const;
333 
338  virtual
339  bool
340  point_is_in_domain(const Point<dim> &p) const = 0;
341 
348  virtual
349  void
351  AffineConstraints<double> &constraints) const;
352 
362  virtual
363  void
365  const DoFHandler<dim> &dof_handler,
366  const unsigned int level,
367  AffineConstraints<double> &constraints) const;
368  };
369 
370 
371 
387  template <int dim>
388  void
389  register_geometry_model (const std::string &name,
390  const std::string &description,
391  void (*declare_parameters_function) (ParameterHandler &),
392  std::unique_ptr<Interface<dim>> (*factory_function) ());
393 
404  template <int dim>
405  std::unique_ptr<Interface<dim>>
407 
413  template <int dim>
414  void
416 
426  template <int dim>
427  void
428  write_plugin_graph (std::ostream &output_stream);
429 
430 
431 
439 #define ASPECT_REGISTER_GEOMETRY_MODEL(classname,name,description) \
440  template class classname<2>; \
441  template class classname<3>; \
442  namespace ASPECT_REGISTER_GEOMETRY_MODEL_ ## classname \
443  { \
444  aspect::internal::Plugins::RegisterHelper<aspect::GeometryModel::Interface<2>,classname<2>> \
445  dummy_ ## classname ## _2d (&aspect::GeometryModel::register_geometry_model<2>, \
446  name, description); \
447  aspect::internal::Plugins::RegisterHelper<aspect::GeometryModel::Interface<3>,classname<3>> \
448  dummy_ ## classname ## _3d (&aspect::GeometryModel::register_geometry_model<3>, \
449  name, description); \
450  }
451  }
452 }
453 
454 
455 #endif
virtual void make_periodicity_constraints(const DoFHandler< dim > &dof_handler, AffineConstraints< double > &constraints) const
std::string translate_id_to_symbol_name(const types::boundary_id boundary_id) const
virtual void make_periodicity_constraints_on_level(const DoFHandler< dim > &dof_handler, const unsigned int level, AffineConstraints< double > &constraints) const
virtual Point< dim > natural_to_cartesian_coordinates(const std::array< double, dim > &position) const
virtual std::set< std::pair< std::pair< types::boundary_id, types::boundary_id >, unsigned int > > get_periodic_boundary_pairs() const
std::unique_ptr< Interface< dim > > create_geometry_model(ParameterHandler &prm)
virtual bool point_is_in_domain(const Point< dim > &p) const =0
virtual std::set< types::boundary_id > get_used_boundary_indicators() const =0
virtual double maximal_depth() const =0
virtual void create_coarse_mesh(parallel::distributed::Triangulation< dim > &coarse_grid) const =0
virtual double height_above_reference_surface(const Point< dim > &position) const =0
virtual double length_scale() const =0
virtual aspect::Utilities::Coordinates::CoordinateSystem natural_coordinate_system() const =0
Utilities::NaturalCoordinate< dim > cartesian_to_other_coordinates(const Point< dim > &position, const Utilities::Coordinates::CoordinateSystem &coordinate_system) const
virtual std::map< std::string, types::boundary_id > get_symbolic_boundary_names_map() const
virtual std::array< double, dim > cartesian_to_natural_coordinates(const Point< dim > &position) const
void write_plugin_graph(std::ostream &output_stream)
void register_geometry_model(const std::string &name, const std::string &description, void(*declare_parameters_function)(ParameterHandler &), std::unique_ptr< Interface< dim >>(*factory_function)())
std::vector< types::boundary_id > translate_symbolic_boundary_names_to_ids(const std::vector< std::string > &names) const
types::boundary_id translate_symbolic_boundary_name_to_id(const std::string &name) const
virtual void adjust_positions_for_periodicity(Point< dim > &position, const ArrayView< Point< dim >> &connected_positions={}, const ArrayView< Tensor< 1, dim >> &connected_velocities={}) const
unsigned int boundary_id
virtual double depth(const Point< dim > &position) const =0
virtual Point< dim > representative_point(const double depth) const =0
static void declare_parameters(ParameterHandler &prm)
virtual bool has_curved_elements() const