anchor.diff:                  ) all_neighbors
   
     // convection by means of a backwards particle trace.
  -  let apply_convection () =
  +  let apply_convection dt =
       let new_velocities = Seq.map (fun m ->
  -                                    let new_position = trace m Constants.time_step
  +                                    let new_position = trace m dt
                                       match Grid.get new_position with
                                         | Some c -> c.velocity
                                         | _ -> failwith "Backwards particle trace went too far."
  
positive.code:                     | _ -> ()
                ) solids
  
    let move_markers () =
      // for now, advance by frame.
      markers <- Seq.map (fun (marker: Coord) ->
                            let p = marker.to_vector ()
                            let c = Grid.raw_get marker
                            let new_coords = p .+ (c.velocity .* Constants.time_step)
                            { x = int new_coords.x; y = int new_coords.y; z = int new_coords.z; }
                          ) markers |> Seq.toList
  
    let advance () =
      printfn "Moving simulation forward with time step %A." Constants.time_step
      Grid.setup (fun () ->
        printfn "  Setup: Updating fluid markers."
        update_fluid_markers ()
  
negative.code:               ) markers
  
    // viscosity by evaluating the lapalacian on bordering fluid cells.
    let apply_viscosity dt =
      let const_v = Constants.fluid_viscosity * dt
      let velocities = Seq.map Grid.laplacian markers
      Seq.iter2 (fun m v ->
                   let c = Grid.raw_get m
  