12#ifndef DUMUX_DISCRETIZATION_FE_INTEGRATION_POINT_DATA_HH
13#define DUMUX_DISCRETIZATION_FE_INTEGRATION_POINT_DATA_HH
19template<
class GlobalPosition,
class LocalBasis>
22 using LocalPosition =
typename LocalBasis::Traits::DomainType;
23 using RangeType =
typename LocalBasis::Traits::RangeType;
24 using JacobianType =
typename LocalBasis::Traits::JacobianType;
26 using ShapeValues = std::vector<RangeType>;
27 using ShapeJacobians = std::vector<JacobianType>;
28 using Gradients = std::vector<GlobalPosition>;
35 template<
class Geometry>
37 const LocalPosition&
local,
38 const GlobalPosition&
global,
39 const LocalBasis& localBasis)
43 auto numLocalDofs = localBasis.size();
46 shapeValues_.resize(numLocalDofs);
47 localBasis.evaluateFunction(
local, shapeValues_);
50 thread_local ShapeJacobians shapeJacobians;
51 localBasis.evaluateJacobian(
local, shapeJacobians);
54 const auto jacInvT = geometry.jacobianInverseTransposed(
local);
55 gradients_.resize(numLocalDofs, GlobalPosition(0.0));
56 for (
unsigned int i = 0; i < numLocalDofs; ++i)
57 jacInvT.umv(shapeJacobians[i][0], gradients_[i]);
61 template<
class Geometry>
63 const LocalPosition&
local,
64 const LocalBasis& localBasis)
70 {
return shapeValues_; }
74 {
return shapeValues_[i]; }
77 const GlobalPosition&
gradN(
int i)
const
78 {
return gradients_[i]; }
81 const LocalPosition&
local()
const
90 GlobalPosition global_;
92 ShapeValues shapeValues_;
100template<
class BaseClass,
class BoundaryFlag,
class LocalIndex>
104 using GlobalPosition = std::remove_cvref_t<decltype(std::declval<BaseClass>().global())>;
105 using LocalPosition = std::remove_cvref_t<decltype(std::declval<BaseClass>().local())>;
107 template<
class... Args>
109 : BaseClass(std::forward<Args>(args)...), normal_(std::move(n)), boundaryFlag_(std::move(bFlag)), index_(index) {}
111 template<
class... Args>
113 : BaseClass(std::forward<Args>(args)...), normal_(n), boundaryFlag_(bFlag), index_(index) {}
121 {
return boundaryFlag_.get(); }
137template<
class BaseClass,
class LocalIndex>
141 using GlobalPosition = std::remove_cvref_t<decltype(std::declval<BaseClass>().global())>;
142 using LocalPosition = std::remove_cvref_t<decltype(std::declval<BaseClass>().local())>;
144 template<
class... Args>
146 : BaseClass(std::forward<Args>(args)...), normal_(std::move(n)), boundaryFaceIndex_(index) {}
148 template<
class... Args>
150 : BaseClass(std::forward<Args>(args)...), normal_(n), boundaryFaceIndex_(index) {}
158 {
return boundaryFaceIndex_; }
162 LocalIndex boundaryFaceIndex_;
Boundary flag to store e.g. in sub control volume faces.
Definition boundaryflag.hh:63
std::size_t value_type
Definition boundaryflag.hh:28
FEBoundaryFaceInterpolationPointData(GlobalPosition &&n, LocalIndex index, Args &&... args)
Definition fem/interpolationpointdata.hh:145
LocalIndex boundaryFaceIndex() const
The sequential local index of the boundary face (0...numBoundaryFaces-1).
Definition fem/interpolationpointdata.hh:157
std::remove_cvref_t< decltype(std::declval< BaseClass >().local())> LocalPosition
Definition fem/interpolationpointdata.hh:142
const GlobalPosition & unitOuterNormal() const
The unit outer normal vector at the interpolation point.
Definition fem/interpolationpointdata.hh:153
std::remove_cvref_t< decltype(std::declval< BaseClass >().global())> GlobalPosition
Definition fem/interpolationpointdata.hh:141
FEBoundaryFaceInterpolationPointData(const GlobalPosition &n, LocalIndex index, Args &&... args)
Definition fem/interpolationpointdata.hh:149
FEFaceInterpolationPointData(GlobalPosition &&n, BoundaryFlag &&bFlag, LocalIndex index, Args &&... args)
Definition fem/interpolationpointdata.hh:108
std::remove_cvref_t< decltype(std::declval< BaseClass >().local())> LocalPosition
Definition fem/interpolationpointdata.hh:105
FEFaceInterpolationPointData(const GlobalPosition &n, const BoundaryFlag &bFlag, LocalIndex index, Args &&... args)
Definition fem/interpolationpointdata.hh:112
std::remove_cvref_t< decltype(std::declval< BaseClass >().global())> GlobalPosition
Definition fem/interpolationpointdata.hh:104
const GlobalPosition & unitOuterNormal() const
The unit outer normal vector at the quadrature point.
Definition fem/interpolationpointdata.hh:116
BoundaryFlag::value_type boundaryFlag() const
Return the boundary flag.
Definition fem/interpolationpointdata.hh:120
LocalIndex intersectionIndex() const
The local index of an intersection (default is intersection.indexInInside()).
Definition fem/interpolationpointdata.hh:124
const ShapeValues & shapeValues() const
The shape values at the quadrature point.
Definition fem/interpolationpointdata.hh:69
const LocalPosition & local() const
The local position of the quadrature point.
Definition fem/interpolationpointdata.hh:81
const GlobalPosition & global() const
The global position of the quadrature point.
Definition fem/interpolationpointdata.hh:85
FEInterpolationPointData()=delete
const RangeType & shapeValue(int i) const
The shape value of a local dof at the quadrature point.
Definition fem/interpolationpointdata.hh:73
FEInterpolationPointData(const Geometry &geometry, const LocalPosition &local, const GlobalPosition &global, const LocalBasis &localBasis)
Definition fem/interpolationpointdata.hh:36
FEInterpolationPointData(const Geometry &geometry, const LocalPosition &local, const LocalBasis &localBasis)
Definition fem/interpolationpointdata.hh:62
const GlobalPosition & gradN(int i) const
The shape value gradient of a local dof at the quadrature point.
Definition fem/interpolationpointdata.hh:77