76 #if CHAR_LIMITING == NO
94 double **v, **vp, **vm;
96 double cp, cm, wp, wm, dp, dm;
100 #if LIMITER == FOURTH_ORDER_LIM
118 #if UNIFORM_CARTESIAN_GRID == NO
130 for (i = beg-1; i <= end; i++){
138 for (i = beg; i <= end; i++){
144 #if UNIFORM_CARTESIAN_GRID == YES
150 dvm[nv] = dv[i-1][nv];
153 cp = plm_coeffs.
cp[
i]; cm = plm_coeffs.
cm[
i];
154 wp = plm_coeffs.
wp[
i]; wm = plm_coeffs.
wm[
i];
155 dp = plm_coeffs.
dp[
i]; dm = plm_coeffs.
dm[
i];
157 dvp[nv] = dv[
i][nv]*wp;
158 dvm[nv] = dv[i-1][nv]*wm;
166 #if SHOCK_FLATTENING == MULTID
173 vp[
i][nv] = v[
i][nv] + dv_lim[nv]*dp;
174 vm[
i][nv] = v[
i][nv] - dv_lim[nv]*dm;
176 #if (PHYSICS == RHD || PHYSICS == RMHD)
188 #if LIMITER == DEFAULT
190 #if PHYSICS != ADVECTION
220 for (nv = 0; nv <
NVAR; nv++){
221 #if LIMITER != DEFAULT
222 SET_LIMITER(dv_lim[nv], dvp[nv], dvm[nv], cp, cm);
225 vp[
i][nv] = v[
i][nv] + dv_lim[nv]*dp;
226 vm[
i][nv] = v[
i][nv] - dv_lim[nv]*dm;
233 #if (PHYSICS == RHD || PHYSICS == RMHD)
242 #if CHECK_MONOTONICITY == YES
250 #if SHOCK_FLATTENING == ONED
251 Flatten (state, beg, end, grid);
259 for (i = beg - 1; i <= end; i++) {
268 #if TIME_STEPPING == CHARACTERISTIC_TRACING
270 #elif TIME_STEPPING == HANCOCK
276 #if PRIMITIVE_HANCOCK == NO
321 static double **dv, **dvf, **dvc, **dvlim;
322 double scrh, dvp, dvm, dvl;
323 double **v, **vp, **vm;
337 #if TIME_STEPPING == HANCOCK && PHYSICS != RMHD
350 for (i = beg-2; i <= end+1; i++){
351 for (nv = 0; nv <
NVAR; nv++) dv[i][nv] = v[i+1][nv] - v[i][nv];
354 for (i = beg - 1; i <= end + 1; i++){
355 for (nv = 0; nv <
NVAR; nv++){
356 dvp = dv[
i][nv]; dvm = dv[i-1][nv];
357 dvc[
i][nv] = 0.5*(dvp + dvm);
358 s[
i][nv] = (dvp > 0.0 ? 0.5:-0.5)
359 + (dvm > 0.0 ? 0.5:-0.5);
360 dvlim[
i][nv] = 2.0*
MIN(fabs(dvp), fabs(dvm));
361 dvf[
i][nv] =
MIN(fabs(dvc[i][nv]), dvlim[i][nv])*s[
i][nv];
364 for (i = beg; i <= end; i++){
365 for (nv = 0; nv <
NVAR; nv++){
366 if (dv[i][nv]*dv[i-1][nv] > 0.0) {
367 scrh = 4.0/3.0*dvc[
i][nv] - (dvf[i+1][nv] + dvf[i-1][nv])/6.0;
368 dvlim[
i][nv] =
MIN(fabs(scrh), dvlim[i][nv])*s[
i][nv];
374 for (nv = NVAR; nv--; ) {
375 vp[
i][nv] = v[
i][nv] + 0.5*dvlim[
i][nv];
376 vm[
i][nv] = v[
i][nv] - 0.5*dvlim[
i][nv];
378 #if (PHYSICS == RHD || PHYSICS == RMHD)
387 #if SHOCK_FLATTENING == MULTID && CHAR_LIMITING == NO
388 Flatten (state, beg, end, grid);
395 #if SHOCK_FLATTENING == ONED
396 Flatten (state, beg, end, grid);
404 for (i = beg - 1; i <= end; i++) {
414 #if TIME_STEPPING == HANCOCK
428 #if CHAR_LIMITING == YES
449 double **vp, **vm, **v;
450 double **L, **R, *lambda;
451 double cp, cm, wp, wm, cpk[
NVAR], cmk[
NVAR];
468 #if UNIFORM_CARTESIAN_GRID == NO
484 for (i = beg-1; i <= end; i++){
494 for (k =
NVAR; k--; ) kstp[k] = 2.0;
495 #if PHYSICS == HD || PHYSICS == RHD
496 kstp[0] = kstp[1] = 1.0;
500 kstp[KSLOWP] = kstp[KSLOWM] = 1.0;
508 for (i = beg; i <= end; i++){
522 #if UNIFORM_CARTESIAN_GRID == YES
528 dvm[nv] = dv[i-1][nv];
531 cpk[
k] = cmk[
k] = kstp[
k];
534 cp = plm_coeffs.
cp[
i]; cm = plm_coeffs.
cm[
i];
535 wp = plm_coeffs.
wp[
i]; wm = plm_coeffs.
wm[
i];
536 dp = plm_coeffs.
dp[
i]; dm = plm_coeffs.
dm[
i];
538 dvp[nv] = dv[
i][nv]*wp;
539 dvm[nv] = dv[i-1][nv]*wm;
544 cpk[
k] = (2.0 - cp) + (cp - 1.0)*kstp[
k];
545 cmk[
k] = (2.0 - cm) + (cm - 1.0)*kstp[
k];
557 #if SHOCK_FLATTENING == MULTID
559 for (k =
NFLX; k--; ) dw_lim[k] = 0.0;
561 for (k =
NFLX; k--; ){
566 for (k =
NFLX; k--; ){
567 #if LIMITER == DEFAULT
570 SET_LIMITER(dw_lim[k], dwp[k], dwm[k], cp, cm);
581 for (nv =
NFLX; nv--; ){
583 for (k = 0; k <
NFLX; k++) dc += dw_lim[k]*R[nv][k];
585 if (dvp[nv]*dvm[nv] > 0.0){
586 d2v =
ABS_MIN(cp*dvp[nv], cm*dvm[nv]);
587 dv_lim[nv] =
MINMOD(d2v, dc);
588 }
else dv_lim[nv] = 0.0;
599 #if LIMITER == DEFAULT
602 SET_LIMITER(dv_lim[nv], dvp[nv], dvm[nv], cp, cm);
611 for (nv = NVAR; nv--; ) {
612 vp[
i][nv] = v[
i][nv] + dv_lim[nv]*dp;
613 vm[
i][nv] = v[
i][nv] - dv_lim[nv]*dm;
616 #if (PHYSICS == RHD || PHYSICS == RMHD)
626 #if CHECK_MONOTONICITY == YES
634 #if SHOCK_FLATTENING == ONED
635 Flatten (state, beg, end, grid);
643 for (i = beg-1; i <= end; i++) {
652 #if TIME_STEPPING == CHARACTERISTIC_TRACING
654 #elif TIME_STEPPING == HANCOCK
685 double vp_max, vp_min, vm_max, vm_min;
687 for (i = beg; i <= end; i++){
VAR_LOOP(nv) {
688 vp_max =
MAX(v[i][nv], v[i+1][nv]) + 1.e-9;
689 vp_min =
MIN(v[i][nv], v[i+1][nv]) - 1.e-9;
691 vm_max =
MAX(v[i][nv], v[i-1][nv]) + 1.e-9;
692 vm_min =
MIN(v[i][nv], v[i-1][nv]) - 1.e-9;
694 if (vp[i][nv] > vp_max || vp[i][nv] < vp_min){
695 print (
"! States: monotonicity violated at + interface, i = %d\n",i);
696 print (
"vp = %12.6e; vmax = %12.6e, vmin = %12.6e\n",
697 vp[i][nv], vp_max, vp_min);
701 if (vm[i][nv] > vm_max || vm[i][nv] < vm_min){
702 print (
"! States: monotonicity violated at - interface, i = %d\n",i);
703 print (
"vm = %12.6e; vmax = %12.6e, vmin = %12.6e\n",
704 vm[i][nv], vm_max, vm_min);
double ** v
Cell-centered primitive varables at the base time level, v[i] = .
void VelocityLimiter(double *, double *, double *)
void ConvertTo4vel(double **, int, int)
#define SET_VL_LIMITER(dv, dvp, dvm, cp, cm)
void Flatten(const State_1D *, int, int, Grid *)
#define FLAG_FLAT
Reconstruct using FLAT limiter.
void PrimEigenvectors(double *q, double cs2, double h, double *lambda, double **LL, double **RR)
void CharTracingStep(const State_1D *, int, int, Grid *)
double ** vR
Primitive variables to the right of the interface, .
#define SET_GM_LIMITER(dv, dvp, dvm, cp, cm)
#define FLAG_MINMOD
Reconstruct using MINMOD limiter.
void SoundSpeed2(double **v, double *cs2, double *h, int beg, int end, int pos, Grid *grid)
double ** vp
prim vars at i+1/2 edge, vp[i] = vL(i+1/2)
int g_dir
Specifies the current sweep or direction of integration.
void States(const State_1D *state, int beg, int end, Grid *grid)
#define SET_MC_LIMITER(dv, dvp, dvm, cp, cm)
double ** lambda
Characteristic speed associated to Lp and Rp.
void ConvertTo3vel(double **, int, int)
void print(const char *fmt,...)
void PrimToChar(double **L, double *v, double *w)
#define SET_MM_LIMITER(dv, dvp, dvm, cp, cm)
double ** vm
prim vars at i-1/2 edge, vm[i] = vR(i-1/2)
void PLM_CoefficientsGet(PLM_Coeffs *plm_coeffs, int dir)
long int NMAX_POINT
Maximum number of points among the three directions, boundaries excluded.
void PrimToCons(double **uprim, double **ucons, int ibeg, int iend)
double * bn
Face magentic field, bn = bx(i+1/2)
static void MonotonicityTest(double **, double **, double **, int, int)
double ** um
same as vm, in conservative vars
double ** vL
Primitive variables to the left of the interface, .
double * a2
Sound speed squared.
double ** up
same as vp, in conservative vars
#define ARRAY_2D(nx, ny, type)
double *** Rp
Left and right primitive eigenvectors.
#define QUIT_PLUTO(e_code)
static void FourthOrderLinear(const State_1D *, int, int, Grid *)
void HancockStep(const State_1D *, int, int, Grid *)