version 3.11-dev
discretization/porenetwork/subcontrolvolumeface.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-FileCopyrightText: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5// SPDX-License-Identifier: GPL-3.0-or-later
6//
12#ifndef DUMUX_DISCRETIZATION_PNM_SUBCONTROLVOLUMEFACE_HH
13#define DUMUX_DISCRETIZATION_PNM_SUBCONTROLVOLUMEFACE_HH
14
15#include <dune/geometry/axisalignedcubegeometry.hh>
17
18namespace Dumux::PoreNetwork {
19
25template<class GridView>
27{
28 using Grid = typename GridView::Grid;
29 static constexpr int dim = Grid::dimension;
30 static constexpr int dimWorld = Grid::dimensionworld;
31
34
35 using Scalar = typename Grid::ctype;
36 using GlobalPosition = Dune::FieldVector<Scalar, dimWorld>;
37 using CornerStorage = std::array<Dune::FieldVector<Scalar, dimWorld>, 1>;
38 using Geometry = Dune::AxisAlignedCubeGeometry<Scalar, dim-1, dimWorld>;
39
40};
41
48template<class GV,
51{
53 using GridIndexType = typename T::GridIndexType;
54 using LocalIndexType = typename T::LocalIndexType;
55 using Scalar = typename T::Scalar;
56
57public:
59 using GlobalPosition = typename T::GlobalPosition;
61 using Traits = T;
62
65
69 const Scalar& area,
70 GridIndexType scvfIndex,
71 std::array<LocalIndexType, 2>&& scvIndices)
72 : center_(center),
73 unitOuterNormal_(unitOuterNormal),
74 area_(area),
75 scvfIndex_(scvfIndex),
76 scvIndices_(std::move(scvIndices))
77 {}
78
80 const GlobalPosition& center() const
81 { return center_; }
82
84 const GlobalPosition& ipGlobal() const
85 { return center_; }
86
88 Scalar area() const
89 { return area_; }
90
92 bool boundary() const
93 { return false; }
94
97 { return unitOuterNormal_; }
98
100 LocalIndexType insideScvIdx() const
101 { return scvIndices_[0]; }
102
104 // This results in undefined behaviour if boundary is true
105 LocalIndexType outsideScvIdx() const
106 { return scvIndices_[1]; }
107
109 GridIndexType index() const
110 { return scvfIndex_; }
111
112private:
113 GlobalPosition center_;
114 GlobalPosition unitOuterNormal_;
115 Scalar area_;
116 GridIndexType scvfIndex_;
117 std::array<LocalIndexType, 2> scvIndices_;
118};
119
120} // end namespace Dumux::PoreNetwork
121
122#endif
Class for a sub control volume face for porenetworks.
Definition: discretization/porenetwork/subcontrolvolumeface.hh:51
LocalIndexType outsideScvIdx() const
Index of the outside sub control volume for spatial param evaluation.
Definition: discretization/porenetwork/subcontrolvolumeface.hh:105
const GlobalPosition & unitOuterNormal() const
The unit outer normal of the sub control volume face.
Definition: discretization/porenetwork/subcontrolvolumeface.hh:96
LocalIndexType insideScvIdx() const
Index of the inside sub control volume for spatial param evaluation.
Definition: discretization/porenetwork/subcontrolvolumeface.hh:100
Scalar area() const
The area of the sub control volume face.
Definition: discretization/porenetwork/subcontrolvolumeface.hh:88
const GlobalPosition & center() const
The center of the sub control volume face.
Definition: discretization/porenetwork/subcontrolvolumeface.hh:80
bool boundary() const
We assume to always have a pore body and not a pore throat at the boundary.
Definition: discretization/porenetwork/subcontrolvolumeface.hh:92
const GlobalPosition & ipGlobal() const
The integration point for flux evaluations in global coordinates.
Definition: discretization/porenetwork/subcontrolvolumeface.hh:84
GridIndexType index() const
The local index of this sub control volume face.
Definition: discretization/porenetwork/subcontrolvolumeface.hh:109
typename T::GlobalPosition GlobalPosition
export the type used for global coordinates
Definition: discretization/porenetwork/subcontrolvolumeface.hh:59
T Traits
state the traits public and thus export all types
Definition: discretization/porenetwork/subcontrolvolumeface.hh:61
PNMSubControlVolumeFace(const GlobalPosition &center, const GlobalPosition &unitOuterNormal, const Scalar &area, GridIndexType scvfIndex, std::array< LocalIndexType, 2 > &&scvIndices)
Constructor for inner scvfs.
Definition: discretization/porenetwork/subcontrolvolumeface.hh:67
PNMSubControlVolumeFace()=default
The default constructor.
Defines the index types used for grid and local indices.
Definition: discretization/porenetwork/fvelementgeometry.hh:24
typename GridView::IndexSet::IndexType GridIndex
Definition: indextraits.hh:27
unsigned int LocalIndex
Definition: indextraits.hh:28
Default traits class.
Definition: discretization/porenetwork/subcontrolvolumeface.hh:27
typename IndexTraits< GridView >::LocalIndex LocalIndexType
Definition: discretization/porenetwork/subcontrolvolumeface.hh:33
Dune::AxisAlignedCubeGeometry< Scalar, dim-1, dimWorld > Geometry
Definition: discretization/porenetwork/subcontrolvolumeface.hh:38
typename GridView::Grid Grid
Definition: discretization/porenetwork/subcontrolvolumeface.hh:28
std::array< Dune::FieldVector< Scalar, dimWorld >, 1 > CornerStorage
Definition: discretization/porenetwork/subcontrolvolumeface.hh:37
Dune::FieldVector< Scalar, dimWorld > GlobalPosition
Definition: discretization/porenetwork/subcontrolvolumeface.hh:36
static constexpr int dim
Definition: discretization/porenetwork/subcontrolvolumeface.hh:29
typename Grid::ctype Scalar
Definition: discretization/porenetwork/subcontrolvolumeface.hh:35
typename IndexTraits< GridView >::GridIndex GridIndexType
Definition: discretization/porenetwork/subcontrolvolumeface.hh:32
static constexpr int dimWorld
Definition: discretization/porenetwork/subcontrolvolumeface.hh:30