Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "PatchTools.H"
00027
00028
00029
00030 template
00031 <
00032 class Face,
00033 template<class> class FaceList,
00034 class PointField,
00035 class PointType
00036 >
00037
00038 Foam::labelList
00039 Foam::PatchTools::edgeOwner
00040 (
00041 const PrimitivePatch<Face, FaceList, PointField, PointType>& p
00042 )
00043 {
00044 const edgeList& edges = p.edges();
00045 const labelListList& edgeFaces = p.edgeFaces();
00046 const List<Face>& localFaces = p.localFaces();
00047
00048
00049 labelList edgeOwner(edges.size(), -1);
00050
00051 forAll(edges, edgeI)
00052 {
00053 const labelList& nbrFaces = edgeFaces[edgeI];
00054
00055 if (nbrFaces.size() == 1)
00056 {
00057 edgeOwner[edgeI] = nbrFaces[0];
00058 }
00059 else
00060 {
00061
00062
00063 forAll(nbrFaces, i)
00064 {
00065 const Face& f = localFaces[nbrFaces[i]];
00066
00067 if (f.edgeDirection(edges[edgeI]) > 0)
00068 {
00069 edgeOwner[edgeI] = nbrFaces[i];
00070 break;
00071 }
00072 }
00073
00074 if (edgeOwner[edgeI] == -1)
00075 {
00076 FatalErrorIn
00077 (
00078 "PatchTools::edgeOwner()"
00079 )
00080 << "Edge " << edgeI << " vertices:" << edges[edgeI]
00081 << " is used by faces " << nbrFaces
00082 << " vertices:"
00083 << UIndirectList<Face>(localFaces, nbrFaces)()
00084 << " none of which use the edge vertices in the same order"
00085 << nl << "I give up" << abort(FatalError);
00086 }
00087 }
00088 }
00089
00090 return edgeOwner;
00091 }
00092
00093
00094