def test_create_subcomm(self): vm = OcgVM() if vm.size != 2: raise SkipTest('vm.size != 2') self.assertFalse(vm._is_dummy) vm.create_subcomm('test', [], is_current=True) self.assertTrue(vm.is_null) vm.finalize() self.assertFalse(vm.is_null)
def test_get_live_ranks_from_object(self): if MPI_SIZE != 4: raise SkipTest('MPI_SIZE != 4') vm = OcgVM() if MPI_RANK == 1: dim = Dimension('woot', is_empty=True, dist=True) else: dim = Dimension('woot', dist=True, size=3) actual = vm.get_live_ranks_from_object(dim) self.assertEqual(actual, (0, 2, 3)) vm.finalize()
def test_barrier(self): if MPI_SIZE != 4: raise SkipTest('MPI_SIZE != 4') vm = OcgVM() live_ranks = [1, 3] vm.create_subcomm('for barrier', live_ranks, is_current=True) if not vm.is_null: self.assertEqual(vm.size, 2) else: self.assertNotIn(MPI_RANK, live_ranks) if MPI_RANK in live_ranks: vm.barrier() vm.finalize()
def test_gather(self): if MPI_SIZE != 8: raise SkipTest('MPI_SIZE != 8') vm = OcgVM() live_ranks = [1, 3, 7] # vm.set_live_ranks(live_ranks) vm.create_subcomm('tester', live_ranks, is_current=True) if MPI_RANK in live_ranks: value = MPI_RANK gathered_value = vm.gather(value) if MPI_RANK == 1: self.assertEqual(gathered_value, [1, 3, 7]) elif MPI_RANK in live_ranks: self.assertIsNone(gathered_value) vm.finalize()
def test_bcast(self): if MPI_SIZE != 8: raise SkipTest('MPI_SIZE != 8') vm = OcgVM() live_ranks = [1, 3, 5] vm.create_subcomm('tester', live_ranks, is_current=True) # vm.set_live_ranks(live_ranks) if vm.rank == 0: root_value = 101 else: root_value = None if MPI_RANK in live_ranks: global_value = vm.bcast(root_value) self.assertEqual(global_value, 101) else: self.assertIsNone(root_value) vm.finalize()
def test_scoped(self): if MPI_SIZE != 8: raise SkipTest('MPI_SIZE != 8') vm = OcgVM() self.assertEqual(vm.size, 8) with vm.scoped('test', [2, 3, 4]): if not vm.is_null: self.assertEqual(vm.size, 3) self.assertEqual(vm.ranks, range(3)) with vm.scoped('nested', [1]): if not vm.is_null: self.assertEqual(vm.size, 1) self.assertEqual(len(vm._subcomms), 2) self.assertEqual(vm.size, 8) self.assertEqual(len(vm._subcomms), 0) vm.finalize() vm = OcgVM() self.assertEqual(vm.size, 8) vm.finalize()
def test_init(self): for _ in range(50): vm = OcgVM() vm.finalize() self.assertTrue(vm.size_global >= 1) self.assertIsNotNone(vm.comm) vm.finalize() vm.__init__() vm.finalize()
def test_create_subcomm(self): vm = OcgVM() vm.create_subcomm('test', [], is_current=True) self.assertTrue(vm.is_null) vm.finalize() self.assertFalse(vm.is_null)
def test_get_intersects_state_boundaries(self): path_shp = self.path_state_boundaries geoms = [] with fiona.open(path_shp) as source: for record in source: geom = shape(record['geometry']) geoms.append(geom) gvar = GeometryVariable(value=geoms, dimensions='ngeom') gvar_sub = gvar.get_unioned() if gvar_sub is not None: subset = gvar_sub.get_value().flatten()[0] else: subset = None subset = MPI_COMM.bcast(subset) resolution = 1.0 for with_bounds in [False, True]: grid = self.get_gridxy_global(resolution=resolution, with_bounds=with_bounds) vm.create_subcomm_by_emptyable('global grid', grid, is_current=True) if not vm.is_null: res = grid.get_intersects(subset, return_slice=True) grid_sub, slc = res vm.create_subcomm_by_emptyable('grid subset', grid_sub, is_current=True) if not vm.is_null: mask = Variable('mask_after_subset', grid_sub.get_mask(), dimensions=grid_sub.dimensions) mask = variable_gather(mask) if vm.rank == 0: mask_sum = np.invert(mask.get_value()).sum() mask_shape = mask.shape else: mask_sum = None mask_shape = None mask_sum = vm.bcast(mask_sum) mask_shape = vm.bcast(mask_shape) if with_bounds: self.assertEqual(mask_shape, (54, 113)) self.assertEqual( slc, (slice(108, 162, None), slice(1, 114, None))) self.assertEqual(mask_sum, 1358) else: if MPI_SIZE == 2: grid_bounds_global = [ dim.bounds_global for dim in grid_sub.dimensions ] self.assertEqual(grid_bounds_global, [(0, 52), (0, 105)]) self.assertEqual(mask_shape, (52, 105)) self.assertEqual( slc, (slice(109, 161, None), slice(8, 113, None))) self.assertEqual(mask_sum, 1087) if vm.rank == 0: path = self.get_temporary_file_path('foo.nc') else: path = None path = vm.bcast(path) field = Field(grid=grid_sub) field.write(path) vm.finalize() vm.__init__() MPI_COMM.Barrier()