localfacedata.hh 3.89 KB
Newer Older
Dennis Gläser's avatar
Dennis Gläser committed
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
// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
// vi: set et ts=4 sw=4 sts=4:
/*****************************************************************************
 *   See the file COPYING for full copying permissions.                      *
 *                                                                           *
 *   This program is free software: you can redistribute it and/or modify    *
 *   it under the terms of the GNU General Public License as published by    *
 *   the Free Software Foundation, either version 2 of the License, or       *
 *   (at your option) any later version.                                     *
 *                                                                           *
 *   This program is distributed in the hope that it will be useful,         *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            *
 *   GNU General Public License for more details.                            *
 *                                                                           *
 *   You should have received a copy of the GNU General Public License       *
 *   along with this program.  If not, see <http://www.gnu.org/licenses/>.   *
 *****************************************************************************/
 /*!
  * \file
  * \ingroup CCMpfaDiscretization
  * \brief Data structure holding interaction volume-local information for
  *        a grid subb-control volume face embedded in it.
  */
#ifndef DUMUX_DISCRETIZATION_CC_MPFA_LOCAL_FACE_DATA_HH
#define DUMUX_DISCRETIZATION_CC_MPFA_LOCAL_FACE_DATA_HH

28
29
#include <cassert>

Dennis Gläser's avatar
Dennis Gläser committed
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
namespace Dumux
{
/*!
 * \ingroup CCMpfaDiscretization
 * \brief General implementation of a data structure holding interaction
 *        volume-local information for a grid subb-control volume face embedded in it.
 *
 * \tparam GridIndexType The type used for indices on the grid
 * \tparam LocalIndexType The type used for indices inside interaction volumes
 */
template< class GridIndexType, class LocalIndexType >
class InteractionVolumeLocalFaceData
{
    LocalIndexType ivLocalScvfIndex_;          //!< the iv-local scvf index this scvf maps to
    LocalIndexType ivLocalInsideScvIndex_;     //!< the iv-local index of the scvfs' inside scv
    LocalIndexType scvfLocalOutsideScvfIndex_; //!< the index of this scvf in the scvf-local outside faces
    GridIndexType globalScvfIndex_;            //!< the index of the corresponding global scvf
    bool isOutside_;                           //!< indicates if this face maps to the iv-local index from "outside"

public:
    //! Constructor
    InteractionVolumeLocalFaceData(LocalIndexType faceIndex,
                                   LocalIndexType scvIndex,
                                   GridIndexType globalScvfIndex)
    : ivLocalScvfIndex_(faceIndex)
    , ivLocalInsideScvIndex_(scvIndex)
    , globalScvfIndex_(globalScvfIndex)
    , isOutside_(false)
    {}

    //! Constructor for "outside" faces
    InteractionVolumeLocalFaceData(LocalIndexType faceIndex,
                                   LocalIndexType scvIndex,
                                   LocalIndexType indexInScvfOutsideFaces,
                                   GridIndexType globalScvfIndex)
    : ivLocalScvfIndex_(faceIndex)
    , ivLocalInsideScvIndex_(scvIndex)
    , scvfLocalOutsideScvfIndex_(indexInScvfOutsideFaces)
    , globalScvfIndex_(globalScvfIndex)
    , isOutside_(true)
    {}

72
    // Functions to return stored data
Dennis Gläser's avatar
Dennis Gläser committed
73
74
75
76
77
78
79
80
81
82
    LocalIndexType ivLocalScvfIndex() const { return ivLocalScvfIndex_; }
    LocalIndexType ivLocalInsideScvIndex() const { return ivLocalInsideScvIndex_; }
    LocalIndexType scvfLocalOutsideScvfIndex() const { assert(isOutside_); return scvfLocalOutsideScvfIndex_; }
    GridIndexType globalScvfIndex() const { return globalScvfIndex_; }
    bool isOutside() const { return isOutside_; }
};

} // end namespace

#endif