pub fn apply_neumann_reflection(u: &mut Vec<f64>)
Applies Neumann (zero-flux) conditions by ghost-cell reflection.
Left ghost: u[-1] = u[1], right ghost: u[n] = u[n-2]. Modifies the first and last elements of u in-place.
u[-1] = u[1]
u[n] = u[n-2]
u