topoDistanceData.H 6.32 KB
Newer Older
1 2 3 4
/*---------------------------------------------------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     |
OpenFOAM bot's avatar
OpenFOAM bot committed
5
    \\  /    A nd           |
6
     \\/     M anipulation  |
OpenFOAM bot's avatar
OpenFOAM bot committed
7 8
-------------------------------------------------------------------------------
                            | Copyright (C) 2011-2016 OpenFOAM Foundation
9 10 11 12
-------------------------------------------------------------------------------
License
    This file is part of OpenFOAM.

Andrew Heather's avatar
Andrew Heather committed
13 14 15 16
    OpenFOAM 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 3 of the License, or
    (at your option) any later version.
17 18 19 20 21 22 23

    OpenFOAM 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
Andrew Heather's avatar
Andrew Heather committed
24
    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51

Class
    Foam::topoDistanceData

Description
    For use with FaceCellWave. Determines topological distance to starting faces

SourceFiles
    topoDistanceDataI.H
    topoDistanceData.C

\*---------------------------------------------------------------------------*/

#ifndef topoDistanceData_H
#define topoDistanceData_H

#include "point.H"
#include "tensor.H"

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

namespace Foam
{

class polyPatch;
class polyMesh;

52 53 54 55 56 57 58 59 60

// Forward declaration of friend functions and operators

class topoDistanceData;

Istream& operator>>(Istream&, topoDistanceData&);
Ostream& operator<<(Ostream&, const topoDistanceData&);


61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
/*---------------------------------------------------------------------------*\
                           Class topoDistanceData Declaration
\*---------------------------------------------------------------------------*/

class topoDistanceData
{
    // Private data

        //- Starting data
        label data_;

        //- Distance
        label distance_;


public:

    // Constructors

        //- Construct null
        inline topoDistanceData();

        //- Construct from count
        inline topoDistanceData
        (
            const label data,
            const label distance
        );


    // Member Functions

        // Access


            inline label data() const
            {
                return data_;
            }
            inline label distance() const
            {
                return distance_;
            }


        // Needed by FaceCellWave

            //- Check whether origin has been changed at all or
            //  still contains original (invalid) value.
110 111
            template<class TrackingData>
            inline bool valid(TrackingData& td) const;
112 113

            //- Check for identical geometrical data. Used for cyclics checking.
114
            template<class TrackingData>
115 116 117 118
            inline bool sameGeometry
            (
                const polyMesh&,
                const topoDistanceData&,
119 120
                const scalar,
                TrackingData& td
121 122 123 124
            ) const;

            //- Convert any absolute coordinates into relative to (patch)face
            //  centre
125
            template<class TrackingData>
126 127 128 129
            inline void leaveDomain
            (
                const polyMesh&,
                const polyPatch&,
130
                const label patchFacei,
131 132
                const point& faceCentre,
                TrackingData& td
133 134 135
            );

            //- Reverse of leaveDomain
136
            template<class TrackingData>
137 138 139 140
            inline void enterDomain
            (
                const polyMesh&,
                const polyPatch&,
141
                const label patchFacei,
142 143
                const point& faceCentre,
                TrackingData& td
144 145 146
            );

            //- Apply rotation matrix to any coordinates
147
            template<class TrackingData>
148 149 150
            inline void transform
            (
                const polyMesh&,
151 152
                const tensor&,
                TrackingData& td
153 154 155
            );

            //- Influence of neighbouring face.
156
            template<class TrackingData>
157 158 159
            inline bool updateCell
            (
                const polyMesh&,
160 161
                const label thisCelli,
                const label neighbourFacei,
162
                const topoDistanceData& neighbourInfo,
163 164
                const scalar tol,
                TrackingData& td
165 166 167
            );

            //- Influence of neighbouring cell.
168
            template<class TrackingData>
169 170 171
            inline bool updateFace
            (
                const polyMesh&,
172 173
                const label thisFacei,
                const label neighbourCelli,
174
                const topoDistanceData& neighbourInfo,
175 176
                const scalar tol,
                TrackingData& td
177 178 179
            );

            //- Influence of different value on same face.
180
            template<class TrackingData>
181 182 183
            inline bool updateFace
            (
                const polyMesh&,
184
                const label thisFacei,
185
                const topoDistanceData& neighbourInfo,
186 187
                const scalar tol,
                TrackingData& td
188 189
            );

190 191 192 193
            //- Same (like operator==)
            template<class TrackingData>
            inline bool equal(const topoDistanceData&, TrackingData& td) const;

194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
    // Member Operators

        // Needed for List IO
        inline bool operator==(const topoDistanceData&) const;

        inline bool operator!=(const topoDistanceData&) const;


    // IOstream Operators

        friend Ostream& operator<<(Ostream&, const topoDistanceData&);
        friend Istream& operator>>(Istream&, topoDistanceData&);
};


209 210 211 212 213 214 215 216
//- Data associated with topoDistanceData type are contiguous
template<>
inline bool contiguous<topoDistanceData>()
{
    return true;
}


217 218 219 220 221 222 223 224 225 226 227 228 229
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

} // End namespace Foam

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

#include "topoDistanceDataI.H"

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

#endif

// ************************************************************************* //