Initial commit for version 2.0.x patch release
[OpenFOAM-2.0.x.git] / src / dynamicMesh / meshCut / cellLooper / hexCellLooper.H
blob58a68988d4c9a10a9f304b7a5d72b06b17ae03cd
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2004-2010 OpenCFD Ltd.
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::hexCellLooper
27 Description
28     Implementation of cellLooper.
30     This one walks hexes in a topological way:
31       - cross edge to other face
32       - cross face by walking edge-point-edge across to reach the other side.
33     (edges are always cut through the middle)
35     For anything else (tet, prism, .. poly) it will use geomCellLooper
36     (which does a purely geometric cut using a plane through cell centre)
38 SourceFiles
39     hexCellLooper.C
41 \*---------------------------------------------------------------------------*/
43 #ifndef hexCellLooper_H
44 #define hexCellLooper_H
46 #include "geomCellLooper.H"
47 #include "typeInfo.H"
49 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
51 namespace Foam
54 // Forward declaration of classes
55 class cellModel;
57 /*---------------------------------------------------------------------------*\
58                            Class hexCellLooper Declaration
59 \*---------------------------------------------------------------------------*/
61 class hexCellLooper
63     public geomCellLooper
66 protected:
68     // Protected data
70         //- Reference to hex cell shape.
71         const cellModel& hex_;
73 private:
75     // Private Member Functions
77         //- walk across faces of hex. Update loop/loopWeights with edges cut.
78         //  Return true if successful walk. (should be always!)
79         bool walkHex
80         (
81             const label cellI,
82             const label startFaceI,
83             const label startEdgeI,
85             labelList& loop,
86             scalarField& loopWeights
87         ) const;
89         //- Convert loop into face and points
90         void makeFace
91         (
92             const labelList& loop,
93             const scalarField& loopWeights,
95             labelList& faceVerts,
96             pointField& facePoints
97         ) const;
100         //- Disallow default bitwise copy construct
101         hexCellLooper(const hexCellLooper&);
103         //- Disallow default bitwise assignment
104         void operator=(const hexCellLooper&);
107 public:
109     //- Runtime type information
110     TypeName("hexCellLooper");
113     // Constructors
115         //- Construct from components
116         hexCellLooper(const polyMesh& mesh);
119     //- Destructor
120     virtual ~hexCellLooper();
123     // Member Functions
125         //- Create cut along circumference of cellI. Gets current mesh cuts.
126         //  Cut along circumference is expressed as loop of cuts plus weights
127         //  for cuts along edges (only valid for edge cuts).
128         //  Return true if successful cut.
129         virtual bool cut
130         (
131             const vector& refDir,
132             const label cellI,
133             const boolList& vertIsCut,
134             const boolList& edgeIsCut,
135             const scalarField& edgeWeight,
137             labelList& loop,
138             scalarField& loopWeights
139         ) const;
142         //- Same but now also base point of cut provided (instead of always
143         //  cell centre)
144         virtual bool cut
145         (
146             const plane& cutPlane,
147             const label cellI,
148             const boolList& vertIsCut,
149             const boolList& edgeIsCut,
150             const scalarField& edgeWeight,
152             labelList& loop,
153             scalarField& loopWeights
154         ) const;
158 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
160 } // End namespace Foam
162 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
164 #endif
166 // ************************************************************************* //