4.8 Implement advection function in space

"""
    Advection function along x and e computation

```math
\\frac{df}{dt} = v \\frac{df}{dx}
```
```math
\\frac{\\partial E}{\\partial t} = \\int fv \\; dv
```

"""
function (adv :: AmpereAdvection)( f   :: Array{ComplexF64,2}, 
                                   e   :: Vector{ComplexF64}, 
                                   v   :: Vector{Float64}, 
                                   dt  :: Float64 )
    
    ev = exp.(-1im*dt * adv.kx * transpose(v))    
    
    fft!(f,1)
    f .= f .* ev
    dv = v[2]-v[1]
    ρ = dv * vec(sum(f,dims=2))  
    for i in 2:length(e)
        e[i] = -1im * ρ[i] ./ adv.kx[i]
    end
    e[1] = 0.0
    ifft!(f,1)
    ifft!(e)
    e .= real(e)
end


CC BY-SA 4.0 Pierre Navaro