67 void Foam::meshRefinement::calcNeighbourData
78 if (neiLevel.size() != nBoundaryFaces || neiCc.size() != nBoundaryFaces)
80 FatalErrorIn(
"meshRefinement::calcNeighbour(..)") <<
"nBoundaries:"
81 << nBoundaryFaces <<
" neiLevel:" << neiLevel.size()
91 const polyPatch& pp = patches[patchI];
103 neiLevel[bFaceI] = cellLevel[faceCells[i]];
104 neiCc[bFaceI] = cellCentres[faceCells[i]];
108 else if (addedPatchIDSet.found(patchI))
119 fn /=
mag(fn)+VSMALL;
121 label own = faceCells[i];
122 label ownLevel = cellLevel[own];
126 scalar
d = ((faceCentres[i] - cellCentres[own]) & fn);
127 if (faceLevel > ownLevel)
132 neiLevel[bFaceI] = cellLevel[ownLevel];
134 neiCc[bFaceI] = faceCentres[i] + d*fn;
142 neiLevel[bFaceI] = cellLevel[faceCells[i]];
143 neiCc[bFaceI] = faceCentres[i];
157 void Foam::meshRefinement::updateIntersections(
const labelList& changedFaces)
159 const pointField& cellCentres = mesh_.cellCentres();
165 label nMasterFaces = 0;
166 forAll(isMasterFace, faceI)
168 if (isMasterFace.get(faceI) == 1)
173 reduce(nMasterFaces, sumOp<label>());
175 label nChangedFaces = 0;
178 if (isMasterFace.get(changedFaces[i]) == 1)
183 reduce(nChangedFaces, sumOp<label>());
185 Info<<
"Edge intersection testing:" <<
nl
186 <<
" Number of edges : " << nMasterFaces <<
nl
187 <<
" Number of edges to retest : " << nChangedFaces
193 labelList neiLevel(mesh_.nFaces()-mesh_.nInternalFaces());
194 pointField neiCc(mesh_.nFaces()-mesh_.nInternalFaces());
195 calcNeighbourData(neiLevel, neiCc);
203 label faceI = changedFaces[i];
204 label own = mesh_.faceOwner()[faceI];
206 start[i] = cellCentres[own];
207 if (mesh_.isInternalFace(faceI))
209 end[i] = cellCentres[mesh_.faceNeighbour()[faceI]];
213 end[i] = neiCc[faceI-mesh_.nInternalFaces()];
221 surfaces_.findHigherIntersection
234 surfaceIndex_[changedFaces[i]] = surfaceHit[i];
241 label nHits = countHits();
244 Info<<
" Number of intersected edges : " << nTotHits <<
endl;
247 setInstance(mesh_.facesInstance());
253 Pout<<
"meshRefinement::checkData() : Checking refinement structure."
255 meshCutter_.checkMesh();
257 Pout<<
"meshRefinement::checkData() : Checking refinement levels."
259 meshCutter_.checkRefinementLevels(1,
labelList(0));
262 label nBnd = mesh_.nFaces()-mesh_.nInternalFaces();
264 Pout<<
"meshRefinement::checkData() : Checking synchronization."
274 mesh_.nInternalFaces()
287 testSyncBoundaryFaceList
290 "testing faceCentres : ",
300 calcNeighbourData(neiLevel, neiCc);
308 start[faceI] = mesh_.cellCentres()[mesh_.faceOwner()[faceI]];
310 if (mesh_.isInternalFace(faceI))
312 end[faceI] = mesh_.cellCentres()[mesh_.faceNeighbour()[faceI]];
316 end[faceI] = neiCc[faceI-mesh_.nInternalFaces()];
324 surfaces_.findHigherIntersection
340 mesh_.nInternalFaces()
348 if (surfaceIndex_[faceI] != surfaceHit[faceI])
350 if (mesh_.isInternalFace(faceI))
353 <<
"Internal face:" << faceI
354 <<
" fc:" << mesh_.faceCentres()[faceI]
355 <<
" cached surfaceIndex_:" << surfaceIndex_[faceI]
356 <<
" current:" << surfaceHit[faceI]
358 << mesh_.cellCentres()[mesh_.faceOwner()[faceI]]
360 << mesh_.cellCentres()[mesh_.faceNeighbour()[faceI]]
366 != neiHit[faceI-mesh_.nInternalFaces()]
370 <<
"Boundary face:" << faceI
371 <<
" fc:" << mesh_.faceCentres()[faceI]
372 <<
" cached surfaceIndex_:" << surfaceIndex_[faceI]
373 <<
" current:" << surfaceHit[faceI]
375 << mesh_.cellCentres()[mesh_.faceOwner()[faceI]]
376 <<
" end:" << end[faceI]
386 mesh_.nFaces()-mesh_.nInternalFaces(),
387 mesh_.nInternalFaces()
390 labelList neiBoundarySurface(boundarySurface);
399 testSyncBoundaryFaceList
402 "testing surfaceIndex() : ",
410 Pout<<
"meshRefinement::checkData() : Counting duplicate faces."
418 identity(mesh_.nFaces()-mesh_.nInternalFaces())
419 + mesh_.nInternalFaces()
429 if (duplicateFace[i] != -1)
435 Pout<<
"meshRefinement::checkData() : Found " << nDup
436 <<
" duplicate pairs of faces." <<
endl;
443 meshCutter_.setInstance(inst);
444 surfaceIndex_.instance() = inst;
473 mesh_.updateMesh(map);
476 if (map().hasMotionPoints())
478 mesh_.movePoints(map().preMotionPoints());
488 mesh_.setInstance(oldInstance_);
497 map().reverseFaceMap(),
504 updateMesh(map, newExposedFaces);
512 void Foam::meshRefinement::getCoupledRegionMaster
514 const globalIndex& globalCells,
516 const regionSplit& globalRegion,
517 Map<label>& regionToMaster
520 const polyBoundaryMesh& patches = mesh_.boundaryMesh();
524 const polyPatch& pp = patches[patchI];
526 if (isA<processorPolyPatch>(pp))
530 label faceI = pp.start()+i;
532 if (!blockedFace[faceI])
538 label cellI = mesh_.faceOwner()[faceI];
539 label globalCellI = globalCells.toGlobal(cellI);
542 regionToMaster.
find(globalRegion[cellI]);
544 if (iter != regionToMaster.end())
546 label master = iter();
547 iter() =
min(master, globalCellI);
551 regionToMaster.insert
568 void Foam::meshRefinement::calcLocalRegions
570 const globalIndex& globalCells,
572 const Map<label>& coupledRegionToMaster,
575 Map<label>& globalToLocalRegion,
580 globalToLocalRegion.resize(globalRegion.size());
581 DynamicList<point> localCc(globalRegion.size()/2);
582 DynamicList<scalar> localWts(globalRegion.size()/2);
584 forAll(globalRegion, cellI)
587 coupledRegionToMaster.
find(globalRegion[cellI]);
589 if (fndMaster != coupledRegionToMaster.end())
592 if (globalCells.toGlobal(cellI) == fndMaster())
595 globalToLocalRegion.insert(globalRegion[cellI], localCc.size());
596 localCc.append(mesh_.cellCentres()[cellI]);
597 localWts.append(cellWeights[cellI]);
603 if (globalToLocalRegion.insert(globalRegion[cellI], localCc.size()))
605 localCc.append(mesh_.cellCentres()[cellI]);
606 localWts.append(cellWeights[cellI]);
611 localPoints.transfer(localCc);
612 localWeights.transfer(localWts);
614 if (localPoints.size() != globalToLocalRegion.size())
617 <<
"localPoints:" << localPoints.size()
618 <<
" globalToLocalRegion:" << globalToLocalRegion.size()
624 Foam::label Foam::meshRefinement::getShiftedRegion
626 const globalIndex& indexer,
627 const Map<label>& globalToLocalRegion,
628 const Map<label>& coupledRegionToShifted,
629 const label globalRegion
633 globalToLocalRegion.
find(globalRegion);
635 if (iter != globalToLocalRegion.end())
638 return indexer.toGlobal(iter());
642 return coupledRegionToShifted[globalRegion];
648 void Foam::meshRefinement::addUnique(
const label elem,
labelList& lst)
652 label sz = lst.size();
659 void Foam::meshRefinement::calcRegionRegions
662 const Map<label>& globalToLocalRegion,
663 const Map<label>& coupledRegionToMaster,
668 globalIndex shiftIndexer(globalToLocalRegion.size());
671 Map<label> coupledRegionToShifted(coupledRegionToMaster.size());
674 label region = iter.key();
678 if (fndRegion != globalToLocalRegion.end())
681 coupledRegionToShifted.insert
684 shiftIndexer.toGlobal(fndRegion())
699 PtrList<HashSet<edge, Hash<edge> > > regionConnectivity(
Pstream::nProcs());
700 forAll(regionConnectivity, procI)
704 regionConnectivity.set
707 new HashSet<edge, Hash<edge> >
709 coupledRegionToShifted.size()
718 regionRegions.setSize(globalToLocalRegion.size());
722 for (label faceI = 0; faceI < mesh_.nInternalFaces(); faceI++)
724 label ownRegion = globalRegion[mesh_.faceOwner()[faceI]];
725 label neiRegion = globalRegion[mesh_.faceNeighbour()[faceI]];
727 if (ownRegion != neiRegion)
729 label shiftOwnRegion = getShiftedRegion
733 coupledRegionToShifted,
736 label shiftNeiRegion = getShiftedRegion
740 coupledRegionToShifted,
749 if (shiftIndexer.isLocal(shiftOwnRegion))
751 label localI = shiftIndexer.toLocal(shiftOwnRegion);
752 addUnique(shiftNeiRegion, regionRegions[localI]);
756 label masterProc = shiftIndexer.whichProcID(shiftOwnRegion);
757 regionConnectivity[masterProc].insert
759 edge(shiftOwnRegion, shiftNeiRegion)
763 if (shiftIndexer.isLocal(shiftNeiRegion))
765 label localI = shiftIndexer.toLocal(shiftNeiRegion);
766 addUnique(shiftOwnRegion, regionRegions[localI]);
770 label masterProc = shiftIndexer.whichProcID(shiftNeiRegion);
771 regionConnectivity[masterProc].insert
773 edge(shiftOwnRegion, shiftNeiRegion)
781 forAll(regionConnectivity, procI)
786 str << regionConnectivity[procI];
790 forAll(regionConnectivity, procI)
795 str >> regionConnectivity[procI];
800 forAll(regionConnectivity, procI)
806 HashSet<edge, Hash<edge> >::const_iterator iter =
807 regionConnectivity[procI].begin();
808 iter != regionConnectivity[procI].end();
812 const edge&
e = iter.key();
814 bool someLocal =
false;
815 if (shiftIndexer.isLocal(e[0]))
817 label localI = shiftIndexer.toLocal(e[0]);
818 addUnique(e[1], regionRegions[localI]);
821 if (shiftIndexer.isLocal(e[1]))
823 label localI = shiftIndexer.toLocal(e[1]);
824 addUnique(e[0], regionRegions[localI]);
831 <<
"Received from processor " << procI
832 <<
" connection " << e
833 <<
" where none of the elements is local to me."
845 Foam::meshRefinement::meshRefinement
848 const scalar mergeDistance,
849 const bool overwrite,
855 mergeDistance_(mergeDistance),
856 overwrite_(overwrite),
868 mesh_.facesInstance(),
882 mesh_.facesInstance(),
896 mesh_.facesInstance(),
912 mesh_.facesInstance(),
924 updateIntersections(
identity(mesh_.nFaces()));
937 forAll(surfaceIndex_, faceI)
939 if (surfaceIndex_[faceI] >= 0 && isMasterFace.
get(faceI) == 1)
958 regionSplit globalRegion(mesh_, blockedFace, explicitConnections);
978 Map<label> coupledRegionToMaster(mesh_.nFaces()-mesh_.nInternalFaces());
979 getCoupledRegionMaster
984 coupledRegionToMaster
998 coupledRegionToMaster,
1001 globalToLocalRegion,
1013 if (isA<geomDecomp>(decomposer))
1015 regionDistribution = decomposer.
decompose(localPoints, localWeights);
1023 globalToLocalRegion,
1024 coupledRegionToMaster,
1029 regionDistribution = decomposer.
decompose
1043 Map<label> regionToDist(coupledRegionToMaster.size());
1046 label region = iter.key();
1050 if (regionFnd != globalToLocalRegion.
end())
1053 regionToDist.insert(iter.key(), regionDistribution[regionFnd()]);
1058 regionToDist.insert(iter.key(), labelMax);
1068 forAll(globalRegion, cellI)
1071 regionToDist.
find(globalRegion[cellI]);
1073 if (fndRegion != regionToDist.
end())
1080 label localRegionI = globalToLocalRegion[globalRegion[cellI]];
1082 distribution[cellI] = regionDistribution[localRegionI];
1092 const bool keepZoneFaces,
1093 const bool keepBaffles,
1111 if (keepZoneFaces || keepBaffles)
1115 boolList blockedFace(mesh_.nFaces(),
true);
1116 label nUnblocked = 0;
1138 if (fzNames[surfI].size())
1141 label zoneI = fZones.
findZoneID(fzNames[surfI]);
1143 const faceZone& fZone = fZones[zoneI];
1147 if (blockedFace[fZone[i]])
1149 blockedFace[fZone[i]] =
false;
1172 Info<<
"Found " << nUnblocked
1173 <<
" zoned faces to keep together." <<
endl;
1179 couples = getDuplicateFaces
1181 identity(mesh_.nFaces()-mesh_.nInternalFaces())
1182 +mesh_.nInternalFaces()
1189 Info<<
"Found " << nCouples <<
" baffles to keep together."
1193 if (nUnblocked > 0 || nCouples > 0)
1195 Info<<
"Applying special decomposition to keep baffles"
1196 <<
" and zoned faces together." <<
endl;
1198 distribution = decomposeCombineRegions
1210 Info<<
"Calculated decomposition:" <<
endl;
1211 forAll(nProcCells, procI)
1213 Info<<
" " << procI <<
'\t' << nProcCells[procI] <<
endl;
1222 mesh_.cellCentres(),
1232 mesh_.cellCentres(),
1240 Pout<<
"Wanted distribution:" << nProcCells <<
endl;
1245 Pout<<
"Wanted resulting decomposition:" <<
endl;
1246 forAll(nProcCells, procI)
1248 Pout<<
" " << procI <<
'\t' << nProcCells[procI] <<
endl;
1265 label nBoundaryFaces = 0;
1267 forAll(surfaceIndex_, faceI)
1269 if (surfaceIndex_[faceI] != -1)
1278 forAll(surfaceIndex_, faceI)
1280 if (surfaceIndex_[faceI] != -1)
1282 surfaceFaces[nBoundaryFaces++] = faceI;
1285 return surfaceFaces;
1292 const faceList& faces = mesh_.faces();
1296 label nBoundaryPoints = 0;
1298 forAll(surfaceIndex_, faceI)
1300 if (surfaceIndex_[faceI] != -1)
1302 const face&
f = faces[faceI];
1306 if (isBoundaryPoint.set(f[fp], 1u))
1343 labelList boundaryPoints(nBoundaryPoints);
1344 nBoundaryPoints = 0;
1345 forAll(isBoundaryPoint, pointI)
1347 if (isBoundaryPoint.get(pointI) == 1u)
1349 boundaryPoints[nBoundaryPoints++] = pointI;
1353 return boundaryPoints;
1371 const polyPatch& pp = patches[patchIDs[i]];
1373 nFaces += pp.size();
1382 const polyPatch& pp = patches[patchIDs[i]];
1384 label meshFaceI = pp.
start();
1388 addressing[nFaces++] = meshFaceI++;
1417 pointPatches.
size(),
1418 slipPointPatchVectorField::typeName
1423 patchFieldTypes[adaptPatchIDs[i]] =
1424 fixedValuePointPatchVectorField::typeName;
1427 forAll(pointPatches, patchI)
1429 if (isA<globalPointPatch>(pointPatches[patchI]))
1431 patchFieldTypes[patchI] = globalPointPatchVectorField::typeName;
1433 else if (isA<processorPointPatch>(pointPatches[patchI]))
1435 patchFieldTypes[patchI] = calculatedPointPatchVectorField::typeName;
1445 "pointDisplacement",
1481 "meshRefinement::checkCoupledFaceZones(const polyMesh&)"
1482 ) <<
"faceZones are not synchronised on processors." <<
nl
1483 <<
"Processor " << procI <<
" has faceZones "
1484 << zoneNames[procI] <<
nl
1486 <<
" has faceZones "
1500 const faceZone& fZone = fZones[zoneI];
1508 if (faceToZone[bFaceI] == -1)
1510 faceToZone[bFaceI] = zoneI;
1512 else if (faceToZone[bFaceI] == zoneI)
1516 "meshRefinement::checkCoupledFaceZones(const polyMesh&)"
1517 ) <<
"Face " << fZone[i] <<
" in zone "
1519 <<
" is twice in zone!"
1526 "meshRefinement::checkCoupledFaceZones(const polyMesh&)"
1527 ) <<
"Face " << fZone[i] <<
" in zone "
1529 <<
" is also in zone "
1530 << fZones[faceToZone[bFaceI]].
name()
1542 if (faceToZone[i] != neiFaceToZone[i])
1546 "meshRefinement::checkCoupledFaceZones(const polyMesh&)"
1548 <<
" is in zone " << faceToZone[i]
1549 <<
", its coupled face is in zone " << neiFaceToZone[i]
1560 const word& patchName,
1561 const word& patchType
1567 label patchI = polyPatches.
findPatchID(patchName);
1570 if (polyPatches[patchI].
type() == patchType)
1588 label insertPatchI = polyPatches.
size();
1589 label startFaceI = mesh.
nFaces();
1591 forAll(polyPatches, patchI)
1593 const polyPatch& pp = polyPatches[patchI];
1595 if (isA<processorPolyPatch>(pp))
1597 insertPatchI = patchI;
1598 startFaceI = pp.
start();
1610 label sz = polyPatches.
size();
1640 addPatchFields<volScalarField>
1645 addPatchFields<volVectorField>
1650 addPatchFields<volSphericalTensorField>
1655 addPatchFields<volSymmTensorField>
1660 addPatchFields<volTensorField>
1668 addPatchFields<surfaceScalarField>
1673 addPatchFields<surfaceVectorField>
1678 addPatchFields<surfaceSphericalTensorField>
1683 addPatchFields<surfaceSymmTensorField>
1688 addPatchFields<surfaceTensorField>
1697 for (label i = 0; i < insertPatchI; i++)
1702 for (label i = insertPatchI; i < sz; i++)
1707 oldToNew[sz] = insertPatchI;
1710 polyPatches.
reorder(oldToNew);
1713 reorderPatchFields<volScalarField>(
mesh, oldToNew);
1714 reorderPatchFields<volVectorField>(
mesh, oldToNew);
1715 reorderPatchFields<volSphericalTensorField>(
mesh, oldToNew);
1716 reorderPatchFields<volSymmTensorField>(
mesh, oldToNew);
1717 reorderPatchFields<volTensorField>(
mesh, oldToNew);
1718 reorderPatchFields<surfaceScalarField>(
mesh, oldToNew);
1719 reorderPatchFields<surfaceVectorField>(
mesh, oldToNew);
1720 reorderPatchFields<surfaceSphericalTensorField>(
mesh, oldToNew);
1721 reorderPatchFields<surfaceSymmTensorField>(
mesh, oldToNew);
1722 reorderPatchFields<surfaceTensorField>(
mesh, oldToNew);
1724 return insertPatchI;
1734 label meshedI =
findIndex(meshedPatches_, name);
1739 return mesh_.boundaryMesh().findPatchID(name);
1744 label patchI = addPatch(mesh_, name, type);
1747 label sz = meshedPatches_.size();
1748 meshedPatches_.setSize(sz+1);
1749 meshedPatches_[sz] =
name;
1758 labelList patchIDs(meshedPatches_.size());
1759 forAll(meshedPatches_, i)
1761 patchIDs[i] = mesh_.boundaryMesh().findPatchID(meshedPatches_[i]);
1763 if (patchIDs[i] == -1)
1766 <<
"Problem : did not find patch " << meshedPatches_[i]
1777 const point& keepPoint
1786 label cellI = mesh_.findCell(keepPoint);
1790 regionI = cellRegion[cellI];
1799 "meshRefinement::splitMeshRegions(const point&)"
1800 ) <<
"Point " << keepPoint
1801 <<
" is not inside the mesh." <<
nl
1802 <<
"Bounding box of the mesh:" << mesh_.globalData().bb()
1811 forAll(cellRegion, cellI)
1813 if (cellRegion[cellI] != regionI)
1815 cellsToRemove.
append(cellI);
1818 cellsToRemove.shrink();
1820 label nCellsToKeep = mesh_.nCells() - cellsToRemove.
size();
1823 Info<<
"Keeping all cells in region " << regionI
1824 <<
" containing point " << keepPoint << endl
1825 <<
"Selected for keeping : "
1827 <<
" cells." <<
endl;
1835 if (exposedFaces.
size())
1839 "meshRefinement::splitMeshRegions(const point&)"
1840 ) <<
"Removing non-reachable cells should only expose boundary faces"
1845 return doRemoveCells
1862 meshCutter_.distribute(map);
1891 geometry[i].distribute
1899 if (faceMap.
valid())
1902 geometry[i].instance() = geometry[i].time().timeName();
1920 updateMesh(map, changedFaces, dummyMap, dummyMap, dummyMap);
1932 meshCutter_.storeData
1953 meshCutter_.updateMesh
1962 updateList(map.
faceMap(), -1, surfaceIndex_);
1965 updateIntersections(changedFaces);
1970 labelList& data = userFaceData_[i].second();
1972 if (userFaceData_[i].first() == KEEPALL)
1975 updateList(map.
faceMap(), -1, data);
1977 else if (userFaceData_[i].first() == MASTERONLY)
1982 forAll(newFaceData, faceI)
1984 label oldFaceI = map.
faceMap()[faceI];
1988 newFaceData[faceI] = data[oldFaceI];
2004 label oldFaceI = map.
faceMap()[faceI];
2008 if (reverseFaceMap[oldFaceI] != faceI)
2011 reverseFaceMap[oldFaceI] = -1;
2018 forAll(newFaceData, faceI)
2020 label oldFaceI = map.
faceMap()[faceI];
2024 if (reverseFaceMap[oldFaceI] == faceI)
2026 newFaceData[faceI] = data[oldFaceI];
2040 && meshCutter_.write()
2041 && surfaceIndex_.write();
2067 writeOk = writeOk && s.
write();
2083 <<
" : cells(local):" << mesh_.nCells()
2084 <<
" faces(local):" << mesh_.nFaces()
2085 <<
" points(local):" << mesh_.nPoints()
2100 const labelList& cellLevel = meshCutter_.cellLevel();
2106 nCells[cellLevel[cellI]]++;
2112 Info<<
"Cells per refinement level:" <<
endl;
2115 Info<<
" " << levelI <<
'\t' << nCells[levelI]
2125 if (overwrite_ && mesh_.time().timeIndex() == 0)
2127 return oldInstance_;
2131 return mesh_.time().timeName();
2151 zeroGradientFvPatchScalarField::typeName
2154 const labelList& cellLevel = meshCutter_.cellLevel();
2156 forAll(volRefLevel, cellI)
2158 volRefLevel[cellI] = cellLevel[cellI];
2161 volRefLevel.
write();
2181 const labelList& pointLevel = meshCutter_.pointLevel();
2183 forAll(pointRefLevel, pointI)
2185 pointRefLevel[pointI] = pointLevel[pointI];
2188 pointRefLevel.
write();
2195 const pointField& cellCentres = mesh_.cellCentres();
2197 OFstream str(prefix +
"_edges.obj");
2199 Pout<<
"meshRefinement::dumpIntersections :"
2200 <<
" Writing cellcentre-cellcentre intersections to file "
2208 labelList neiLevel(mesh_.nFaces()-mesh_.nInternalFaces());
2209 pointField neiCc(mesh_.nFaces()-mesh_.nInternalFaces());
2210 calcNeighbourData(neiLevel, neiCc);
2212 labelList intersectionFaces(intersectedFaces());
2218 forAll(intersectionFaces, i)
2220 label faceI = intersectionFaces[i];
2221 start[i] = cellCentres[mesh_.faceOwner()[faceI]];
2223 if (mesh_.isInternalFace(faceI))
2225 end[i] = cellCentres[mesh_.faceNeighbour()[faceI]];
2229 end[i] = neiCc[faceI-mesh_.nInternalFaces()];
2236 surfaces_.findAnyIntersection
2244 forAll(intersectionFaces, i)
2246 if (surfaceHit[i] != -1)
2254 str <<
"l " << vertI-2 <<
' ' << vertI-1 <<
nl
2255 <<
"l " << vertI-1 <<
' ' << vertI <<
nl;
2263 "objToVTK " + prefix +
"_edges.obj " + prefix +
"_edges.vtk > /dev/null"
2281 if (flag & SCALARLEVELS)
2283 dumpRefinementLevel();
2285 if (flag & OBJINTERSECTIONS && prefix.size())
2287 dumpIntersections(prefix);