next up previous contents
Next: Bibliography Up: Appendix: Basics of Godunov Previous: Appendix: Basics of Godunov   Contents

Roe Solver

The solution of the full Riemann problem at every cell boundary is usually not very efficient. In most cases the overall time step to update the variables to the future time will involve some kind of iterative process, solving exactly the Riemann problem at each iteration does not imply that the overall process will be solved faster or more accurate. The Roe solver is a solver that uses modified Riemann problems in order to compute the numerical fluxes. For a more extensive explanation of this and other approximate Riemann solvers see [5]. The main idea is to linearize the fluxes on equation (32) as functions of ${\bf q}$, we assume also that the sources are zero:
\begin{displaymath}
\frac{\partial \bf q}{\partial t} + \frac{\partial {\bf f}}{\partial {\bf q}} \frac{\partial {\bf q}}{\partial x}=0.
\end{displaymath} (72)

Considering $\partial {\bf f}/\partial {\bf q}$ to have constant coefficients makes this problem a linear problem that can be solved diagonalizing the Jacobian matrix. The numerical flux can be written as a function of the solution to this problem. Here we write the resulting numerical fluxes directly as:
\begin{displaymath}
{\bf F}_{i+1/2} = \frac{1}{2} \left[
{\bf f}\left(\tilde{\bf...
...pha \vert \omega_\alpha \mbox{\boldmath$\eta$}_\alpha \right].
\end{displaymath} (73)

Now we explain the different terms that appear in equation (75). Firstly the right and left reconstructed variables ( $\tilde {\bf q}{}^R$, $\tilde {\bf q}{}^L$). They are the values of the conservation variables at the boundary $x_{i+1/2}$ calculated interpolating from the left and from the right respectively. Special care should be taken calculating the reconstructed variables in order to reduce spurious oscillations close to discontinuities. In this case we use a slope limiter interpolation to calculate the reconstructed values (for other way of reconstructing, see [1] and [5]):

$\displaystyle \tilde {\bf q}{}^L_{i+1/2}$ $\textstyle =$ $\displaystyle \bar {\bf q}_i + \mbox{\boldmath$\sigma$}_i \ \left(x_{i+1/2}-x_{i}\right),$ (74)
$\displaystyle \tilde {\bf q}{}^R_{i+1/2}$ $\textstyle =$ $\displaystyle \bar {\bf q}_{i+1} + \mbox{\boldmath$\sigma$}_{i+1} \ \left(x_{i+1/2}-x_{i+1} \right),$ (75)

where $\mbox{\boldmath$\sigma$}_{i}$ is:
\begin{displaymath}
\mbox{\boldmath$\sigma$}_{i} = {\rm minmod}\left({\bf s}_{i-1/2},{\bf s}_{i+1/2} \right).
\end{displaymath} (76)

Here:
\begin{displaymath}
{\bf s}_{i+1/2} = \frac{\bar {\bf q}_{i+1}-\bar {\bf q}_{i}}{x_{i+1}-x_i}
\end{displaymath} (77)

and
\begin{displaymath}
minmod(a,b) = \left\{
\begin{array}{c c c}
0 & {\rm if} & a...
... a\vert>\vert b\vert\ \ {\rm and}\ \ ab>0.
\end{array} \right.
\end{displaymath} (78)

In equation (75) we also use the characteristic structure of the Riemann problem at the $x_{i+1/2}$ interface ( $\lambda_\alpha$, $\omega_\alpha$, $\mbox{\boldmath$\eta$}_\alpha$). Given the Jacobian matrix:
\begin{displaymath}
\left.{\bf A}\right\vert _{i+1/2} = \left.\frac{\partial {\b...
...1/2\, (\tilde {\bf q}^L_{i+1/2}
+ \tilde {\bf q}^R_{i+1/2})},
\end{displaymath} (79)

$\lambda_\alpha$ are the eigenvalues of ${\bf A}$, $\mbox{\boldmath$\eta$}_\alpha$ are the right eigenvectors associated with the eigenvalues $\lambda_\alpha$ and $\omega_\alpha$ the jumps in the characteristic variables which are defined by:
\begin{displaymath}
\bar {\bf q}^R_{i+1/2}- \bar {\bf q}^L_{i+1/2} = \sum_\alpha \omega_\alpha {\mbox{\boldmath$\eta$}}_\alpha.
\end{displaymath} (80)


next up previous contents
Next: Bibliography Up: Appendix: Basics of Godunov Previous: Appendix: Basics of Godunov   Contents
Benjamin Gutierrez 2005-07-23