def extend_grid(gd, N_cd):
    N_cd = np.array(N_cd)
    
    N_c = gd.N_c + N_cd.sum(axis=1)
    cell_cv = gd.h_cv * N_c
    
    move_c = gd.get_grid_spacings() * N_cd[:,0]
    
    egd = GridDescriptor(N_c, cell_cv, gd.pbc_c, gd.comm)
    egd.extend_N_cd = N_cd
    
    return egd, cell_cv*Bohr, move_c*Bohr
def extend_grid(gd, N_cd):
    N_cd = np.array(N_cd)

    N_c = gd.N_c + N_cd.sum(axis=1)
    cell_cv = gd.h_cv * N_c

    move_c = gd.get_grid_spacings() * N_cd[:, 0]

    egd = GridDescriptor(N_c, cell_cv, gd.pbc_c, gd.comm)
    egd.extend_N_cd = N_cd

    return egd, cell_cv * Bohr, move_c * Bohr
示例#3
0
def extended_grid_descriptor(gd,
                             extend_N_cd=None,
                             N_c=None, extcomm=None):
    """Create grid descriptor for extended grid.

    Provide only either extend_N_cd or N_c.

    Parameters:

    extend_N_cd: ndarray, int
        Number of extra grid points per axis (c) and
        direction (d, left or right)
    N_c: ndarray, int
        Number of grid points in extended grid
    extcomm:
        Communicator for the extended grid, defaults to gd.comm
    """

    if extcomm is None:
        extcomm = gd.comm

    if extend_N_cd is None:
        assert N_c is not None, 'give only extend_N_cd or N_c'
        N_c = np.array(N_c, dtype=np.int)
        extend_N_cd = np.tile((N_c - gd.N_c) // 2, (2, 1)).T
    else:  # extend_N_cd is not None:
        assert N_c is None, 'give only extend_N_cd or N_c'
        extend_N_cd = np.array(extend_N_cd, dtype=np.int)
        N_c = gd.N_c + extend_N_cd.sum(axis=1)

    cell_cv = gd.h_cv * N_c
    move_c = gd.get_grid_spacings() * extend_N_cd[:, 0]

    egd = GridDescriptor(N_c, cell_cv, gd.pbc_c, extcomm)
    egd.extend_N_cd = extend_N_cd

    return egd, cell_cv * Bohr, move_c * Bohr