24 #if RECONSTRUCTION == PARABOLIC || RECONSTRUCTION == WENO3 || RECONSTRUCTION == LimO3 
   35 #if CHAR_LIMITING == YES    
   36  #ifndef CHTR_REF_STATE 
   37   #define CHTR_REF_STATE  2 
   40  #ifndef CHTR_REF_STATE 
   41   #define CHTR_REF_STATE  3 
   64   double nup=1.0, num=-1.0, nu[
NFLX];
 
   66   double *vc, *vp, *vm, **L, **R, *lambda;
 
   73   #if CHAR_LIMITING == NO 
   78   for (i = beg; i <= 
end; i++){    
 
   94     #if CHAR_LIMITING == NO 
   97     for (k = 0; k < 
NFLX; k++) nu[k] = dtdx*lambda[k];
 
  103     for (nv = 
NVAR; nv--;  ) {
 
  104       dvp[nv] = vp[nv] - vc[nv];
 
  105       dvm[nv] = vm[nv] - vc[nv];
 
  126     #if CHTR_REF_STATE == 1 
  127      for (nv = NFLX; nv--;   ) vp[nv] = vm[nv] = vc[nv];
 
  128     #elif CHTR_REF_STATE == 3 
  129      nup = 
MAX(nu[1], 0.0); num = 
MIN(nu[0], 0.0);
 
  130      for (nv = NFLX; nv--;   ){
 
  131        dwh = vp[nv] - vm[nv];
 
  132        d2w = vp[nv] + vm[nv] - 2.0*vc[nv];
 
  133        vp[nv] -= 0.5*nup*(dwh + d2w*(3.0 - 2.0*nup));
 
  134        vm[nv] -= 0.5*num*(dwh - d2w*(3.0 + 2.0*num));
 
  150     for (k = 0; k < 
NFLX; k++){ 
 
  151       dwh = dwp[
k] - dwm[
k];
 
  152       d2w = dwp[
k] + dwm[
k]; 
 
  154         #if CHTR_REF_STATE == 1 
  155          Spp = dwp[
k] - 0.5*nu[
k]*(dwh + d2w*(3.0 - 2.0*nu[
k]));
 
  156         #elif CHTR_REF_STATE == 2 
  157          Spp =        - 0.5*nu[
k]*(dwh + d2w*(3.0 - 2.0*nu[
k]));
 
  158         #elif CHTR_REF_STATE == 3 
  159          Spp = -0.5*(nu[
k]-nup)*(dwh + 3.0*d2w) + (nu[
k]*nu[
k] - nup*nup)*d2w;
 
  161         for (nv = NFLX; nv--;   ) vp[nv] += Spp*R[nv][k];
 
  163         #if CHTR_REF_STATE == 1 
  164          Smm = dwm[
k] - 0.5*nu[
k]*(dwh - d2w*(3.0 + 2.0*nu[
k]));
 
  165         #elif CHTR_REF_STATE == 2 
  166          Smm =        - 0.5*nu[
k]*(dwh - d2w*(3.0 + 2.0*nu[
k]));
 
  167         #elif CHTR_REF_STATE == 3 
  168          Smm = -0.5*(nu[
k]-num)*(dwh - 3.0*d2w) + (nu[
k]*nu[
k] - num*num)*d2w;
 
  170         for (nv = NFLX; nv--;   ) vm[nv] += Smm*R[nv][k];
 
  178     for (nv = NFLX; nv--;   ){   
 
  179       dwh = 0.5*
g_dt*src[
i][nv];
 
  189      nu[0] = dtdx*vc[
VXn];
 
  191        for (k = NFLX; k < 
NVAR; k++){
 
  192          dwh = dwp[
k] - dwm[
k];
 
  193          d2w = dwp[
k] + dwm[
k]; 
 
  194          vp[
k] -= 0.5*nu[0]*(dwh + d2w*(3.0 - 2.0*nu[0]));
 
  197        for (k = NFLX; k < 
NVAR; k++){
 
  198          dwh = dwp[
k] - dwm[
k];
 
  199          d2w = dwp[
k] + dwm[
k]; 
 
  200          vm[
k] -= 0.5*nu[0]*(dwh - d2w*(3.0 + 2.0*nu[0]));
 
  211    for (i = beg-1; i <= 
end; i++) {
 
  218   for (i = beg; i <= 
end; i++) {
 
  227 #undef CHTR_REF_STATE 
  237 #ifndef CHTR_REF_STATE 
  238  #define CHTR_REF_STATE     3 
  252   double nu_max=1.0, nu_min=-1.0, nu[
NFLX];
 
  253   double *vc, *vp, *vm, **L, **R, *lambda;
 
  256   #if GEOMETRY != CARTESIAN 
  267   #if UNIFORM_CARTESIAN_GRID == NO 
  271   #if CHAR_LIMITING == NO 
  275   PrimSource  (state, beg, end, state->
a2, state->
h, src, grid);
 
  276   for (i = beg; i <= 
end; i++){    
 
  278     #if UNIFORM_CARTESIAN_GRID == YES 
  281      dp = plm_coeffs.
dp[
i]; 
 
  282      dm = plm_coeffs.
dm[
i];
 
  299     #if CHAR_LIMITING == NO 
  302     for (k = 0; k < 
NFLX; k++) nu[k] = dtdx*lambda[k];
 
  303     nu_max = 
MAX(nu[1], 0.0); nu_min = 
MIN(nu[0], 0.0);
 
  309     #if GEOMETRY == CYLINDRICAL 
  311        double *xR = grid[
IDIR].
xr;
 
  312        for (k = NFLX; k--;  ){
 
  313          betaR[
k] = betaL[
k] = 0.0;
 
  315          betaR[
k] = (nu[
k] >  1.e-12 ?  scrh/(6.0*xR[
i]   - 3.0*
scrh):0.0);
 
  316          betaL[
k] = (nu[
k] < -1.e-12 ? -scrh/(6.0*xR[i-1] - 3.0*
scrh):0.0);
 
  318        nu_max *= (1.0 - betaR[1]);
 
  319        nu_min *= (1.0 + betaL[0]);
 
  321        for (k = NFLX; k--;  )  betaR[k] = betaL[k] = 0.0;
 
  329     for (nv = 
NVAR; nv--;  ) dv[nv] = vp[nv] - vm[nv];
 
  347     #if CHTR_REF_STATE == 1 
  348      for (nv = NFLX; nv--; ) vp[nv] = vm[nv] = vc[nv];
 
  349     #elif CHTR_REF_STATE == 3 
  350      for (nv = NFLX; nv--; ) {
 
  351        #if GEOMETRY == CARTESIAN 
  352         vp[nv] = vc[nv] + 0.5*dv[nv]*(1.0 - nu_max);
 
  353         vm[nv] = vc[nv] - 0.5*dv[nv]*(1.0 + nu_min);
 
  355         vp[nv] = vc[nv] + dv[nv]*(dp - 0.5*nu_max);
 
  356         vm[nv] = vc[nv] - dv[nv]*(dm + 0.5*nu_min);
 
  380      nu_max = nu[1]; nu_min = nu[0];
 
  383     for (k = 0; k < 
NFLX; k++){
 
  385         #if GEOMETRY != CARTESIAN 
  386          nu[
k] *= (1.0 - betaR[
k]);
 
  388         #if CHTR_REF_STATE == 1 
  389          dw[
k] *= 0.5*(1.0 - nu[
k]);
 
  390         #elif CHTR_REF_STATE == 2 
  392         #elif CHTR_REF_STATE == 3 
  393          dw[
k] *= 0.5*(nu_max - nu[
k]);
 
  395         for (nv = 0; nv < 
NFLX; nv++) vp[nv] += dw[k]*R[nv][k];
 
  397         #if GEOMETRY != CARTESIAN 
  398          nu[
k] *= (1.0 + betaL[
k]);
 
  400         #if CHTR_REF_STATE == 1 
  401          dw[
k] *= -0.5*(1.0 + nu[
k]);
 
  402         #elif CHTR_REF_STATE == 2 
  404         #elif CHTR_REF_STATE == 3 
  405          dw[
k] *= 0.5*(nu_min - nu[
k]);
 
  407         for (nv = 0; nv < 
NFLX; nv++) vm[nv] += dw[k]*R[nv][k];
 
  415     for (nv = NFLX; nv--;   ) {
 
  416       vp[nv] += 0.5*
g_dt*src[
i][nv];
 
  417       vm[nv] += 0.5*
g_dt*src[
i][nv];
 
  425      for (nv = NFLX; nv < 
NVAR; nv++) {
 
  426        #if GEOMETRY == CARTESIAN 
  427         vp[nv] = vc[nv] + 0.5*dv[nv];
 
  428         vm[nv] = vc[nv] - 0.5*dv[nv];
 
  430         vp[nv] = vc[nv] + dv[nv]*dp;
 
  431         vm[nv] = vc[nv] - dv[nv]*dm;
 
  435      nu[0] = dtdx*vc[
VXn];
 
  436      #if GEOMETRY == CYLINDRICAL 
  438         double *xR = grid[
IDIR].
xr;
 
  439         betaR[0] = betaL[0] = 0.0;
 
  441         betaR[0] = (nu[0] >  1.e-12 ?  scrh/(6.0*xR[
i]   - 3.0*
scrh):0.0);
 
  442         betaL[0] = (nu[0] < -1.e-12 ? -scrh/(6.0*xR[i-1] - 3.0*
scrh):0.0);
 
  444         betaR[0] = betaL[0] = 0.0;
 
  450        #if GEOMETRY != CARTESIAN 
  451         scrh *= (1.0 - betaR[0]);
 
  453        for (k = NFLX; k < 
NVAR; k++) vp[k] += dw[k]*scrh;
 
  456        #if GEOMETRY != CARTESIAN 
  457         scrh *= (1.0 + betaL[0]);
 
  459        for (k = NFLX; k < 
NVAR; k++) vm[k] += dw[k]*scrh;
 
  469   #if SHOCK_FLATTENING == ONED 
  470    Flatten (state, beg, end, grid);
 
  478    for (i = beg-1; i <= 
end; i++) {
 
  489   for (i = beg; i <= 
end; i++){ 
 
  492     NVAR_LOOP(nv) state->vh[i][nv] = 0.5*(vp[nv] + vm[nv]);
 
  498 #undef CHTR_REF_STATE  
double ** v
Cell-centered primitive varables at the base time level, v[i] =  . 
int end
Global end index for the local array. 
double ** vh
Primitive state at n+1/2 (only for one step method) 
void Flatten(const State_1D *, int, int, Grid *)
void PrimEigenvectors(double *q, double cs2, double h, double *lambda, double **LL, double **RR)
void CheckPrimStates(double **vM, double **vP, double **v0, int beg, int end)
double g_dt
The current integration time step. 
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 ** vp
prim vars at i+1/2 edge, vp[i] = vL(i+1/2) 
void CharTracingStep(const State_1D *state, int beg, int end, Grid *grid)
int g_dir
Specifies the current sweep or direction of integration. 
int beg
Global start index for the local array. 
double ** lambda
Characteristic speed associated to Lp and Rp. 
void ConvertTo3vel(double **, int, int)
void PrimSource(const State_1D *, int, int, double *, double *, double **, Grid *)
void PrimToChar(double **L, double *v, double *w)
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. 
double * bn
Face magentic field, bn = bx(i+1/2) 
double ** vL
Primitive variables to the left of the interface, . 
double * a2
Sound speed squared. 
#define ARRAY_2D(nx, ny, type)          
double *** Rp
Left and right primitive eigenvectors.