File: localderivativetraits.hh

package info (click to toggle)
dune-functions 2.10.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,544 kB
  • sloc: cpp: 14,241; python: 661; makefile: 3
file content (52 lines) | stat: -rw-r--r-- 1,451 bytes parent folder | download
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
// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
// vi: set et ts=4 sw=2 sts=2:

// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file AUTHORS.md
// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception OR LGPL-3.0-or-later

#ifndef DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH
#define DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH


#include <dune/functions/common/defaultderivativetraits.hh>


namespace Dune {
namespace Functions {


/**
 * \brief Derivative traits for local functions.
 *
 * \ingroup FunctionUtility
 *
 * This provides derivative traits to be used by local functions with
 * given `EntitySet` and global `DerivativeTraits`.
 *
 * The reason why this is needed is that local functions return
 * derivatives wrt to global coordinates although the arguments
 * for these derivatives are local coordinates.
 */
template<class EntitySet, template<class> class DerivativeTraits=DefaultDerivativeTraits>
struct LocalDerivativeTraits
{
  using LocalDomain = typename EntitySet::LocalCoordinate;
  using Domain = typename EntitySet::GlobalCoordinate;

  template<class Signature>
  struct Traits
  {
    typedef InvalidRange Range;
  };

  template<class R>
  struct Traits<R(LocalDomain)>
  {
    using Range = typename DerivativeTraits<R(Domain)>::Range;
  };
};


}} // namespace Dune::Functions

#endif // DUNE_FUNCTIONS_GRIDFUNCTIONS_LOCALDERIVATIVE_TRAITS_HH