29 _statistics.hasConsistentViewOfWorld()
31 _numberOfStableGridIterations>3
33 int maxPermittedTreesPerRank = _configuration->getMaxLocalTreesPerRank(
_state)>=1
34 ? _configuration->getMaxLocalTreesPerRank(
_state)
35 : std::numeric_limits<int>::max();
37 int treesPerRankToExploitAllThreads = std::min(
38 maxPermittedTreesPerRank,
42 int minTreeSize = std::max(
43 _configuration->getMinTreeSize(
_state),
47 int treesPerRankAccommodatingMinTreeSize = std::max(
52 result = std::min( treesPerRankAccommodatingMinTreeSize, treesPerRankToExploitAllThreads );
55 "getNumberOfTreesPerRank()",
56 "mesh has " << _statistics.getLocalNumberOfInnerUnrefinedCells() <<
57 " cells, so split " << result <<
" times " <<
58 "(maxPermittedTreesPerRank=" << maxPermittedTreesPerRank <<
59 ",treesPerRankToExploitAllThreads=" << treesPerRankToExploitAllThreads <<
60 ",minTreeSize=" << minTreeSize <<
61 ",treesPerRankAccommodatingMinTreeSize" << treesPerRankAccommodatingMinTreeSize <<
72 _statistics.hasConsistentViewOfWorld()
74 _previousNumberOfCells == _statistics.getGlobalNumberOfInnerUnrefinedCells()
76 _numberOfStableGridIterations++;
79 _numberOfStableGridIterations = 0;
90 const int numberOfTreesPerRank = getNumberOfTreesPerRank();
92 if ( numberOfTreesPerRank>0 ) {
95 int cellsPerTree = std::max(
96 static_cast<int>(std::round(_statistics.getGlobalNumberOfInnerUnrefinedCells() / ranks / numberOfTreesPerRank )),
101 "updateLoadBalancing()",
102 "try to create " << numberOfTreesPerRank <<
103 " trees per rank with internal state" <<
toString() <<
104 " to produce " << ranks <<
"x" << numberOfTreesPerRank <<
105 " trees with approx " << cellsPerTree <<
" cells per tree"
108 int totalSplits = cellsPerTree;
109 for (
int targetRank=0; targetRank<ranks; targetRank++ )
110 for (
int treeNumber= targetRank==0 ? 1 : 0; treeNumber<numberOfTreesPerRank; treeNumber++ ) {
111 int thisTreesCells = cellsPerTree;
112 if (
static_cast<int>(_statistics.getGlobalNumberOfInnerUnrefinedCells()) % (ranks*numberOfTreesPerRank) >= totalSplits) {
116 triggerSplit(thisTreesCells, targetRank);
123 else if (not _statistics.hasConsistentViewOfWorld()) {
124 _previousNumberOfCells = -1;
127 _previousNumberOfCells = _statistics.getGlobalNumberOfInnerUnrefinedCells();