Version 92 (modified by 12 years ago) ( diff ) | ,
---|
Recap
The Euler equations are a set of non-linear PDE's, which comprise an eigenvalue problem. The eigenvalues for the equations are functions of the solution to the equations themselves. This means that the waves, which propagate with speeds = to their eigenvalues, distort the solution, and the solution distorts them over space and time. Thus the solution to the Riemann problem for the non-linear system does not consist of a closed form expression for the values of pstar and ustar like it does for a linear system of equations. To solve the Euler equations exactly then, we have developed the method of characteristics that describe the propagation of waves outside of the star region. To solve for values of the q-array inside of the star region, we used an iterative scheme and then sampled the solution in the different wave regions. We now are concerned with approximations to this exact solution. The method to be discussed here considers a 'linearized' version of the Euler equations, so analytical methods used for linear, constant the averages (tilde expressions in Toro, eqn. 11.118) can be used.
The ROE Solver
The Roe solver is an approximation means for the numerical flux of the Godunov method, which is derived through linearizing a hyperbolic system of equations. For instance, the Euler equations in conservative form are written
which using the chain rule is identical to
If we assume that
where, A-hat is a Jacobian matrix of averaged/constant values, we can derive an expression for the numerical flux in terms of 1) wave strengths (alpha), and the 2) eigenvalues (lambda) and 3) right eigenvectors (K) of the 'averaged' Jacobian:
where
So the goal is to compute the wave speeds and associated eigenvalues and eigenvectors of the Jacobian matrix. There are 2 methods by which we can do this: 1) The 'Roe' approach, which (non-trivially) constructs an averaged Jacobian directly that must satisfy conditions such as hyperbolicity and conservation, and 2), the newer 'Roe-Pike' approach, which avoids solving for the Jacobian and instead develops algebraic expressions for the sought quantities based on averages of the initial data. It is the 2nd, more widely used approach, that we will explore here.
The Roe-Pike Approach
This approach avoids construction of an averaged Jacobian directly. Instead the method involves 1) assuming the Jacobian consists of reference states for which the left and right states are close to, 2) solving for the eigenvalues and vectors for this 'reference' Jacobian, and the wave speeds, 3) evaluating these expressions using averaged versions of the original scalar quantities. In other words, the Roe Pike method consists of first, deriving expressions for the various quantities needed in the flux, then second, solving for the averaged primitive variables, and third, evaluating the expressions at the reference state equal to the average state.
From the equation above of the Euler equations in Jacobian form, we can derive the equations for wave speeds:
The eigenvalues and vectors are derived straightforwardly from the Jacobian, using typical methods.
Now, we assume the independent variables u, rho, etc. of these functions for alpha, lambda, and K are reference states (associated with hat notation) which we use to solve for any general, averaged versions of the variables (associated with tilde notation), which we use in the numerical flux. Toro goes through the algebraic analysis for the general case for the Euler equations. The results are as follows.
Roe-Pike Approach for Euler Equations
For the x-split, 3-dimensional Euler equations, we have the following eigenvalues and vectors:
and
{ {
where u, v, w, are velocities in x, y, z directions, respectively, a is the local sound speed, given by
H is the enthalpy given by
E is the total energy per unit volume,
with The Euler equations are a set of non-linear PDE's, which comprise an eigenvalue problem. The eigenvalues for the equations are functions of the solution to the equations themselves. This means that the waves, which propagate with speeds = to their eigenvalues, distort the solution, and the solution distorts them over space and time. Thus the solution to the Riemann
and e being the specific internal energy, which for ideal gases is,
Recall that the numerical flux is given by,
where the tilde's denote derived expressions evaluated at the average primitive variables:
Note that the vector equation for the numerical flux makes up 3 equations for the 3D Euler equations, one for each component of the following vectors:
the vector of numerical fluxes in conserved form,
vector of left-fluxes in conserved form,vector of right-fluxes in conserved form,
and eigenvectors,
Finally, the derived expressions for the wave-speeds are as follows,
and the corresponding expressions for rho, u, v, w, H, and a that we would plug into these wave speeds and the above expressions for the eigenvalues and eigenvectors are listed in Toro, eqn. 11.118. These in turn would be used in the numerical flux for the Godunov method.
Note in the above formalism, the following definition is used,
Entropy Fix
A Sample Algorithm
- Compute the averages (tilde expressions in Toro, eqn. 11.118) for the various quantities
- Compute the eigenvalues, eigenvectors, and wave speeds as functions of these averages
- Compute the numerical flux given in above formula
Short-comings of the Roe Solver
As with all methods of linearizing the Euler equations, discontinuities are resolved, but continuous fan-like structures are not. Thus the Roe solver has trouble solving the RP inside of a sonic (aka transonic) rarefaction wave (see below figure), but less of a problem with contacts and shocks. This problem is refered to as the 'entropy problem', because the method treats the rarefaction wave as a 'rarefaction shock', which is entropy violating. Recall that the entropy condition that must be satisfied for a discontinuous wave jump is that the characteristics run into each other. That is, Sb>S>Sa, where Sb is the speed BEHIND the wave, S is the speed of the wave, and Sa is the speed ahead of the wave. There was a later 'entropy fix' developed for the Roe solver that corrected this issue.
Here is a diagram of the different types of waves:
The waves are as follows: (a) left supersonic shock, (b) right supersonic shock, © left supersonic rarefaction, (d) right supersonic rarefaction, (e) transonic or sonic rarefaction.
Here is an example of the Roe solver poorly computing the flow inside of a left sonic rarefaction. As you can see, it computes the solution as if there was a discontinuity inside of the wave, not a continuous fan. Note the sonic point inside of the wave is where the eigenvalue for the left wave, Lambda1 = u-a = 0. Throughout the wave, the eigenvalue should change sign through this sonic point.
The code - Non-Entropy Fix
To get a 1D version of the method Toro was describing, without an 'entropy fix', I had the intuition to do the following- keep the flux equation the same, but ignore certain vectors and eigenvalues associated with y and z directions. This got rid of alpha's 3 and 4, K's 3 and 4, and lambda's 3 and 4. I changed the remaining eigenvectors to have 3 components each, again choosing to get rid of the y and z elements. This is the resulting code that I added to the Godunov solver. Unfortunately it did not work, and produced wonky results, see below.
Results, Non-Entropy Fix Code
The rho result should look like the result presented above in the shortcomings section. The reason it doesn't may be due to modifying the eigen-structure of the equations, while keeping the form of the numerical flux the same… Another potential problem that I can think of other than typos, which seem to be absent, would be that the numerical flux isn't in terms of conserved quantities. But again, this seems to not be right given the theory that developed the equation drew heavily upon conservative methods and integration.. I would be curious to add in the full expressions to this solver and see if it fixes things. However, I am planning on putting this in astrobear, so will instead focus on just writing an entropy correcting Roe Solver, which uses a different flux function given in Toro.
This oscillatory behavior is interesting, though. I am curious what sort of twitch in the algorithm causes it..
Results, Entropy Fix Code
Test 1 - Sod Test
Test 2
Fails with the Roe Solver.
Test 3
Test 4
Test 5
Discussion
Attachments (23)
- Test1Roe.png (11.5 KB ) - added by 12 years ago.
- waveStructures.png (30.2 KB ) - added by 12 years ago.
- RhoP.png (21.4 KB ) - added by 12 years ago.
- RhoU.png (16.5 KB ) - added by 12 years ago.
- RhoP.2.png (21.4 KB ) - added by 12 years ago.
- RoeRho.png (22.9 KB ) - added by 12 years ago.
- rhoSolver.png (118.5 KB ) - added by 12 years ago.
- CallRoe.png (14.1 KB ) - added by 12 years ago.
- RoePTest1.png (10.2 KB ) - added by 12 years ago.
- RoeUTest1.png (12.0 KB ) - added by 12 years ago.
- RoeRhoTest1.png (10.7 KB ) - added by 12 years ago.
- RoePTest3.png (12.2 KB ) - added by 12 years ago.
- RoeUTest3.png (12.4 KB ) - added by 12 years ago.
- RoeRhoTest3.png (12.7 KB ) - added by 12 years ago.
- RoePTest5.png (12.0 KB ) - added by 12 years ago.
- RoeUTest5.png (12.1 KB ) - added by 12 years ago.
- RoeRhoTest5.png (10.7 KB ) - added by 12 years ago.
- RoePTest4.png (13.5 KB ) - added by 12 years ago.
- RoeUTest4.png (10.5 KB ) - added by 12 years ago.
- RoeRhoTest4.png (11.0 KB ) - added by 12 years ago.
- Roe3.png (121.8 KB ) - added by 12 years ago.
- Roe2.png (127.3 KB ) - added by 12 years ago.
- Roe1.png (131.9 KB ) - added by 12 years ago.
Download all attachments as: .zip