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
00032 const Foam::labelListList& Foam::primitiveMesh::edgeCells() const
00033 {
00034 if (!ecPtr_)
00035 {
00036 if (debug)
00037 {
00038 Pout<< "primitiveMesh::edgeCells() : calculating edgeCells" << endl;
00039
00040 if (debug == -1)
00041 {
00042
00043
00044 FatalErrorIn("primitiveMesh::edgeCells()")
00045 << abort(FatalError);
00046 }
00047 }
00048
00049 ecPtr_ = new labelListList(nEdges());
00050 invertManyToMany(nEdges(), cellEdges(), *ecPtr_);
00051 }
00052
00053 return *ecPtr_;
00054 }
00055
00056
00057 const Foam::labelList& Foam::primitiveMesh::edgeCells
00058 (
00059 const label edgeI,
00060 DynamicList<label>& storage
00061 ) const
00062 {
00063 if (hasEdgeCells())
00064 {
00065 return edgeCells()[edgeI];
00066 }
00067 else
00068 {
00069 const labelList& own = faceOwner();
00070 const labelList& nei = faceNeighbour();
00071
00072
00073 DynamicList<label> eFacesStorage;
00074 const labelList& eFaces = edgeFaces(edgeI, eFacesStorage);
00075
00076 storage.clear();
00077
00078
00079 forAll(eFaces, i)
00080 {
00081 label faceI = eFaces[i];
00082
00083 {
00084 label ownCellI = own[faceI];
00085
00086
00087 forAll(storage, j)
00088 {
00089 if (storage[j] == ownCellI)
00090 {
00091 ownCellI = -1;
00092 break;
00093 }
00094 }
00095
00096 if (ownCellI != -1)
00097 {
00098 storage.append(ownCellI);
00099 }
00100 }
00101
00102 if (isInternalFace(faceI))
00103 {
00104 label neiCellI = nei[faceI];
00105
00106 forAll(storage, j)
00107 {
00108 if (storage[j] == neiCellI)
00109 {
00110 neiCellI = -1;
00111 break;
00112 }
00113 }
00114
00115 if (neiCellI != -1)
00116 {
00117 storage.append(neiCellI);
00118 }
00119 }
00120 }
00121
00122 return storage;
00123 }
00124 }
00125
00126
00127 const Foam::labelList& Foam::primitiveMesh::edgeCells(const label edgeI) const
00128 {
00129 return edgeCells(edgeI, labels_);
00130 }
00131
00132
00133