Forward compatibility: flex
[foam-extend-3.2.git] / src / engine / engineTopoChangerMesh / attachDetachFunctions / attachDetachFunctions.C
blob8eb0b51ea985f3e8caacdc7e688b0087284a2b29
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend 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     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 \*---------------------------------------------------------------------------*/
26 #include "attachDetachFunctions.H"
27 #include "HashSet.H"
29 using namespace Foam;
31 // Find edge between points v0 and v1.
32 label Foam::findEdge
34     const primitiveMesh& mesh,
35     const label v0,
36     const label v1
39     const labelList& pEdges = mesh.pointEdges()[v0];
41     forAll(pEdges, pEdgeI)
42     {
43         label edgeI = pEdges[pEdgeI];
45         const edge& e = mesh.edges()[edgeI];
47         if (e.otherVertex(v0) == v1)
48         {
49             return edgeI;
50         }
51     }
53     FatalErrorIn
54     (
55         "findEdge(const primitiveMesh&, const label, const label)"
56     )   << "Cannot find edge between mesh points " << v0 << " and " << v1
57         << abort(FatalError);
59     return -1;
62 // Checks whether patch present
63 void checkPatch
65     const polyBoundaryMesh& bMesh,
66     const word& name
69     label patchI = bMesh.findPatchID(name);
71     if (patchI == -1)
72     {
73         FatalErrorIn("checkPatch(const polyBoundaryMesh&, const word&)")
74             << "Cannot find patch " << name << endl
75             << "It should be present but of zero size" << endl
76             << "Valid patches are " << bMesh.names()
77             << exit(FatalError);
78     }
80     if (bMesh[patchI].size() != 0)
81     {
82         FatalErrorIn("checkPatch(const polyBoundaryMesh&, const word&)")
83             << "Patch " << name << " is present but not of zero size"
84             << exit(FatalError);
85     }
88 void changePatchID
90     const polyMesh& mesh,
91     const label faceID,
92     const label patchID,
93     directTopoChange& meshMod
96     const label zoneID = mesh.faceZones().whichZone(faceID);
98     bool zoneFlip = false;
100     if (zoneID >= 0)
101     {
102         const faceZone& fZone = mesh.faceZones()[zoneID];
104         zoneFlip = fZone.flipMap()[fZone.whichFace(faceID)];
105     }
107     meshMod.setAction
108     (
109         polyModifyFace
110         (
111             mesh.faces()[faceID],               // face
112             faceID,                             // face ID
113             mesh.faceOwner()[faceID],           // owner
114             -1,                                 // neighbour
115             false,                              // flip flux
116             patchID,                            // patch ID
117             false,                              // remove from zone
118             zoneID,                             // zone ID
119             zoneFlip                            // zone flip
120         )
121     );