Step 1: Initialize arrays φ̂ and F̂, and the lists Lout and Lin.
Step 2: Compute speed F for all points in Lout and Lin and store sign in F̂.
-
Step 3: Scan through the two lists Lout and Lin and update:
Outward evolution. Scan through Lout. For each point x ∈ Lout, switch_in(x) if F̂(x) > 0.
Eliminate redundant points in Lin. Scan through Lin. For each point x ∈ Lin, if ∀y ∈ N(x), φ̂(y) < 0, delete x from Lin, and set φ̂(x) = −3.
Inward evolution. Scan through Lin. For each point x ∈ Lin, switch_out(x) if F̂(x) < 0.
Eliminate redundant points in Lout. Scan through Lout. For each point x ∈ Lout, if ∀y ∈ N(x), φ̂(y) > 0, delete x from Lout, and set φ̂(x) = 3.
Step 4: If the stopping condition is not satisfied, go to Step 2.
|