Public Member Functions | |
meshOctreeInsideOutside (meshOctree &octree) | |
Construct from octree. More... | |
~meshOctreeInsideOutside () | |
Private Member Functions | |
void | initialiseBoxes () |
initialise octree boxes More... | |
void | frontalMarking () |
frontal marking algorithm More... | |
void | markOutsideCubes () |
mark OUTSIDE octree boxes More... | |
void | reviseDataBoxes () |
revise DATA boxes More... | |
void | markInsideCubes () |
mark INSIDE octree boxes More... | |
Private Attributes | |
meshOctreeModifier | octreeModifier_ |
meshOctreeAddressing More... | |
labelLongList | cubeGroup_ |
group for a given leaf More... | |
VRWGraph | cubesInGroup_ |
cubes belonging to each group of octree boxes More... | |
std::map< label, direction > | groupType_ |
type for a group More... | |
VRWGraph | boundaryDATACubes_ |
boundary DATA boxes for a given group More... | |
boolList | hasOutsideNeighbour_ |
flag for DATA boxes next to the OUTSIDE boxes More... | |
labelLongList | communicationCubes_ |
label of cubes at processor boundaries More... | |
VRWGraph | neighbouringGroups_ |
labels of cubes marked by different threads More... | |
Definition at line 48 of file meshOctreeInsideOutside.H.
meshOctreeInsideOutside | ( | meshOctree & | octree | ) |
Construct from octree.
Definition at line 45 of file meshOctreeInsideOutside.C.
References meshOctreeCubeBasic::cubeType(), meshOctreeCubeBasic::DATA, Foam::endl(), Foam::help::frontalMarking(), Foam::Info, meshOctreeCubeBasic::INSIDE, meshOctree::neiProcs(), meshOctree::numberOfLeaves(), meshOctreeCubeBasic::OUTSIDE, Foam::reduce(), meshOctree::returnLeaf(), List::size(), and meshOctreeCubeBasic::UNKNOWN.
Definition at line 109 of file meshOctreeInsideOutside.C.
|
private |
initialise octree boxes
Definition at line 115 of file meshOctreeInsideOutside.C.
References meshOctreeCubeBasic::DATA, forAll, meshOctreeModifier::leavesAccess(), meshOctreeInsideOutside::octreeModifier_, and meshOctreeCubeBasic::UNKNOWN.
|
private |
frontal marking algorithm
find group to neighbouring groups addressing
create cubesInGroup_ addressing
mark cubes at inter-processor boundaries
Definition at line 135 of file meshOctreeInsideOutside.C.
References Foam::abort(), LongList< T, Offset >::append(), VRWGraph::append(), VRWGraph::appendIfNotIn(), meshOctreeInsideOutside::boundaryDATACubes_, LongList< T, Offset >::clear(), VRWGraph::clear(), meshOctreeInsideOutside::communicationCubes_, meshOctreeInsideOutside::cubeGroup_, meshOctreeInsideOutside::cubesInGroup_, Foam::endl(), Foam::FatalError, meshOctree::findNeighboursForLeaf(), forAll, forAllReverse, meshOctreeInsideOutside::groupType_, Foam::Info, meshOctreeModifier::leavesAccess(), Foam::min(), meshOctreeInsideOutside::neighbouringGroups_, meshOctreeModifier::octree(), meshOctreeInsideOutside::octreeModifier_, meshOctreeCubeBasic::OTHERPROC, meshOctreeCubeBasic::OUTSIDE, Foam::reduce(), LongList< T, Offset >::removeLastElement(), Foam::returnReduce(), VRWGraph::setRow(), VRWGraph::setSize(), VRWGraph::setSizeAndRowSize(), LongList< T, Offset >::size(), VRWGraph::size(), and meshOctreeCubeBasic::UNKNOWN.
|
private |
mark OUTSIDE octree boxes
make sure that groups created by different threads have the same information
go through the list of communicationCubes and send the ones which are marked as outside
go through the list of received coordinates and check if any local boxes are their neighbours. If a local neighbour is a DATA box set the hasOutsideNeighbour_ flag to true. If the local neighbour is of UNKNOWN type set it to OUTSIDE.
set OUTSIDE type to the cubes in OUTSIDE groups
set the cube type to OUTSIDE
set true to the collected DATA boxes
Definition at line 339 of file meshOctreeInsideOutside.C.
References LongList< T, Offset >::append(), meshOctreeInsideOutside::boundaryDATACubes_, meshOctreeInsideOutside::communicationCubes_, meshOctreeInsideOutside::cubeGroup_, meshOctreeInsideOutside::cubesInGroup_, meshOctree::exchangeRequestsWithNeighbourProcessors(), meshOctree::findNeighboursForLeaf(), forAll, forAllRow, meshOctreeInsideOutside::groupType_, meshOctreeInsideOutside::hasOutsideNeighbour_, meshOctreeModifier::leavesAccess(), meshOctreeInsideOutside::neighbouringGroups_, meshOctreeModifier::octree(), meshOctreeInsideOutside::octreeModifier_, meshOctreeCubeBasic::OUTSIDE, Foam::reduce(), and meshOctreeCubeBasic::UNKNOWN.
|
private |
revise DATA boxes
remove DATA flag from boxes which do not have an OUTSIDE neighbour and are not surrounded with DATA boxes containing different surface triangles in different patches
check if there exist neighbours which have some DATA neighbours
check if any of the local neighbours is a data box with no OUTSIDE neighbours
Definition at line 475 of file meshOctreeInsideOutside.C.
References LongList< T, Offset >::append(), Foam::constRow, meshOctreeCube::containedElements(), meshOctreeSlot::containedTriangles_, coordinates(), meshOctreeCubeBasic::DATA, Foam::endl(), meshOctree::exchangeRequestsWithNeighbourProcessors(), meshOctree::findAllLeafNeighbours(), forAll, HashTable::found(), meshOctreeInsideOutside::hasOutsideNeighbour_, Foam::Info, HashSet< Key, Hash >::insert(), meshOctreeCubeBasic::INSIDE, meshOctreeModifier::leavesAccess(), meshOctree::neiProcs(), meshOctreeModifier::octree(), meshOctreeInsideOutside::octreeModifier_, meshOctreeCubeBasic::OTHERPROC, meshOctreeCubeBasic::OUTSIDE, UPstream::parRun(), patches, Foam::reduce(), Foam::returnReduce(), meshOctreeCubeBasic::setCubeType(), List::size(), LongList< T, Offset >::size(), meshOctreeCube::slotPtr(), and meshOctree::surface().
|
private |
mark INSIDE octree boxes
make INSIDE groups for which it is possible
mark INSIDE groups created by different threads
the code for exchanging data between different processes
send coordinates of boxes with hasOutsideNeighbour_ flag and the boxes which have been marked as INSIDE to the neighbouring procs
go through the list of communicationCubes and send the ones which are marked as outside
go through the list of received coordinates and check if any local boxes are their neighbours. If a local neighbour is a DATA box set the hasOutsideNeighbour_ flag to true. If the local neighbour is of UNKNOWN type set it to OUTSIDE.
set INSIDE type to the cubes in INSIDE groups
set the cube type to OUTSIDE
Definition at line 635 of file meshOctreeInsideOutside.C.
References LongList< T, Offset >::append(), meshOctreeInsideOutside::boundaryDATACubes_, LongList< T, Offset >::clear(), meshOctreeInsideOutside::communicationCubes_, coordinates(), meshOctreeInsideOutside::cubeGroup_, meshOctreeInsideOutside::cubesInGroup_, meshOctree::exchangeRequestsWithNeighbourProcessors(), meshOctree::findNeighboursForLeaf(), forAll, forAllRow, meshOctreeInsideOutside::groupType_, meshOctreeInsideOutside::hasOutsideNeighbour_, meshOctreeCubeBasic::INSIDE, meshOctreeModifier::leavesAccess(), meshOctreeInsideOutside::neighbouringGroups_, meshOctree::neiProcs(), meshOctreeModifier::octree(), meshOctreeInsideOutside::octreeModifier_, meshOctreeCubeBasic::OTHERPROC, Foam::reduce(), List::size(), and meshOctreeCubeBasic::UNKNOWN.
|
private |
|
private |
group for a given leaf
Definition at line 56 of file meshOctreeInsideOutside.H.
Referenced by meshOctreeInsideOutside::frontalMarking(), meshOctreeInsideOutside::markInsideCubes(), and meshOctreeInsideOutside::markOutsideCubes().
|
private |
cubes belonging to each group of octree boxes
Definition at line 59 of file meshOctreeInsideOutside.H.
Referenced by meshOctreeInsideOutside::frontalMarking(), meshOctreeInsideOutside::markInsideCubes(), and meshOctreeInsideOutside::markOutsideCubes().
type for a group
Definition at line 62 of file meshOctreeInsideOutside.H.
Referenced by meshOctreeInsideOutside::frontalMarking(), meshOctreeInsideOutside::markInsideCubes(), and meshOctreeInsideOutside::markOutsideCubes().
|
private |
boundary DATA boxes for a given group
Definition at line 65 of file meshOctreeInsideOutside.H.
Referenced by meshOctreeInsideOutside::frontalMarking(), meshOctreeInsideOutside::markInsideCubes(), and meshOctreeInsideOutside::markOutsideCubes().
|
private |
flag for DATA boxes next to the OUTSIDE boxes
Definition at line 68 of file meshOctreeInsideOutside.H.
Referenced by meshOctreeInsideOutside::markInsideCubes(), meshOctreeInsideOutside::markOutsideCubes(), and meshOctreeInsideOutside::reviseDataBoxes().
|
private |
label of cubes at processor boundaries
Definition at line 71 of file meshOctreeInsideOutside.H.
Referenced by meshOctreeInsideOutside::frontalMarking(), meshOctreeInsideOutside::markInsideCubes(), and meshOctreeInsideOutside::markOutsideCubes().
|
private |
labels of cubes marked by different threads
Definition at line 74 of file meshOctreeInsideOutside.H.
Referenced by meshOctreeInsideOutside::frontalMarking(), meshOctreeInsideOutside::markInsideCubes(), and meshOctreeInsideOutside::markOutsideCubes().
Copyright © 2011-2018 OpenFOAM | OPENFOAM® is a registered trademark of OpenCFD Ltd.