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
00027
00028 #include "enrichedPatch.H"
00029 #include <OpenFOAM/primitiveMesh.H>
00030 #include <OpenFOAM/demandDrivenData.H>
00031 #include <OpenFOAM/DynamicList.H>
00032
00033
00034
00035 const Foam::label Foam::enrichedPatch::nFaceHits_ = 4;
00036
00037
00038
00039 void Foam::enrichedPatch::calcMasterPointFaces() const
00040 {
00041 if (masterPointFacesPtr_)
00042 {
00043 FatalErrorIn("void enrichedPatch::calcMasterPointFaces() const")
00044 << "Master point face addressing already calculated."
00045 << abort(FatalError);
00046 }
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056 Map<DynamicList<label> > mpf(meshPoints().size());
00057
00058 const faceList& ef = enrichedFaces();
00059
00060
00061 forAll (masterPatch_, faceI)
00062 {
00063 const face& curFace = ef[faceI + slavePatch_.size()];
00064
00065 forAll (curFace, pointI)
00066 {
00067 Map<DynamicList<label> >::iterator mpfIter =
00068 mpf.find(curFace[pointI]);
00069
00070 if (mpfIter == mpf.end())
00071 {
00072
00073
00074 DynamicList<label> fpp(primitiveMesh::facesPerPoint_);
00075 mpf.insert
00076 (
00077 curFace[pointI],
00078 fpp
00079 );
00080
00081
00082 mpf.find(curFace[pointI])().append(faceI);
00083 }
00084 else
00085 {
00086 mpfIter().append(faceI);
00087 }
00088 }
00089 }
00090
00091
00092 const labelList& slaveMeshPoints = slavePatch_.meshPoints();
00093
00094 forAll (slavePointFaceHits_, pointI)
00095 {
00096 if
00097 (
00098 slavePointPointHits_[pointI] < 0
00099 && slavePointEdgeHits_[pointI] < 0
00100 && slavePointFaceHits_[pointI].hit()
00101 )
00102 {
00103
00104
00105 const label mergedSmp =
00106 pointMergeMap().find(slaveMeshPoints[pointI])();
00107
00108 Map<DynamicList<label> >::iterator mpfIter =
00109 mpf.find(mergedSmp);
00110
00111 if (mpfIter == mpf.end())
00112 {
00113
00114
00115 DynamicList<label> fpp(primitiveMesh::facesPerPoint_);
00116 mpf.insert
00117 (
00118 mergedSmp,
00119 fpp
00120 );
00121
00122
00123 mpf.find(mergedSmp)().append
00124 (
00125 slavePointFaceHits_[pointI].hitObject()
00126 );
00127 }
00128 else
00129 {
00130 mpfIter().append(slavePointFaceHits_[pointI].hitObject());
00131 }
00132 }
00133 }
00134
00135
00136 const labelList mpfToc = mpf.toc();
00137
00138 masterPointFacesPtr_ = new Map<labelList>(2*mpfToc.size());
00139 Map<labelList>& masterPointFaceAddr = *masterPointFacesPtr_;
00140
00141 forAll (mpfToc, mpfTocI)
00142 {
00143 labelList l;
00144 l.transfer(mpf.find(mpfToc[mpfTocI])());
00145
00146 masterPointFaceAddr.insert(mpfToc[mpfTocI], l);
00147 }
00148
00149 }
00150
00151
00152
00153
00154 const Foam::Map<Foam::labelList>& Foam::enrichedPatch::masterPointFaces() const
00155 {
00156 if (!masterPointFacesPtr_)
00157 {
00158 calcMasterPointFaces();
00159 }
00160
00161 return *masterPointFacesPtr_;
00162 }
00163
00164
00165