62   double r, th, r_1, s_1;
 
   63   double dtdl, dtdV, dt_rdr;
 
   64   double *inv_dl, inv_dl2;
 
   65   double *rp, *A, *du, **vh, *C, **tc_flx;
 
   68   static double **res_flx; 
 
   69   static double **dcoeff, ***
T;
 
   70   static double **ViF, **ViS;
 
   74   double max_inv_dtp[3],inv_dtp;
 
   99   #if ADD_RESISTIVITY && (defined STAGGERED_MHD) 
  108    TOT_LOOP(k,j,i) T[k][j][i] = V[PRS][k][j][i]/V[
RHO][k][j][i];
 
  110    tc_flx = state.tc_flux;
 
  113 max_inv_dtp[0] = max_inv_dtp[1] = max_inv_dtp[2] = 0.0;
 
  122   #if ADD_RESISTIVITY  && !(defined STAGGERED_MHD) 
  143      ITOT_LOOP (i) for (nv = 
NVAR; nv--; ) vh[i][nv] = V[nv][k][j][i];  
 
  145      for (nv = NVAR; nv--; ) dvm[nv] = vh[1][nv] - vh[0][nv];
 
  147      for (nv = NVAR; nv--; ) {
 
  148        dvp[nv] = vh[i+1][nv] - vh[
i][nv];
 
  150        state.
vp[
i][nv] = vh[
i][nv] + 0.5*dvl;
 
  151        state.
vm[
i][nv] = vh[
i][nv] - 0.5*dvl;
 
  165         inv_dl2 = 0.5*inv_dl[
i]*inv_dl[
i];
 
  167          C[
MX1] = (dcoeff[i-1][
MX1] + dcoeff[
i][
MX1])*inv_dl2;
 
  170          EXPAND(C[
BX1] = (dcoeff[i-1][
BX1] + dcoeff[i][
BX1])*inv_dl2;  ,
 
  171                 C[
BX2] = (dcoeff[i-1][
BX2] + dcoeff[
i][
BX2])*inv_dl2;  ,
 
  172                 C[
BX3] = (dcoeff[i-1][
BX3] + dcoeff[
i][
BX3])*inv_dl2;)
 
  175          C[ENG] = (dcoeff[i-1][ENG] + dcoeff[i][ENG])*inv_dl2;
 
  176          inv_dtp = dcoeff[
i][ENG]*inv_dl[
i]*inv_dl[
i];
 
  204        r_1 = 1.0/grid[
IDIR].
x[
i];
 
  205        #if GEOMETRY == CARTESIAN 
  206         EXPAND(du[
MX1] = (ViF[i][
MX1] - ViF[i-1][
MX1])*dtdl + dt*ViS[i][
MX1];,
 
  207                du[
MX2] = (ViF[
i][
MX2] - ViF[i-1][
MX2])*dtdl + dt*ViS[i][
MX2];,   
 
  208                du[
MX3] = (ViF[
i][
MX3] - ViF[i-1][
MX3])*dtdl + dt*ViS[i][
MX3];)
 
  210          du[ENG] += (ViF[i][ENG] - ViF[i - 1][ENG])*dtdl;
 
  212        #elif GEOMETRY == CYLINDRICAL 
  213         EXPAND(du[
MX1] = (A[i]*ViF[i][
MX1] - A[i-1]*ViF[i-1][
MX1])*dtdV 
 
  215                du[
MX2] = (A[
i]*ViF[
i][
MX2] - A[i-1]*ViF[i-1][
MX2])*dtdV 
 
  217                du[
MX3] = (A[
i]*A[
i]*ViF[
i][
MX3] - A[i-1]*A[i-1]*ViF[i-1][
MX3])*r_1*dtdV;)
 
  219          du[ENG] += (A[i]*ViF[i][ENG] - A[i-1]*ViF[i-1][ENG])*dtdV;
 
  221        #elif GEOMETRY == POLAR 
  222         EXPAND(du[
MX1] = (A[i]*ViF[i][
MX1] - A[i-1]*ViF[i-1][
MX1])*dtdV 
 
  224                du[
MX2] = (A[
i]*A[
i]*ViF[
i][
MX2] - A[i-1]*A[i-1]*ViF[i-1][
MX2])*r_1*dtdV; ,   
 
  225                du[
MX3] = (A[
i]*ViF[
i][
MX3] - A[i-1]*ViF[i-1][
MX3])*dtdV 
 
  228          du[ENG] += (A[i]*ViF[i][ENG] - A[i-1]*ViF[i-1][ENG])*dtdV;
 
  230        #elif GEOMETRY == SPHERICAL 
  231         EXPAND(du[
MX1] = (A[i]*ViF[i][
MX1] - A[i-1]*ViF[i-1][
MX1])*dtdV 
 
  233                du[
MX2] = (A[
i]*ViF[
i][
MX2] - A[i-1]*ViF[i-1][
MX2])*dtdV 
 
  235                du[
MX3] = (rp[
i]*A[
i]*ViF[
i][
MX3] - rp[i-1]*A[i-1]*ViF[i-1][
MX3])*r_1*dtdV;)
 
  237          du[ENG] += (A[i]*ViF[i][ENG] - A[i-1]*ViF[i-1][ENG])*dtdV;
 
  247        #if GEOMETRY == CARTESIAN     
  250           du[
BX2] = -(res_flx[
i][
BX2] - res_flx[i-1][
BX2])*dtdl;  ,
 
  251           du[
BX3] = -(res_flx[
i][
BX3] - res_flx[i-1][
BX3])*dtdl; )
 
  253          du[ENG] += -(res_flx[i][ENG] - res_flx[i-1][ENG])*dtdl; 
 
  256        #elif GEOMETRY == CYLINDRICAL   
  259           du[
BX2] = -(A[
i]*res_flx[
i][
BX2] - A[i-1]*res_flx[i-1][
BX2])*dtdV; ,
 
  260           du[
BX3] = -(res_flx[
i][
BX3] - res_flx[i-1][
BX3])*dtdl;)
 
  262          du[ENG] += -(A[i]*res_flx[i][ENG] - A[i-1]*res_flx[i-1][ENG])*dtdV; 
 
  265        #elif GEOMETRY == POLAR     
  268           du[
BX2] = -(res_flx[
i][
BX2] - res_flx[i-1][
BX2])*dtdl;                ,
 
  269           du[
BX3] = -(A[
i]*res_flx[
i][
BX3] - A[i-1]*res_flx[i-1][
BX3])*dtdV; )
 
  271          du[ENG] += -(A[i]*res_flx[i][ENG] - A[i-1]*res_flx[i-1][ENG])*dtdV; 
 
  274        #elif GEOMETRY == SPHERICAL   
  278           du[
BX2] = -(rp[
i]*res_flx[
i][
BX2] - rp[i-1]*res_flx[i-1][
BX2])*dt_rdr; ,
 
  279           du[
BX3] = -(rp[
i]*res_flx[
i][
BX3] - rp[i-1]*res_flx[i-1][
BX3])*dt_rdr; )
 
  281          du[ENG] += -(A[i]*res_flx[i][ENG] - A[i-1]*res_flx[i-1][ENG])*dtdV; 
 
  291        #if GEOMETRY == CARTESIAN  
  292         du[ENG] += (tc_flx[
i][ENG] - tc_flx[i-1][ENG])*dtdl;
 
  294         du[ENG] += (A[
i]*tc_flx[
i][ENG] - A[i-1]*tc_flx[i-1][ENG])*dtdV;
 
  307   #if ADD_RESISTIVITY  && !(defined STAGGERED_MHD) 
  327      JTOT_LOOP (j) for (nv = NVAR; nv--; ) vh[j][nv] = V[nv][k][j][i];  
 
  329      for (nv = NVAR; nv--; ) dvm[nv] = vh[1][nv] - vh[0][nv];
 
  330      for(j = 1; j < 
NX2_TOT-1; j++){
 
  331      for (nv = NVAR; nv--; ) {
 
  332        dvp[nv] = vh[j+1][nv] - vh[
j][nv];
 
  334        state.
vp[
j][nv] = vh[
j][nv] + 0.5*dvl;
 
  335        state.
vm[
j][nv] = vh[
j][nv] - 0.5*dvl;
 
  349         inv_dl2 = 0.5*inv_dl[
j]*inv_dl[
j];
 
  351          C[
MX1] += (dcoeff[j-1][
MX1] + dcoeff[
j][
MX1])*inv_dl2;
 
  354          EXPAND(C[
BX1] += (dcoeff[j-1][
BX1] + dcoeff[j][
BX1])*inv_dl2;  ,
 
  355                 C[
BX2] += (dcoeff[j-1][
BX2] + dcoeff[
j][
BX2])*inv_dl2;  ,
 
  356                 C[
BX3] += (dcoeff[j-1][
BX3] + dcoeff[
j][
BX3])*inv_dl2;)
 
  359          C[ENG] += (dcoeff[j-1][ENG] + dcoeff[j][ENG])*inv_dl2;
 
  361          inv_dtp = dcoeff[
j][ENG]*inv_dl[
j]*inv_dl[
j];
 
  378       #if GEOMETRY == POLAR || GEOMETRY == SPHERICAL 
  388        s_1 = 1.0/sin(grid[
JDIR].x[j]);
 
  389        #if GEOMETRY != SPHERICAL 
  390         EXPAND(du[
MX1] += (ViF[j][
MX1] - ViF[j-1][
MX1])*dtdl + dt*ViS[j][
MX1];,
 
  391                du[
MX2] += (ViF[
j][
MX2] - ViF[j-1][
MX2])*dtdl + dt*ViS[j][
MX2];,   
 
  392                du[
MX3] += (ViF[
j][
MX3] - ViF[j-1][
MX3])*dtdl + dt*ViS[j][
MX3];)
 
  394          du[ENG] += (ViF[j][ENG] - ViF[j-1][ENG])*dtdl;
 
  396        #elif GEOMETRY == SPHERICAL 
  397         EXPAND(du[
MX1] += (A[j]*ViF[j][
MX1] - A[j-1]*ViF[j-1][
MX1])*dtdV 
 
  399                du[
MX2] += (A[
j]*ViF[
j][
MX2] - A[j-1]*ViF[j-1][
MX2])*dtdV 
 
  401                du[
MX3] += (A[
j]*A[
j]*ViF[
j][
MX3] - A[j-1]*A[j-1]*ViF[j-1][
MX3])*s_1*dtdV;)
 
  403          du[ENG] += (A[j]*ViF[j][ENG] - A[j-1]*ViF[j-1][ENG])*dtdV;
 
  413        #if GEOMETRY != SPHERICAL   
  415           du[
BX1] -= (res_flx[j][
BX1] - res_flx[j-1][
BX1])*dtdl;  ,
 
  417           du[
BX3] -= (res_flx[
j][
BX3] - res_flx[j-1][
BX3])*dtdl; )
 
  419          du[ENG] -= (res_flx[j][ENG] - res_flx[j-1][ENG])*dtdl; 
 
  421        #elif GEOMETRY == SPHERICAL   
  423           du[
BX1] -= (A[j]*res_flx[j][
BX1] - A[j-1]*res_flx[j-1][
BX1])*dtdV;  ,
 
  425           du[
BX3] -= (res_flx[
j][
BX3] - res_flx[j-1][
BX3])*dtdl;)
 
  427          du[ENG] -= (A[j]*res_flx[j][ENG] - A[j-1]*res_flx[j-1][ENG])*dtdV; 
 
  437        #if GEOMETRY != SPHERICAL 
  438         du[ENG] += (tc_flx[
j][ENG] - tc_flx[j-1][ENG])*dtdl;
 
  440         du[ENG] += (A[
j]*tc_flx[
j][ENG] - A[j-1]*tc_flx[j-1][ENG])*dtdV;
 
  455   #if ADD_RESISTIVITY && !(defined STAGGERED_MHD) 
  475      KTOT_LOOP (k) for (nv = NVAR; nv--; ) vh[k][nv] = V[nv][k][j][i];  
 
  477      for (nv = NVAR; nv--; ) dvm[nv] = vh[1][nv] - vh[0][nv];
 
  479      for (nv = NVAR; nv--; ) {
 
  480        dvp[nv] = vh[k+1][nv]- vh[
k][nv];
 
  482        state.
vp[
k][nv] = vh[
k][nv] + 0.5*dvl;
 
  483        state.
vm[
k][nv] = vh[
k][nv] - 0.5*dvl;
 
  497         inv_dl2 = 0.5*inv_dl[
k]*inv_dl[
k];
 
  499          C[
MX1] += (dcoeff[k-1][
MX1] + dcoeff[
k][
MX1])*inv_dl2;
 
  502          EXPAND(C[
BX1] += (dcoeff[k-1][
BX1] + dcoeff[k][
BX1])*inv_dl2;  ,
 
  503                 C[
BX2] += (dcoeff[k-1][
BX2] + dcoeff[
k][
BX2])*inv_dl2;  ,
 
  504                 C[
BX3] += (dcoeff[k-1][
BX3] + dcoeff[
k][
BX3])*inv_dl2;)
 
  507          C[ENG] += (dcoeff[k-1][ENG] + dcoeff[k][ENG])*inv_dl2;
 
  509          inv_dtp = dcoeff[
k][ENG]*inv_dl[
k]*inv_dl[
k];
 
  527       #if GEOMETRY == SPHERICAL 
  536        du[
MX1] += (ViF[
k][
MX1] - ViF[k-1][
MX1])*dtdl + dt*ViS[k][
MX1];
 
  537        du[
MX2] += (ViF[
k][
MX2] - ViF[k-1][
MX2])*dtdl + dt*ViS[k][
MX2];
 
  538        du[
MX3] += (ViF[
k][
MX3] - ViF[k-1][
MX3])*dtdl + dt*ViS[k][
MX3];
 
  540         du[ENG] += (ViF[
k][ENG] - ViF[k-1][ENG])*dtdl;
 
  549        du[
BX1] -= (res_flx[
k][
BX1] - res_flx[k-1][
BX1])*dtdl;
 
  550        du[
BX2] -= (res_flx[
k][
BX2] - res_flx[k-1][
BX2])*dtdl;
 
  552         du[ENG] -= (res_flx[
k][ENG] - res_flx[k-1][ENG])*dtdl; 
 
  561        du[ENG] += (tc_flx[
k][ENG] - tc_flx[k-1][ENG])*dtdl;
 
  582      th = 
MAX(th, C_dtp[k][j][i][
MX1]);   
 
  585      EXPAND(th = 
MAX(th, C_dtp[k][j][i][
BX1]);   ,  
 
  586             th = 
MAX(th, C_dtp[k][j][i][
BX2]);   ,
 
  587             th = 
MAX(th, C_dtp[k][j][i][
BX3]);)
 
  590      th = 
MAX(th, C_dtp[k][j][i][ENG]);
 
  592     #if INTERNAL_BOUNDARY == YES 
  594        for (nv = NVAR; nv--;  ) dU[k][j][i][nv] = 0.0;
 
#define FLAG_INTERNAL_BOUNDARY
Zone belongs to an internal boundary region and should be excluded from being updated in time...
 
void ViscousFlux(Data_Arr, double **, double **, double **, int, int, Grid *)
 
double **** J
Electric current defined as curl(B). 
 
void GetCurrent(const Data *d, int dir, Grid *grid)
 
void TC_Flux(double ***, const State_1D *, double **, int, int, Grid *)
 
long int NX2_TOT
Total number of zones in the X2 direction (boundaries included) for the local processor. 
 
int g_intStage
Gives the current integration stage of the time stepping method (predictor = 0, 1st corrector = 1...
 
double **** Vc
The main four-index data array used for cell-centered primitive variables. 
 
double * GetInverse_dl(const Grid *)
 
#define ARRAY_3D(nx, ny, nz, type)    
 
unsigned char *** flag
Pointer to a 3D array setting useful integration flags that are retrieved during integration. 
 
void MakeState(State_1D *)
 
double ** vp
prim vars at i+1/2 edge, vp[i] = vL(i+1/2) 
 
int g_i
x1 grid index when sweeping along the x2 or x3 direction. 
 
#define TOT_LOOP(k, j, i)
 
int g_dir
Specifies the current sweep or direction of integration. 
 
int g_j
x2 grid index when sweeping along the x1 or x3 direction. 
 
long int NX3_TOT
Total number of zones in the X3 direction (boundaries included) for the local processor. 
 
#define ARRAY_4D(nx, ny, nz, nv, type)
 
long int IEND
Upper grid index of the computational domain in the the X1 direction for the local processor...
 
int g_k
x3 grid index when sweeping along the x1 or x2 direction. 
 
double ** vm
prim vars at i-1/2 edge, vm[i] = vR(i-1/2) 
 
D_EXPAND(tot/[n]=(double) grid[IDIR].np_int_glob;, tot/[n]=(double) grid[JDIR].np_int_glob;, tot/[n]=(double) grid[KDIR].np_int_glob;)
 
long int NMAX_POINT
Maximum number of points among the three directions, boundaries excluded. 
 
long int KBEG
Lower grid index of the computational domain in the the X3 direction for the local processor...
 
#define ARRAY_2D(nx, ny, type)          
 
long int KEND
Upper grid index of the computational domain in the the X3 direction for the local processor...
 
long int JBEG
Lower grid index of the computational domain in the the X2 direction for the local processor...
 
void ResistiveFlux(Data_Arr V, Data_Arr curlB, double **res_flux, double **dcoeff, int beg, int end, Grid *grid)
 
long int JEND
Upper grid index of the computational domain in the the X2 direction for the local processor...
 
long int NX1_TOT
Total number of zones in the X1 direction (boundaries included) for the local processor. 
 
long int IBEG
Lower grid index of the computational domain in the the X1 direction for the local processor...
 
double * A
Right interface area, A[i] = .