def __init__(self, fdimensions, precision, cb=None, obj=None, mpi=None, parent=None): self.fdimensions = fdimensions self.fsites = np.prod(self.fdimensions) self.precision = precision self.nd = len(self.fdimensions) if cb is None: cb = full if isinstance(cb, type): cb = cb(self.nd) self.cb = cb if mpi is None: # if we live on a split grid, cannot use default mpi layout assert parent is None self.mpi = grid_get_mpi_default(self.fdimensions, self.cb) else: self.mpi = mpi self.parent = parent if parent is None: parent_obj = 0 else: parent_obj = parent.obj if obj is None: self.obj = cgpt.create_grid(fdimensions, precision, cb.cb_mask, cb.simd_mask, self.mpi, parent_obj) else: self.obj = obj # processor is mpi rank, may not be lexicographical (cartesian) rank ( self.processor, self.Nprocessors, self.processor_coor, self.gdimensions, self.ldimensions, self.srank, self.sranks, ) = cgpt.grid_get_processor(self.obj) self.gsites = np.prod(self.gdimensions)
def __init__(self, first, second=None, third=None, fourth=None): if type(first) == str: # create from description p = first.split(";") fdimensions = [int(x) for x in p[0].strip("[]").split(",")] precision = gpt.str_to_precision(p[1]) cb = str_to_checkerboarding(p[2]) else: fdimensions = first precision = second if third is None: cb = full else: cb = third obj = fourth self.fdimensions = fdimensions self.gsites = np.prod(self.fdimensions) self.precision = precision self.cb = cb self.nd = len(self.fdimensions) if obj == None: self.obj = cgpt.create_grid(fdimensions, precision, cb) else: self.obj = obj # processor is mpi rank, may not be lexicographical (cartesian) rank self.processor, self.Nprocessors, self.processor_coor, self.gdimensions, self.ldimensions = cgpt.grid_get_processor( self.obj) self.mpi = [ self.gdimensions[i] // self.ldimensions[i] for i in range(self.nd) ]