Adding cfMesh-v1.0 into the repository
[foam-extend-3.2.git] / src / meshLibrary / utilities / meshes / polyMeshGenModifier / polyMeshGenModifierAddCells.C
blob9ede384259e438437e7669e557e1c2b307532f9c
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 Description
26 \*---------------------------------------------------------------------------*/
28 #include "polyMeshGenModifier.H"
29 #include "VRWGraphList.H"
30 #include "demandDrivenData.H"
32 namespace Foam
35 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
37 void polyMeshGenModifier::addCells(const LongList<faceList>& cellFaces)
39     Info << "Adding cells to the mesh" << endl;
41     faceListPMG& faces = mesh_.faces_;
42     cellListPMG& cells = mesh_.cells_;
44     VRWGraph& pointFaces = this->pointFaces();
46     //- start adding cells into the mesh
47     label nFaces = faces.size();
48     label nCells = cells.size();
50     forAll(cellFaces, cI)
51     {
52         const faceList& facesInCell = cellFaces[cI];
54         label fI(0);
55         cell c(cellFaces[cI].size());
57         forAll(facesInCell, faceI)
58         {
59             const face& f = facesInCell[faceI];
61             const label pointI = f[0];
63             label fLabel(-1);
64             forAllRow(pointFaces, pointI, pfI)
65             {
66                 const label faceI = pointFaces(pointI, pfI);
68                 if( faces[faceI] == f )
69                 {
70                     fLabel = faceI;
71                     break;
72                 }
73             }
75             if( fLabel == -1 )
76             {
77                 faces.append(f);
78                 c[fI++] = nFaces;
80                 forAll(f, pI)
81                     pointFaces.append(f[pI], nFaces);
83                 ++nFaces;
84             }
85             else
86             {
87                 c[fI++] = fLabel;
88             }
89         }
91         cells.append(c);
92         ++nCells;
93     }
95     this->clearOut();
96     mesh_.clearOut();
98     Info << "Finished adding cells to the mesh" << endl;
101 void polyMeshGenModifier::addCells(const VRWGraphList& cellFaces)
103     Info << "Adding " << cellFaces.size() << " cells to the mesh" << endl;
105     faceListPMG& faces = mesh_.faces_;
106     cellListPMG& cells = mesh_.cells_;
108     VRWGraph& pointFaces = this->pointFaces();
110     //- start adding cells into the mesh
111     label nFaces = faces.size();
112     label nCells = cells.size();
114     forAll(cellFaces, cI)
115     {
116         faceList facesInCell(cellFaces.sizeOfGraph(cI));
117         forAll(facesInCell, fI)
118         {
119             facesInCell[fI].setSize(cellFaces.sizeOfRow(cI, fI));
121             forAll(facesInCell[fI], pI)
122                 facesInCell[fI][pI] = cellFaces(cI, fI, pI);
123         }
125         label fI(0);
126         cell c(facesInCell.size());
128         forAll(facesInCell, faceI)
129         {
130             const face& f = facesInCell[faceI];
132             const label pointI = f[0];
134             label fLabel(-1);
135             forAllRow(pointFaces, pointI, pfI)
136             {
137                 const label faceI = pointFaces(pointI, pfI);
139                 if( faces[faceI] == f )
140                 {
141                     fLabel = faceI;
142                     break;
143                 }
144             }
146             if( fLabel == -1 )
147             {
148                 faces.append(f);
149                 c[fI++] = nFaces;
151                 forAll(f, pI)
152                     pointFaces.append(f[pI], nFaces);
154                 ++nFaces;
155             }
156             else
157             {
158                 c[fI++] = fLabel;
159             }
160         }
162         cells.append(c);
163         ++nCells;
164     }
166     this->clearOut();
167     mesh_.clearOut();
169     Info << "Finished adding cells to the mesh" << endl;
172 void polyMeshGenModifier::addCell(const faceList& cellFaces)
174     faceListPMG& faces = this->facesAccess();
175     cellListPMG& cells = this->cellsAccess();
177     label nFaces = faces.size();
179     VRWGraph& pointFaces = this->pointFaces();
181     cell c(cellFaces.size());
182     label fI(0);
184     forAll(cellFaces, faceI)
185     {
186         const face& f = cellFaces[faceI];
188         const label pointI = f[0];
190         label fLabel(-1);
191         forAllRow(pointFaces, pointI, pfI)
192         {
193             const label faceI = pointFaces(pointI, pfI);
195             if( faces[faceI] == f )
196             {
197                 fLabel = faceI;
198                 break;
199             }
200         }
202         if( fLabel == -1 )
203         {
204             faces.append(f);
205             c[fI++] = nFaces;
207             forAll(f, pI)
208                 pointFaces.append(f[pI], nFaces);
210             ++nFaces;
211         }
212         else
213         {
214             c[fI++] = fLabel;
215         }
216     }
218     cells.append(c);
219     mesh_.clearOut();
222 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
224 } // End namespace Foam
226 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //