35 std::ostringstream msg;
37 msg <<
"(local-number-of-inner-unrefined-cells=" << _localNumberOfInnerUnrefinedCells
38 <<
",global-number-of-inner-unrefined-cells=" << _globalNumberOfInnerUnrefinedCells
39 <<
",global-number-of-trees=" << _globalNumberOfTrees
40 <<
",max-trees-per-rank=" << _maximumTreesPerRank
41 <<
",local-load-balancing-enabled=" << _localLoadBalancingEnabled
42 <<
",global-number-of-ranks-with-enabled-lb=" << _globalNumberOfRanksWithEnabledLoadBalancing
43 <<
",local-number-of-splits=" << _localNumberOfSplits
44 <<
",global-number-of-splits=" << _globalNumberOfSplits
45 <<
",number-of-state-updates-without-any-split=" << _numberOfStateUpdatesWithoutAnySplit
46 <<
",view-consistent=" << _viewConsistent
55 if (_globalSumRequest !=
nullptr ) {
56 MPI_Wait( _globalSumRequest, MPI_STATUS_IGNORE );
57 MPI_Wait( _globalNumberOfSplitsRequest, MPI_STATUS_IGNORE );
58 MPI_Wait( _globalNumberOfTreesRequest, MPI_STATUS_IGNORE );
59 MPI_Wait( _globalNumberOfRanksWithEnabledLoadBalancingRequest, MPI_STATUS_IGNORE );
60 MPI_Wait( _globalMaximumTreesPerRankRequest, MPI_STATUS_IGNORE );
62 delete _globalSumRequest;
63 delete _globalNumberOfSplitsRequest;
64 delete _globalNumberOfTreesRequest;
65 delete _globalNumberOfRanksWithEnabledLoadBalancingRequest;
66 delete _globalMaximumTreesPerRankRequest;
68 _globalSumRequest =
nullptr;
69 _globalNumberOfSplitsRequest =
nullptr;
70 _globalNumberOfTreesRequest =
nullptr;
71 _globalNumberOfRanksWithEnabledLoadBalancingRequest =
nullptr;
72 _globalMaximumTreesPerRankRequest =
nullptr;
81 _viewConsistent =
true;
84 _globalNumberOfInnerUnrefinedCells = _localNumberOfInnerUnrefinedCells;
85 _globalNumberOfSplits = _localNumberOfSplits;
87 _globalNumberOfRanksWithEnabledLoadBalancing = _localLoadBalancingEnabled ? 1 : 0;
92 waitForGlobalDataExchange();
94 _globalNumberOfInnerUnrefinedCells = _globalNumberOfInnerUnrefinedCellsBufferIn;
95 _globalNumberOfSplits = _numberOfSplitsIn;
96 _globalNumberOfTrees = _numberOfTreesIn;
97 _globalNumberOfRanksWithEnabledLoadBalancing = _numberOfRanksWithEnabledLoadBalancingIn;
98 _maximumTreesPerRank = _maximumTreesIn;
100 if ( _globalNumberOfInnerUnrefinedCells < _localNumberOfInnerUnrefinedCells ) {
102 "updateGlobalView()",
103 "local number of cells (" << _localNumberOfInnerUnrefinedCells <<
") is bigger than global cell count (" << _globalNumberOfInnerUnrefinedCells <<
104 "). This usually happens if a forking tree has some pending refinement events and cannot refine anymore, as it has already spawned cells. Statistics might have inconsistent view of world"
106 _viewConsistent =
false;
107 _globalNumberOfInnerUnrefinedCells = _localNumberOfInnerUnrefinedCells;
110 _globalSumRequest =
new MPI_Request();
111 _globalNumberOfSplitsRequest =
new MPI_Request();
112 _globalNumberOfTreesRequest =
new MPI_Request();
113 _globalNumberOfRanksWithEnabledLoadBalancingRequest =
new MPI_Request();
114 _globalMaximumTreesPerRankRequest =
new MPI_Request();
116 _globalNumberOfInnerUnrefinedCellsBufferOut = _localNumberOfInnerUnrefinedCells;
117 _numberOfSplitsOut = _localNumberOfSplits;
119 _numberOfRanksWithEnabledLoadBalancingOut = _localLoadBalancingEnabled ? 1 : 0;
123 &_numberOfRanksWithEnabledLoadBalancingOut,
124 &_numberOfRanksWithEnabledLoadBalancingIn,
129 _globalNumberOfRanksWithEnabledLoadBalancingRequest
138 _globalNumberOfTreesRequest
141 &_globalNumberOfInnerUnrefinedCellsBufferOut,
142 &_globalNumberOfInnerUnrefinedCellsBufferIn,
157 _globalNumberOfSplitsRequest
160 &_numberOfMaximumTreesOut,
166 _globalMaximumTreesPerRankRequest
171 if ( _globalNumberOfSplits==0 and _localNumberOfSplits==0 and _numberOfStateUpdatesWithoutAnySplit<65536) {
172 _numberOfStateUpdatesWithoutAnySplit++;
174 else if ( _globalNumberOfSplits>0 or _localNumberOfSplits>0 ) {
175 _numberOfStateUpdatesWithoutAnySplit = 0;
178 _localNumberOfSplits = 0;