ASPECT
spherical_shell.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2011 - 2019 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_geometry_model_spherical_shell_h
23 #define _aspect_geometry_model_spherical_shell_h
24 
27 
29 
30 namespace aspect
31 {
32  namespace GeometryModel
33  {
34  using namespace dealii;
35 
46  template <int dim>
47  class SphericalShell : public Interface<dim>, public SimulatorAccess<dim>
48  {
49  public:
54 
58  void create_coarse_mesh (parallel::distributed::Triangulation<dim> &coarse_grid) const override;
59 
67  double length_scale () const override;
68 
82  double depth(const Point<dim> &position) const override;
83 
88  double height_above_reference_surface(const Point<dim> &position) const override;
89 
93  Point<dim> representative_point(const double depth) const override;
94 
98  double maximal_depth() const override;
99 
121  std::set<types::boundary_id>
122  get_used_boundary_indicators () const override;
123 
129  std::map<std::string,types::boundary_id>
130  get_symbolic_boundary_names_map () const override;
131 
136  std::set< std::pair< std::pair<types::boundary_id, types::boundary_id>, unsigned int> >
137  get_periodic_boundary_pairs () const override;
138 
144  bool
145  has_curved_elements() const override;
146 
152  bool
153  point_is_in_domain(const Point<dim> &point) const override;
154 
159  aspect::Utilities::Coordinates::CoordinateSystem natural_coordinate_system() const override;
160 
166  std::array<double,dim> cartesian_to_natural_coordinates(const Point<dim> &position) const override;
167 
173  Point<dim> natural_to_cartesian_coordinates(const std::array<double,dim> &position) const override;
174 
175 
182  static
183  void
185 
192  void
193  parse_parameters (ParameterHandler &prm) override;
194 
198  double
199  inner_radius () const;
200 
204  double
205  outer_radius () const;
206 
210  double
211  opening_angle () const;
212 
217  void
219  AffineConstraints<double> &constraints) const override;
220 
221  private:
227  {
230  slices
231  } custom_mesh;
232 
237 
241  unsigned int n_slices;
242 
246  std::vector<double> R_values_list;
247 
251  double R0, R1;
252 
256  double phi;
257 
262 
267 
272  void set_manifold_ids (parallel::distributed::Triangulation<dim> &triangulation) const;
273 
277  bool periodic;
278  };
279  }
280 }
281 
282 
283 #endif
void make_periodicity_constraints(const FaceIterator &face_1, const typename identity< FaceIterator >::type &face_2, AffineConstraints< number > &constraints, const ComponentMask &component_mask=ComponentMask(), const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false, const FullMatrix< double > &matrix=FullMatrix< double >(), const std::vector< unsigned int > &first_vector_components=std::vector< unsigned int >(), const number periodicity_factor=1.)
float depth
void declare_parameters(ParameterHandler &prm)
Point< spacedim > point(const gp_Pnt &p, const double tolerance=1e-10)
const SphericalManifold< dim > spherical_manifold