46 Info <<
"Reordering boundary faces " <<
endl;
58 const label numBFaces = faces.
size() - nInternalFaces;
68 const label nThreads = 3 * omp_get_num_procs();
70 const label nThreads(1);
72 labelList nInternalToChangeThread(nThreads);
73 labelList nBoundaryToChangeThread(nThreads);
76 # pragma omp parallel num_threads(nThreads)
80 const label threadI = omp_get_thread_num();
82 const label threadI = 0;
85 label& nItc = nInternalToChangeThread[threadI];
86 label& nBtc = nBoundaryToChangeThread[threadI];
92 # pragma omp for schedule(static)
94 for(
label faceI=0;faceI<nInternalFaces;++faceI)
96 if( neighbour[faceI] == -1 )
97 internalToChangeLocal.
append(faceI);
100 nItc = internalToChangeLocal.
size();
104 # pragma omp for schedule(static)
106 for(
label faceI=nInternalFaces;faceI<faces.
size();++faceI)
108 if( neighbour[faceI] != -1 )
109 boundaryToChangeLocal.
append(faceI);
112 nBtc = boundaryToChangeLocal.
size();
117 # pragma omp critical
127 internalToChange.
setSize(nReplaced);
128 boundaryToChange.
setSize(nReplaced);
136 for(
label i=0;i<threadI;++i)
137 localStart += nInternalToChangeThread[i];
139 forAll(internalToChangeLocal, i)
140 internalToChange[localStart++] = internalToChangeLocal[i];
143 for(
label i=0;i<threadI;++i)
144 localStart += nBoundaryToChangeThread[i];
146 forAll(boundaryToChangeLocal, i)
147 boundaryToChange[localStart++] = boundaryToChangeLocal[i];
153 # pragma omp for schedule(static)
155 forAll(internalToChange, fI)
159 f.transfer(faces[internalToChange[fI]]);
160 faces[internalToChange[fI]].
transfer(faces[boundaryToChange[fI]]);
162 newFaceLabel[internalToChange[fI]] = boundaryToChange[fI];
163 newFaceLabel[boundaryToChange[fI]] = internalToChange[fI];
170 # pragma omp for schedule(dynamic, 40)
177 if( newFaceLabel[
c[fI]] != -1 )
178 c[fI] = newFaceLabel[
c[fI]];
184 if( boundaries.
size() != 1 )
202 boundaries[0].patchStart() = nInternalFaces;
203 boundaries[0].patchSize() = numBFaces;
213 boundaries[0].patchSize() -= nProcFaces;
223 Info <<
"Finished reordering boundary faces" <<
endl;
229 if( procBoundaries.
size() == 0 )
232 <<
"processor boundaries!" <<
endl;
239 const label origProcStart = procBoundaries[0].patchStart();
241 forAll(procBoundaries, patchI)
242 nProcFaces += procBoundaries[patchI].patchSize();
247 const label shift = faces.
size() - (origProcStart + nProcFaces);
253 "void polyMeshGenModifier::reorderProcBoundaryFaces()"
261 for(
label faceI=(origProcStart + nProcFaces);faceI<faces.
size();++faceI)
263 facesAtEnd[counter].
transfer(faces[faceI]);
264 newFaceLabel[faceI] = origProcStart + counter;
271 const label start = procBoundaries[patchI].patchStart();
272 const label end = start + procBoundaries[patchI].patchSize();
275 procBoundaries[patchI].patchStart() += shift;
277 for(
label faceI=end-1;faceI>=start;--faceI)
279 faces[faceI+shift].
transfer(faces[faceI]);
280 newFaceLabel[faceI] = faceI + shift;
287 faces[origProcStart+fI].
transfer(facesAtEnd[fI]);
292 if( boundaries.
size() == 1 )
294 boundaries[0].patchSize() =
295 procBoundaries[0].patchStart() - boundaries[0].patchStart();
299 const label start = boundaries[0].patchStart();
310 procBoundaries[0].patchStart() - start,
318 # pragma omp parallel for schedule(dynamic, 40)
325 if( newFaceLabel[
c[fI]] != -1 )
326 c[fI] = newFaceLabel[
c[fI]];