38 const dictionary&
dict,
42 const bool forceReference
47 regionNeedReference.setSize(regions.nRegions(),
true);
48 regionRefCells.setSize(regions.nRegions(), -1);
49 regionRefValues.setSize(regions.nRegions(), 0);
53 const volScalarField::GeometricBoundaryField& bfld =
54 fieldRef.boundaryField();
58 if (bfld[patchI].fixesValue())
62 const labelUList& fc = bfld[patchI].patch().patch().faceCells();
66 regionNeedReference[regions[fc[faceI]]] =
false;
71 Pstream::listCombineGather(regionNeedReference, orEqOp<bool>());
72 Pstream::listCombineScatter(regionNeedReference);
77 forAll(regionNeedReference, regionI)
79 if (regionNeedReference[regionI])
92 word refCellName =
field.name() +
"RefCells";
93 word refPointName =
field.name() +
"RefPoints";
94 word refValueName =
field.name() +
"RefValues";
104 if (
dict.found(refCellName))
108 if (Pstream::master())
112 if (refCells.size() != regionNeedReference.size())
115 <<
"Number of refCells " << refCells.size()
116 <<
" does not correspond to number of regions "
117 << regionNeedReference.size()
123 label regionI = regions[refCells[i]];
125 if (regionNeedReference[regionI])
127 regionRefCells[regionI] = refCells[i];
128 regionRefValues[regionI] = refValues[i];
133 forAll(regionNeedReference, regionI)
137 regionNeedReference[regionI]
138 && regionRefCells[regionI] == -1
142 <<
"Have no reference cell for region " << regionI
144 <<
"Overall per-region reference cells "
151 else if (
dict.found(refPointName))
155 if (refPoints.size() != regionNeedReference.size())
158 <<
"Number of refPoints " << refPoints.size()
159 <<
" does not correspond to number of regions "
160 << regionNeedReference.size()
173 label celli =
field.mesh().findCell
181 Pout<<
"Found point " << refPoints[i]
182 <<
" in reference cell " << celli
183 <<
" at " <<
field.mesh().cellCentres()[celli]
184 <<
" for region " << regions[celli]
187 regionRefCells[regions[celli]] = celli;
188 hasRef[regions[celli]] = 1;
192 Pstream::listCombineGather(hasRef, plusEqOp<label>());
193 Pstream::listCombineScatter(hasRef);
197 if (hasRef[regionI] != 1)
200 <<
"Unable to set reference cell for field " <<
field.name()
202 <<
" Reference points " << refPointName
204 <<
nl <<
" For region " << regionI
205 <<
" found on " << hasRef[regionI]
206 <<
" domains (should be one)"
214 <<
"Unable to set reference cell for field " <<
field.name()
216 <<
" Please supply either " << refCellName