29 #define eps_UCT_CONTACT   1.e-6 
   30 #define EX(k,j,i)  (vz[k][j][i]*By[k][j][i] - vy[k][j][i]*Bz[k][j][i]) 
   31 #define EY(k,j,i)  (vx[k][j][i]*Bz[k][j][i] - vz[k][j][i]*Bx[k][j][i]) 
   32 #define EZ(k,j,i)  (vy[k][j][i]*Bx[k][j][i] - vx[k][j][i]*By[k][j][i]) 
  110     for (i = beg; i <= end; i++) { 
 
  116       #if CT_EMF_AVERAGE == UCT_CONTACT 
  124       #if CT_EMF_AVERAGE == UCT_HLL 
  129       #if CT_EMF_AVERAGE == RIEMANN_2D 
  131                                     state->dff_flx[
i][
BX2]); 
 
  139     for (j = beg; j <= end; j++) {
 
  152       #if CT_EMF_AVERAGE == UCT_HLL             
  157       #if CT_EMF_AVERAGE == RIEMANN_2D  
  160                                      state->dff_flx[
j][
BX1]); 
 
  167     for (k = beg; k <= end; k++) {
 
  172       #if CT_EMF_AVERAGE == UCT_CONTACT 
  179       #if CT_EMF_AVERAGE == UCT_HLL             
  191   #if CT_EMF_AVERAGE == UCT_HLL 
  216   double ***vx, ***vy, ***vz;
 
  217   double ***
Bx, ***By, ***Bz;
 
  224   #if RESISTIVITY == SUPER_TIME_STEPPING 
  230        emf.
ez[
k][
j][
i] = 0.0;
 
  232      CT_AddResistiveEMF(d, grid); 
 
  252   #if CT_EMF_AVERAGE == UCT_HLL 
  263   #if CT_EMF_AVERAGE == ARITHMETIC || CT_EMF_AVERAGE == RIEMANN_2D 
  267   #elif CT_EMF_AVERAGE == UCT_CONTACT 
  271    for (k = emf.
kbeg; k <= emf.
kend; k++){
 
  272    for (j = emf.
jbeg; j <= emf.
jend; j++){
 
  273    for (i = emf.
ibeg; i <= emf.
iend; i++){      
 
  275       emf.
ex[
k][
j][
i] *= 0.25;
 
  276       emf.
ey[
k][
j][
i] *= 0.25;
 
  278      emf.
ez[
k][
j][
i] *= 0.25;
 
  281   #elif CT_EMF_AVERAGE == UCT_HLL 
  288   #elif CT_EMF_AVERAGE == UCT0 
  296    for (k = emf.
kbeg; k <= emf.
kend + KOFFSET; k++){
 
  297    for (j = emf.
jbeg; j <= emf.
jend + JOFFSET; j++){
 
  298    for (i = emf.
ibeg; i <= emf.
iend + IOFFSET; i++){       
 
  305       emf.
exj[
k][
j][
i] -= 0.5*(
EX(k,j,i) + 
EX(k,j+1,i));
 
  306       emf.
exk[
k][
j][
i] -= 0.5*(
EX(k,j,i) + 
EX(k+1,j,i));
 
  308       emf.
eyi[
k][
j][
i] -= 0.5*(
EY(k,j,i) + 
EY(k,j,i+1));
 
  309       emf.
eyk[
k][
j][
i] -= 0.5*(
EY(k,j,i) + 
EY(k+1,j,i));
 
  313      emf.
ezi[
k][
j][
i] -= 0.5*(
EZ(k,j,i) + 
EZ(k,j,i+1));
 
  314      emf.
ezj[
k][
j][
i] -= 0.5*(
EZ(k,j,i) + 
EZ(k,j+1,i));
 
  320     print1 (
"! CT_GetEMF: unknown EMF average.\n");
 
  330   #if RESISTIVITY == EXPLICIT 
  331    CT_AddResistiveEMF(d, grid); 
 
  359 #if RESISTIVITY != NO 
  361 void CT_AddResistiveEMF (
const Data *d, 
Grid *grid)
 
  372   double ***vx, ***vy, ***vz;
 
  373   double ***
Bx, ***By, ***Bz;
 
  380   eta = GetStaggeredEta();
 
  382   for (k = emf.
kbeg; k <= emf.
kend; k++){
 
  383   for (j = emf.
jbeg; j <= emf.
jend; j++){
 
  384   for (i = emf.
ibeg; i <= emf.
iend; i++){
 
  420 #undef eps_UCT_CONTACT 
void CT_StoreEMF(const State_1D *state, int beg, int end, Grid *grid)
 
double **** Vs
The main four-index data array used for face-centered staggered magnetic fields. 
 
void CT_GetStagSlopes(const Data_Arr b, EMF *emf, Grid *grid)
 
double **** J
Electric current defined as curl(B). 
 
double ** flux
upwind flux computed with the Riemann solver 
 
void print1(const char *fmt,...)
 
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. 
 
EMF * CT_GetEMF(const Data *d, Grid *grid)
 
double * SR
Rightmost velocity in the Riemann fan at i+1/2. 
 
void CT_EMF_ArithmeticAverage(const EMF *Z1, const double w)
Compute arithmetic average of EMF at cell edges. 
 
#define ARRAY_3D(nx, ny, nz, type)    
 
void CT_EMF_HLL_Solver(const Data *d, const EMF *emf, Grid *grid)                        
Solve 2D Riemann problem for induction equation. 
 
int g_i
x1 grid index when sweeping along the x2 or x3 direction. 
 
double *** ezi
Ez available at x-faces (i+1/2);. 
 
#define TOT_LOOP(k, j, i)
 
int g_dir
Specifies the current sweep or direction of integration. 
 
double *** exk
Ex available at z-faces (k+1/2);. 
 
int g_j
x2 grid index when sweeping along the x1 or x3 direction. 
 
double * SL
Leftmost velocity in the Riemann fan at i+1/2. 
 
long int NX3_TOT
Total number of zones in the X3 direction (boundaries included) for the local processor. 
 
void CT_EMF_CMUSCL_Average(const Data *d, const EMF *emf, Grid *grid)
– 
 
int g_k
x3 grid index when sweeping along the x1 or x2 direction. 
 
double *** eyi
Ey available at x-faces (i+1/2);. 
 
void CT_StoreVelSlopes(EMF *emf, const State_1D *state, int beg, int end)
 
void CT_EMF_IntegrateToCorner(const Data *d, const EMF *emf, Grid *grid)                
 
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;)
 
double *** eyk
Ey available at z-faces (k+1/2);. 
 
int g_operatorStep
Gives the current operator step. 
 
double *** ezj
Ez available at y-faces (j+1/2);. 
 
double *** exj
Ex available at y-faces (j+1/2);. 
 
#define QUIT_PLUTO(e_code)  
 
long int NX1_TOT
Total number of zones in the X1 direction (boundaries included) for the local processor.