Пример #1
0
Файл: grid.py Проект: lehner/gpt
    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)
Пример #2
0
    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)
        ]