Roe Convection Term
As a relatively painless entry to the implementation of higher order Riemann solvers in FiPy, I'm planning on implementing a basic Roe solver. Given a basic vector advection equation,
flux updates for a Roe solver can be written,
where the flux is across a face between cell and cell
and
the normal
points from
to
. The question when
implementing Roe solvers is how to approximate
from the
local Riemann problem
where
It is generally impossible to obtain an exact calculation for
at the face. Strictly speaking, a Roe solver involves quite a
complicated method to obtain an approximation for
,
. For the time being, in order to test the constant
coefficient problems we will use a simple calculation for
, namely,
From , we can obtain
where is the matrix of right eigenvectors and
is
the matrix of the absolute values of the eigenvalues along the diagonal.
I can pretty much see how to implement this algorithm in fipy without
too many issues. I can see that getting from
is not going to be easy, since an
eigenvector/eigenvalue calculation is required for every face. At the
moment the only way I see to do this is actually calculating
and
and reconstructing. Maybe there is a clever way to do this???
Higher Order Correction
Here we make the scheme second order on a regular grid. The correccted flux is given by,
where
is given by
and is given by
where is the cell to cell distance and
is the face
area.
is given by,
where
The 's are given by,