PLUTO
init.c
Go to the documentation of this file.
1 /* ///////////////////////////////////////////////////////////////////// */
2 /*!
3  \file
4  \brief RMHD rotor test problem in 2 or 3 dimensions.
5 
6  The 2D rotor problem [dZBL03][Mig12] consists of a rapidly spinning disk
7  embedded in a uniform background medium treaded by a costant magnetic field.
8  The initial conditin reads as
9  \f[
10  \left(\rho, p, v_x, v_y, B_x\right) = \left\{\begin{array}{ll}
11  \left(10, 1,-\omega y,\,\omega x,\, 1\right) & \quad\mathrm{for}\quad r < 0.1
12  \\ \noalign{\medskip}
13  \left(1,\, 1,\, 0,\, 0,\, 1\right) & \quad\mathrm{otherwise}
14  \end{array}\right.
15  \f]
16  where \f$\omega = 9.95\f$ is the angular frequency of rotation.
17  The computational domain is the unit square and outflow boundary conditions
18  are imposed everywhere.
19 
20  As the disk rotates, strong torsional Alfven waves form and propagate
21  outward carrying angular momentum from the disk to the ambient.
22  The emerging flow structure is enclosed by a circular fast forward shock
23  traveling into the surrounding medium.
24  An inward fast shock bounds the innermost oval region where density has
25  been depleted to lower values.
26  The presence of the magnetic field slows down the rotor, and the maximum
27  Lorentz factor decreases from the nominal value of 10 to 2.2 (approx).
28 
29  A list of tested configurations is given in the following table:
30 
31  <CENTER>
32  Conf.| GEOMETRY| DIM |T. STEPPING|RECONSTRUCTION| divB | AMR
33  -----|---------|-----|-----------|--------------|------|-----
34  #01 |CARTESIAN| 2 | RK3 | LINEAR | CT | NO
35  #02 |CARTESIAN| 2 | RK2 | LINEAR | CT | NO
36  #03 |CARTESIAN| 2 | HANCOCK | LINEAR | 8W | NO
37  #04 |CARTESIAN| 2 | HANCOCK | LINEAR | CT | NO
38  #05 |CARTESIAN| 3 | RK2 | LINEAR | GLM | NO
39  #06 |CARTESIAN| 3 | RK2 | LINEAR | GLM | NO
40  #07 |CARTESIAN| 3 | HANCOCK | LINEAR | CT | NO
41  #08 |CARTESIAN| 3 | RK3 | LimO3 | GLM | NO
42  </CENTER>
43 
44  The final solutin at t = 0.4 on a grid of 400x400 grid points is shown below.
45 
46  \image html rmhd_rotor.03.jpg "Density map (in log scale) at t = 0.4 in Cartesian coordinates using 400 x 400 grid zones (configuration #03). Field lines are super-imposed."
47 
48  The three dimensional version extends the current configuration to a
49  spinning sphere and it is described in [MUB09].
50 
51  \author A. Mignone (mignone@ph.unito.it)
52  \date Aug 6, 2015
53 
54  \b Reference:
55  - [dZBL03] "An efficient shock-capturing central-type scheme for multidimensional
56  relativistic flows"
57  Del Zanna, Bucciantini, Londrillo, A&A (2003) 400, 397
58  - [MUB09] "A five-wave Harten-Lax-van Leer Riemann solver for relativistic
59  magnetohydrodynamics"
60  Mignone, Ugliano \& Bodo, MNRAS (2009) 393, 1141.
61  - [Mig12] "The PLUTO Code for Adaptive Mesh Computations in Astrophysical Fluid Dynamics"
62  Mignone et al., ApJS (2012) 198, 7 (see Sect. 6.3)
63 */
64 /* ///////////////////////////////////////////////////////////////////// */
65 #include "pluto.h"
66 
67 /* ********************************************************************* */
68 void Init (double *v, double x1, double x2, double x3)
69 /*
70  *
71  *
72  *
73  *********************************************************************** */
74 {
75  double r, r0, Bx, omega;
76 
77  g_gamma = 5./3.;
78  omega = 0.995;
79  Bx = 1.0;
80  r0 = 0.1;
81 
82  #if GEOMETRY == CARTESIAN
83 
84  r = D_EXPAND(x1*x1, + x2*x2, + x3*x3);
85  r = sqrt(r);
86 
87  v[RHO] = 1.0;
88  v[VX1] = 0.0;
89  v[VX2] = 0.0;
90  v[PRS] = 1.0;
91  v[BX1] = Bx;
92  v[BX2] = 0.0;
93 
94  if (r <= r0) {
95  v[RHO] = 10.0;
96  v[VX1] = -omega*x2/r0;
97  v[VX2] = omega*x1/r0;
98  }
99 
100  v[AX1] = v[AX2] = 0.0;
101  v[AX3] = v[BX1]*x2;
102 
103  #elif GEOMETRY == POLAR
104 
105  r = x1;
106 
107  v[RHO] = 1.0;
108  v[VX2] = 0.0;
109  v[VX1] = 0.0;
110  v[BX1] = Bx*cos(x2);
111  v[BX2] = -Bx*sin(x2);
112  v[PRS] = 1.0;
113 
114  if (r <= r0) {
115  v[RHO] = 10.0;
116  v[VX2] = omega*r/r0;
117  }
118 
119  v[AX1] = v[AX2] = 0.0;
120  v[AX3] = - r*sin(x2)*Bx;
121 
122  #endif
123 
124 }
125 /* ********************************************************************* */
126 void Analysis (const Data *d, Grid *grid)
127 /*
128  *
129  *
130  *********************************************************************** */
131 {
132 
133 }
134 /* ********************************************************************* */
135 void UserDefBoundary (const Data *d, RBox *box, int side, Grid *grid)
136 /*
137  *
138  *********************************************************************** */
139 {
140  int i, j, k, nv;
141  double *r, slp;
142 
143  if (side == X1_BEG){
144  r = grid[IDIR].x;
145  if (box->vpos == CENTER){
146  BOX_LOOP(box,k,j,i){
147  slp = r[i]/r[IBEG];
148  d->Vc[RHO][k][j][i] = d->Vc[RHO][k][j][IBEG];
149  d->Vc[VX1][k][j][i] = slp*d->Vc[VX1][k][j][IBEG];
150  d->Vc[VX2][k][j][i] = slp*d->Vc[VX2][k][j][IBEG];
151  d->Vc[PRS][k][j][i] = d->Vc[PRS][k][j][IBEG];
152  d->Vc[BX1][k][j][i] = d->Vc[BX1][k][j][IBEG];
153  d->Vc[BX2][k][j][i] = d->Vc[BX2][k][j][IBEG];
154  }
155  }else if (box->vpos == X2FACE){
156  #ifdef STAGGERED_MHD
157  BOX_LOOP(box,k,j,i) d->Vs[BX2s][k][j][i] = d->Vs[BX2s][k][j][IBEG];
158  #endif
159  }
160  }
161 }
162 
#define X1_BEG
Boundary region at X1 beg.
Definition: pluto.h:146
double **** Vs
The main four-index data array used for face-centered staggered magnetic fields.
Definition: structs.h:43
double g_gamma
Definition: globals.h:112
void UserDefBoundary(const Data *d, RBox *box, int side, Grid *grid)
Definition: init.c:98
#define VX2
Definition: mod_defs.h:29
#define CENTER
Definition: pluto.h:200
int vpos
Location of the variable inside the cell.
Definition: structs.h:359
#define RHO
Definition: mod_defs.h:19
#define BOX_LOOP(B, k, j, i)
Definition: macros.h:70
double **** Vc
The main four-index data array used for cell-centered primitive variables.
Definition: structs.h:31
#define AX2
Definition: mod_defs.h:86
#define VX1
Definition: mod_defs.h:28
#define IDIR
Definition: pluto.h:193
Definition: structs.h:78
#define AX3
Definition: mod_defs.h:87
static double Bx
Definition: hlld.c:62
int j
Definition: analysis.c:2
int k
Definition: analysis.c:2
double * x
Definition: structs.h:80
PLUTO main header file.
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;)
Definition: analysis.c:27
Definition: structs.h:30
int i
Definition: analysis.c:2
#define AX1
Definition: mod_defs.h:85
#define BX1
Definition: mod_defs.h:25
#define BX2s
Definition: ct.h:28
#define BX2
Definition: mod_defs.h:26
Definition: structs.h:346
#define X2FACE
Definition: pluto.h:202
long int IBEG
Lower grid index of the computational domain in the the X1 direction for the local processor...
Definition: globals.h:35
void Analysis(const Data *d, Grid *grid)
Definition: init.c:66
void Init(double *v, double x1, double x2, double x3)
Definition: init.c:17