@@ -71,6 +71,11 @@ def __init__(self, criterion, parameters: dict, lgr: Logger):
7171 self ._logger .info (
7272 f"Enter subclustering immediately after cluster swapping: { self .__separate_subclustering } " )
7373
74+ # Decide whether clusters can be broken down
75+ self .__preserve_subclusters = parameters .get ("preserve_subclusters" , False )
76+ self ._logger .info (
77+ f"Allow clusters to be split into subclusters: { self .__separate_subclustering } " )
78+
7479 # Initialize percentage of maximum load required for subclustering
7580 self .__subclustering_threshold = parameters .get ("subclustering_threshold" , 0.0 )
7681 self ._logger .info (
@@ -280,14 +285,15 @@ def execute(self, known_peers, phase: Phase, ave_load: float, max_load: float):
280285 continue
281286
282287 # Perform feasible subcluster swaps from given rank to possible targets
283- self .__transfer_subclusters (phase , r_src , targets , ave_load , max_load )
288+ if not self .__preserve_subclusters :
289+ self .__transfer_subclusters (phase , r_src , targets , ave_load , max_load )
284290
285291 # Report on new load and exit from rank
286292 self ._logger .debug (
287293 f"Rank { r_src .get_id ()} load: { r_src .get_load ()} after { self ._n_transfers } object transfers" )
288294
289295 # Perform subclustering when it was not previously done
290- if self .__separate_subclustering :
296+ if not self . __preserve_subclusters and self .__separate_subclustering :
291297 # In non-deterministic case skip subclustering when swaps passed
292298 if self .__n_swaps and not self ._deterministic_transfer :
293299 self .__n_sub_skipped += len (rank_targets )
0 commit comments