code: def rescale_field(self, new_dim):
          
          v_dim = self.__v.shape
          padded_v = np.lib.pad(self.__v, ((0, 1), (0, 1), (0, 1)), mode='wrap')
          ogrid_list = np.array([list(c) for c in list(
              np.ndindex(v_dim[0] + 1, v_dim[1] + 1, v_dim[2] + 1))])
          v_ogrid = padded_v.reshape(
              ((v_dim[0] + 1) * (v_dim[1] + 1) * (v_dim[2] + 1), -1))
          ngrid_a, ngrid_b, ngrid_c = np.mgrid[0: v_dim[0]: v_dim[0] / new_dim[0],
                                      0: v_dim[1]: v_dim[1] / new_dim[1],
                                      0: v_dim[2]: v_dim[2] / new_dim[2]]
  
          v_ngrid = scipy.interpolate.griddata(ogrid_list, v_ogrid,
                                               (ngrid_a, ngrid_b, ngrid_c),
                                               method='linear').reshape(
              (new_dim[0], new_dim[1], new_dim[2]))
          self.__v = v_ngrid
docs: Changes the discretization of the potential field by linear
          interpolation. This is necessary if the potential field
          obtained from DFT is strangely skewed, or is too fine or coarse. Obeys
          periodic boundary conditions at the edges of
          the cell. Alternatively useful for mixing potentials that originally
          are on different grids.
  
          :param new_dim: tuple giving the numpy shape of the new grid