3.5-git
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
velocityreconstruction.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 * See the file COPYING for full copying permissions. *
5 * *
6 * This program is free software: you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation, either version 3 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
18 *****************************************************************************/
24#ifndef DUMUX_NAVIERSTOKES_STAGGERED_VELOCITYRECONSTRUCTION_HH
25#define DUMUX_NAVIERSTOKES_STAGGERED_VELOCITYRECONSTRUCTION_HH
26#include <algorithm>
28
29namespace Dumux {
30
36{
38 template<class VelocityHelper, class FVElementGeometry>
39 static auto cellCenterVelocity(const VelocityHelper& getFaceVelocity,
40 const FVElementGeometry& fvGeometry)
41 {
42 static_assert(FVElementGeometry::GridGeometry::discMethod == DiscretizationMethods::cctpfa);
43 using VelocityVector = typename FVElementGeometry::GridGeometry::GlobalCoordinate;
44 VelocityVector result(0.0);
45
46 const auto directionIndex = [&](const auto& vector)
47 {
48 return std::find_if(vector.begin(), vector.end(), [](const auto& x) { return std::abs(x) > 1e-8; } ) - vector.begin();
49 };
50
51 for (const auto& scvf : scvfs(fvGeometry))
52 {
53 const auto dirIdx = directionIndex(scvf.unitOuterNormal());
54 result[dirIdx] += 0.5*getFaceVelocity(fvGeometry, scvf)[dirIdx];
55 }
56
57 return result;
58 }
59};
60
61} // end namespace Dumux
62
63#endif // DUMUX_NAVIERSTOKES_STAGGERED_VELOCITYRECONSTRUCTION_HH
The available discretization methods in Dumux.
static unsigned int directionIndex(Vector &&vector)
Returns the dirction index of the facet (0 = x, 1 = y, 2 = z)
Definition: staggeredgeometryhelper.hh:133
Definition: adapt.hh:29
constexpr CCTpfa cctpfa
Definition: method.hh:137
Helper class for reconstructing the velocity.
Definition: velocityreconstruction.hh:36
static auto cellCenterVelocity(const VelocityHelper &getFaceVelocity, const FVElementGeometry &fvGeometry)
Return the velocity vector at the center of the primal grid.
Definition: velocityreconstruction.hh:39