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