Solve Riemann problem using the HLLC Riemann solver.
42 double scrh, vxr, vxl;
44 double qL, qR, wL, wR;
45 double *vL, *vR, *uL, *uR;
49 static double *pL, *pR, *SL, *SR, *a2L, *a2R;
50 static double **fL, **fR;
74 Flux (state->
uL, state->
vL, a2L, fL, pL, beg, end);
75 Flux (state->
uR, state->
vR, a2R, fR, pR, beg, end);
79 for (i = beg; i <= end; i++) {
81 scrh =
MAX(fabs(SL[i]), fabs(SR[i]));
86 for (nv =
NFLX; nv--; ) state->
flux[i][nv] = fL[i][nv];
87 state->
press[i] = pL[i];
89 }
else if (SR[i] < 0.0){
91 for (nv =
NFLX; nv--; ) state->
flux[i][nv] = fR[i][nv];
92 state->
press[i] = pR[i];
96 vR = state->
vR[
i]; uR = state->
uR[
i];
97 vL = state->
vL[
i]; uL = state->
uL[
i];
102 #if SHOCK_FLATTENING == MULTID
104 scrh = 1.0/(SR[
i] - SL[
i]);
105 for (nv =
NFLX; nv--; ){
106 state->
flux[
i][nv] = SL[
i]*SR[
i]*(uR[nv] - uL[nv])
107 + SR[i]*fL[i][nv] - SL[i]*fR[i][nv];
110 state->
press[
i] = (SR[
i]*pL[
i] - SL[
i]*pR[
i])*scrh;
120 qL = vL[PRS] + uL[
MXn]*(vL[
VXn] - SL[
i]);
121 qR = vR[PRS] + uR[
MXn]*(vR[
VXn] - SR[
i]);
123 wL = vL[
RHO]*(vL[
VXn] - SL[
i]);
124 wR = vR[
RHO]*(vR[
VXn] - SR[
i]);
126 vs = (qR - qL)/(wR - wL);
133 usL[
RHO] = uL[
RHO]*(SL[
i] - vxl)/(SL[i] - vs);
134 usR[
RHO] = uR[
RHO]*(SR[
i] - vxr)/(SR[i] - vs);
135 EXPAND(usL[
MXn] = usL[
RHO]*vs; usR[
MXn] = usR[
RHO]*vs; ,
139 usL[ENG] = uL[ENG]/vL[
RHO]
140 + (vs - vxl)*(vs + vL[PRS]/(vL[
RHO]*(SL[
i] - vxl)));
141 usR[ENG] = uR[ENG]/vR[
RHO]
142 + (vs - vxr)*(vs + vR[PRS]/(vR[
RHO]*(SR[i] - vxr)));
144 usL[ENG] *= usL[
RHO];
145 usR[ENG] *= usR[
RHO];
146 #elif EOS == ISOTHERMAL
147 scrh = 1.0/(SR[
i] - SL[
i]);
151 usL[
RHO] = usR[
RHO] = rho;
178 for (nv =
NFLX; nv--; ) {
179 state->
flux[
i][nv] = fL[
i][nv] + SL[
i]*(usL[nv] - uL[nv]);
183 for (nv =
NFLX; nv--; ) {
184 state->
flux[
i][nv] = fR[
i][nv] + SR[
i]*(usR[nv] - uR[nv]);
double ** flux
upwind flux computed with the Riemann solver
void Flux(double **u, double **w, double *a2, double **fx, double *p, int beg, int end)
double ** vR
Primitive variables to the right of the interface, .
void SoundSpeed2(double **v, double *cs2, double *h, int beg, int end, int pos, Grid *grid)
double ** uR
same as vR, in conservative vars
#define ARRAY_1D(nx, type)
long int NMAX_POINT
Maximum number of points among the three directions, boundaries excluded.
void HLL_Speed(double **vL, double **vR, double *a2L, double *a2R, double *SL, double *SR, int beg, int end)
double ** vL
Primitive variables to the left of the interface, .
double * press
Upwind pressure term computed with the Riemann solver.
#define FLAG_HLL
Use HLL Riemann solver.
#define ARRAY_2D(nx, ny, type)
double ** uL
same as vL, in conservative vars