41 const label cellIndex,
46 const label fluentCellModelID
50 static List<const cellModel*> fluentCellModelLookup
53 reinterpret_cast<const cellModel*>(0)
61 static label faceMatchingOrder[7][6] =
63 {-1, -1, -1, -1, -1, -1},
64 {-1, -1, -1, -1, -1, -1},
65 { 0, 1, 2, 3, -1, -1},
66 {-1, -1, -1, -1, -1, -1},
72 const cellModel& curModel = *fluentCellModelLookup[fluentCellModelID];
75 if (faceLabels.size() != curModel.nFaces())
78 <<
"Number of face labels not equal to" 79 <<
"number of face in the model. " 80 <<
"Number of face labels: " << faceLabels.size()
81 <<
" number of faces in model: " << curModel.nFaces()
90 const label curFaceLabel = faceLabels[facei];
92 const labelList& curFace = faces[curFaceLabel];
94 if (owner[curFaceLabel] == cellIndex)
96 localFaces[facei] = curFace;
98 else if (neighbour[curFaceLabel] == cellIndex)
101 localFaces[facei].
setSize(curFace.size());
105 localFaces[facei][curFace.size() - i - 1] =
112 <<
"face " << curFaceLabel
113 <<
" does not belong to cell " << cellIndex
114 <<
". Face owner: " << owner[curFaceLabel] <<
" neighbour: " 115 << neighbour[curFaceLabel]
136 List<bool> meshFaceUsed(localFaces.size(),
false);
139 const faceList& modelFaces = curModel.modelFaces();
143 modelFaces[faceMatchingOrder[fluentCellModelID][0]];
147 forAll(localFaces, meshFacei)
149 if (localFaces[meshFacei].size() == firstModelFace.size())
154 const labelList& curMeshFace = localFaces[meshFacei];
156 meshFaceUsed[meshFacei] =
true;
158 forAll(curMeshFace, pointi)
160 pointLabels[firstModelFace[pointi]] = curMeshFace[pointi];
170 <<
"Cannot find match for first face. " 171 <<
"cell model: " << curModel.name() <<
" first model face: " 172 << firstModelFace <<
" Mesh faces: " << localFaces
176 for (
label modelFacei = 1; modelFacei < modelFaces.size(); modelFacei++)
181 [faceMatchingOrder[fluentCellModelID][modelFacei]];
186 forAll(localFaces, meshFacei)
190 !meshFaceUsed[meshFacei]
191 && localFaces[meshFacei].size() == curModelFace.size()
195 labelList meshFaceLabels = localFaces[meshFacei];
200 rotation < meshFaceLabels.size();
205 label nMatchedLabels = 0;
207 forAll(meshFaceLabels, pointi)
212 == meshFaceLabels[pointi]
219 if (nMatchedLabels >= 2)
228 forAll(meshFaceLabels, pointi)
231 meshFaceLabels[pointi];
234 meshFaceUsed[meshFacei] =
true;
241 label firstLabel = meshFaceLabels[0];
243 for (
label i = 1; i < meshFaceLabels.size(); i++)
245 meshFaceLabels[i - 1] = meshFaceLabels[i];
248 meshFaceLabels.last() = firstLabel;
260 <<
"Cannot find match for face " 262 <<
".\nModel: " << curModel.name() <<
" model face: " 263 << curModelFace <<
" Mesh faces: " << localFaces
List< labelList > labelListList
A List of labelList.
#define forAll(list, i)
Loop across all elements in list.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
static const cellModel * lookup(const word &)
Look up a model by name and return a pointer to the model or NULL.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
labelList pointLabels(nPoints,-1)
#define forAllReverse(list, i)
Reverse loop across all elements in list.
List< label > labelList
A List of labels.
errorManip< error > abort(error &err)
void setSize(const label)
Reset size of List.
cellShape create3DCellShape(const label cellIndex, const labelList &faceLabels, const faceList &faces, const labelList &owner, const labelList &neighbour, const label fluentCellModelID)