ryujin 2.1.1 revision ef0fcd4010d109b860652ece4a7b8963fb7d46b1
transfinite_interpolation.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception or LGPL-2.1-or-later
3// Copyright (C) 2007 - 2022 by Martin Kronbichler
4// Copyright (C) 2008 - 2022 by David Wells
5// Copyright (C) 2020 - 2023 by the ryujin authors
6//
7
8#pragma once
9
10#include <compile_time_options.h>
11
12#include <deal.II/base/config.h>
13#include <deal.II/grid/manifold.h>
14#include <deal.II/grid/tria.h>
15
16namespace ryujin
17{
18 using namespace dealii; // FIXME: namespace pollution
19
28 template <int dim, int spacedim = dim>
29 class TransfiniteInterpolationManifold : public Manifold<dim, spacedim>
30 {
31 public:
33
35
36 std::unique_ptr<Manifold<dim, spacedim>> clone() const override;
37
38 void initialize(
39 const Triangulation<dim, spacedim> &triangulation,
40 const Manifold<dim, spacedim> &chart_manifold = FlatManifold<dim>());
41
42 Point<spacedim>
43 get_new_point(const ArrayView<const Point<spacedim>> &surrounding_points,
44 const ArrayView<const double> &weights) const override;
45
46 void
47 get_new_points(const ArrayView<const Point<spacedim>> &surrounding_points,
48 const Table<2, double> &weights,
49 ArrayView<Point<spacedim>> new_points) const override;
50
51 private:
52 std::array<unsigned int, 20> get_possible_cells_around_points(
53 const ArrayView<const Point<spacedim>> &surrounding_points) const;
54
55 typename Triangulation<dim, spacedim>::cell_iterator compute_chart_points(
56 const ArrayView<const Point<spacedim>> &surrounding_points,
57 ArrayView<Point<dim>> chart_points) const;
58
59 Point<dim>
60 pull_back(const typename Triangulation<dim, spacedim>::cell_iterator &cell,
61 const Point<spacedim> &p,
62 const Point<dim> &initial_guess) const;
63
64 Point<spacedim> push_forward(
65 const typename Triangulation<dim, spacedim>::cell_iterator &cell,
66 const Point<dim> &chart_point) const;
67
68 DerivativeForm<1, dim, spacedim> push_forward_gradient(
69 const typename Triangulation<dim, spacedim>::cell_iterator &cell,
70 const Point<dim> &chart_point,
71 const Point<spacedim> &pushed_forward_chart_point) const;
72
73 Triangulation<dim, spacedim> triangulation;
74
75 int level_coarse;
76
77 std::vector<bool> coarse_cell_is_flat;
78
79 std::unique_ptr<Manifold<dim, spacedim>> chart_manifold;
80 };
81
82} // namespace ryujin
Point< spacedim > get_new_point(const ArrayView< const Point< spacedim > > &surrounding_points, const ArrayView< const double > &weights) const override
~TransfiniteInterpolationManifold() override=default
std::unique_ptr< Manifold< dim, spacedim > > clone() const override
void get_new_points(const ArrayView< const Point< spacedim > > &surrounding_points, const Table< 2, double > &weights, ArrayView< Point< spacedim > > new_points) const override
void initialize(const Triangulation< dim, spacedim > &triangulation, const Manifold< dim, spacedim > &chart_manifold=FlatManifold< dim >())