dune-localfunctions
2.11
Toggle main menu visibility
Loading...
Searching...
No Matches
dune
localfunctions
raviartthomas
raviartthomas02d
raviartthomas02dlocalinterpolation.hh
Go to the documentation of this file.
1
// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2
// vi: set et ts=4 sw=2 sts=2:
3
// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
4
// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
5
#ifndef DUNE_RT02DLOCALINTERPOLATION_HH
6
#define DUNE_RT02DLOCALINTERPOLATION_HH
7
8
#include <cmath>
9
#include <array>
10
#include <bitset>
11
#include <vector>
12
13
namespace
Dune
14
{
18
template
<
class
LB>
19
class
RT02DLocalInterpolation
20
{
21
public
:
22
24
RT02DLocalInterpolation
(std::bitset<3> s = 0)
25
{
26
using
std::sqrt;
27
for
(std::size_t i=0; i<sign_.size(); i++)
28
sign_[i] = (s[i]) ? -1.0 : 1.0;
29
30
m_[0] = {0.5, 0.0};
31
m_[1] = {0.0, 0.5};
32
m_[2] = {0.5, 0.5};
33
n_[0] = {0.0, -1.0};
34
n_[1] = {-1.0, 0.0};
35
n_[2] = {1.0/sqrt(2.0), 1.0/sqrt(2.0)};
36
c_[0] = ( 0.5*n_[0][0] - 1.0*n_[0][1]);
37
c_[1] = (-1.0*n_[1][0] + 0.5*n_[1][1]);
38
c_[2] = ( 0.5*n_[2][0] + 0.5*n_[2][1]);
39
}
40
41
template
<
typename
F,
typename
C>
42
void
interpolate
(
const
F& f, std::vector<C>& out)
const
43
{
44
// f gives v*outer normal at a point on the edge!
45
46
out.resize(3);
47
48
for
(
int
i=0; i<3; i++)
49
{
50
auto
y = f(m_[i]);
51
out[i] = (y[0]*n_[i][0]+y[1]*n_[i][1])*sign_[i]/c_[i];
52
}
53
}
54
55
private
:
56
// Edge orientations
57
std::array<typename LB::Traits::RangeFieldType,3> sign_;
58
// Edge midpoints of the reference triangle
59
std::array<typename LB::Traits::DomainType,3> m_;
60
// Unit outer normals of the reference triangle
61
std::array<typename LB::Traits::DomainType,3> n_;
62
// Inverse triangle edge length
63
std::array<typename LB::Traits::RangeFieldType,3> c_;
64
};
65
}
66
67
#endif
Dune
Definition
bdfmcube.hh:18
Dune::RT02DLocalInterpolation::interpolate
void interpolate(const F &f, std::vector< C > &out) const
Definition
raviartthomas02dlocalinterpolation.hh:42
Dune::RT02DLocalInterpolation::RT02DLocalInterpolation
RT02DLocalInterpolation(std::bitset< 3 > s=0)
Constructor with given set of edge orientations.
Definition
raviartthomas02dlocalinterpolation.hh:24
Generated by
1.17.0