def METHOD_NAME(self, dt):
    fd, fh, bbox, pfix, args = self.domain.params
    dxdt = self.dx_dt(self.time_elapsed)
    self.mesh.point = self.mesh.point + dt*dxdt
    p = self.mesh.point
    d = fd(p, *args)
    idx = d > 0
    depsx = np.array([self.deps,0])
    depsy = np.array([0,self.deps])
    dgradx = (fd(p[idx, :]+depsx, *args) - d[idx])/self.deps
    dgrady = (fd(p[idx, :]+depsy, *args) - d[idx])/self.deps
    p[idx, 0] = p[idx, 0] - d[idx]*dgradx
    p[idx, 1] = p[idx, 1] - d[idx]*dgrady
    self.maxmove = np.max(np.sqrt(np.sum(dt*dxdt[d < -self.geps,:]**2, axis=1))/h0)
    self.time_elapsed += dt
    if self.maxmove > ttol:
        self.mesh.cell = self.delaunay(self.mesh.point)