deal.II version GIT relicensing-6834-g5b78e6bcdf 2026-10-01 11:20:01+00:00
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Loading...
Searching...
No Matches
function_signed_distance.h
Go to the documentation of this file.
1// -----------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception OR LGPL-2.1-or-later
4// Copyright (C) 2021 - 2026 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Detailed license information governing the source code and contributions
9// can be found in LICENSE.md and CONTRIBUTING.md at the top level directory.
10//
11// -----------------------------------------------------------------------------
12
13#ifndef dealii_function_signed_distance_h
14#define dealii_function_signed_distance_h
15
16#include <deal.II/base/config.h>
17
20
21#include <array>
22
24
25namespace Functions
26{
27 namespace SignedDistance
28 {
45 template <int dim>
46 class Sphere : public Function<dim>
47 {
48 public:
52 Sphere(const Point<dim> &center = Point<dim>(), const double radius = 1);
53
54 double
55 value(const Point<dim> &point,
56 const unsigned int component = 0) const override;
57
68 gradient(const Point<dim> &point,
69 const unsigned int component = 0) const override;
70
81 hessian(const Point<dim> &point,
82 const unsigned int component = 0) const override;
83
84 private:
86 const double radius;
87 };
88
89
101 template <int dim>
102 class Plane : public Function<dim>
103 {
104 public:
108 Plane(const Point<dim> &point, const Tensor<1, dim> &normal);
109
110 double
111 value(const Point<dim> &point,
112 const unsigned int component = 0) const override;
113
115 gradient(const Point<dim> &,
116 const unsigned int component = 0) const override;
117
119 hessian(const Point<dim> &,
120 const unsigned int component = 0) const override;
121
122 private:
125 };
126
127
141 template <int dim>
142 class Ellipsoid : public Function<dim>
143 {
144 public:
154 const std::array<double, dim> &radii,
155 const double tolerance = 1e-14,
156 const unsigned int max_iter = 10);
157
158 double
159 value(const Point<dim> &point,
160 const unsigned int component = 0) const override;
161
167 gradient(const Point<dim> &,
168 const unsigned int component = 0) const override;
169
170 private:
178 double
179 evaluate_ellipsoid(const Point<dim> &point) const;
180
185 compute_closest_point_ellipse(const Point<dim> &point) const;
186
201
205 double
207
209 const std::array<double, dim> radii;
210 const double tolerance;
211 const unsigned int max_iter;
212 };
213
214
228 template <int dim>
229 class Rectangle : public Function<dim>
230 {
231 public:
239 Rectangle(const Point<dim> &bottom_left, const Point<dim> &top_right);
246
253 double
254 value(const Point<dim> &p,
255 const unsigned int component = 0) const override;
256
257 private:
259 };
260
261
278 template <int dim>
279 class ZalesakDisk : public Function<dim>
280 {
281 public:
291 ZalesakDisk(const Point<dim> &center,
292 const double radius,
293 const double notch_width,
294 const double notch_height);
295
302 double
303 value(const Point<dim> &p,
304 const unsigned int component = 0) const override;
305
306 private:
311
316 };
317
318
350 template <int dim>
351 class InfiniteCylinder : public Function<dim>
352 {
353 public:
359 const double radius,
360 const Tensor<1, dim> &axis_direction =
361 [] {
363 a[dim - 1] = 1.0;
364 return a;
365 }(),
366 const Point<dim> &axis_point = Point<dim>());
367
368 double
369 value(const Point<dim> &point,
370 const unsigned int component = 0) const override;
371
378 gradient(const Point<dim> &point,
379 const unsigned int component = 0) const override;
380
381 private:
384 const double R;
385 };
386 } // namespace SignedDistance
387} // namespace Functions
388
390
391#endif
*  const Number radius
double value(const Point< dim > &point, const unsigned int component=0) const override
Tensor< 1, dim > gradient(const Point< dim > &, const unsigned int component=0) const override
double compute_signed_distance_ellipse(const Point< dim > &point) const
Point< dim > compute_closest_point_ellipse(const Point< dim > &point) const
double evaluate_ellipsoid(const Point< dim > &point) const
Tensor< 1, dim, double > compute_analyical_normal_vector_on_ellipse(const Point< dim > &point) const
Tensor< 1, dim > gradient(const Point< dim > &point, const unsigned int component=0) const override
double value(const Point< dim > &point, const unsigned int component=0) const override
double value(const Point< dim > &point, const unsigned int component=0) const override
SymmetricTensor< 2, dim > hessian(const Point< dim > &, const unsigned int component=0) const override
Tensor< 1, dim > gradient(const Point< dim > &, const unsigned int component=0) const override
double value(const Point< dim > &p, const unsigned int component=0) const override
SymmetricTensor< 2, dim > hessian(const Point< dim > &point, const unsigned int component=0) const override
double value(const Point< dim > &point, const unsigned int component=0) const override
Tensor< 1, dim > gradient(const Point< dim > &point, const unsigned int component=0) const override
const Functions::SignedDistance::Sphere< dim > sphere
double value(const Point< dim > &p, const unsigned int component=0) const override
const Functions::SignedDistance::Rectangle< dim > notch
Definition point.h:111
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39