Adding cfMesh-v1.0 into the repository
[foam-extend-3.2.git] / src / meshLibrary / utilities / surfaceTools / meshSurfaceMapper2D / meshSurfaceMapper2D.H
blob21ed49afcc89bc7a82bfb3f595b20f8c28883b91
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | cfMesh: A library for mesh generation
4    \\    /   O peration     |
5     \\  /    A nd           | Author: Franjo Juretic (franjo.juretic@c-fields.com)
6      \\/     M anipulation  | Copyright (C) Creative Fields, Ltd.
7 -------------------------------------------------------------------------------
8 License
9     This file is part of cfMesh.
11     cfMesh is free software; you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation; either version 3 of the License, or (at your
14     option) any later version.
16     cfMesh 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 cfMesh.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     meshSurfaceMapper2D
27 Description
28     Maps vertices of a 2D onto the nearest points on the geometry
30 SourceFiles
31     meshSurfaceMapper2D.C
33 \*---------------------------------------------------------------------------*/
35 #ifndef meshSurfaceMapper2D_H
36 #define meshSurfaceMapper2D_H
38 #include "labelList.H"
39 #include "pointField.H"
40 #include "labelLongList.H"
41 #include "parMapperHelper.H"
42 #include "boundBox.H"
44 #include <map>
46 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
48 namespace Foam
51 // Forward declarations
52 class meshOctree;
53 class polyMeshGen;
54 class polyMeshGen2DEngine;
55 class meshSurfaceEngine;
56 class meshSurfacePartitioner;
57 class triSurfacePartitioner;
59 /*---------------------------------------------------------------------------*\
60                     Class meshSurfaceMapper2D Declaration
61 \*---------------------------------------------------------------------------*/
63 class meshSurfaceMapper2D
65     // Private data
66         //- reference to mesh surface
67         const meshSurfaceEngine& surfaceEngine_;
69         //- reference to the octree
70         const meshOctree& meshOctree_;
72         //- mesh 2D engine
73         mutable polyMeshGen2DEngine* mesh2DEnginePtr_;
75         //- triSurface partitioner
76         mutable triSurfacePartitioner* surfPartitionerPtr_;
78         //- mesh surface partitioner
79         mutable meshSurfacePartitioner* meshPartitionerPtr_;
81         //- labels of edges which are at the boundary which shall be mapped
82         //- onto the surface
83         labelLongList activeBoundaryEdges_;
85     // Private member functions
86         //- find active boundary edges
87         void findActiveBoundaryEdges();
89         //- create a 2D engine
90         void create2DEngine() const;
92         //- create and return mesh 2D engine
93         inline const polyMeshGen2DEngine& mesh2DEngine() const
94         {
95             if( !mesh2DEnginePtr_ )
96                 create2DEngine();
98             return *mesh2DEnginePtr_;
99         }
101         //- create surface partitioner
102         void createTriSurfacePartitioner() const;
104         //- create and reurn surface partitioner
105         inline const triSurfacePartitioner& surfacePartitioner() const
106         {
107             if( !surfPartitionerPtr_ )
108                 createTriSurfacePartitioner();
110             return *surfPartitionerPtr_;
111         }
113         //- create mesh surface partitioner
114         void createMeshSurfacePartitioner() const;
116         //- create and return mesh surface partitioner
117         inline const meshSurfacePartitioner& meshPartitioner() const
118         {
119             if( !meshPartitionerPtr_ )
120                 createMeshSurfacePartitioner();
122             return *meshPartitionerPtr_;
123         }
125         //- delete dynamically allocated data
126         void clearOut();
128     // Private member functions needed for parallel execution
129         //- find mapping distance for corner points
130         void findMappingDistance
131         (
132             const labelLongList&,
133             std::map<label, scalar>&
134         ) const;
136         //- map to the location with the smallest distance
137         void mapToSmallestDistance(LongList<parMapperHelper>&);
139         //- Disallow default bitwise copy construct
140         meshSurfaceMapper2D(const meshSurfaceMapper2D&);
142         //- Disallow default bitwise assignment
143         void operator=(const meshSurfaceMapper2D&);
145 public:
147     // Constructors
149         //- Construct from meshSurfaceEngine and octree
150         meshSurfaceMapper2D(const meshSurfaceEngine&, const meshOctree&);
152     // Destructor
154         ~meshSurfaceMapper2D();
156     // Member Functions
158         //- adjust z coordinates of the mesh to the ones in the surface mesh
159         void adjustZCoordinates();
161         //- projects surface vertices onto their nearest location
162         //- on the surface mesh
163         void mapVerticesOntoSurface();
165         //- projects selected edge to their nearest location
166         //- on the surface mesh
167         void mapVerticesOntoSurface(const labelLongList& edgesToMap);
169         //- projects edges with corners onto their nearest location
170         //- on the surface mesh
171         void mapCorners();
173         //- projects selected edges with corners onto their nearest
174         //- locations on the surface mesh
175         void mapCorners(const labelLongList& edgesToMap);
177         //- projects surface edges onto the surface with respect
178         //- to the surface patch they belong to. Corners are respected
179         void mapVerticesOntoSurfacePatches();
181         //- projects selected surface edges onto the surface with respect
182         //- to the surface patch they belong to. Corners are respected
183         void mapVerticesOntoSurfacePatches(const labelLongList& edgesToMap);
185         //- a combination of mapping and smoothing intended for better
186         //- feature capturing
187         void preMapVertices(const label nIterations = 2);
190 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
192 } // End namespace Foam
194 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
196 #endif
198 // ************************************************************************* //