PLUTO
check_states.c
Go to the documentation of this file.
1 #include "pluto.h"
2 
3 /* *********************************************************************** */
4 void CheckPrimStates(double **vM, double **vP, double **v0, int beg, int end)
5 /*
6  *
7  * PURPOSE
8  *
9  * check if primitive states vL and vR are physically
10  * admissible.
11  * Replace their value with v0 otherwise.
12  *
13  *
14  ************************************************************************** */
15 {
16 #if PHYSICS != ADVECTION
17  int i, nv, switch_to_1st;
18  double scrhm, scrhp;
19  double *ac, *ap, *am;
20 
21  for (i = beg; i <= end; i++){
22 
23  switch_to_1st = 0;
24 
25  ac = v0[i];
26  am = vM[i];
27  ap = vP[i];
28 
29  /* ---- Prevent unphysical states by revertin to first
30  order in time and space, i.e. set dw = 0 ---- */
31 
32  #if HAVE_ENERGY
33  switch_to_1st = (ap[PRS] < 0.0) || (am[PRS] < 0.0) ;
34  #endif
35  switch_to_1st = switch_to_1st ||
36  (ap[RHO] < 0.0) || (am[RHO] < 0.0) ;
37 
38  /* ---- Check for superluminal velocities ---- */
39 
40 #if (PHYSICS == RHD) || (PHYSICS == RMHD)
41  #if RECONSTRUCT_4VEL == NO
42  scrhm = EXPAND(am[VX1]*am[VX1], + am[VX2]*am[VX2], + am[VX3]*am[VX3]);
43  scrhp = EXPAND(ap[VX1]*ap[VX1], + ap[VX2]*ap[VX2], + ap[VX3]*ap[VX3]);
44  switch_to_1st = switch_to_1st || (scrhm >= 1.0);
45  switch_to_1st = switch_to_1st || (scrhp >= 1.0);
46  #endif
47 #endif
48 
49  if (switch_to_1st){
50 /*
51  WARNING (
52  print (" ! CheckPrimStates: Unphysical state, ");
53  Where (i,NULL);
54  )
55 */
56  #ifdef STAGGERED_MHD
57  scrhp = ap[BXn];
58  scrhm = am[BXn];
59  #endif
60 
61  for (nv = 0; nv < NVAR; nv++){
62  am[nv] = ap[nv] = ac[nv];
63  }
64 
65  #ifdef STAGGERED_MHD
66  ap[BXn] = scrhp;
67  am[BXn] = scrhm;
68  #endif
69 
70  }
71  }
72 #endif
73 }
74 
75 
76 /*
77 #if GEOMETRY == CYLINDRICAL
78 if (NSWEEP == 1) {
79  for (nv = 0; nv < NVAR; nv++){
80  if (nv == VX) scrh = fabs(v1[3][nv] + v1[4][nv]);
81  else scrh = fabs(v1[3][nv] - v1[4][nv]);
82 
83  #if PHYSICS == RMHD
84  if (nv == BZ) scrh = fabs(v1[3][nv] + v1[4][nv]);
85  #endif
86 
87  if (scrh > 1.e-8){
88  printf ("symmetry violated, z : %d, var: %d\n", *nyp, nv);
89  SHOW(rhs,4);
90  SHOW(rhs,3);
91  printf (" --- centered:\n");
92  SHOW(vv,0); SHOW(vv,1); SHOW(vv,2); SHOW(vv,3);
93  SHOW(vv,4); SHOW(vv,5); SHOW(vv,6); SHOW(vv,7);
94  printf (" --- edge\n");
95  SHOW(vl,3); SHOW(vr,3);
96  SHOW(vr,2); SHOW(vl,4);
97 
98  printf ("Source: \n");
99  SHOW(src,3);SHOW(src,4);
100  scrhp = fl[4][MXn]*GG->A[4]/GG->dV[4] - src[4][MXn];
101  scrhm = -fr[2][MXn]*GG->A[2]/GG->dV[3] - src[3][MXn];
102  printf ("%12.6e %12.6e\n",scrhp, scrhm);
103  exit(1);
104  }
105  }
106 }
107 #endif
108 */
109 
110 
#define VX2
Definition: mod_defs.h:29
#define RHO
Definition: mod_defs.h:19
void CheckPrimStates(double **vM, double **vP, double **v0, int beg, int end)
Definition: check_states.c:4
#define VX1
Definition: mod_defs.h:28
int BXn
Definition: globals.h:75
PLUTO main header file.
int i
Definition: analysis.c:2
#define VX3
Definition: mod_defs.h:30
#define NVAR
Definition: pluto.h:609