Go to the documentation of this file.
31 #include "surfaceInterpolate.H"
57 if (protectedCell_.empty())
59 unrefineableCell.
clear();
63 const labelList& cellLevel = meshCutter_.cellLevel();
65 unrefineableCell = protectedCell_;
68 labelList neiLevel(nFaces()-nInternalFaces());
70 for (label facei = nInternalFaces(); facei < nFaces(); ++facei)
72 neiLevel[facei-nInternalFaces()] = cellLevel[faceOwner()[facei]];
74 syncTools::swapBoundaryFaceList(*
this, neiLevel);
85 for (label facei = 0; facei < nInternalFaces(); ++facei)
87 const label own = faceOwner()[facei];
88 const label nei = faceNeighbour()[facei];
94 unrefineableCell.
test(own)
95 && (cellLevel[nei] > cellLevel[own])
100 unrefineableCell.
test(nei)
101 && (cellLevel[own] > cellLevel[nei])
108 for (label facei = nInternalFaces(); facei < nFaces(); facei++)
110 const label own = faceOwner()[facei];
116 unrefineableCell.
test(own)
117 && (neiLevel[facei-nInternalFaces()] > cellLevel[own])
129 bool hasExtended =
false;
131 for (label facei = 0; facei < nInternalFaces(); ++facei)
133 if (seedFace.
test(facei))
135 if (unrefineableCell.
set(faceOwner()[facei]))
139 if (unrefineableCell.
set(faceNeighbour()[facei]))
145 for (label facei = nInternalFaces(); facei < nFaces(); ++facei)
147 if (seedFace.
test(facei))
149 const label own = faceOwner()[facei];
151 if (unrefineableCell.
set(own))
188 for (
const auto& pr : fluxVelocities)
212 bitSet masterFaces(nFaces());
216 const label oldFacei =
faceMap[facei];
220 const label masterFacei = reverseFaceMap[oldFacei];
225 <<
"Problem: should not have removed faces"
227 <<
nl <<
"face:" << facei <<
endl
230 else if (masterFacei != facei)
232 masterFaces.
set(masterFacei);
239 Pout<<
"Found " << masterFaces.
count() <<
" split faces " <<
endl;
244 lookupClass<surfaceScalarField>()
248 if (!correctFluxes_.found(iter.key()))
251 <<
"Cannot find surfaceScalarField " << iter.key()
252 <<
" in user-provided flux mapping table "
253 << correctFluxes_ <<
endl
254 <<
" The flux mapping table is used to recreate the"
255 <<
" flux on newly created faces." <<
endl
256 <<
" Either add the entry if it is a flux or use ("
257 << iter.key() <<
" none) to suppress this warning."
262 const word& UName = correctFluxes_[iter.key()];
273 Pout<<
"Setting surfaceScalarField " << iter.key()
274 <<
" to NaN" <<
endl;
283 Pout<<
"Mapping flux " << iter.key()
284 <<
" using interpolated flux " << UName
292 lookupObject<volVectorField>(UName)
298 for (label facei = 0; facei < nInternalFaces(); ++facei)
300 const label oldFacei =
faceMap[facei];
305 phi[facei] = phiU[facei];
307 else if (reverseFaceMap[oldFacei] != facei)
310 phi[facei] = phiU[facei];
327 const label oldFacei =
faceMap[facei];
332 patchPhi[i] = patchPhiU[i];
334 else if (reverseFaceMap[oldFacei] != facei)
337 patchPhi[i] = patchPhiU[i];
345 for (
const label facei : masterFaces)
347 if (isInternalFace(facei))
349 phi[facei] = phiU[facei];
361 patchPhi[i] = patchPhiU[i];
373 mapNewInternalFaces<scalar>(this->Sf(), this->magSf(),
faceMap);
374 mapNewInternalFaces<vector>(this->Sf(), this->magSf(),
faceMap);
377 mapNewInternalFaces<sphericalTensor>(
faceMap);
378 mapNewInternalFaces<symmTensor>(
faceMap);
379 mapNewInternalFaces<tensor>(
faceMap);
395 meshCutter_.setRefinement(cellsToRefine, meshMod);
401 Info<<
"Refined from "
403 <<
" to " << globalData().nTotalCells() <<
" cells." <<
endl;
408 for (label facei = 0; facei < nInternalFaces(); ++facei)
410 const label oldFacei = map().faceMap()[facei];
412 if (oldFacei >= nInternalFaces())
415 <<
"New internal face:" << facei
416 <<
" fc:" << faceCentres()[facei]
417 <<
" originates from boundary oldFace:" << oldFacei
449 meshCutter_.updateMesh(*map);
452 if (protectedCell_.size())
454 bitSet newProtectedCell(nCells());
456 forAll(newProtectedCell, celli)
458 const label oldCelli = map().cellMap()[celli];
459 if (protectedCell_.test(oldCelli))
461 newProtectedCell.
set(celli);
464 protectedCell_.transfer(newProtectedCell);
468 meshCutter_.checkRefinementLevels(-1,
labelList());
483 meshCutter_.setUnrefinement(splitPoints, meshMod);
492 Map<label> faceToSplitPoint(3*splitPoints.size());
495 for (
const label pointi : splitPoints)
497 const labelList& pEdges = pointEdges()[pointi];
499 for (
const label edgei : pEdges)
501 const label otherPointi = edges()[edgei].otherVertex(pointi);
505 for (
const label facei :
pFaces)
507 faceToSplitPoint.insert(facei, otherPointi);
518 Info<<
"Unrefined from "
520 <<
" to " << globalData().nTotalCells() <<
" cells."
543 const labelList& reversePointMap = map().reversePointMap();
544 const labelList& reverseFaceMap = map().reverseFaceMap();
548 lookupClass<surfaceScalarField>()
552 if (!correctFluxes_.found(iter.key()))
555 <<
"Cannot find surfaceScalarField " << iter.key()
556 <<
" in user-provided flux mapping table "
557 << correctFluxes_ <<
endl
558 <<
" The flux mapping table is used to recreate the"
559 <<
" flux on newly created faces." <<
endl
560 <<
" Either add the entry if it is a flux or use ("
561 << iter.key() <<
" none) to suppress this warning."
566 const word& UName = correctFluxes_[iter.key()];
574 <<
"Mapping flux " << iter.key()
575 <<
" using interpolated flux " << UName
580 surfaceScalarField::Boundary& phiBf =
587 lookupObject<volVectorField>(UName)
595 const label oldFacei = iter.key();
596 const label oldPointi = iter.val();
598 if (reversePointMap[oldPointi] < 0)
601 const label facei = reverseFaceMap[oldFacei];
605 if (isInternalFace(facei))
607 phi[facei] = phiU[facei];
617 patchPhi[i] = patchPhiU[i];
627 meshCutter_.updateMesh(*map);
630 if (protectedCell_.size())
632 bitSet newProtectedCell(nCells());
634 forAll(newProtectedCell, celli)
636 const label oldCelli = map().cellMap()[celli];
637 if (protectedCell_.test(oldCelli))
639 newProtectedCell.
set(celli);
642 protectedCell_.transfer(newProtectedCell);
646 meshCutter_.checkRefinementLevels(-1,
labelList());
661 for (
const label celli : pCells)
663 vFld[celli] =
max(vFld[celli], pFld[pointi]);
679 for (
const label celli : pCells)
681 pFld[pointi] =
max(pFld[pointi], vFld[celli]);
698 for (
const label celli : pCells)
702 pFld[pointi] =
sum/pCells.size();
711 const scalar minLevel,
712 const scalar maxLevel
719 scalar err =
min(
fld[i]-minLevel, maxLevel-
fld[i]);
732 const scalar lowerRefineLevel,
733 const scalar upperRefineLevel,
756 if (cellError[celli] > 0)
758 candidateCell.
set(celli);
766 const label maxCells,
767 const label maxRefinement,
768 const bitSet& candidateCell
772 label nTotToRefine = (maxCells - globalData().nTotalCells()) / 7;
774 const labelList& cellLevel = meshCutter_.cellLevel();
779 calculateProtectedCells(unrefineableCell);
782 label nLocalCandidates = candidateCell.
count();
788 if (nCandidates < nTotToRefine)
790 for (
const label celli : candidateCell)
794 (!unrefineableCell.
test(celli))
795 && cellLevel[celli] < maxRefinement
805 for (label level = 0; level < maxRefinement; ++level)
807 for (
const label celli : candidateCell)
811 (!unrefineableCell.
test(celli))
812 && cellLevel[celli] == level
829 meshCutter_.consistentRefinement
837 <<
" cells for refinement out of " << globalData().nTotalCells()
840 return consistentSet;
846 const scalar unrefineLevel,
852 const labelList splitPoints(meshCutter_.getSplitPoints());
862 if (protectedCell_.size())
869 if (protectedCell_.test(celli))
871 protectedPoint.
set(pointi);
887 <<
" protected cells found "
889 <<
" protected points." <<
endl;
895 for (
const label pointi : splitPoints)
897 if (!protectedPoint[pointi] && pFld[pointi] < unrefineLevel)
900 bool hasMarked =
false;
904 if (markedCell.
test(celli))
913 newSplitPoints.
append(pointi);
919 newSplitPoints.shrink();
924 meshCutter_.consistentUnrefinement
931 <<
" split points out of a possible "
935 return consistentSet;
945 bitSet markedFace(nFaces());
947 for (
const label celli : markedCell)
955 for (label facei = 0; facei < nInternalFaces(); ++facei)
957 if (markedFace.
test(facei))
959 markedCell.set(faceOwner()[facei]);
960 markedCell.set(faceNeighbour()[facei]);
963 for (label facei = nInternalFaces(); facei < nFaces(); ++facei)
965 if (markedFace.
test(facei))
967 markedCell.set(faceOwner()[facei]);
978 const labelList& cellLevel = meshCutter_.cellLevel();
979 const labelList& pointLevel = meshCutter_.pointLevel();
983 forAll(pointLevel, pointi)
987 for (
const label celli : pCells)
989 if (pointLevel[pointi] <= cellLevel[celli])
992 if (nAnchorPoints[celli] == 8)
994 protectedCell.
set(celli);
997 if (!protectedCell.
test(celli))
999 ++nAnchorPoints[celli];
1006 forAll(protectedCell, celli)
1008 if (nAnchorPoints[celli] != 8)
1010 protectedCell.
set(celli);
1018 Foam::dynamicRefineFvMesh::dynamicRefineFvMesh
1041 protectedCell_.setSize(nCells());
1042 nRefinementIterations_ = 0;
1049 const labelList& cellLevel = meshCutter_.cellLevel();
1050 const labelList& pointLevel = meshCutter_.pointLevel();
1066 for (
const label celli : pCells)
1068 if (!protectedCell_.test(celli))
1070 if (pointLevel[pointi] <= cellLevel[celli])
1074 if (nAnchors[celli] > 8)
1076 protectedCell_.
set(celli);
1092 for (label facei = 0; facei < nInternalFaces(); ++facei)
1094 neiLevel[facei] = cellLevel[faceNeighbour()[facei]];
1096 for (label facei = nInternalFaces(); facei < nFaces(); ++facei)
1098 neiLevel[facei] = cellLevel[faceOwner()[facei]];
1103 bitSet protectedFace(nFaces());
1105 forAll(faceOwner(), facei)
1107 const label faceLevel =
max
1109 cellLevel[faceOwner()[facei]],
1113 const face&
f = faces()[facei];
1117 for (
const label pointi :
f)
1119 if (pointLevel[pointi] <= faceLevel)
1125 protectedFace.
set(facei);
1134 for (label facei = 0; facei < nInternalFaces(); ++facei)
1136 if (protectedFace.
test(facei))
1138 protectedCell_.set(faceOwner()[facei]);
1139 protectedCell_.set(faceNeighbour()[facei]);
1142 for (label facei = nInternalFaces(); facei < nFaces(); ++facei)
1144 if (protectedFace.
test(facei))
1146 protectedCell_.set(faceOwner()[facei]);
1155 if (cFaces.size() < 6)
1157 protectedCell_.
set(celli);
1161 for (
const label cfacei : cFaces)
1163 if (faces()[cfacei].size() < 4)
1165 protectedCell_.set(celli);
1173 checkEightAnchorPoints(protectedCell_);
1178 protectedCell_.clear();
1191 <<
" cells that are protected from refinement."
1192 <<
" Writing these to cellSet "
1193 << protectedCells.
name()
1196 protectedCells.
write();
1223 ).optionalSubDict(typeName +
"Coeffs")
1226 const label refineInterval = refineDict.
get<label>(
"refineInterval");
1228 bool hasChanged =
false;
1230 if (refineInterval == 0)
1232 topoChanging(hasChanged);
1236 else if (refineInterval < 0)
1239 <<
"Illegal refineInterval " << refineInterval <<
nl
1240 <<
"The refineInterval setting in the dynamicMeshDict should"
1241 <<
" be >= 1." <<
nl
1251 const label maxCells = refineDict.
get<label>(
"maxCells");
1256 <<
"Illegal maximum number of cells " << maxCells <<
nl
1257 <<
"The maxCells setting in the dynamicMeshDict should"
1262 const label maxRefinement = refineDict.
get<label>(
"maxRefinement");
1264 if (maxRefinement <= 0)
1267 <<
"Illegal maximum refinement level " << maxRefinement <<
nl
1268 <<
"The maxCells setting in the dynamicMeshDict should"
1273 const word fieldName(refineDict.
get<
word>(
"field"));
1275 const volScalarField& vFld = lookupObject<volScalarField>(fieldName);
1277 const scalar lowerRefineLevel =
1278 refineDict.
get<scalar>(
"lowerRefineLevel");
1279 const scalar upperRefineLevel =
1280 refineDict.
get<scalar>(
"upperRefineLevel");
1281 const scalar unrefineLevel = refineDict.
getOrDefault<scalar>
1286 const label nBufferLayers = refineDict.
get<label>(
"nBufferLayers");
1292 selectRefineCandidates
1300 if (globalData().nTotalCells() < maxCells)
1319 if (nCellsToRefine > 0)
1327 const labelList& cellMap = map().cellMap();
1328 const labelList& reverseCellMap = map().reverseCellMap();
1330 bitSet newRefineCell(cellMap.size());
1334 const label oldCelli = cellMap[celli];
1339 || (reverseCellMap[oldCelli] != celli)
1343 newRefineCell.
set(celli);
1351 for (label i = 0; i < nBufferLayers; ++i)
1365 selectUnrefinePoints
1375 pointsToUnrefine.size(),
1379 if (nSplitPoints > 0)
1382 unrefine(pointsToUnrefine);
1389 if ((nRefinementIterations_ % 10) == 0)
1395 nRefinementIterations_++;
1398 topoChanging(hasChanged);
1417 const_cast<hexRef8&
>(meshCutter_).setInstance(time().timeName());
1422 && meshCutter_.write(valid)
1442 const labelList& cellLevel = meshCutter_.cellLevel();
1446 scalarCellLevel[celli] = cellLevel[celli];
1449 writeOk = writeOk && scalarCellLevel.write();
int debug
Static debugging option.
addToRunTimeSelectionTable(decompositionMethod, kahipDecomp, dictionary)
List< label > labelList
A List of labels.
IOdictionary is derived from dictionary and IOobject to give the dictionary automatic IO functionalit...
label size() const noexcept
The number of elements in table.
void reset()
Clear all bits but do not adjust the addressable size.
Defines the attributes of an object for which implicit objectRegistry management is supported,...
scalarField error(const scalarField &fld, const scalar minLevel, const scalar maxLevel) const
const dimensionSet dimless(0, 0, 0, 0, 0, 0, 0)
Dimensionless.
Pair< int > faceMap(const label facePi, const face &faceP, const label faceNi, const face &faceN)
const word & name() const
Return name.
void extendMarkedCells(bitSet &markedCell) const
Extend markedCell with cell-face-cell.
A class for handling words, derived from Foam::string.
T returnReduce(const T &Value, const BinaryOp &bop, const int tag=Pstream::msgType(), const label comm=UPstream::worldComm)
A bitSet stores bits (elements with only two states) in packed internal format and supports a variety...
static constexpr const zero Zero
Global zero (0)
autoPtr< mapPolyMesh > changeMesh(polyMesh &mesh, const bool inflate, const bool syncParallel=true, const bool orderCells=false, const bool orderPoints=false)
Inplace changes mesh without change of patches.
virtual label start() const
Return start label of this patch in the polyMesh face list.
virtual bool init(const bool doInit)
Initialise all non-demand-driven data.
virtual void mapFields(const mapPolyMesh &mpm)
Map all fields in time using given map.
An abstract base class with a fat-interface to all derived classes covering all possible ways in whic...
Direct mesh changes based on v1.3 polyTopoChange syntax.
virtual bool init(const bool doInit)
Initialise all non-demand-driven data.
Abstract base class for geometry and/or topology changing fvMesh.
virtual void mapFields(const mapPolyMesh &mpm)
Map all fields in time using given map.
virtual bool update()
Update the mesh for both mesh motion and topology change.
virtual labelList selectRefineCells(const label maxCells, const label maxRefinement, const bitSet &candidateCell) const
Subset candidate cells for refinement.
void set(const bitSet &bitset)
Set specified bits from another bitset.
Ostream & endl(Ostream &os)
Add newline and flush stream.
HashTable< word > correctFluxes_
Fluxes to map.
T get(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
prefixOSstream Pout
OSstream wrapped stdout (std::cout) with parallel prefix.
bool test(const label pos) const
Test value at specified position, never auto-vivify entries.
DynamicList< T, SizeMin > & shrink()
Shrink the allocated space to the number of elements used.
void resize(const label nElem, const unsigned int val=0u)
Reset addressable list size, does not shrink the allocated size.
unsigned int count(const bool on=true) const
Count number of bits set.
void readDict()
Read the projection parameters from dictionary.
label min(const labelHashSet &set, label minValue=labelMax)
Find the min value in labelHashSet, optionally limited by second argument.
#define forAll(list, i)
Loop across all elements in list.
virtual bool writeObject(IOstreamOption streamOpt, const bool valid) const
Write using stream options.
All refinement history. Used in unrefinement.
void checkEightAnchorPoints(bitSet &protectedCell) const
Check all cells have 8 anchor points.
Info<< "Finished reading KIVA file"<< endl;cellShapeList cellShapes(nPoints);labelList cellZoning(nPoints, -1);const cellModel &hex=cellModel::ref(cellModel::HEX);labelList hexLabels(8);label activeCells=0;labelList pointMap(nPoints);forAll(pointMap, i){ pointMap[i]=i;}for(label i=0;i< nPoints;i++){ if(f[i] > 0.0) { hexLabels[0]=i;hexLabels[1]=i1tab[i];hexLabels[2]=i3tab[i1tab[i]];hexLabels[3]=i3tab[i];hexLabels[4]=i8tab[i];hexLabels[5]=i1tab[i8tab[i]];hexLabels[6]=i3tab[i1tab[i8tab[i]]];hexLabels[7]=i3tab[i8tab[i]];cellShapes[activeCells]=cellShape(hex, hexLabels);edgeList edges=cellShapes[activeCells].edges();forAll(edges, ei) { if(edges[ei].mag(points)< SMALL) { label start=pointMap[edges[ei].start()];while(start !=pointMap[start]) { start=pointMap[start];} label end=pointMap[edges[ei].end()];while(end !=pointMap[end]) { end=pointMap[end];} label minLabel=min(start, end);pointMap[start]=pointMap[end]=minLabel;} } cellZoning[activeCells]=idreg[i];activeCells++;}}cellShapes.setSize(activeCells);cellZoning.setSize(activeCells);forAll(cellShapes, celli){ cellShape &cs=cellShapes[celli];forAll(cs, i) { cs[i]=pointMap[cs[i]];} cs.collapse();}label bcIDs[11]={-1, 0, 2, 4, -1, 5, -1, 6, 7, 8, 9};const label nBCs=12;const word *kivaPatchTypes[nBCs]={ &wallPolyPatch::typeName, &wallPolyPatch::typeName, &wallPolyPatch::typeName, &wallPolyPatch::typeName, &symmetryPolyPatch::typeName, &wedgePolyPatch::typeName, &polyPatch::typeName, &polyPatch::typeName, &polyPatch::typeName, &polyPatch::typeName, &symmetryPolyPatch::typeName, &oldCyclicPolyPatch::typeName};enum patchTypeNames{ PISTON, VALVE, LINER, CYLINDERHEAD, AXIS, WEDGE, INFLOW, OUTFLOW, PRESIN, PRESOUT, SYMMETRYPLANE, CYCLIC};const char *kivaPatchNames[nBCs]={ "piston", "valve", "liner", "cylinderHead", "axis", "wedge", "inflow", "outflow", "presin", "presout", "symmetryPlane", "cyclic"};List< SLList< face > > pFaces[nBCs]
virtual bool write(const bool valid=true) const
Write using setting from DB.
static void fillNan(UList< scalar > &list)
Fill data block with NaN values.
messageStream Info
Information stream (uses stdout - output is on the master only)
DynamicList< T, SizeMin > & append(const T &val)
Append an element to the end of this list.
virtual void selectRefineCandidates(const scalar lowerRefineLevel, const scalar upperRefineLevel, const scalarField &vFld, bitSet &candidateCell) const
Select candidate cells for refinement.
The IOstreamOption is a simple container for options an IOstream can normally have.
bool readEntry(const word &keyword, T &val, enum keyType::option matchOpt=keyType::REGEX, bool mandatory=true) const
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
scalarField maxCellField(const volScalarField &) const
Get point max of connected cell.
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
gmvFile<< "tracers "<< particles.size()<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().x()<< ' ';}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().y()<< ' ';}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().z()<< ' ';}gmvFile<< nl;for(const word &name :lagrangianScalarNames){ IOField< scalar > fld(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
#define forAllIters(container, iter)
Iterate across all elements in the container object.
virtual autoPtr< mapPolyMesh > refine(const labelList &)
Refine cells. Update mesh and fields.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Macros for easy insertion into run-time selection tables.
errorManip< error > abort(error &err)
static tmp< GeometricField< Type, fvsPatchField, surfaceMesh > > interpolate(const GeometricField< Type, fvPatchField, volMesh > &tvf, const surfaceScalarField &faceFlux, Istream &schemeData)
Interpolate field onto faces using scheme given by Istream.
A collection of cell labels.
virtual labelList selectUnrefinePoints(const scalar unrefineLevel, const bitSet &markedCell, const scalarField &pFld) const
Select points that can be unrefined.
errorManipArg< error, int > exit(error &err, const int errNo=1)
Internal::FieldType & primitiveFieldRef(const bool updateAccessTime=true)
Return a reference to the internal field.
A HashTable similar to std::unordered_map.
const labelList & reverseFaceMap() const
Reverse face map.
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
void calculateProtectedCells(bitSet &unrefineableCell) const
Calculate cells that cannot be refined since would trigger.
Container with cells to refine. Refinement given as single direction.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
#define DebugInfo
Report an information message using Foam::Info.
forAllConstIters(mixture.phases(), phase)
const fvPatch & patch() const
Return patch.
Refinement of (split) hexes using polyTopoChange.
Boundary & boundaryFieldRef(const bool updateAccessTime=true)
Return a reference to the boundary field.
labelHashSet used(const bitSet &select)
Convert a bitset to a labelHashSet of the indices used.
bool dumpLevel_
Dump cellLevel for post-processing.
dimensioned< Type > sum(const DimensionedField< Type, GeoMesh > &df)
const labelList & faceMap() const
Old face map.
const dictionary & optionalSubDict(const word &keyword, enum keyType::option matchOpt=keyType::REGEX) const
Find and return a sub-dictionary, otherwise return this dictionary.
std::enable_if< std::is_same< bool, TypeT >::value, bool >::type set(const label i, bool val=true)
A bitSet::set() method for a list of bool.
Class containing mesh-to-mesh mapping information after a change in polyMesh topology.
const dimensionedScalar c
Speed of light in a vacuum.
const Time & time() const
Return the top-level database.
Addressing for all faces on surface of mesh. Can either be read from polyMesh or from triSurface....
virtual autoPtr< mapPolyMesh > unrefine(const labelList &)
Unrefine cells. Gets passed in centre points of cells to combine.
scalarField cellToPoint(const scalarField &vFld) const
A face is a list of labels corresponding to mesh vertices.
Smooth ATC in cells having a point to a set of patches supplied by type.
T getOrDefault(const word &keyword, const T &deflt, enum keyType::option matchOpt=keyType::REGEX) const
constant condensation/saturation model.
defineTypeNameAndDebug(combustionModel, 0)
scalarField maxPointField(const scalarField &) const
Get per cell max of connected point.
#define WarningInFunction
Report a warning using Foam::Warning.
A cell is defined as a list of faces with extra functionality.
Class to handle errors and exceptions in a simple, consistent stream-based manner.
void clear()
Clear the list, i.e. set addressable size to zero.
const Boundary & boundaryField() const
Return const-reference to the boundary field.
virtual bool writeObject(IOstreamOption streamOpt, const bool valid) const
Write the underlying polyMesh and other data.