Skip to content

adam_riemann_euler_library

ADAM, Riemann Problem for Euler equations solvers and convective fluxes computations library.

Source: src/lib/common/adam_riemann_euler_library.F90

Dependencies

Contents

Subroutines

compute_riemann_euler_exact

Solve the Riemann problem between the state 1 (left) and 4 (right) using exact Integral/Rainkine-Hugonoit relations.

fortran
subroutine compute_riemann_euler_exact(si, sir, uni, ut1, ut2, nv, q_aux1, q_aux4, f, lmax)

Arguments

NameTypeIntentAttributesDescription
siinteger(kind=I4P)inDirectional (1=x,2=y,3=z) increment.
sirreal(kind=R8P)inDirectional (1=x,2=y,3=z) increment.
uniinteger(kind=I4P)inIndex of normal and tangential velocities.
ut1integer(kind=I4P)inIndex of normal and tangential velocities.
ut2integer(kind=I4P)inIndex of normal and tangential velocities.
nvinteger(kind=I4P)inNumber of conservative varibales.
q_aux1real(kind=R8P)inLeft state, auxiliary variables.
q_aux4real(kind=R8P)inLeft state, auxiliary variables.
freal(kind=R8P)inoutResulting fluxes.
lmaxreal(kind=R8P)outoptionalMaximum wave speed estimation.

Call graph

compute_riemann_euler_hllc

Solve the Riemann problem between the state 1 (left) and 4 (right) using the HLLC solver.

fortran
subroutine compute_riemann_euler_hllc(si, sir, uni, ut1, ut2, nv, q_aux1, q_aux4, f, lmax)

Arguments

NameTypeIntentAttributesDescription
siinteger(kind=I4P)inDirectional (1=x,2=y,3=z) increment.
sirreal(kind=R8P)inDirectional (1=x,2=y,3=z) increment.
uniinteger(kind=I4P)inIndex of normal and tangential velocities.
ut1integer(kind=I4P)inIndex of normal and tangential velocities.
ut2integer(kind=I4P)inIndex of normal and tangential velocities.
nvinteger(kind=I4P)inNumber of conservative varibales.
q_aux1real(kind=R8P)inLeft state, auxiliary variables.
q_aux4real(kind=R8P)inLeft state, auxiliary variables.
freal(kind=R8P)inoutResulting fluxes.
lmaxreal(kind=R8P)outoptionalMaximum wave speed estimation.

Call graph

compute_riemann_euler_hllc_lm

Solve the Riemann problem between the state 1 (left) and 4 (right) using the HLLC-LM solver. The algorithm is based on the Low Mach (LM) modification, see "A shock-stable modification of the HLLC Riemann solver with reduced numerical dissipation", Nico Fleischmann, Stefan Adami, Nikolaus A. Adams, 2020.

fortran
subroutine compute_riemann_euler_hllc_lm(si, sir, uni, ut1, ut2, nv, q_aux1, q_aux4, f, lmax)

Arguments

NameTypeIntentAttributesDescription
siinteger(kind=I4P)inDirectional (1=x,2=y,3=z) increment.
sirreal(kind=R8P)inDirectional (1=x,2=y,3=z) increment.
uniinteger(kind=I4P)inIndex of normal and tangential velocities.
ut1integer(kind=I4P)inIndex of normal and tangential velocities.
ut2integer(kind=I4P)inIndex of normal and tangential velocities.
nvinteger(kind=I4P)inNumber of conservative varibales.
q_aux1real(kind=R8P)inLeft state, auxiliary variables.
q_aux4real(kind=R8P)inLeft state, auxiliary variables.
freal(kind=R8P)inoutResulting fluxes.
lmaxreal(kind=R8P)outoptionalMaximum wave speed estimation.

Call graph

compute_riemann_euler_hllem

Solve the Riemann problem between the state 1 (left) and 4 (right) using the HLLEM solver. See Dumbser and Balsara "A new efficient formulation of the HLLEM Riemann solver for general conservative and non-conservative hyperbolic systems", 2016, Journal of Compuational Physics.

fortran
subroutine compute_riemann_euler_hllem(si, sir, uni, ut1, ut2, nv, q_aux1, q_aux4, f, lmax)

Arguments

NameTypeIntentAttributesDescription
siinteger(kind=I4P)inDirectional (1=x,2=y,3=z) increment.
sirreal(kind=R8P)inDirectional (1=x,2=y,3=z) increment.
uniinteger(kind=I4P)inIndex of normal and tangential velocities.
ut1integer(kind=I4P)inIndex of normal and tangential velocities.
ut2integer(kind=I4P)inIndex of normal and tangential velocities.
nvinteger(kind=I4P)inNumber of conservative varibales.
q_aux1real(kind=R8P)inLeft state, auxiliary variables.
q_aux4real(kind=R8P)inLeft state, auxiliary variables.
freal(kind=R8P)inoutResulting fluxes.
lmaxreal(kind=R8P)outoptionalMaximum wave speed estimation.

Call graph

compute_riemann_euler_llf

Solve the Riemann problem between the state 1 (left) and 4 (right) using the Local-Lax-Friedrichs (LLF, Rusanov) solver.

fortran
subroutine compute_riemann_euler_llf(si, sir, uni, ut1, ut2, nv, q_aux1, q_aux4, f, lmax)

Arguments

NameTypeIntentAttributesDescription
siinteger(kind=I4P)inDirectional (1=x,2=y,3=z) increment.
sirreal(kind=R8P)inDirectional (1=x,2=y,3=z) increment.
uniinteger(kind=I4P)inIndex of normal and tangential velocities.
ut1integer(kind=I4P)inIndex of normal and tangential velocities.
ut2integer(kind=I4P)inIndex of normal and tangential velocities.
nvinteger(kind=I4P)inNumber of conservative varibales.
q_aux1real(kind=R8P)inLeft state, auxiliary variables.
q_aux4real(kind=R8P)inLeft state, auxiliary variables.
freal(kind=R8P)inoutResulting fluxes.
lmaxreal(kind=R8P)outoptionalMaximum wave speed estimation.

Call graph

compute_riemann_euler_ts

Solve the Riemann problem between the state 1 (left) and 4 (right) using the Two-Shocks (TS) approximation.

fortran
subroutine compute_riemann_euler_ts(si, sir, uni, ut1, ut2, nv, q_aux1, q_aux4, f, lmax)

Arguments

NameTypeIntentAttributesDescription
siinteger(kind=I4P)inDirectional (1=x,2=y,3=z) increment.
sirreal(kind=R8P)inDirectional (1=x,2=y,3=z) increment.
uniinteger(kind=I4P)inIndex of normal and tangential velocities.
ut1integer(kind=I4P)inIndex of normal and tangential velocities.
ut2integer(kind=I4P)inIndex of normal and tangential velocities.
nvinteger(kind=I4P)inNumber of conservative varibales.
q_aux1real(kind=R8P)inLeft state, auxiliary variables.
q_aux4real(kind=R8P)inLeft state, auxiliary variables.
freal(kind=R8P)inoutResulting fluxes.
lmaxreal(kind=R8P)outoptionalMaximum wave speed estimation.

Call graph

compute_conservatives_euler

Compute convervative variables from auxiliary ones.

Attributes: pure

fortran
subroutine compute_conservatives_euler(q_aux, q)

Arguments

NameTypeIntentAttributesDescription
q_auxreal(kind=R8P)inAuxiliary variables.
qreal(kind=R8P)inoutConservative varibales.

Call graph

compute_convective_fluxes_euler

Compute convective fluxes for Euler equations from auxiliary variables.

Attributes: pure

fortran
subroutine compute_convective_fluxes_euler(sir, q_aux, f)

Arguments

NameTypeIntentAttributesDescription
sirreal(kind=R8P)inDirectional (1=x,2=y,3=z) increment.
q_auxreal(kind=R8P)inAuxiliary variables.
freal(kind=R8P)inoutConservative fluxes.

Call graph

compute_eigeinvectors_left

Compute left eigenvectors matrix (L) of the Jacobian fluxes matrix A=RΛL in primitive variables form. @note This function consider only the normal direction: Pt+RΛLPn=0 where P are the primitive variables and n is the normal direction. R is the matrix of the right eigenvectors, Λ is the diagonal matrix of the eigenvalues and L is the matrix of the left eigenvectors.

Attributes: pure

fortran
subroutine compute_eigeinvectors_left(gm1, u, a, el)

Arguments

NameTypeIntentAttributesDescription
gm1real(kind=R8P)inSpecific heats ration minus one, g-1.
ureal(kind=R8P)inNormal velocity.
areal(kind=R8P)inSpeed of sound.
elreal(kind=R8P)inoutLeft eigenvectors matrix.

Call graph

compute_eigeinvectors_right

Compute right eigenvectors matrix (R) of the Jacobian fluxes matrix A=RΛL in primitive variables form. @note This function consider only the normal direction: Pt+RΛLPn=0 where P are the primitive variables and n is the normal direction. R is the matrix of the right eigenvectors, Λ is the diagonal matrix of the eigenvalues and L is the matrix of the left eigenvectors.

Attributes: pure

fortran
subroutine compute_eigeinvectors_right(H, u, a, er)

Arguments

NameTypeIntentAttributesDescription
Hreal(kind=R8P)inTotal specific entalpy.
ureal(kind=R8P)inNormal velocity.
areal(kind=R8P)inSpeed of sound.
erreal(kind=R8P)inoutRight eigenvectors matrix.

Call graph