mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: renumberMesh: changed api of renumber library.
Changed API. Made bandCompression proper CutHillMcKey. Better stats.
This commit is contained in:
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||||
\\/ M anispulation |
|
\\/ M anispulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -105,6 +105,44 @@ label getBand(const labelList& owner, const labelList& neighbour)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Calculate band of matrix
|
||||||
|
void getBand
|
||||||
|
(
|
||||||
|
const label nCells,
|
||||||
|
const labelList& owner,
|
||||||
|
const labelList& neighbour,
|
||||||
|
label& bandwidth,
|
||||||
|
scalar& profile, // scalar to avoid overflow
|
||||||
|
scalar& sumSqrIntersect // scalar to avoid overflow
|
||||||
|
)
|
||||||
|
{
|
||||||
|
labelList cellBandwidth(nCells, 0);
|
||||||
|
scalarField nIntersect(nCells, 0.0);
|
||||||
|
|
||||||
|
forAll(neighbour, faceI)
|
||||||
|
{
|
||||||
|
label own = owner[faceI];
|
||||||
|
label nei = neighbour[faceI];
|
||||||
|
|
||||||
|
// Note: mag not necessary for correct (upper-triangular) ordering.
|
||||||
|
label diff = nei-own;
|
||||||
|
cellBandwidth[nei] = max(cellBandwidth[nei], diff);
|
||||||
|
}
|
||||||
|
|
||||||
|
forAll(nIntersect, cellI)
|
||||||
|
{
|
||||||
|
for (label rowI = cellI-cellBandwidth[cellI]; rowI < cellI; rowI++)
|
||||||
|
{
|
||||||
|
nIntersect[rowI]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bandwidth = max(cellBandwidth);
|
||||||
|
profile = sum(cellBandwidth);
|
||||||
|
sumSqrIntersect = sum(Foam::sqr(nIntersect));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Determine upper-triangular face order
|
// Determine upper-triangular face order
|
||||||
labelList getFaceOrder
|
labelList getFaceOrder
|
||||||
(
|
(
|
||||||
@ -488,21 +526,12 @@ labelList regionRenumber
|
|||||||
|
|
||||||
const fvMesh& subMesh = subsetter.subMesh();
|
const fvMesh& subMesh = subsetter.subMesh();
|
||||||
|
|
||||||
labelList subReverseCellOrder = method.renumber
|
labelList subCellOrder = method.renumber
|
||||||
(
|
(
|
||||||
subMesh,
|
subMesh,
|
||||||
subMesh.cellCentres()
|
subMesh.cellCentres()
|
||||||
);
|
);
|
||||||
|
|
||||||
labelList subCellOrder
|
|
||||||
(
|
|
||||||
invert
|
|
||||||
(
|
|
||||||
subMesh.nCells(),
|
|
||||||
subReverseCellOrder
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
// Restore state
|
// Restore state
|
||||||
UPstream::parRun() = oldParRun;
|
UPstream::parRun() = oldParRun;
|
||||||
|
|
||||||
@ -556,13 +585,46 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
const bool overwrite = args.optionFound("overwrite");
|
const bool overwrite = args.optionFound("overwrite");
|
||||||
|
|
||||||
label band = getBand(mesh.faceOwner(), mesh.faceNeighbour());
|
label band;
|
||||||
|
scalar profile;
|
||||||
|
scalar sumSqrIntersect;
|
||||||
|
getBand
|
||||||
|
(
|
||||||
|
mesh.nCells(),
|
||||||
|
mesh.faceOwner(),
|
||||||
|
mesh.faceNeighbour(),
|
||||||
|
band,
|
||||||
|
profile,
|
||||||
|
sumSqrIntersect
|
||||||
|
);
|
||||||
|
|
||||||
Info<< "Mesh size: " << returnReduce(mesh.nCells(), sumOp<label>()) << nl
|
if (band != getBand(mesh.faceOwner(), mesh.faceNeighbour()))
|
||||||
<< "Band before renumbering: "
|
{
|
||||||
<< returnReduce(band, maxOp<label>()) << nl << endl;
|
FatalErrorIn(args.executable())
|
||||||
|
<< "band:" << band
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
reduce(band, maxOp<label>());
|
||||||
|
reduce(profile, sumOp<scalar>());
|
||||||
|
scalar rmsFrontwidth = Foam::sqrt
|
||||||
|
(
|
||||||
|
returnReduce
|
||||||
|
(
|
||||||
|
sumSqrIntersect,
|
||||||
|
sumOp<scalar>()
|
||||||
|
)
|
||||||
|
/ mesh.globalData().nTotalCells()
|
||||||
|
);
|
||||||
|
|
||||||
|
Info<< "Mesh size: " << mesh.globalData().nTotalCells() << nl
|
||||||
|
<< "Before renumbering :" << nl
|
||||||
|
<< " band : " << band << nl
|
||||||
|
<< " profile : " << profile << nl
|
||||||
|
<< " rms frontwidth : " << rmsFrontwidth << nl
|
||||||
|
<< endl;
|
||||||
|
|
||||||
bool sortCoupledFaceCells = false;
|
bool sortCoupledFaceCells = false;
|
||||||
bool writeMaps = false;
|
bool writeMaps = false;
|
||||||
bool orderPoints = false;
|
bool orderPoints = false;
|
||||||
@ -803,14 +865,13 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Detemines old to new cell ordering
|
// Detemines sorted back to original cell ordering
|
||||||
labelList reverseCellOrder = renumberPtr().renumber
|
cellOrder = renumberPtr().renumber
|
||||||
(
|
(
|
||||||
mesh,
|
mesh,
|
||||||
mesh.cellCentres()
|
mesh.cellCentres()
|
||||||
);
|
);
|
||||||
|
labelList reverseCellOrder = invert(mesh.nCells(), cellOrder);
|
||||||
cellOrder = invert(mesh.nCells(), reverseCellOrder);
|
|
||||||
|
|
||||||
|
|
||||||
if (sortCoupledFaceCells)
|
if (sortCoupledFaceCells)
|
||||||
@ -969,11 +1030,36 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
band = getBand(mesh.faceOwner(), mesh.faceNeighbour());
|
{
|
||||||
|
label band;
|
||||||
Info<< "Band after renumbering: "
|
scalar profile;
|
||||||
<< returnReduce(band, maxOp<label>()) << nl << endl;
|
scalar sumSqrIntersect;
|
||||||
|
getBand
|
||||||
|
(
|
||||||
|
mesh.nCells(),
|
||||||
|
mesh.faceOwner(),
|
||||||
|
mesh.faceNeighbour(),
|
||||||
|
band,
|
||||||
|
profile,
|
||||||
|
sumSqrIntersect
|
||||||
|
);
|
||||||
|
reduce(band, maxOp<label>());
|
||||||
|
reduce(profile, sumOp<scalar>());
|
||||||
|
scalar rmsFrontwidth = Foam::sqrt
|
||||||
|
(
|
||||||
|
returnReduce
|
||||||
|
(
|
||||||
|
sumSqrIntersect,
|
||||||
|
sumOp<scalar>()
|
||||||
|
)
|
||||||
|
/ mesh.globalData().nTotalCells()
|
||||||
|
);
|
||||||
|
Info<< "After renumbering :" << nl
|
||||||
|
<< " band : " << band << nl
|
||||||
|
<< " profile : " << profile << nl
|
||||||
|
<< " rms frontwidth : " << rmsFrontwidth << nl
|
||||||
|
<< endl;
|
||||||
|
}
|
||||||
|
|
||||||
if (orderPoints)
|
if (orderPoints)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -50,7 +50,7 @@ method CuthillMcKee;
|
|||||||
|
|
||||||
manualCoeffs
|
manualCoeffs
|
||||||
{
|
{
|
||||||
// In system directory: old to new labelIOList
|
// In system directory: new-to-original (i.e. order) labelIOList
|
||||||
dataFile "cellMap";
|
dataFile "cellMap";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -32,6 +32,10 @@ Description
|
|||||||
|
|
||||||
#include "bandCompression.H"
|
#include "bandCompression.H"
|
||||||
#include "SLList.H"
|
#include "SLList.H"
|
||||||
|
#include "IOstreams.H"
|
||||||
|
#include "DynamicList.H"
|
||||||
|
#include "ListOps.H"
|
||||||
|
#include "PackedBoolList.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -43,24 +47,50 @@ Foam::labelList Foam::bandCompression(const labelListList& cellCellAddressing)
|
|||||||
// the business bit of the renumbering
|
// the business bit of the renumbering
|
||||||
SLList<label> nextCell;
|
SLList<label> nextCell;
|
||||||
|
|
||||||
labelList visited(cellCellAddressing.size());
|
PackedBoolList visited(cellCellAddressing.size());
|
||||||
|
|
||||||
label currentCell;
|
|
||||||
label cellInOrder = 0;
|
label cellInOrder = 0;
|
||||||
|
|
||||||
// reset the visited cells list
|
|
||||||
|
// Work arrays. Kept outside of loop to minimise allocations.
|
||||||
|
// - neighbour cells
|
||||||
|
DynamicList<label> nbrs;
|
||||||
|
// - corresponding weights
|
||||||
|
DynamicList<label> weights;
|
||||||
|
|
||||||
|
// - ordering
|
||||||
|
labelList order;
|
||||||
|
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
// For a disconnected region find the lowest connected cell.
|
||||||
|
|
||||||
|
label currentCell = -1;
|
||||||
|
label minWeight = labelMax;
|
||||||
|
|
||||||
forAll(visited, cellI)
|
forAll(visited, cellI)
|
||||||
{
|
{
|
||||||
visited[cellI] = 0;
|
// find the lowest connected cell that has not been visited yet
|
||||||
|
if (!visited[cellI])
|
||||||
|
{
|
||||||
|
if (cellCellAddressing[cellI].size() < minWeight)
|
||||||
|
{
|
||||||
|
minWeight = cellCellAddressing[cellI].size();
|
||||||
|
currentCell = cellI;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// loop over the cells
|
|
||||||
forAll(visited, cellI)
|
if (currentCell == -1)
|
||||||
{
|
{
|
||||||
// find the first cell that has not been visited yet
|
break;
|
||||||
if (visited[cellI] == 0)
|
}
|
||||||
{
|
|
||||||
currentCell = cellI;
|
|
||||||
|
// Starting from currentCell walk breadth-first
|
||||||
|
|
||||||
|
|
||||||
// use this cell as a start
|
// use this cell as a start
|
||||||
nextCell.append(currentCell);
|
nextCell.append(currentCell);
|
||||||
@ -74,7 +104,7 @@ Foam::labelList Foam::bandCompression(const labelListList& cellCellAddressing)
|
|||||||
{
|
{
|
||||||
currentCell = nextCell.removeHead();
|
currentCell = nextCell.removeHead();
|
||||||
|
|
||||||
if (visited[currentCell] == 0)
|
if (!visited[currentCell])
|
||||||
{
|
{
|
||||||
visited[currentCell] = 1;
|
visited[currentCell] = 1;
|
||||||
|
|
||||||
@ -83,17 +113,30 @@ Foam::labelList Foam::bandCompression(const labelListList& cellCellAddressing)
|
|||||||
cellInOrder++;
|
cellInOrder++;
|
||||||
|
|
||||||
// find if the neighbours have been visited
|
// find if the neighbours have been visited
|
||||||
const labelList& neighbours =
|
const labelList& neighbours = cellCellAddressing[currentCell];
|
||||||
cellCellAddressing[currentCell];
|
|
||||||
|
// Add in increasing order of connectivity
|
||||||
|
|
||||||
|
// 1. Count neighbours of unvisited neighbours
|
||||||
|
nbrs.clear();
|
||||||
|
weights.clear();
|
||||||
|
|
||||||
forAll(neighbours, nI)
|
forAll(neighbours, nI)
|
||||||
{
|
{
|
||||||
if (visited[neighbours[nI]] == 0)
|
label nbr = neighbours[nI];
|
||||||
|
if (!visited[nbr])
|
||||||
{
|
{
|
||||||
// not visited, add to the list
|
// not visited, add to the list
|
||||||
nextCell.append(neighbours[nI]);
|
nbrs.append(nbr);
|
||||||
|
weights.append(cellCellAddressing[nbr].size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 2. Sort
|
||||||
|
sortedOrder(weights, order);
|
||||||
|
// 3. Add in sorted order
|
||||||
|
forAll(order, i)
|
||||||
|
{
|
||||||
|
nextCell.append(nbrs[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -27,7 +27,8 @@ InNamespace
|
|||||||
Description
|
Description
|
||||||
The bandCompression function renumbers the addressing such that the
|
The bandCompression function renumbers the addressing such that the
|
||||||
band of the matrix is reduced. The algorithm uses a simple search
|
band of the matrix is reduced. The algorithm uses a simple search
|
||||||
through the neighbour list
|
through the neighbour list in order of connectivity.
|
||||||
|
(CutHill-McKee algorithm)
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
bandCompression.C
|
bandCompression.C
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -604,25 +604,59 @@ Foam::label Foam::polyTopoChange::getCellOrder
|
|||||||
label cellInOrder = 0;
|
label cellInOrder = 0;
|
||||||
|
|
||||||
|
|
||||||
// loop over the cells
|
// Work arrays. Kept outside of loop to minimise allocations.
|
||||||
|
// - neighbour cells
|
||||||
|
DynamicList<label> nbrs;
|
||||||
|
// - corresponding weights
|
||||||
|
DynamicList<label> weights;
|
||||||
|
|
||||||
|
// - ordering
|
||||||
|
labelList order;
|
||||||
|
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
// For a disconnected region find the lowest connected cell.
|
||||||
|
|
||||||
|
label currentCell = -1;
|
||||||
|
label minWeight = labelMax;
|
||||||
|
|
||||||
forAll(visited, cellI)
|
forAll(visited, cellI)
|
||||||
{
|
{
|
||||||
// find the first non-removed cell that has not been visited yet
|
// find the lowest connected cell that has not been visited yet
|
||||||
if (!cellRemoved(cellI) && visited[cellI] == 0)
|
if (!cellRemoved(cellI) && !visited[cellI])
|
||||||
{
|
{
|
||||||
|
if (cellCellAddressing[cellI].size() < minWeight)
|
||||||
|
{
|
||||||
|
minWeight = cellCellAddressing[cellI].size();
|
||||||
|
currentCell = cellI;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (currentCell == -1)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Starting from currentCell walk breadth-first
|
||||||
|
|
||||||
|
|
||||||
// use this cell as a start
|
// use this cell as a start
|
||||||
nextCell.append(cellI);
|
nextCell.append(currentCell);
|
||||||
|
|
||||||
// loop through the nextCell list. Add the first cell into the
|
// loop through the nextCell list. Add the first cell into the
|
||||||
// cell order if it has not already been visited and ask for its
|
// cell order if it has not already been visited and ask for its
|
||||||
// neighbours. If the neighbour in question has not been visited,
|
// neighbours. If the neighbour in question has not been visited,
|
||||||
// add it to the end of the nextCell list
|
// add it to the end of the nextCell list
|
||||||
|
|
||||||
do
|
while (nextCell.size())
|
||||||
{
|
{
|
||||||
label currentCell = nextCell.removeHead();
|
currentCell = nextCell.removeHead();
|
||||||
|
|
||||||
if (visited[currentCell] == 0)
|
if (!visited[currentCell])
|
||||||
{
|
{
|
||||||
visited[currentCell] = 1;
|
visited[currentCell] = 1;
|
||||||
|
|
||||||
@ -631,24 +665,34 @@ Foam::label Foam::polyTopoChange::getCellOrder
|
|||||||
cellInOrder++;
|
cellInOrder++;
|
||||||
|
|
||||||
// find if the neighbours have been visited
|
// find if the neighbours have been visited
|
||||||
const UList<label> cCells = cellCellAddressing[currentCell];
|
const labelList& neighbours = cellCellAddressing[currentCell];
|
||||||
|
|
||||||
forAll(cCells, i)
|
// Add in increasing order of connectivity
|
||||||
|
|
||||||
|
// 1. Count neighbours of unvisited neighbours
|
||||||
|
nbrs.clear();
|
||||||
|
weights.clear();
|
||||||
|
|
||||||
|
forAll(neighbours, nI)
|
||||||
{
|
{
|
||||||
label nbr = cCells[i];
|
label nbr = neighbours[nI];
|
||||||
|
if (!cellRemoved(nbr) && !visited[nbr])
|
||||||
if (!cellRemoved(nbr) && visited[nbr] == 0)
|
|
||||||
{
|
{
|
||||||
// not visited, add to the list
|
// not visited, add to the list
|
||||||
nextCell.append(nbr);
|
nbrs.append(nbr);
|
||||||
|
weights.append(cellCellAddressing[nbr].size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 2. Sort
|
||||||
|
sortedOrder(weights, order);
|
||||||
|
// 3. Add in sorted order
|
||||||
|
forAll(order, i)
|
||||||
|
{
|
||||||
|
nextCell.append(nbrs[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (nextCell.size());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Now we have new-to-old in newOrder.
|
// Now we have new-to-old in newOrder.
|
||||||
newOrder.setSize(cellInOrder);
|
newOrder.setSize(cellInOrder);
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -275,7 +275,7 @@ void Foam::decompositionMethod::calcCellCells
|
|||||||
{
|
{
|
||||||
const polyPatch& pp = patches[patchI];
|
const polyPatch& pp = patches[patchI];
|
||||||
|
|
||||||
if (pp.coupled())
|
if (pp.coupled() && (parallel || !isA<processorPolyPatch>(pp)))
|
||||||
{
|
{
|
||||||
label faceI = pp.start();
|
label faceI = pp.start();
|
||||||
label bFaceI = pp.start()-mesh.nInternalFaces();
|
label bFaceI = pp.start()-mesh.nInternalFaces();
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -82,7 +82,7 @@ Foam::labelList Foam::CuthillMcKeeRenumber::renumber
|
|||||||
reverse(orderedToOld);
|
reverse(orderedToOld);
|
||||||
}
|
}
|
||||||
|
|
||||||
return invert(orderedToOld.size(), orderedToOld);
|
return orderedToOld;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ Foam::labelList Foam::CuthillMcKeeRenumber::renumber
|
|||||||
reverse(orderedToOld);
|
reverse(orderedToOld);
|
||||||
}
|
}
|
||||||
|
|
||||||
return invert(orderedToOld.size(), orderedToOld);
|
return orderedToOld;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -80,23 +80,26 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return for every coordinate the wanted processor number.
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
// We need a polyMesh (to be able to load the file)
|
// from ordered back to original cell label.
|
||||||
|
// This is only defined for geometric renumberMethods.
|
||||||
virtual labelList renumber(const pointField&) const
|
virtual labelList renumber(const pointField&) const
|
||||||
{
|
{
|
||||||
notImplemented("CuthillMcKeeRenumber::renumber(const pointField&)");
|
notImplemented("CuthillMcKeeRenumber::renumber(const pointField&)");
|
||||||
return labelList(0);
|
return labelList(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Return for every coordinate the wanted processor number. Use the
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
// mesh connectivity (if needed)
|
// from ordered back to original cell label.
|
||||||
|
// Use the mesh connectivity (if needed)
|
||||||
virtual labelList renumber
|
virtual labelList renumber
|
||||||
(
|
(
|
||||||
const polyMesh& mesh,
|
const polyMesh& mesh,
|
||||||
const pointField& cc
|
const pointField& cc
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
//- Return for every cell the new cell label.
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
|
// from ordered back to original cell label.
|
||||||
// The connectivity is equal to mesh.cellCells() except
|
// The connectivity is equal to mesh.cellCells() except
|
||||||
// - the connections are across coupled patches
|
// - the connections are across coupled patches
|
||||||
virtual labelList renumber
|
virtual labelList renumber
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -194,7 +194,7 @@ Foam::labelList Foam::boundaryFirstRenumber::renumber
|
|||||||
// << endl;
|
// << endl;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
return invert(newOrder.size(), newOrder);
|
return newOrder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -80,8 +80,9 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return for every coordinate the wanted processor number.
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
// We need a polyMesh (to be able to load the file)
|
// from ordered back to original cell label.
|
||||||
|
// This is only defined for geometric renumberMethods.
|
||||||
virtual labelList renumber(const pointField&) const
|
virtual labelList renumber(const pointField&) const
|
||||||
{
|
{
|
||||||
notImplemented
|
notImplemented
|
||||||
@ -91,15 +92,17 @@ public:
|
|||||||
return labelList(0);
|
return labelList(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Return for every coordinate the wanted processor number. Use the
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
// mesh connectivity (if needed)
|
// from ordered back to original cell label.
|
||||||
|
// Use the mesh connectivity (if needed)
|
||||||
virtual labelList renumber
|
virtual labelList renumber
|
||||||
(
|
(
|
||||||
const polyMesh& mesh,
|
const polyMesh& mesh,
|
||||||
const pointField& cc
|
const pointField& cc
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
//- Return for every cell the new cell label.
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
|
// from ordered back to original cell label.
|
||||||
// The connectivity is equal to mesh.cellCells() except
|
// The connectivity is equal to mesh.cellCells() except
|
||||||
// - the connections are across coupled patches
|
// - the connections are across coupled patches
|
||||||
virtual labelList renumber
|
virtual labelList renumber
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -63,7 +63,7 @@ Foam::labelList Foam::manualRenumber::renumber
|
|||||||
const pointField& points
|
const pointField& points
|
||||||
) const
|
) const
|
||||||
{
|
{
|
||||||
labelIOList oldToNew
|
labelIOList newToOld
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
(
|
(
|
||||||
@ -78,14 +78,14 @@ Foam::labelList Foam::manualRenumber::renumber
|
|||||||
|
|
||||||
// check if the final renumbering is OK
|
// check if the final renumbering is OK
|
||||||
|
|
||||||
if (oldToNew.size() != points.size())
|
if (newToOld.size() != points.size())
|
||||||
{
|
{
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"manualRenumber::renumber(const pointField&, const scalarField&)"
|
"manualRenumber::renumber(const pointField&, const scalarField&)"
|
||||||
) << "Size of renumber list does not correspond "
|
) << "Size of renumber list does not correspond "
|
||||||
<< "to the number of points. Size: "
|
<< "to the number of points. Size: "
|
||||||
<< oldToNew.size() << " Number of points: "
|
<< newToOld.size() << " Number of points: "
|
||||||
<< points.size()
|
<< points.size()
|
||||||
<< ".\n" << "Manual renumbering data read from file "
|
<< ".\n" << "Manual renumbering data read from file "
|
||||||
<< dataFile_ << "." << endl
|
<< dataFile_ << "." << endl
|
||||||
@ -93,27 +93,27 @@ Foam::labelList Foam::manualRenumber::renumber
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Invert to see if one to one
|
// Invert to see if one to one
|
||||||
labelList newToOld(points.size(), -1);
|
labelList oldToNew(points.size(), -1);
|
||||||
forAll(oldToNew, i)
|
forAll(newToOld, i)
|
||||||
{
|
{
|
||||||
label newI = oldToNew[i];
|
label origCellI = newToOld[i];
|
||||||
|
|
||||||
if (newI < 0 || newI >= oldToNew.size())
|
if (origCellI < 0 || origCellI >= points.size())
|
||||||
{
|
{
|
||||||
FatalErrorIn
|
FatalErrorIn
|
||||||
(
|
(
|
||||||
"manualRenumber::renumber(const pointField&"
|
"manualRenumber::renumber(const pointField&"
|
||||||
", const scalarField&)"
|
", const scalarField&)"
|
||||||
) << "Renumbering is not one-to-one. Index "
|
) << "Renumbering is not one-to-one. Index "
|
||||||
<< i << " maps onto " << newI
|
<< i << " maps onto original cell " << origCellI
|
||||||
<< ".\n" << "Manual renumbering data read from file "
|
<< ".\n" << "Manual renumbering data read from file "
|
||||||
<< dataFile_ << "." << endl
|
<< dataFile_ << "." << endl
|
||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newToOld[newI] == -1)
|
if (oldToNew[origCellI] == -1)
|
||||||
{
|
{
|
||||||
newToOld[newI] = i;
|
oldToNew[origCellI] = i;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -122,15 +122,15 @@ Foam::labelList Foam::manualRenumber::renumber
|
|||||||
"manualRenumber::renumber(const pointField&"
|
"manualRenumber::renumber(const pointField&"
|
||||||
", const scalarField&)"
|
", const scalarField&)"
|
||||||
) << "Renumbering is not one-to-one. Both index "
|
) << "Renumbering is not one-to-one. Both index "
|
||||||
<< newToOld[newI]
|
<< oldToNew[origCellI]
|
||||||
<< " and " << i << " map onto " << newI
|
<< " and " << i << " map onto " << origCellI
|
||||||
<< ".\n" << "Manual renumbering data read from file "
|
<< ".\n" << "Manual renumbering data read from file "
|
||||||
<< dataFile_ << "." << endl
|
<< dataFile_ << "." << endl
|
||||||
<< exit(FatalError);
|
<< exit(FatalError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return oldToNew;
|
return newToOld;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -25,7 +25,7 @@ Class
|
|||||||
Foam::manualRenumber
|
Foam::manualRenumber
|
||||||
|
|
||||||
Description
|
Description
|
||||||
Renumber given a cell-to-new cell association in a file
|
Renumber given a ordered-to-original cell association in a file
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
manualRenumber.C
|
manualRenumber.C
|
||||||
@ -79,23 +79,26 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return for every coordinate the wanted processor number.
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
// We need a polyMesh (to be able to load the file)
|
// from ordered back to original cell label.
|
||||||
|
// This is only defined for geometric renumberMethods.
|
||||||
virtual labelList renumber(const pointField&) const
|
virtual labelList renumber(const pointField&) const
|
||||||
{
|
{
|
||||||
notImplemented("manualRenumber::renumber(const pointField&)");
|
notImplemented("manualRenumber::renumber(const pointField&)");
|
||||||
return labelList(0);
|
return labelList(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Return for every coordinate the wanted processor number. Use the
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
// mesh connectivity (if needed)
|
// from ordered back to original cell label.
|
||||||
|
// Use the mesh connectivity (if needed)
|
||||||
virtual labelList renumber
|
virtual labelList renumber
|
||||||
(
|
(
|
||||||
const polyMesh& mesh,
|
const polyMesh& mesh,
|
||||||
const pointField& cc
|
const pointField& cc
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
//- Return for every cell the new cell label.
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
|
// from ordered back to original cell label.
|
||||||
// The connectivity is equal to mesh.cellCells() except
|
// The connectivity is equal to mesh.cellCells() except
|
||||||
// - the connections are across coupled patches
|
// - the connections are across coupled patches
|
||||||
virtual labelList renumber
|
virtual labelList renumber
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -59,17 +59,17 @@ Foam::labelList Foam::randomRenumber::renumber
|
|||||||
{
|
{
|
||||||
Random rndGen(0);
|
Random rndGen(0);
|
||||||
|
|
||||||
labelList oldToNew(identity(points.size()));
|
labelList newToOld(identity(points.size()));
|
||||||
|
|
||||||
for (label iter = 0; iter < 10; iter++)
|
for (label iter = 0; iter < 10; iter++)
|
||||||
{
|
{
|
||||||
forAll(oldToNew, i)
|
forAll(newToOld, i)
|
||||||
{
|
{
|
||||||
label j = rndGen.integer(0, oldToNew.size()-1);
|
label j = rndGen.integer(0, newToOld.size()-1);
|
||||||
Swap(oldToNew[i], oldToNew[j]);
|
Swap(newToOld[i], newToOld[j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return oldToNew;
|
return newToOld;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -74,19 +74,22 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return for every coordinate the wanted processor number.
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
// We need a polyMesh (to be able to load the file)
|
// from ordered back to original cell label.
|
||||||
|
// Use the mesh connectivity (if needed)
|
||||||
virtual labelList renumber(const pointField&) const;
|
virtual labelList renumber(const pointField&) const;
|
||||||
|
|
||||||
//- Return for every coordinate the wanted processor number. Use the
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
// mesh connectivity (if needed)
|
// from ordered back to original cell label.
|
||||||
|
// Use the mesh connectivity (if needed)
|
||||||
virtual labelList renumber
|
virtual labelList renumber
|
||||||
(
|
(
|
||||||
const polyMesh& mesh,
|
const polyMesh& mesh,
|
||||||
const pointField& cc
|
const pointField& cc
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
//- Return for every cell the new cell label.
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
|
// from ordered back to original cell label.
|
||||||
// The connectivity is equal to mesh.cellCells() except
|
// The connectivity is equal to mesh.cellCells() except
|
||||||
// - the connections are across coupled patches
|
// - the connections are across coupled patches
|
||||||
virtual labelList renumber
|
virtual labelList renumber
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -109,7 +109,8 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return for every cell the new cell label.
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
|
// from ordered back to original cell label.
|
||||||
// This is only defined for geometric renumberMethods.
|
// This is only defined for geometric renumberMethods.
|
||||||
virtual labelList renumber(const pointField&) const
|
virtual labelList renumber(const pointField&) const
|
||||||
{
|
{
|
||||||
@ -120,12 +121,14 @@ public:
|
|||||||
return labelList(0);
|
return labelList(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Return for every cell the new cell label. Use the
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
// mesh connectivity (if needed)
|
// from ordered back to original cell label.
|
||||||
|
// Use the mesh connectivity (if needed)
|
||||||
virtual labelList renumber(const polyMesh&, const pointField&) const;
|
virtual labelList renumber(const polyMesh&, const pointField&) const;
|
||||||
|
|
||||||
//- Return for every cell the new cell label. Gets
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
// passed agglomeration map (from fine to coarse cells) and coarse
|
// from ordered back to original cell label.
|
||||||
|
// Gets passed agglomeration map (from fine to coarse cells) and coarse
|
||||||
// cell
|
// cell
|
||||||
// location. Can be overridden by renumberMethods that provide this
|
// location. Can be overridden by renumberMethods that provide this
|
||||||
// functionality natively. Coarse cells are local to the processor
|
// functionality natively. Coarse cells are local to the processor
|
||||||
@ -138,7 +141,8 @@ public:
|
|||||||
const pointField& regionPoints
|
const pointField& regionPoints
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
//- Return for every cell the new cell label.
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
|
// from ordered back to original cell label.
|
||||||
// The connectivity is equal to mesh.cellCells() except
|
// The connectivity is equal to mesh.cellCells() except
|
||||||
// - the connections are across coupled patches
|
// - the connections are across coupled patches
|
||||||
virtual labelList renumber
|
virtual labelList renumber
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -165,7 +165,7 @@ Foam::labelList Foam::springRenumber::renumber
|
|||||||
// Reorder oldToNew
|
// Reorder oldToNew
|
||||||
inplaceReorder(shuffle, oldToNew);
|
inplaceReorder(shuffle, oldToNew);
|
||||||
|
|
||||||
return oldToNew;
|
return invert(oldToNew.size(), oldToNew);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -95,22 +95,26 @@ public:
|
|||||||
|
|
||||||
// Member Functions
|
// Member Functions
|
||||||
|
|
||||||
//- Return for every coordinate the wanted processor number.
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
|
// from ordered back to original cell label.
|
||||||
|
// This is only defined for geometric renumberMethods.
|
||||||
virtual labelList renumber(const pointField&) const
|
virtual labelList renumber(const pointField&) const
|
||||||
{
|
{
|
||||||
notImplemented("springRenumber::renumber(const pointField&)");
|
notImplemented("springRenumber::renumber(const pointField&)");
|
||||||
return labelList(0);
|
return labelList(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Return for every coordinate the wanted processor number. Use the
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
// mesh connectivity (if needed)
|
// from ordered back to original cell label.
|
||||||
|
// Use the mesh connectivity (if needed)
|
||||||
virtual labelList renumber
|
virtual labelList renumber
|
||||||
(
|
(
|
||||||
const polyMesh& mesh,
|
const polyMesh& mesh,
|
||||||
const pointField& cc
|
const pointField& cc
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
//- Return for every cell the new cell label.
|
//- Return the order in which cells need to be visited, i.e.
|
||||||
|
// from ordered back to original cell label.
|
||||||
// The connectivity is equal to mesh.cellCells() except
|
// The connectivity is equal to mesh.cellCells() except
|
||||||
// - the connections are across coupled patches
|
// - the connections are across coupled patches
|
||||||
virtual labelList renumber
|
virtual labelList renumber
|
||||||
|
|||||||
Reference in New Issue
Block a user