This file is indexed.

/usr/include/freefoam/meshTools/cellClassification.H is in libfreefoam-dev 0.1.0+dfsg-1build1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
 28
 29
 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
 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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
/*---------------------------------------------------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     |
    \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
     \\/     M anipulation  |
-------------------------------------------------------------------------------
License
    This file is part of OpenFOAM.

    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.

    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
    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.

Class
    Foam::cellClassification

Description
    'Cuts' a mesh with a surface.

    Divides cells into three types
    - cut, i.e. any of the edges of the cell is split or any edge of the
      surface pierces any of the faces of the cell.
    - outside: cell can be reached by Meshwave from any of the supplied
               outside points (without crossing any cut cell)
    - inside:  all other.

    Used in various meshing programs.

    Has various utility functions to deal with 'features' on this level
    where the mesh still has all inside and outside cells.

    @par Concepts

    - point classification:
        - point used by meshType cells only
        - point used by non-meshType cells only
        - point used by both types ('mixed')

    - hanging cells: meshType cells using mixed points only.
      These cells would have all their vertices on the surface when
      extracting the meshType cells.

    - regionEdges: edges where the cells using it are of mixed type.
      Or more precise when walking around the edge and looking at the
      different types of the cells there are more than two regions with
      same type.

    Seen from above:
    @verbatim
    Ok:
         A | A
           |
         --+---
           |
         B | B

    Not ok:
         A | B
           |
        ---+---
           |
         B | A
    @endverbatim

    because this latter situation would cause the surface after subsetting
    type A or B to be multiply connected across this edge. And also when
    snapping the edge end points to the surface it might cause some twisted
    faces if the surface is normal to the edge (and smoothing the surface
    would not help since the points on the edge would be 'pulled' from two
    different sides)

    - regionPoints: like regionEdges but now for points.
      Points where subsetting the mesh would cause a multiply connected
      outside surface (connected across point, not edge)


SourceFiles
    cellClassification.C

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

#ifndef cellClassification_H
#define cellClassification_H

#include <OpenFOAM/pointField.H>
#include <OpenFOAM/Map.H>
#include <OpenFOAM/boolList.H>
#include <OpenFOAM/labelList.H>
#include <OpenFOAM/faceList.H>

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

namespace Foam
{

// Forward declaration of classes
class triSurfaceSearch;
class meshSearch;
class polyMesh;
class polyMesh;
class primitiveMesh;
class triSurface;

/*---------------------------------------------------------------------------*\
                           Class cellClassification Declaration
\*---------------------------------------------------------------------------*/

class cellClassification
:
    public labelList
{

public:

    // Public data types

        //- Type of cell.
        enum cType
        {
            NOTSET,
            INSIDE,     // Inside of surface
            OUTSIDE,    // Outside ,,
            CUT         // cut by surface
        };


        //- Enumeration defining the whether points are use by cells of
        //  a certain type.
        enum pointStatus
        {
            UNSET,
            MESH,       // points used by meshType cells
            NONMESH,    //    ,,          non-mesh type cells
            MIXED       //    ,,          both types of cell
        };

private:

    // Private data

        //- Reference to mesh
        const polyMesh& mesh_;


    // Private Static Functions

        //- Count number of occurrences of elem in list
        static label count(const labelList& elems, const label elem);

    // Private Member Functions

        //- Mark all faces intersected by or intersecting surface
        boolList markFaces(const triSurfaceSearch&) const;

        //- Divide cells into cut/inside/outside by using MeshWave from cut
        //  faces. No check is done on whether outsidePts are in different
        //  domains.
        void markCells
        (
            const meshSearch& queryMesh,
            const boolList& piercedFace,
            const pointField& outsidePts
        );

        //- Use cell status to classify points as being internal to meshType,
        //  internal to non-meshType or on border of both.
        void classifyPoints
        (
            const label meshType,
            const labelList& cellType,
            List<pointStatus>& pointSide
        ) const;

        //- Return true if cell uses only points with status=mixed
        bool usesMixedPointsOnly
        (
            const List<pointStatus>&,
            const label cellI
        ) const;

        //- Get faces (and its 'owner') inbetween cells of differing type
        // (meshType and non-meshType).
        void getMeshOutside(const label meshType, faceList&, labelList&) const;

public:

    // Static data members
    ClassName("cellClassification");

    // Constructors

        //- Construct from mesh and surface and point(s) on outside
        cellClassification
        (
            const polyMesh& mesh,
            const meshSearch& meshQuery,
            const triSurfaceSearch& surfQuery,
            const pointField& outsidePoints
        );

        //- Construct from mesh and type for every cell.
        //  Used to be able to reuse filling routines below.
        cellClassification(const polyMesh& mesh, const labelList& cellType);

        //- Construct as copy
        cellClassification(const cellClassification&);


    // Member Functions

        const polyMesh& mesh() const
        {
            return mesh_;
        }

        label trimCutCells
        (
            const label nLayers,
            const label meshType,
            const label fillType
        );

        //- Sets vertex neighbours of meshType cells to fillType
        label growSurface(const label meshType, const label fillType);

        //- Find hanging cells (cells with all points on outside) and set their
        //  type to fillType.
        //  Iterate until nothing changed. Returns total number of cells
        //  changed (in all iterations)
        label fillHangingCells
        (
            const label meshType,
            const label fillType,
            const label maxIter
        );

        //- Find regionEdges and fill one neighbour. Iterate until nothing
        //  changes. Returns total number of cells changed.
        label fillRegionEdges
        (
            const label meshType,
            const label fillType,
            const label maxIter
        );

        //- Find regionPoints and fill all neighbours. Iterate until nothing
        //  changes. Returns total number of cells changed.
        label fillRegionPoints
        (
            const label meshType,
            const label fillType,
            const label maxIter
        );

        //- Write statistics on cell types to Ostream
        void writeStats(Ostream& os) const;


    // Member Operators

        void operator=(const cellClassification&);

};


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

} // End namespace Foam

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

#endif

// ************************ vim: set sw=4 sts=4 et: ************************ //