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 "primitiveMesh.H"
00027 #include <OpenFOAM/ListOps.H>
00028
00029
00030
00031 const Foam::labelListList& Foam::primitiveMesh::edgeFaces() const
00032 {
00033 if (!efPtr_)
00034 {
00035 if (debug)
00036 {
00037 Pout<< "primitiveMesh::edgeFaces() : calculating edgeFaces" << endl;
00038
00039 if (debug == -1)
00040 {
00041
00042
00043 FatalErrorIn("primitiveMesh::edgeFaces()")
00044 << abort(FatalError);
00045 }
00046 }
00047
00048
00049 efPtr_ = new labelListList(nEdges());
00050 invertManyToMany(nEdges(), faceEdges(), *efPtr_);
00051 }
00052
00053 return *efPtr_;
00054 }
00055
00056
00057 const Foam::labelList& Foam::primitiveMesh::edgeFaces
00058 (
00059 const label edgeI,
00060 DynamicList<label>& storage
00061 ) const
00062 {
00063 if (hasEdgeFaces())
00064 {
00065 return edgeFaces()[edgeI];
00066 }
00067 else
00068 {
00069
00070 const edge& e = edges()[edgeI];
00071 const labelList& pFaces0 = pointFaces()[e[0]];
00072 const labelList& pFaces1 = pointFaces()[e[1]];
00073
00074 label i0 = 0;
00075 label i1 = 0;
00076
00077 storage.clear();
00078
00079 while (i0 < pFaces0.size() && i1 < pFaces1.size())
00080 {
00081 if (pFaces0[i0] < pFaces1[i1])
00082 {
00083 ++i0;
00084 }
00085 else if (pFaces0[i0] > pFaces1[i1])
00086 {
00087 ++i1;
00088 }
00089 else
00090 {
00091
00092 storage.append(pFaces0[i0]);
00093 ++i0;
00094 ++i1;
00095 }
00096 }
00097
00098 return storage;
00099 }
00100 }
00101
00102
00103 const Foam::labelList& Foam::primitiveMesh::edgeFaces(const label edgeI) const
00104 {
00105 return edgeFaces(edgeI, labels_);
00106 }
00107
00108
00109