ASPECT
chunk.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-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_geometry_model_chunk_h
17 #define _aspect_geometry_model_chunk_h
18 
21 
22 #include <deal.II/grid/manifold.h>
24 #include <deal.II/grid/grid_out.h>
25 
26 namespace aspect
27 {
28  namespace GeometryModel
29  {
30  namespace internal
31  {
44  template <int dim>
45  class ChunkGeometry : public ChartManifold<dim,dim>
46  {
47  public:
51  ChunkGeometry(const std::shared_ptr<const InitialTopographyModel::Interface<dim>> &topography,
52  const double min_longitude,
53  const double min_radius,
54  const double max_depth);
55 
59  ChunkGeometry(const ChunkGeometry &other) = default;
60 
67  pull_back(const Point<dim> &space_point) const override;
68 
76  push_forward(const Point<dim> &chart_point) const override;
77 
84  push_forward_gradient(const Point<dim> &chart_point) const override;
85 
91  pull_back_sphere(const Point<dim> &space_point) const;
92 
99  push_forward_sphere(const Point<dim> &chart_point) const;
100 
104  virtual Tensor<1, dim>
106  const typename Triangulation<dim>::face_iterator &face,
107  const Point<dim> &p) const override;
108 
112  std::unique_ptr<Manifold<dim,dim>>
113  clone() const override;
114 
118  double topography_for_point(const Point<dim> &x_y_z) const;
119 
120  private:
124  const std::shared_ptr<const InitialTopographyModel::Interface<dim>> topo;
125 
129  double point1_lon;
130 
134  double inner_radius;
135 
140  double max_depth;
141 
147  virtual
148  Point<dim>
149  pull_back_topo(const Point<dim> &space_point) const;
150 
156  virtual
157  Point<dim>
158  push_forward_topo(const Point<dim> &chart_point) const;
159  };
160  }
161 
179  template <int dim>
180  class Chunk : public Interface<dim>, public SimulatorAccess<dim>
181  {
182  public:
183 
192  void initialize () override;
193 
197  void create_coarse_mesh (parallel::distributed::Triangulation<dim> &coarse_grid) const override;
198 
199 
210  std::set<types::boundary_id>
211  get_used_boundary_indicators () const override;
212 
225  std::map<std::string,types::boundary_id>
226  get_symbolic_boundary_names_map () const override;
227 
228 
239  double length_scale () const override;
240 
254  double depth(const Point<dim> &position) const override;
255 
260  double height_above_reference_surface(const Point<dim> &position) const override;
261 
265  Point<dim> representative_point(const double depth) const override;
266 
271  virtual
272  double west_longitude() const;
273 
278  virtual
279  double east_longitude() const;
280 
284  virtual
285  double longitude_range() const;
286 
291  virtual
292  double south_latitude() const;
293 
298  virtual
299  double north_latitude() const;
300 
304  virtual
305  double latitude_range() const;
306 
311  double maximal_depth() const override;
312 
316  virtual
317  double inner_radius() const;
318 
322  virtual
323  double outer_radius() const;
324 
325 
331  bool
332  has_curved_elements() const override;
333 
339  bool
340  point_is_in_domain(const Point<dim> &point) const override;
341 
346  aspect::Utilities::Coordinates::CoordinateSystem natural_coordinate_system() const override;
347 
353  std::array<double,dim> cartesian_to_natural_coordinates(const Point<dim> &position) const override;
354 
360  Point<dim> natural_to_cartesian_coordinates(const std::array<double,dim> &position) const override;
361 
365  static
366  void
368 
372  void
373  parse_parameters (ParameterHandler &prm) override;
374 
375  private:
383 
390 
397  std::array<unsigned int, dim> repetitions;
398 
410  std::unique_ptr<const internal::ChunkGeometry<dim>> manifold;
411 
415  static constexpr types::manifold_id my_manifold_id = 15;
416  };
417  }
418 }
419 
420 
421 #endif
DerivativeForm< 1, dim, dim > push_forward_gradient(const Point< dim > &chart_point) const override
std::array< unsigned int, dim > repetitions
Definition: chunk.h:397
virtual Point< dim > pull_back_topo(const Point< dim > &space_point) const
const std::shared_ptr< const InitialTopographyModel::Interface< dim > > topo
Definition: chunk.h:124
std::unique_ptr< const internal::ChunkGeometry< dim > > manifold
Definition: chunk.h:410
double topography_for_point(const Point< dim > &x_y_z) const
void declare_parameters(ParameterHandler &prm)
ChunkGeometry(const std::shared_ptr< const InitialTopographyModel::Interface< dim >> &topography, const double min_longitude, const double min_radius, const double max_depth)
Point< dim > pull_back_sphere(const Point< dim > &space_point) const
Point< dim > pull_back(const Point< dim > &space_point) const override
virtual Point< dim > push_forward_topo(const Point< dim > &chart_point) const
virtual Tensor< 1, dim > normal_vector(const typename Triangulation< dim >::face_iterator &face, const Point< dim > &p) const override
Point< dim > push_forward_sphere(const Point< dim > &chart_point) const
std::unique_ptr< Manifold< dim, dim > > clone() const override
Point< dim > push_forward(const Point< dim > &chart_point) const override
*  *  const Number outer_radius