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,