Evolve the level-set equation with time stepping. Perform explicit time stepping on the equation
d/dt phi + f |grad phi |= 0.
The initial value is given by phi0. phi0 and f must
be of the same size. If h is present, it sets the spatial grid size.
The time stepping uses upwind_gradient_norm for the evaluation
of the gradient norm at each step.
t is the time (or vector of times) at which the solution should be returned. If more than one time is given, the result phit will be a cell array of the evolved level-set functions at each of the requested time points. If t is a scalar, phit is returned as array of the same size of phi0.
The time step is chosen to satisfy the Courant-Friedrichs-Lewy condition
dt = c h / (Fm * n).
Here, Fm is the maximum absolute value in f, and n is the number of space dimensions. The desired ratio c is by default one, but can be passed explicitly with the second usage form.
See also: ls_extract_solution, upwind_gradient_norm.
The following code
n = 500;
x = linspace (-5, 5, n);
h = x(2) - x(1);
[XX, YY] = meshgrid (x, x);
F = sin (XX .* YY);
phi0 = ls_genbasic (XX, YY, "sphere", [0, 0], 3);
phit = ls_time_step ([0.5, 1], phi0, F, h);
figure ();
hold ("on");
imagesc (x, x, F);
set (gca (), "ydir", "normal");
ls_sign_colourmap ();
contour (XX, YY, phi0, [0, 0], "k", "LineWidth", 2);
contour (XX, YY, phit{1}, [0, 0], "k", "LineWidth", 2);
contour (XX, YY, phit{2}, [0, 0], "k", "LineWidth", 2);
hold ("off");
Produces the following figure
| Figure 1 |
|---|
![]() |
Package: level-set