Adding cfMesh-v1.0 into the repository
[foam-extend-3.2.git] / src / meshLibrary / utilities / boundaryLayers / boundaryLayersI.H
blobee7b8fcc54d0fdf3f9e45f66fe9a728a3dc58fbb
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
27 \*---------------------------------------------------------------------------*/
30 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
32 namespace Foam
35 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
37 label boundaryLayers::findNewNodeLabel
39     const label pointI,
40     const label pKey
41 ) const
43     if( otherVrts_.find(pointI) != otherVrts_.end() )
44     {
45         const std::map
46         <
47             label, std::map<std::pair<label, label>, label>
48         >::const_iterator it = otherVrts_.find(pointI);
49         const std::map<std::pair<label, label>, label>& m = it->second;
51         std::map<std::pair<label, label>, label>::const_iterator mit;
52         if( m.size() == 2 )
53         {
54             for(mit=m.begin();mit!=m.end();++mit)
55             {
56                 if( mit->first.first != pKey )
57                     return mit->second;
58             }
59         }
60         else
61         {
62             for(mit=m.begin();mit!=m.end();++mit)
63             {
64                 if( mit->first.first == pKey )
65                     continue;
66                 if( mit->first.second == pKey )
67                     continue;
68                 if( mit->first.first == mit->first.second )
69                     continue;
70                 
71                 return mit->second;
72             }
73         }
74     }
76     return newLabelForVertex_[pointI];
79 inline void boundaryLayers::createNewCellFromEdge
81     const edge& e,
82     const label pKeyI,
83     const label pKeyJ,
84     FixedList<FixedList<label, 4>, 6>& cellFaces
85 ) const
87     const std::map<std::pair<label, label>, label>& ms =
88         otherVrts_.find(e.start())->second;
89     const std::map<std::pair<label, label>, label>& me =
90         otherVrts_.find(e.end())->second;
91     
92     # ifdef DEBUGLayer
93     Info << "Creating cell for edge " << edgeI << " with nodes " << e << endl;
94     Info << "pKeyI " << pKeyI << endl;
95     Info << "pKeyJ " << pKeyJ << endl;
96     std::map<std::pair<label, label>, label>::const_iterator iter;
97     for(iter=ms.begin();iter!=ms.end();++iter)
98         Info << "1. Pair (" << iter->first.first << ", " 
99             << iter->first.second << ") has value " << iter->second << endl;
100     for(iter=me.begin();iter!=me.end();++iter)
101         Info << "2. Pair (" << iter->first.first << ", " 
102             << iter->first.second << ") has value " << iter->second << endl;
103     # endif
104     
105     label p0s(-1), p1s(-1), ns(-1), p0e(-1), p1e(-1), ne(-1);
106     
107     if( ms.size() == 2 )
108     {
109         p0s = ms.find(std::pair<label, label>(pKeyI, pKeyI))->second;
110         p1s = ms.find(std::pair<label, label>(pKeyJ, pKeyJ))->second;
111         ns = newLabelForVertex_[e.start()];
112     }
113     else
114     {
115         std::map<std::pair<label, label>, label>::const_iterator it;
116         for(it=ms.begin();it!=ms.end();++it)
117         {
118             if(
119                 (it->first.first != pKeyJ) && (it->first.second != pKeyJ)
120                 && (it->first.first != it->first.second)
121             )
122             {
123                 p0s = it->second;
124             }
125             else if(
126                 (it->first.first != pKeyI) && (it->first.second != pKeyI)
127                 && (it->first.first != it->first.second)
128             )
129             {
130                 p1s = it->second;
131             }
132             else if(
133                 (it->first.first == it->first.second) &&
134                 (it->first.first != pKeyI) && (it->first.first != pKeyJ)
135             )
136             {
137                 ns = it->second;
138             }
139         }
140     }
141     if( me.size() == 2 )
142     {
143         p0e = me.find(std::pair<label, label>(pKeyI, pKeyI))->second;
144         p1e = me.find(std::pair<label, label>(pKeyJ, pKeyJ))->second;
145         ne = newLabelForVertex_[e.end()];
146     }
147     else
148     {
149         std::map<std::pair<label, label>, label>::const_iterator it;
150         for(it=me.begin();it!=me.end();++it)
151         {
152             if(
153                 (it->first.first != pKeyJ) && (it->first.second != pKeyJ)
154                 && (it->first.first != it->first.second)
155             )
156             {
157                 p0e = it->second;
158             }
159             else if(
160                 (it->first.first != pKeyI) && (it->first.second != pKeyI)
161                 && (it->first.first != it->first.second)
162             )
163             {
164                 p1e = it->second;
165             }
166             else if(
167                 (it->first.first == it->first.second) &&
168                 (it->first.first != pKeyI) && (it->first.first != pKeyJ)
169             )
170             {
171                 ne = it->second;
172             }
173         }
174     }
175     
176     //- F0
177     cellFaces[0][0] = e.end();
178     cellFaces[0][1] = e.start();
179     cellFaces[0][2] = p1s;
180     cellFaces[0][3] = p1e;
182     //- F1
183     cellFaces[1][0] = p0e;
184     cellFaces[1][1] = ne;
185     cellFaces[1][2] = ns;
186     cellFaces[1][3] = p0s;
188     //- F2
189     cellFaces[2][0] = e.start();
190     cellFaces[2][1] = e.end();
191     cellFaces[2][2] = p0e;
192     cellFaces[2][3] = p0s;
194     //- F3
195     cellFaces[3][0] = p1s;
196     cellFaces[3][1] = ns;
197     cellFaces[3][2] = ne;
198     cellFaces[3][3] = p1e;
200     //- F4
201     cellFaces[4][0] = e.end();
202     cellFaces[4][1] = p1e;
203     cellFaces[4][2] = ne;
204     cellFaces[4][3] = p0e;
206     //- F5
207     cellFaces[5][0] = e.start();
208     cellFaces[5][1] = p0s;
209     cellFaces[5][2] = ns;
210     cellFaces[5][3] = p1s;
213 inline void boundaryLayers::createNewCellFromNode
215     const label pointI,
216     const DynList<label, 3>& pKeys,
217     FixedList<FixedList<label, 4>, 6>& cellFaces
218 ) const
220     const std::map<std::pair<label, label>, label>& m =
221         otherVrts_.find(pointI)->second;
222     
223     //- create labels before creating cells
224     const label n = newLabelForVertex_[pointI];
225     const label p00 =
226         m.find(std::pair<label, label>(pKeys[0], pKeys[0]))->second;
227     const label p11 =
228         m.find(std::pair<label, label>(pKeys[1], pKeys[1]))->second;
229     const label p22 =
230         m.find(std::pair<label, label>(pKeys[2], pKeys[2]))->second;
232     std::pair<label, label> pr;
233     pr.first = pKeys[0];
234     pr.second = pKeys[1];
235     if( m.find(pr) == m.end() )
236     {
237         pr.first = pKeys[1];
238         pr.second = pKeys[0];
239     }
240     const label p01 = m.find(pr)->second;
241     
242     pr.first = pKeys[0];
243     pr.second = pKeys[2];
244     if( m.find(pr) == m.end() )
245     {
246         pr.first = pKeys[2];
247         pr.second = pKeys[0];
248     }
249     const label p02 = m.find(pr)->second;
250     
251     pr.first = pKeys[1];
252     pr.second = pKeys[2];
253     if( m.find(pr) == m.end() )
254     {
255         pr.first = pKeys[2];
256         pr.second = pKeys[1];
257     }
258     const label p12 = m.find(pr)->second;
259     
260     //- create the cell and append it
261     
262     //- F0
263     cellFaces[0][0] = pointI;
264     cellFaces[0][1] = p02;
265     cellFaces[0][2] = p00;
266     cellFaces[0][3] = p01;
267     //- F1
268     cellFaces[1][0] = p12;
269     cellFaces[1][1] = p11;
270     cellFaces[1][2] = n;
271     cellFaces[1][3] = p22;
273     //- F2
274     cellFaces[2][0] = pointI;
275     cellFaces[2][1] = p01;
276     cellFaces[2][2] = p11;
277     cellFaces[2][3] = p12;
278     //- F3
279     cellFaces[3][0] = p02;
280     cellFaces[3][1] = p22;
281     cellFaces[3][2] = n;
282     cellFaces[3][3] = p00;
283     //- F4
284     cellFaces[4][0] = pointI;
285     cellFaces[4][1] = p12;
286     cellFaces[4][2] = p22;
287     cellFaces[4][3] = p02;
288     //- F5
289     cellFaces[5][0] = p01;
290     cellFaces[5][1] = p00;
291     cellFaces[5][2] = n;
292     cellFaces[5][3] = p11;
295 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
297 } // End namespace Foam
299 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //