PLUTO Test Problems  4.4-patch2
Functions
init.c File Reference

Axisymmetric jet propagation. More...

Functions

void GetJetValues (double, double *)
 
void InitDomain (Data *d, Grid *grid)
 
void UserDefBoundary (const Data *d, RBox *box, int side, Grid *grid)
 

Detailed Description

Description.
The jet problem is set up in axisymmetric cylindrical coordinates $ (R,z) $. We label ambient and jet values with the suffix "a" and "j", respectively. The ambient medium is at rest and is characterized by uniform density and pressure, $ \rho_a $ and $ p_a $. The beam enters from the lower-z boundary from a circular nozzle of radius $ R_j $ and carries a constant poloidal field $ B_z $ and a (radially-varying) toroidal component $ B_\phi(R) $. Flow variables are prescribed as

\[ \left\{\begin{array}{lcl} \rho(R) &=& \rho_j \\ \noalign{\medskip} v_z(R) &=& v_j \\ \noalign{\medskip} B_\phi(R) &=& \DS \left\{\begin{array}{ll} -B_m R/a & \quad{\rm for}\quad R<a \\ \noalign{\medskip} -B_m a/R & \quad{\rm for}\quad R>a \end{array}\right. \\ \noalign{\medskip} B_z(R) &=& B_{z0}\quad\mathrm{(const)} \end{array}\right. \]

Here a is the magnetization radius while $ v_R = B_R = 0 $. These profiles are similar to the ones used by Tesileanu et al. (2008). The pressure distribution is found by solving the radial momentum balance between thermal, centrifugal and magnetic forces:

\[ \frac{dp}{dR} = \frac{\rho v_\phi^2}{R} - \frac{1}{2}\left[\frac{1}{R^2}\frac{d(R^2B^2_\phi)}{dR} +\frac{dB_z^2}{dR}\right] \]

Neglecting rotation and assuming Bz to be constant the solution of radial momentum balance becomes

\[ p(R) = p_a + B_m^2\left[1-\min\left(\frac{R^2}{a^2},1\right)\right] \]

and the jet on-axis pressure increases for increasing toroidal field:

\[ p(R=0) \equiv p_j = p_a + B_m^2 \]

where $p_a$ is the ambient pressure.

Normalization.
Since the MHD equations are scale-invariant we have the freedom to specify a reference length, density and velocity. Here we choose

In this way the number of parameters is reduced to 4:

  1. g_inputParam[ETA]: density contrast $ \eta = \rho_j/\rho_a \qquad\Longrightarrow\qquad \rho_j = \eta $
  2. g_inputParam[JET_VEL]: Jet velocity $ v_j $. This is also the Mach number of the beam with respect to the ambient in the adiabatic setup;
  3. g_inpurParam[SIGMA_Z]: poloidal magnetization;
  4. g_inpurParam[SIGMA_PHI]: toroidal magnetization; Magnetization are defined as follows:

    \[ \left\{\begin{array}{ll} \sigma_z &= \DS \frac{B_z^2}{2p_a} \\ \noalign{\medskip} \sigma_\phi &= \DS \frac{<B_\phi^2>}{2p_a} \end{array}\right. \qquad\Longrightarrow\qquad \left\{\begin{array}{ll} B_z^2 &= \DS 2\sigma_zp_a \\ \noalign{\medskip} B_m^2 &= \DS \frac{2\sigma_\phi}{a^2(1/2-2\log a)}p_a \end{array}\right. \]

    Here the average value of $B^2_\phi$ is simply found as

    \[ <B^2_\phi> = \frac{\int_0^1 B^2_\phi R\,dR}{\int_0^1 R\,dR} = B_m^2a^2\left(\frac{1}{2} - 2\log a\right) \]

The following MAPLE code can be used to verify the solution:

restart; # Solve radial equilibrium balance equation
assume (a < 1, a > 0);
B[phi] := -B[m]*R/a;
ode := diff(p(R),R) = -1/(2*R^2)*diff(R^2*B[phi]^2,R);
dsolve({ode,p(a)=pa}); # only for R < a

When cooling is enabled, two additional parameters controlling the amplitude and frequency of perturbation can be used:

  1. g_inputParam[PERT_AMPLITUDE]: perturbation amplitude (in units of jet velocity);
  2. g_inputParam[PERT_PERIOD]: perturbation period (in years).

The jet problem has been tested using a variety of configurations, namely:

Conf.GEOMETRY DIMT. STEPPINGRECONSTRUCTIONdivBEOS COOLING
#01 CYLINDRICAL2 RK2 LINEAR CT IDEAL NO
#02 CYLINDRICAL2 HANCOCK LINEAR CT IDEAL NO
#03 CYLINDRICAL2 ChTr PARABOLIC CT IDEAL NO
#04 CYLINDRICAL2.5RK2 LINEAR NONEIDEAL NO
#05 CYLINDRICAL2.5RK2 LINEAR CT IDEAL NO
#06 CYLINDRICAL2.5RK2 LINEAR CT PVTE_LAWNO
#07 CYLINDRICAL2.5ChTr PARABOLIC NONEIDEAL SNEq
#08 CYLINDRICAL2.5ChTr PARABOLIC NONEIDEAL MINEq
#09 CYLINDRICAL2.5ChTr PARABOLIC NONEIDEAL H2_COOL

Here 2.5 is a short-cut for to 2 dimensions and 3 components.

The following image show the (log) density map at the end of simulation for setup #01.

mhd_jet.01.jpg
Density map at the end of the computation for configuration #01
Author
A. Mignone (migno.nosp@m.ne@p.nosp@m.h.uni.nosp@m.to.i.nosp@m.t)
Date
March 02, 2017

References

Function Documentation

◆ GetJetValues()

void GetJetValues ( double  R,
double *  vj 
)

Define jet value as functions of the (cylindrical) radial coordinate. For a periodic jet configuration, density and verical velocity smoothly join the ambient values. This has no effect on equilibrium as long as rotation profile depends on the chosen density profile.

◆ InitDomain()

void InitDomain ( Data *  d,
Grid *  grid 
)

Assign initial condition by looping over the computational domain. Called after the usual Init() function to assign initial conditions on primitive variables. Value assigned here will overwrite those prescribed during Init().

◆ UserDefBoundary()

void UserDefBoundary ( const Data *  d,
RBox *  box,
int  side,
Grid *  grid 
)

Set the injection boundary condition at the lower z-boundary (X2-beg must be set to userdef in pluto.ini). For $ R \le 1 $ we set constant input values (given by the GetJetValues() function while for $ R > 1 $ the solution has equatorial symmetry with respect to the z=0 plane. To avoid numerical problems with a "top-hat" discontinuous jump, we smoothly merge the inlet and reflected value using a profile function Profile().