docs: 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)