/usr/include/deal.II/fe/fe_rannacher_turek.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 | // ---------------------------------------------------------------------
//
// Copyright (C) 2015 - 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__fe_rannacher_turek_h
#define dealii__fe_rannacher_turek_h
#include <deal.II/base/polynomials_rannacher_turek.h>
#include <deal.II/fe/fe_poly.h>
#include <deal.II/fe/fe_base.h>
#include <string>
#include <vector>
DEAL_II_NAMESPACE_OPEN
/**
* Implementation of Rannacher-Turek elements. Functions generated by this
* element will be discontinuous, but their jump along faces is mean value
* free.
*
* Implemented only in dimension 2, lowest order, without hanging nodes and
* restriction/prolongation.
*
* <h3>Interpolation</h3>
*
* <h4>Node values</h4> The
* @ref GlossNodes "node values"
* are moments on faces.
*
* <h4>Generalized support points</h4> To calculate the node values, we are
* using a QGauss rule on each face. By default, we are using a two point rule
* to integrate Rannacher-Turek functions exactly. But in order to be able to
* interpolate other functions with sufficient accuracy, the number of
* quadrature points used on a face can be adjusted in the constructor.
*
* @ingroup fe
* @author Patrick Esser
* @date 2015
*/
template <int dim>
class FE_RannacherTurek : public FE_Poly<PolynomialsRannacherTurek<dim>, dim>
{
public:
/**
* Constructor for Rannacher-Turek element of degree @p degree, using @p
* n_face_support_points quadrature points on each face for interpolation.
* Notice that the element of degree 0 contains polynomials of degree 2.
*
* Only implemented for degree 0 in 2D.
*/
FE_RannacherTurek(const unsigned int degree = 0,
const unsigned int n_face_support_points = 2);
virtual std::string get_name() const;
virtual FiniteElement<dim> *clone() const;
virtual void interpolate(
std::vector<double> &local_dofs,
const std::vector<double> &values) const;
virtual void interpolate(
std::vector<double> &local_dofs,
const std::vector<Vector<double> > &values,
unsigned int offset) const;
virtual void interpolate(
std::vector<double> &local_dofs,
const VectorSlice<const std::vector<std::vector<double> > > &values) const;
private:
/**
* Degree of this element.
*/
const unsigned int degree;
/**
* The number of quadrature points used on each face to evaluate node
* functionals during interpolation.
*/
const unsigned int n_face_support_points;
/**
* The weights used on the faces to evaluate node functionals.
*/
std::vector<double> weights;
/**
* Compute generalized support points and their weights.
*/
void initialize_support_points();
/**
* Return information about degrees of freedom per object as needed during
* construction.
*/
std::vector<unsigned int> get_dpo_vector();
};
DEAL_II_NAMESPACE_CLOSE
#endif
|