def step_forward_with_gridded_uv(self, U0, V0, U1, V1, dt, order=1):       
        """Advance particles using a gridded velocity field. Because of the
        Runga-Kutta timestepping, we need two velocity fields at different
        times.
        
        Parameters
        ----------
        U0, V0 : array-like
            Gridded velocity fields at time t - dt.
        U1, V1 : array-like
            Gridded velocity fields at time t.
        dt : number
            Timestep.
        order : int
            Order of interpolation.
        """
        # create interpolation functions which return u and v
        
        # pre-pad arrays so it only has to be done once
        # for linear interpolation (default order=1), only one pad is necessary
        pad = order
        [U0p, V0p, U1p, V1p] = [self._pad_field(c, pad=pad) for c in [U0, V0, U1, V1]]
        
        # pad u and v as necessary
        uv0fun = (lambda x, y : 
                  (self.interpolate_gridded_scalar(x, y, U0p,
                           pad=0, order=order, offset=pad),
                   self.interpolate_gridded_scalar(x, y, V0p,
                           pad=0, order=order, offset=pad)))
        uv1fun = (lambda x, y :  
                  (self.interpolate_gridded_scalar(x, y, U1p, pad=0,
                           order=order, offset=pad),
                   self.interpolate_gridded_scalar(x, y, V1p, pad=0,
                           order=order, offset=pad)))
        
        self.step_forward_with_function(uv0fun, uv1fun, dt)
Advance particles using a gridded velocity field. Because of the
        Runga-Kutta timestepping, we need two velocity fields at different
        times.
        
        Parameters
        ----------
        U0, V0 : array-like
            Gridded velocity fields at time t - dt.
        U1, V1 : array-like
            Gridded velocity fields at time t.
        dt : number
            Timestep.
        order : int
            Order of interpolation.