Source code for pyDRESCALk.dist_comm

# @author: Manish Bhattarai
[docs]class MPI_comm(): """Initialization of MPI communicator to construct the cartesian topology and sub communicators Parameters ---------- comm : object MPI communicator object p_r : int row processors count p_c : int column processors count""" # MPI Initialization here def __init__(self, comm, p_r, p_c): self.comm = comm self.rank = self.comm.Get_rank() self.size = self.comm.Get_size() self.p_r = p_r self.p_c = p_c self.cartesian2d = self.comm.Create_cart(dims=[self.p_r, self.p_c], periods=[False, False], reorder=False) self.coord2d = self.cartesian2d.Get_coords(self.rank)
[docs] def cart_1d_row(self): """ Constructs a cartesian row communicator through construction of a sub communicator across rows Returns ------- cartesian1d_row : object Sub Communicator object """ self.cartesian1d_row = self.cartesian2d.Sub(remain_dims=[True, False]) self.rank1d_row = self.cartesian1d_row.Get_rank() self.coord1d_row = self.cartesian1d_row.Get_coords(self.rank1d_row) return self.cartesian1d_row
[docs] def cart_1d_column(self): """ Constructs a cartesian column communicator through construction of a sub communicator across columns Returns ------- cartesian1d_column : object Sub Communicator object """ self.cartesian1d_column = self.cartesian2d.Sub(remain_dims=[False, True]) self.rank1d_column = self.cartesian1d_column.Get_rank() self.coord1d_column = self.cartesian1d_column.Get_coords(self.rank1d_column) return self.cartesian1d_column
[docs] def Free(self): """ Frees the sub communicators""" self.cart_1d_row().Free() self.cart_1d_column().Free()