This file is indexed.

/usr/include/freefoam/dynamicMesh/multiDirRefinement.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
/*---------------------------------------------------------------------------*\
  =========                 |
  \\      /  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::multiDirRefinement

Description
    Does multiple pass refinement to refine cells in multiple directions.

    Gets a list of cells to refine and vectorFields for the whole mesh.
    It then tries to refine in one direction after the other the wanted cells.
    After construction the mesh will have been refined in multiple directions.

    Holds the list of cells to refine and the map from original to added for
    every refinement level.

    Gets constructed from a dictionary or from components.
    Uses an undoableMeshCutter which does the actual cutting. Undo facility
    is switched of unless constructed from external one which allows this.

    The cut cells get stored in addedCells which is for every vectorField
    to cut with the map from uncut to added cell (i.e. from master to slave).
    Note: map is only valid for a given direction.

    Parallel: should be ok. Uses 'reduce' whenever it needs to make a
    local decision.

SourceFiles
    multiDirRefinement.C

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

#ifndef multiDirRefinement_H
#define multiDirRefinement_H

#include <dynamicMesh/refinementIterator.H>
#include <OpenFOAM/vectorField.H>
#include <OpenFOAM/Map.H>
#include <OpenFOAM/className.H>

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

namespace Foam
{

// Forward declaration of classes
class undoableMeshCutter;
class cellLooper;
class topoSet;

/*---------------------------------------------------------------------------*\
                           Class multiDirRefinement Declaration
\*---------------------------------------------------------------------------*/

class multiDirRefinement
{
    // Private data

        //- Current set of cells to refine. Extended with added cells.
        labelList cellLabels_;

        //- from original to added cells.
        //  Gives for every cell in the original mesh an empty list or the
        //  list of cells this one has been split into (note: will include
        //  itself so e.g. for hex will be 8 if 2x2x2 refinement)
        labelListList addedCells_;


    // Private Static Functions

        //- Given map from original to added cell set the refineCell for
        //  the added cells to be equal to the one on the original cells.
        static void addCells(const Map<label>&, List<refineCell>&);
        
        //- Given map from original to added cell set the vectorField for
        //  the added cells to be equal to the one on the original cells.
        static void update(const Map<label>&, vectorField&);

        //- Given map from original to added cell add the added cell to the
        //  list of labels
        static void addCells(const Map<label>&, labelList& labels);


    // Private Member Functions

        //- Add new cells from map to overall list (addedCells_).
        void addCells(const primitiveMesh&, const Map<label>&);

        //- Remove hexes from cellLabels_ and return these in a list.
        labelList splitOffHex(const primitiveMesh& mesh);


        //- Refine cells (hex only) in all 3 directions.
        void refineHex8
        (
            polyMesh& mesh,
            const labelList& hexCells,
            const bool writeMesh
        );

        //- Refine cells in cellLabels_ in directions mentioned.
        void refineAllDirs
        (
            polyMesh& mesh,
            List<vectorField>& cellDirections,
            const cellLooper& cellWalker,
            undoableMeshCutter& cutter,
            const bool writeMesh
        );

        //- Refine based on dictionary. Calls refineAllDirs.
        void refineFromDict
        (
            polyMesh& mesh,
            List<vectorField>& cellDirections,
            const dictionary& dict,
            const bool writeMesh
        );


        //- Disallow default bitwise copy construct
        multiDirRefinement(const multiDirRefinement&);

        //- Disallow default bitwise assignment
        void operator=(const multiDirRefinement&);


public:

    //- Runtime type information
    ClassName("multiDirRefinement");


    // Constructors

        //- Construct from dictionary. After construction all refinement will
        //  have been done (and runTime will have increased a few time steps if
        //  writeMesh = true)
        multiDirRefinement
        (
            polyMesh& mesh,
            const labelList& cellLabels,    // cells to refine
            const dictionary& dict
        );

        //- Explicitly provided directions to split in.
        multiDirRefinement
        (
            polyMesh& mesh,
            const labelList& cellLabels,    // cells to refine
            const List<vectorField>&,       // Explicitly provided directions
            const dictionary& dict
        );

        //- Construct from components. Only this one would allow undo actions.
        multiDirRefinement
        (
            polyMesh& mesh,
            undoableMeshCutter& cutter,     // actual mesh modifier
            const cellLooper& cellCutter,   // how to cut a single cell with
                                            // a plane
            const labelList& cellLabels,    // list of cells to refine
            const List<vectorField>& directions,
            const bool writeMesh = false    // write intermediate meshes
        );


    // Member Functions

        //- Access to addedCells (on the original mesh; see above)
        const labelListList& addedCells() const
        {
            return addedCells_;
        }
};


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

} // End namespace Foam

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

#endif

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