PLUTO
4.4-patch2
|
Wave-speeds and characteristic decomposition for the MHD equations. More...
#include "pluto.h"
Functions | |
void | MaxSignalSpeed (const State *state, double *cmin, double *cmax, int beg, int end) |
void | Eigenvalues (double **v, double *csound2, double **lambda, int beg, int end) |
void | PrimEigenvectors (const State *state, int beg, int end) |
void | ConsEigenvectors (double *u, double *v, double a2, double **Lc, double **Rc, double *lambda) |
void | PrimToChar (double **Lp, double *v, double *w) |
This file contains various functions containing Jacobian-related information such as characteristic signal speeds, eigenvalues and eigenvector decomposition for the MHD module.
The function MaxSignalSpeed() computes the maximum and minimum characteristic signal velocity for the MHD equations.
The function Eigenvalues() computes the 7 characteristic waves.
The function PrimEigenvectors() calculates left and right eigenvectors and the corresponding eigenvalues for the primitive form the the MHD equations with an adiabatic or isothermal EoS.
The function ConsEigenvectors() provides the characteristic decomposition of the convervative MHD equations.
The function PrimToChar() compute the matrix-vector multiplcation between the L matrix (containing primitive left eigenvectors) and the vector v. The result containing the characteristic variables is stored in the vector w = L.v
void ConsEigenvectors | ( | double * | u, |
double * | v, | ||
double | a2, | ||
double ** | Lc, | ||
double ** | Rc, | ||
double * | lambda | ||
) |
Provide conservative eigenvectors for MHD equations.
[in] | u | array of conservative variables |
[in] | v | array of primitive variables |
[in] | a2 | square of sound speed |
[out] | Lc | left conservative eigenvectors |
[out] | Rc | right conservative eigenvectors |
[out] | lambda | eigenvalues |
Reference
With the following corrections:
The components (By, Bz) of L_{1,7} page 571 should be +{rho}a instead of -. Also, since Bx is not considered as a parameter, one must also add a component in the fast and slow waves. This can be seen by forming the conservative eigenvectors from the primitive ones, see the paper from Powell, Roe Linde.
The Lc_{1,3,5,7}[Bx] components, according to Serna 09 are -(1-g_gamma)*a_{f,s}*Bx and not (1-g_gamma)*a_{f,s}*Bx. Both are orthonormal though. She is WRONG! -Petros-
void Eigenvalues | ( | double ** | v, |
double * | csound2, | ||
double ** | lambda, | ||
int | beg, | ||
int | end | ||
) |
Compute eigenvalues for the MHD equations
[in] | v | 1-D array of primitive variables |
[out] | csound2 | 1-D array containing the square of sound speed |
[out] | lambda | 1-D array [i][nv] containing the eigenvalues |
[in] | beg | starting index of computation |
[in] | end | final index of computation |
void MaxSignalSpeed | ( | const State * | state, |
double * | cmin, | ||
double * | cmax, | ||
int | beg, | ||
int | end | ||
) |
Compute the maximum and minimum characteristic velocities for the MHD equations, cmin= v - cf, cmax = v + cf
[in] | state | pointer to a State structure |
[out] | cmin | 1-D array containing the leftmost characteristic |
[out] | cmin | 1-D array containing the rightmost characteristic |
[in] | beg | starting index of computation |
[in] | end | final index of computation |
void PrimEigenvectors | ( | const State * | state, |
int | beg, | ||
int | end | ||
) |
Provide left and right eigenvectors and corresponding eigenvalues for the PRIMITIVE form of the MHD equations (adiabatic & isothermal cases).
[in,out] | state | Pointer to State structure |
[in] | beg | starting grid index |
[in] | end | final grid index |
state->Lp
and state->Rp
must be initialized to zero before since only non-zero entries are treated here.Wave names and their order are defined as enumeration constants in mod_defs.h. Notice that, the characteristic decomposition may differ depending on the way div.B is treated.
Advection modes associated with passive scalars are simple cases for which lambda = u (entropy mode) and l = r = (0, ... , 1, 0, ...). For this reason they are NOT defined here and must be treated seperately.
References:
The derivation of the isothermal eigenvectors follows the consideration given in roe.c
void PrimToChar | ( | double ** | Lp, |
double * | v, | ||
double * | w | ||
) |
Compute the matrix-vector multiplcation between the the L matrix (containing primitive left eigenvectors) and the vector v. The result containing the characteristic variables is stored in the vector w = L.v
For efficiency purpose, multiplication is done explicitly, so that only nonzero entries of the left primitive eigenvectors are considered.
[in] | Lp | Left eigenvectors |
[in] | v | (difference of) primitive variables |
[out] | w | (difference of) characteristic variables |