PLUTO
ct.h
Go to the documentation of this file.
1 /* ///////////////////////////////////////////////////////////////////// */
2 /*!
3  \file
4  \brief Header file for Constrained-Transport (CT) module.
5 
6  Provides macros, function prototypes and structure definitions for
7  the constrained transport (CT) MHD module to control the divergence-free
8  condition.
9 
10  \author A. Mignone (mignone@ph.unito.it)
11  \date Aug 27, 2014
12 */
13 /* ///////////////////////////////////////////////////////////////////// */
14 
15 #define STAGGERED_MHD
16 
17 /* ---- set labels for CT_EMF_AVERAGE ---- */
18 
19 #define ARITHMETIC 1
20 #define UCT0 2
21 #define UCT_CONTACT 3
22 #define UCT_HLL 4
23 #define RIEMANN_2D 5
24 
25 /* ---- staggered component labels ---- */
26 
27 #define BX1s 0
28 #define BX2s 1
29 #define BX3s 2
30 
31 /* ---- backward compatibility ---- */
32 
33 #define BXs BX1s
34 #define BYs BX2s
35 #define BZs BX3s
36 
37 
38 #define FACE_EMF 11
39 #define EDGE_EMF 12
40 
41 /* Now define more convenient and user-friendly
42  pointer labels for geometry setting */
43 
44 #if GEOMETRY == CYLINDRICAL
45  #define iBRs BX1s
46  #define iBZs BX2s
47  #define iBPHIs BX3s
48 #endif
49 
50 #if GEOMETRY == POLAR
51  #define iBRs BX1s
52  #define iBPHIs BX2s
53  #define iBZs BX3s
54 #endif
55 
56 #if GEOMETRY == SPHERICAL
57  #define iBRs BX1s
58  #define iBTHs BX2s
59  #define iBPHIs BX3s
60 #endif
61 
62 
63 /* ********************************************************************* */
64 /*! The EMF structure is used to pull together all the information
65  necessary to build / use the electromotive force used to update
66  the staggered components of magnetic field.
67  ********************************************************************* */
68 typedef struct ElectroMotiveForce{
69 
70 /*! \name Face-centered electric field components.
71  Three-dimensional arrays storing the emf components computed
72  at cell faces during the dimensional sweeps.
73 */
74 /**@{ */
75  double ***exj; /**< Ex available at y-faces (j+1/2); */
76  double ***exk; /**< Ex available at z-faces (k+1/2); */
77  double ***eyi; /**< Ey available at x-faces (i+1/2); */
78  double ***eyk; /**< Ey available at z-faces (k+1/2); */
79  double ***ezi; /**< Ez available at x-faces (i+1/2); */
80  double ***ezj; /**< Ez available at y-faces (j+1/2); */
81 /**@} */
82 
83  signed char ***svx, ***svy, ***svz;
84 
85 /*! \name Range of existence */
86 /**@{ */
87  int ibeg, jbeg, kbeg;
88  int iend, jend, kend;
89 /**@} */
90 
91 /*! \name Signal velocities */
92 /**@{ */
93  double ***SxL;
94  double ***SxR;
95  double ***SyL;
96  double ***SyR;
97  double ***SzL;
98  double ***SzR;
99 /**@} */
100 
101 /*! \name Edge-centered fields */
102 /**@{ */
103  double ***ex;
104  double ***ey;
105  double ***ez;
106 /**@} */
107 
108 /*! \name Staggered magnetic field and velocity slopes */
109 /**@{ */
110  double ***dbx_dy, ***dbx_dz;
111  double ***dby_dx, ***dby_dz;
112  double ***dbz_dx, ***dbz_dy;
113 
114  double ***dvx_dx, ***dvy_dx, ***dvz_dx;
115  double ***dvx_dy, ***dvy_dy, ***dvz_dy;
116  double ***dvx_dz, ***dvy_dz, ***dvz_dz;
117 /**@} */
118 
119 } EMF;
120 
121 /* ***********************************************************
122  \cond REPEAT_FUNCTION_DOCUMENTATION_IN_HEADER_FILES
123  Function prototyping
124  *********************************************************** */
125 
126 void CT_EMF_ArithmeticAverage (const EMF *, const double);
127 void CT_EMF_IntegrateToCorner (const Data *, const EMF *, Grid *);
128 void CT_AverageMagneticField (double ****bf, double ***UU[], Grid *);
129 void CT_AverageNormalMagField (const Data *, int, Grid *);
130 void CT_AverageTransverseMagFiled (const Data *, int, Grid *);
131 void CT_Update(const Data *, Data_Arr, double, Grid *);
132 void CT_CheckDivB (double ***b[], Grid *);
133 void CT_GetStagSlopes (const Data_Arr, EMF *, Grid *);
134 void CT_StoreEMF (const State_1D *, int, int, Grid *);
135 
136 EMF *CT_GetEMF (const Data *, Grid *);
137 void CT_AddResistiveEMF (const Data *d, Grid *grid);
138 void FillMagneticField (const Data *, int, Grid *);
139 
140 void CT_StoreVelSlopes (EMF *, const State_1D *, int, int);
141 void CT_EMF_HLL_Solver (const Data *, const EMF *, Grid *);
142 void CT_EMF_CMUSCL_Average (const Data *, const EMF *, Grid *);
143 
144 void EMF_BOUNDARY (EMF *, Grid *);
145 void EMF_USERDEF_BOUNDARY (EMF *, int, int, Grid *);
146 
147 /* \endcond */
148 
void CT_StoreEMF(const State_1D *state, int beg, int end, Grid *grid)
Definition: ct_emf.c:35
void CT_GetStagSlopes(const Data_Arr b, EMF *emf, Grid *grid)
double **** Data_Arr
Definition: pluto.h:492
double *** SxL
Definition: ct.h:93
double *** SzR
Definition: ct.h:98
void FillMagneticField(const Data *d, int side, Grid *grid)
Assign the normal component of the staggered magnetic field in the ghost zone-faces.
double *** ex
Definition: ct.h:103
signed char *** svy
Definition: ct.h:83
double *** SxR
Definition: ct.h:94
EMF * CT_GetEMF(const Data *d, Grid *grid)
Definition: ct_emf.c:205
double *** dvy_dx
Definition: ct.h:114
void CT_EMF_ArithmeticAverage(const EMF *Z1, const double w)
Compute arithmetic average of EMF at cell edges.
double *** dby_dz
Definition: ct.h:111
double *** dbz_dy
Definition: ct.h:112
void CT_Update(const Data *d, Data_Arr Bs, double dt, Grid *grid)
Definition: ct.c:29
double *** dbx_dz
Definition: ct.h:110
void CT_EMF_HLL_Solver(const Data *d, const EMF *emf, Grid *grid)
Solve 2D Riemann problem for induction equation.
void EMF_USERDEF_BOUNDARY(EMF *emf, int side, int loc, Grid *grid)
Definition: emf_userdef.c:4
double *** ezi
Ez available at x-faces (i+1/2);.
Definition: ct.h:79
double *** ez
Definition: ct.h:105
double *** exk
Ex available at z-faces (k+1/2);.
Definition: ct.h:76
void CT_CheckDivB(double ***bf[], Grid *grid)
Definition: ct.c:201
Definition: structs.h:78
double *** dbx_dy
Definition: ct.h:110
double *** dvy_dy
Definition: ct.h:115
double *** dvy_dz
Definition: ct.h:116
double *** dvx_dx
Definition: ct.h:114
void CT_AverageNormalMagField(const Data *d, int side, Grid *grid)
Compute the normal component of the volume-average magnetic field from the staggered components in th...
void CT_EMF_CMUSCL_Average(const Data *d, const EMF *emf, Grid *grid)
double *** dvx_dz
Definition: ct.h:116
double *** SyR
Definition: ct.h:96
signed char *** svz
Definition: ct.h:83
double *** dvz_dx
Definition: ct.h:114
double *** eyi
Ey available at x-faces (i+1/2);.
Definition: ct.h:77
signed char *** svx
Definition: ct.h:83
void CT_StoreVelSlopes(EMF *emf, const State_1D *state, int beg, int end)
Definition: ct_stag_slopes.c:5
void CT_EMF_IntegrateToCorner(const Data *d, const EMF *emf, Grid *grid)
double *** eyk
Ey available at z-faces (k+1/2);.
Definition: ct.h:78
Definition: structs.h:30
double *** dvx_dy
Definition: ct.h:115
double *** SzL
Definition: ct.h:97
double *** ezj
Ez available at y-faces (j+1/2);.
Definition: ct.h:80
double *** dvz_dz
Definition: ct.h:116
double *** ey
Definition: ct.h:104
double *** exj
Ex available at y-faces (j+1/2);.
Definition: ct.h:75
double *** dvz_dy
Definition: ct.h:115
struct ElectroMotiveForce EMF
double *** dby_dx
Definition: ct.h:111
double *** dbz_dx
Definition: ct.h:112
double *** SyL
Definition: ct.h:95
void EMF_BOUNDARY(EMF *emf, Grid *grid)
Definition: emf_boundary.c:8
void CT_AverageMagneticField(double ****bf, double ****UU, Grid *grid)