/usr/include/deal.II/fe/mapping_c1.h is in libdeal.ii-dev 8.4.2-2+b1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | // ---------------------------------------------------------------------
//
// Copyright (C) 2001 - 2016 by the deal.II authors
//
// This file is part of the deal.II library.
//
// The deal.II library is free software; you can use it, redistribute
// it, and/or modify it under the terms of the GNU Lesser General
// Public License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
// The full text of the license can be found in the file LICENSE at
// the top level of the deal.II distribution.
//
// ---------------------------------------------------------------------
#ifndef dealii__mapping_c1_h
#define dealii__mapping_c1_h
#include <deal.II/base/config.h>
#include <deal.II/fe/mapping_q.h>
DEAL_II_NAMESPACE_OPEN
/*!@addtogroup mapping */
/*@{*/
/**
* Mapping class that uses C1 (continuously differentiable) cubic mappings of
* the boundary. This class is built atop of MappingQ by simply determining
* the interpolation points for a cubic mapping of the boundary differently:
* MappingQ chooses them such that they interpolate the boundary, while this
* class chooses them such that the discretized boundary is globally
* continuously differentiable.
*
* To use this class, make sure that the Boundary::get_normals_at_vertices()
* function is implemented for the user's boundary object.
*
* @author Wolfgang Bangerth, 2001, 2015
*/
template<int dim, int spacedim=dim>
class MappingC1 : public MappingQ<dim,spacedim>
{
public:
/**
* Constructor. Pass the fixed degree @p 3 down to the base class, as a
* cubic mapping suffices to generate a continuous mapping of the boundary.
*/
MappingC1 ();
/**
* Return a pointer to a copy of the present object. The caller of this copy
* then assumes ownership of it.
*/
virtual
Mapping<dim,spacedim> *clone () const;
protected:
/**
* A class derived from MappingQGeneric that provides the generic mapping
* with support points on boundary objects so that the corresponding Q3
* mapping ends up being C1.
*/
class MappingC1Generic : public MappingQGeneric<dim,spacedim>
{
public:
/**
* Constructor.
*/
MappingC1Generic ();
/**
* For <tt>dim=2,3</tt>. Append the support points of all shape functions
* located on bounding lines to the vector @p a. Points located on the
* line but on vertices are not included.
*
* Needed by the <tt>compute_support_points_simple(laplace)</tt>
* functions. For <tt>dim=1</tt> this function is empty.
*
* This function chooses the respective points not such that they are
* interpolating the boundary (as does the base class), but rather such
* that the resulting cubic mapping is a continuous one.
*/
virtual void
add_line_support_points (const typename Triangulation<dim>::cell_iterator &cell,
std::vector<Point<dim> > &a) const;
/**
* For <tt>dim=3</tt>. Append the support points of all shape functions
* located on bounding faces (quads in 3d) to the vector @p a. Points
* located on the line but on vertices are not included.
*
* Needed by the @p compute_support_points_laplace function. For
* <tt>dim=1</tt> and 2 this function is empty.
*
* This function chooses the respective points not such that they are
* interpolating the boundary (as does the base class), but rather such
* that the resulting cubic mapping is a continuous one.
*/
virtual void
add_quad_support_points(const typename Triangulation<dim>::cell_iterator &cell,
std::vector<Point<dim> > &a) const;
};
};
/*@}*/
/* -------------- declaration of explicit specializations ------------- */
#ifndef DOXYGEN
template <> void MappingC1<1>::MappingC1Generic::add_line_support_points (
const Triangulation<1>::cell_iterator &,
std::vector<Point<1> > &) const;
template <> void MappingC1<2>::MappingC1Generic::add_line_support_points (
const Triangulation<2>::cell_iterator &cell,
std::vector<Point<2> > &a) const;
template <> void MappingC1<1>::MappingC1Generic::add_quad_support_points (
const Triangulation<1>::cell_iterator &,
std::vector<Point<1> > &) const;
template <> void MappingC1<2>::MappingC1Generic::add_quad_support_points (
const Triangulation<2>::cell_iterator &,
std::vector<Point<2> > &) const;
#endif // DOXYGEN
DEAL_II_NAMESPACE_CLOSE
#endif
|