version 3.11-dev
cvfe/interpolationpointdata.hh
Go to the documentation of this file.
1// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// vi: set et ts=4 sw=4 sts=4:
3//
4// SPDX-FileCopyrightInfo: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5// SPDX-License-Identifier: GPL-3.0-or-later
6//
12#ifndef DUMUX_CVFE_IP_DATA_HH
13#define DUMUX_CVFE_IP_DATA_HH
14
15#include <type_traits>
16
17namespace Dumux::CVFE {
18
23template<class LocalPos, class GlobalPos>
25{
26public:
27 using LocalPosition = LocalPos;
28 using GlobalPosition = GlobalPos;
29
31 : local_(std::move(localPos)), global_(std::move(pos)) {}
33 : local_(localPos), global_(pos) {}
34
36 const GlobalPosition& global() const
37 { return global_; }
38
40 const LocalPosition& local() const
41 { return local_; }
42
43private:
44 LocalPosition local_;
45 GlobalPosition global_;
46};
47
52template<class LocalPosition, class GlobalPosition, class LocalIndex>
53class LocalDofInterpolationPointData : public InterpolationPointData<LocalPosition, GlobalPosition>
54{
56public:
57 LocalDofInterpolationPointData(LocalPosition&& localPos, GlobalPosition&& pos, LocalIndex index)
58 : ParentType(localPos, pos), localDofIndex_(index) {}
59 LocalDofInterpolationPointData(const LocalPosition& localPos, const GlobalPosition& pos, LocalIndex index)
60 : ParentType(localPos, pos), localDofIndex_(index) {}
61
63 LocalIndex localDofIndex() const
64 { return localDofIndex_; }
65
66private:
67 LocalIndex localDofIndex_;
68};
69
74template<class LocalMapping, class GlobalPos>
76{
77public:
78 using LocalPosition = std::invoke_result_t<LocalMapping, const GlobalPos&>;
79 using GlobalPosition = GlobalPos;
80
81 InterpolationPointDataLocalMapping(LocalMapping&& mapping, GlobalPosition&& pos) : localMapping_(std::move(mapping)), global_(std::move(pos)) {}
82 InterpolationPointDataLocalMapping(LocalMapping&& mapping, const GlobalPosition& pos) : localMapping_(std::move(mapping)), global_(pos) {}
83
85 const GlobalPosition& global() const
86 { return global_; }
87
89 const LocalPosition local() const
90 { return localMapping_(global_); }
91
92private:
93 LocalMapping localMapping_;
94 GlobalPosition global_;
95};
96
101template<class BaseClass, class LocalIndex>
102class FaceInterpolationPointData : public BaseClass
103{
104public:
105 using GlobalPosition = std::remove_cvref_t<decltype(std::declval<BaseClass>().global())>;
106 using LocalPosition = std::remove_cvref_t<decltype(std::declval<BaseClass>().local())>;
107
108 template<class... Args>
109 FaceInterpolationPointData(GlobalPosition&& n, LocalIndex index, Args&&... args)
110 : BaseClass(std::forward<Args>(args)...), normal_(std::move(n)), scvfIndex_(index) {}
111
112 template<class... Args>
113 FaceInterpolationPointData(const GlobalPosition& n, LocalIndex index, Args&&... args)
114 : BaseClass(std::forward<Args>(args)...), normal_(n), scvfIndex_(index) {}
115
118 { return normal_; }
119
121 LocalIndex scvfIndex() const
122 { return scvfIndex_; }
123
124private:
125 GlobalPosition normal_;
126 LocalIndex scvfIndex_;
127};
128
133template<class IpData>
135{
136public:
137 template<class... Args>
138 IndexedQuadratureInterpolationPointData(std::size_t qpIdx, Args&&... args)
139 : IpData(std::forward<Args>(args)...), qpIndex_(qpIdx) {}
140
142 std::size_t qpIndex() const
143 { return qpIndex_; }
144
145private:
146 std::size_t qpIndex_;
147};
148
149} // end namespace Dumux::CVFE
150
151#endif
An interpolation point related to a face of an element.
Definition: cvfe/interpolationpointdata.hh:103
LocalIndex scvfIndex() const
The local index of an scvf.
Definition: cvfe/interpolationpointdata.hh:121
FaceInterpolationPointData(const GlobalPosition &n, LocalIndex index, Args &&... args)
Definition: cvfe/interpolationpointdata.hh:113
FaceInterpolationPointData(GlobalPosition &&n, LocalIndex index, Args &&... args)
Definition: cvfe/interpolationpointdata.hh:109
const GlobalPosition & unitOuterNormal() const
The unit outer normal vector at the quadrature point.
Definition: cvfe/interpolationpointdata.hh:117
std::remove_cvref_t< decltype(std::declval< BaseClass >().local())> LocalPosition
Definition: cvfe/interpolationpointdata.hh:106
std::remove_cvref_t< decltype(std::declval< BaseClass >().global())> GlobalPosition
Definition: cvfe/interpolationpointdata.hh:105
Wraps interpolation point data and adds a quadrature point index for use in quadrature loops.
Definition: cvfe/interpolationpointdata.hh:135
std::size_t qpIndex() const
The quadrature point index.
Definition: cvfe/interpolationpointdata.hh:142
IndexedQuadratureInterpolationPointData(std::size_t qpIdx, Args &&... args)
Definition: cvfe/interpolationpointdata.hh:138
An interpolation point related to an element that includes global and local positions.
Definition: cvfe/interpolationpointdata.hh:25
const LocalPosition & local() const
The local position of the quadrature point.
Definition: cvfe/interpolationpointdata.hh:40
GlobalPos GlobalPosition
Definition: cvfe/interpolationpointdata.hh:28
const GlobalPosition & global() const
The global position of the quadrature point.
Definition: cvfe/interpolationpointdata.hh:36
InterpolationPointData(LocalPosition &&localPos, GlobalPosition &&pos)
Definition: cvfe/interpolationpointdata.hh:30
LocalPos LocalPosition
Definition: cvfe/interpolationpointdata.hh:27
InterpolationPointData(const LocalPosition &localPos, const GlobalPosition &pos)
Definition: cvfe/interpolationpointdata.hh:32
An interpolation point related to a global position of an element, giving its local positions by a ma...
Definition: cvfe/interpolationpointdata.hh:76
InterpolationPointDataLocalMapping(LocalMapping &&mapping, GlobalPosition &&pos)
Definition: cvfe/interpolationpointdata.hh:81
const LocalPosition local() const
The local position of the quadrature point.
Definition: cvfe/interpolationpointdata.hh:89
InterpolationPointDataLocalMapping(LocalMapping &&mapping, const GlobalPosition &pos)
Definition: cvfe/interpolationpointdata.hh:82
std::invoke_result_t< LocalMapping, const GlobalPos & > LocalPosition
Definition: cvfe/interpolationpointdata.hh:78
const GlobalPosition & global() const
The global position of the quadrature point.
Definition: cvfe/interpolationpointdata.hh:85
GlobalPos GlobalPosition
Definition: cvfe/interpolationpointdata.hh:79
An interpolation point related to a localDof of an element, giving its global and local positions.
Definition: cvfe/interpolationpointdata.hh:54
LocalDofInterpolationPointData(const LocalPosition &localPos, const GlobalPosition &pos, LocalIndex index)
Definition: cvfe/interpolationpointdata.hh:59
LocalDofInterpolationPointData(LocalPosition &&localPos, GlobalPosition &&pos, LocalIndex index)
Definition: cvfe/interpolationpointdata.hh:57
LocalIndex localDofIndex() const
The local index of the corresponding dof.
Definition: cvfe/interpolationpointdata.hh:63
Definition: cvfe/interpolationpointdata.hh:17