GiRaFFE: An Open-Source General Relativistic Force-Free Electrodynamics Code

November 19, 2018

Abstract

GiRaFFE solves the equations of General Relativistic Force-Free Electrodynamics (GRFFE) using a high-resolution shock capturing scheme. It is based on IllinoisGRMHD, which is a rewrite of the Illinois Numerical Relativity (ILNR) group’s GRMHD code.

GiRaFFE is particularly good at modeling black hole magnetospheres. Its conservative-to-primitive solver has also been modified to check the physicality of conservative variables prior to primitive inversion, and move them into the physical range if they become unphysical.

Currently GiRaFFE consists of

1. the Piecewise Parabolic Method (PPM) for reconstruction,
2. the Harten, Lax, van Leer (HLL/HLLE) approximate Riemann solver, and
3. a modified HARM Conservative-to-Primitive solver.

GiRaFFEevolves the vector potential ${A}_{\mu }$ (on staggered grids) instead of the magnetic fields (${B}^{i}$) directly, to guarantee that the magnetic fields will remain divergenceless even at AMR boundaries. On uniform resolution grids, this vector potential formulation produces results equivalent to those generated using the standard, staggered flux-CT scheme.

1 Paper Reference

The basic equations, algorithms, and code validation tests for GiRaFFE are described in the code announcement paper, which supplements the many code comments as an excellent resource for understanding this code. To find the code announcement paper, search the arXiv for “GiRaFFE: An Open-Source General Relativistic Force-Free Electrodynamics Code”.

The relevant sections of the paper regarding the GRFFE formalism we adopt as well as the basic algorithmic approach are pasted below.

All equations are written in geometrized units, such that $G=c=1$, and Einstein notation is chosen for implied summation. Greek indices span all 4 spacetime dimensions, and Latin indices span only the 3 spatial dimensions.

The line element for our spacetime in standard 3+1 form is given by

 $d{s}^{2}=-{\alpha }^{2}d{t}^{2}+{\gamma }_{ij}\left(d{x}^{i}+{\beta }^{i}dt\right)\left(d{x}^{j}+{\beta }^{j}dt\right),$ (1)

where $\alpha dt$ denotes the proper time interval between adjacent spatial hypersurfaces separated by coordinate times $t={t}_{0}$ and $t={t}_{0}+dt$, ${\beta }^{i}$ the magnitude of the spatial coordinate shift between adjacent hypersurfaces, and ${\gamma }_{ij}$ is the three-metric within a given hypersurface at coordinate time $t$.

Our 3+1 GRFFE formalism is written in terms of electric and magnetic fields as measured by an observer co-moving and normal to the spatial hypersurface, with 4-velocity ${n}^{\mu }=\left(1∕\alpha ,-{\beta }^{i}∕\alpha \right)$. The stress-energy tensor of the electromagnetic field is defined as:

 ${T}_{EM}^{\mu \nu }={F}_{\sigma }^{\mu }{F}^{\nu \sigma }-\frac{1}{4}{g}^{\mu \nu }{F}_{\sigma \eta }{F}^{\sigma \eta }.$ (2)

where ${F}^{\mu \nu }$ is the electromagnetic (or Faraday) tensor:

 ${F}^{\mu \nu }={n}^{\mu }{E}^{\nu }-{n}^{\nu }{E}^{\mu }-{𝜖}^{\mu \nu \sigma \eta }{B}_{\sigma }{n}_{\eta },$ (3)

In terms of the Faraday tensor, the electric ${E}^{\nu }$ and magnetic ${B}^{\nu }$ fields in this frame are given by

$\begin{array}{rcll}{E}^{\nu }& =& {n}_{\mu }{F}^{\mu \nu }& \text{(4)}\text{}\text{}\\ {B}^{\nu }& =& -\frac{1}{2}{n}_{\mu }{𝜖}^{\nu \mu \sigma \eta }{F}_{\sigma \eta }={n{}^{\mu }}_{}\ast {F}^{\mu \nu },& \text{(5)}\text{}\text{}\end{array}$

where ${}^{\ast }{F}^{\mu \nu }$ is the dual of the Faraday tensor, and ${𝜖}^{\nu \mu \sigma \eta }=\left[\nu \mu \sigma \eta \right]∕\sqrt{|g|}$ is the rank-4 Levi-Civita tensor, with $\left[\nu \mu \sigma \eta \right]$ the regular permutation symbol. In ideal MHD, the electric field vanishes for observers moving parallel to the plasma with 4-velocity ${u}^{\nu }$:

 ${F}^{\mu \nu }{u}_{\nu }=-\sqrt{4\pi }{E}_{\left(u\right)}^{\mu }=0.$ (6)

I.e., when an observer moves in a direction parallel to the magnetic field lines, the electric field vanishes. This is simply a statement of Ohm’s law for the case of perfect conductivity. One implication of perfect conductivity is that “magnetic field lines remain attached to the fluid elements they connect”—the so-called “frozen-in condition of MHD”. In addition, so long as ${F}^{\mu \nu }\ne 0$, the ideal MHD condition implies that

$\begin{array}{rcll}{F}^{\mu \nu }{F}_{\mu \nu }=2\left({B}^{2}-{E}^{2}\right)& >& 0\phantom{\rule{1em}{0ex}}\to \phantom{\rule{1em}{0ex}}{B}^{2}>{E}^{2},\phantom{\rule{1em}{0ex}}and& \text{(7)}\text{}\text{}\\ {}^{\ast }{F}^{\mu \nu }{F}_{\mu \nu }=4{E}_{\mu }{B}^{\mu }=& 0.& \text{(8)}\text{}\text{}\end{array}$

See, e.g., [??] for further discussion.

In addition to the ideal MHD condition ${E}_{\left(u\right)}^{\mu }=0$, force-free electrodynamics also assumes that the plasma dynamics are completely driven by the electromagnetic fields (as opposed to, e.g., hydrodynamic pressure gradients). This implies that the stress-energy of the plasma: ${T}^{\mu \nu }={T}_{matter}^{\mu \nu }+{T}_{EM}^{\mu \nu }$, is completely dominated by the electromagnetic terms, which yields the conservation equation [??]:

$\begin{array}{rcll}& & {\nabla }_{\nu }{T}^{\mu \nu }\approx {\nabla }_{\nu }{T}_{EM}^{\mu \nu }=-{F}^{\mu \nu }{J}_{\nu }=0& \text{(9)}\text{}\text{}\\ & & \to \rho {E}^{i}+{n}_{\nu }{𝜖}^{\nu ijk}{J}_{j}^{\left(3\right)}{B}_{k}=0.& \text{(10)}\text{}\text{}\end{array}$

where ${J}_{i}^{\left(3\right)}$ is the 3-current, and $\rho$ the charge density. This formalism is valid in the tenuous plasma of the stellar magnetosphere, where the rest-mass density is vanishingly small and assumed to be zero. From these, the 4-current can be expressed ${J}^{\nu }=\rho {n}^{\nu }+{\gamma }_{j}^{i}{J}^{j}={\gamma }_{\mu }^{\nu }{J}^{\mu }$

The left-hand side of Eq. 10 is simply the general relativistic expression for the Lorentz force, indicating that indeed the Lorentz force is zero in GRFFE. Notice that if we assume we are not in electrovacuum (${J}^{\mu }\ne 0$), multiplying Eq. 10 by ${B}_{i}$ yields the familiar ${B}^{i}{E}_{i}=0$ constraint of force-free electrodynamics (see [??] for full derivation).

In summary, the force-free constraints can be written

$\begin{array}{rcll}& & {B}_{i}{E}^{i}=0,\phantom{\rule{1em}{0ex}}and& \text{(11)}\text{}\text{}\\ & & {B}^{2}>{E}^{2}.& \text{(12)}\text{}\text{}\end{array}$

Under these constraints, the GRFFE evolution equations consist of the Cauchy momentum equation and the induction equation (see [???] for derivation):

1. The Cauchy momentum equation follows directly from the spatial components of ${\nabla }_{\mu }{T}^{\mu \nu }={\nabla }_{\mu }{T}_{EM}^{\mu \nu }=0$ (the time component yields the energy equation, which in GRFFE is redundant). We choose to write the momentum equation in conservative form and in terms of the densitized spatial Poynting flux one-form ${\stackrel{̃}{S}}_{i}=\sqrt{\gamma }{S}_{i}$,
 ${\partial }_{t}{\stackrel{̃}{S}}_{i}+{\partial }_{j}\left(\alpha \sqrt{\gamma }{T}_{EM}^{j{}_{}}i\right)=\frac{1}{2}\alpha \sqrt{\gamma }{T}_{EM}^{\mu \nu }{\partial }_{i}{g}_{\mu \nu },$ (13)

where ${S}_{i}$ can be derived from the expression of the Poynting one-form,

 ${S}_{\mu }=-{n}_{\nu }{T}_{EM\mu }^{\nu }.$ (14)
2. The induction equation in the force-free limit is derived from the spatial components of ${\nabla {}^{\mu }}_{}\ast {F}^{\mu \nu }=0$ (the time components yield the “no-monopoles” constraint), and can be written in terms of the densitized magnetic field $\stackrel{̃}{{B}^{i}}=\sqrt{\gamma }{B}^{i}$ as
 ${\partial }_{t}{\stackrel{̃}{B}}^{i}+{\partial }_{j}\left({v}^{j}{\stackrel{̃}{B}}^{i}-{v}^{i}{\stackrel{̃}{B}}^{j}\right)=0,$ (15)

where ${v}^{j}={u}^{j}∕{u}^{0}$. As detailed in Appendix A of[?], the force-free conditions do not uniquely constrain ${u}^{\mu }$, allowing for the freedom to choose from a one-parameter family. As in [??], we choose ${u}^{\mu }$ to correspond to the minimum plasma 3-velocity that satisfies ${F}^{\mu \nu }{u}_{\nu }=0$. This choice of ${v}^{j}$ is often referred to as the drift velocity, which can be defined in terms of known variables as

 ${v}^{i}=4\pi \alpha \frac{{\gamma }^{ij}{\stackrel{̃}{S}}_{j}}{\sqrt{\gamma }{B}^{2}}-{\beta }^{i}.$ (16)

3 Numerical Algorithms

We briefly review the numerical algorithms employed in GiRaFFE to solve the equations of GRFFE as outlined in Sec. 2.

GiRaFFE fully supports Cartesian adaptive mesh refinement (AMR) grids via the Cactus/Carpet [?] infrastructure within the Einstein Toolkit [?].

As in IllinoisGRMHD, GiRaFFE guarantees that the magnetic fields remain divergenceless to roundoff error even on AMR grids by evolving the vector potential ${\mathsc{𝒜}}_{\mu }=\Phi {n}_{\mu }+{A}_{\mu }$, where ${A}_{\mu }$ is spatial (${A}_{\mu }{n}^{\mu }=0$), instead of the magnetic fields directly.

Table 1: Storage location on grid of the magnetic field ${B}^{i}$ and vector potential ${\mathsc{𝒜}}_{\mu }$. Note that $\text{}P\text{}$ is the vector of primitive variables $\left\{{v}^{i}\right\}$
 Variable(s) storage location Metric terms, $\text{}P\text{}$, ${\stackrel{̃}{S}}_{i}$ $\left(i,j,k\right)$ ${B}^{x}$, ${\stackrel{̃}{B}}^{x}$ $\left(i+\frac{1}{2},j,k\right)$ ${B}^{y}$, ${\stackrel{̃}{B}}^{y}$ $\left(i,j+\frac{1}{2},k\right)$ ${B}^{z}$, ${\stackrel{̃}{B}}^{z}$ $\left(i,j,k+\frac{1}{2}\right)$ ${A}_{x}$ $\left(i,j+\frac{1}{2},k+\frac{1}{2}\right)$ ${A}_{y}$ $\left(i+\frac{1}{2},j,k+\frac{1}{2}\right)$ ${A}_{z}$ $\left(i+\frac{1}{2},j+\frac{1}{2},k\right)$ $\sqrt{\gamma }\Phi$ $\left(i+\frac{1}{2},j+\frac{1}{2},k+\frac{1}{2}\right)$

The vector potential fields exist on a staggered grid (as defined in Table 1 such that our magnetic fields are evolved according to the flux constrained transport (FluxCT) algorithm of Refs. [??].

As in IllinoisGRMHD, this choice of staggering in GiRaFFE means that standard symmetry thorns within the Einstein Toolkit cannot be used. To add this, one option is to modify src/symmetry__set_gzs_staggered_gfs.C.

Our choice of vector potential requires that we solve the vector potential version of the induction equation

 ${\partial }_{t}{A}_{i}={𝜖}_{ijk}{v}^{j}{B}^{k}-{\partial }_{i}\left(\alpha \Phi -{\beta }^{j}{A}_{j}\right),$ (17)

where ${𝜖}_{ijk}=\left[ijk\right]\sqrt{\gamma }$ is the anti-symmetric Levi-Civita tensor and $\gamma$ is the 3-metric determinant, which in a flat spacetime in Cartesian coordinates reduces to 1. ${B}^{k}$ in Eq. 17 is computed from the vector potential via

 ${B}^{i}={𝜖}^{ijk}{\partial }_{j}{A}_{k}=\frac{\left[ijk\right]}{\sqrt{\gamma }}{\partial }_{j}{A}_{k}.$ (18)

$\Phi$ is evolved via an additional electromagnetic gauge evolution equation, which was devised specifically to avoid the buildup of numerical errors due to zero-speed characteristic modes [?] on AMR grids. Our electromagnetic gauge is identical to the Lorenz gauge, but with an exponential damping term with damping constant $\xi$ [?]:

 ${\partial }_{t}\left[\sqrt{\gamma }\Phi \right]+{\partial }_{j}\left(\alpha \sqrt{\gamma }{A}^{j}-{\beta }^{j}\left[\sqrt{\gamma }\Phi \right]\right)=-\xi \alpha \left[\sqrt{\gamma }\Phi \right].$ (19)

Step 0: Initial data: In addition to 3+1 metric quantities in the Arnowitt-Deser-Misner (ADM) formalism [?], GiRaFFE requires that the “Valencia” 3-velocity ${\stackrel{̄}{v}}^{i}$ and vector potential one-form ${A}_{\mu }$ be set initially. Regarding the former, the “Valencia” 3-velocity ${\stackrel{̄}{v}}^{i}$ is related to the 3-velocity appearing in the induction equation ${v}^{i}$ via

 ${v}^{i}=\frac{{u}^{i}}{{u}^{0}}=\alpha {\stackrel{̄}{v}}^{i}-{\beta }^{i}.$ (20)

As for ${A}_{\mu }$, for all cases in this paper, we set the evolution variable $\left[\sqrt{\gamma }\Phi \right]=0$ initially, and ${A}_{i}$ is set based on our initial physical scenario.

After ${v}^{i}$ and ${A}_{\mu }$ are set, ${B}^{i}$ is computed via Eq. 18, and then the evolution variable ${\stackrel{̃}{S}}_{i}$ is given by

 ${\stackrel{̃}{S}}_{i}=\frac{{\gamma }_{ij}\left({v}^{j}+{\beta }^{j}\right)\sqrt{\gamma }{B}^{2}}{4\pi \alpha }.$ (21)

Step 1: Evaluation of evolution equations: In tandem with the high-resolution shock-capturing (HRSC) scheme within GiRaFFE, the Runge-Kutta fourth-order (RK4) scheme is chosen to march our evolution variables ${A}_{i}$ and ${\stackrel{̃}{S}}_{i}$ forward in time from their initial values, adopting precisely the same reconstruction and Riemann solver algorithms as in IllinoisGRMHD (see Ref. [?] for more details). In short, ${A}_{i}$ and ${\stackrel{̃}{S}}_{i}$ are evolved forward in time using the Piecewise Parabolic Method (PPM) [?] for reconstruction and a Harten-Lax-van Leer (HLL)-based algorithm [??] for approximately solving the Riemann problem. Meanwhile, spatial derivatives within $\left[\sqrt{\gamma }\Phi \right]$’s evolution equation (Eq. 19) are evaluated via finite difference techniques (as in IllinoisGRMHD).

Step 2: Boundary conditions on ${A}_{\mu }$: At the end of each RK4 substep, the evolved variables ${A}_{i}$ and ${\stackrel{̃}{S}}_{i}$ have been updated at all points except the outer boundaries. So next the outer boundary conditions on ${A}_{i}$ and $\left[\sqrt{\gamma }\Phi \right]$ are applied. As no exact outer boundary conditions typically exist for systems of interest to GiRaFFE, we typically take advantage of AMR and push our outer boundary out of causal contact from the physical system of interest. However, to retain good numerical stability, we apply “reasonable” outer boundary conditions. Specifically, values of ${A}_{i}$ and $\left[\sqrt{\gamma }\Phi \right]$ in the interior grid are linearly extrapolated to the outer boundary.

Step 3: Computing ${B}^{i}$: ${B}^{i}$ is next computed from ${A}_{i}$ via Eq. 18.

Step 4: Applying GRFFE constraints & computing ${v}^{i}$: Truncation, roundoff, and under-sampling errors will at times push physical quantities into regions that violate the GRFFE constraints. To nudge the variables back into a physically realistic domain, we apply the same strategy as was devised in Ref. [?] to guarantee that the GRFFE constraints remain satisfied:

First, we adjust ${\stackrel{̃}{S}}_{i}$ via

 ${\stackrel{̃}{S}}_{i}\to {\stackrel{̃}{S}}_{i}-\frac{\left({\stackrel{̃}{S}}_{j}{\stackrel{̃}{B}}^{j}\right){\stackrel{̃}{B}}_{i}}{{\stackrel{̃}{B}}^{2}}$ (22)

to enforce ${B}^{i}{S}_{i}=0$, which as shown by Ref. [?], is equivalent to the GRFFE constraint Eq. 11.

Next, we limit the Lorentz factor of the plasma, typically to be 2,000, by rescaling ${\stackrel{̃}{S}}_{i}$ according to Eq. 92 in Ref. [?]. After ${\stackrel{̃}{S}}_{i}$ is rescaled the 3-velocity ${v}^{i}$ is recomputed via Eq. 16.

Finally, errors within our numerical scheme dissipate sharp features, so when current sheets appear, they are quickly and unphysically dissipated. This is unfortunate because current sheets lie at the heart of many GRFFE phenomena. So to remedy the situation, we apply the basic strategy of McKinney [?] (that was also adopted by Paschalidis and Shapiro [?]) and set the velocity perpendicular to the current sheet ${v}^{\perp }$ to zero. For example, if the current sheet exists on the $z=0$ plane, then ${v}^{\perp }={v}^{z}$, which we set to zero via ${n}_{i}{v}^{i}=0$, where ${n}_{i}={\gamma }_{ij}{n}^{j}$ is a unit normal one-form with ${n}^{j}={\delta }^{jz}$. Specifically, in the case of a current sheet on the $z=0$ plane, we set

 ${v}^{z}=-\frac{{\gamma }_{xz}{v}^{x}+{\gamma }_{yz}{v}^{y}}{{\gamma }_{zz}}$ (23)

at all gridpoints that lie within $|z|\le 4\Delta z$ of the current sheet.

At present the code addresses numerical dissipation of current sheets only if they appear on the equatorial plane. For cases in which current sheets appear off of the equatorial plane or spontaneously, [?] suggest the development of algorithms akin to reconnection-capturing strategies [?]. We intend to explore such approaches in future work.

Step 5: Boundary conditions on ${v}^{i}$: ${v}^{i}$ is set to zero at a given face of our outermost AMR grid cube unless the velocity is outgoing. Otherwise the value for the velocity is simply copied from the interior grid to the nearest neighbor on a face-by-face basis.

After boundary conditions on ${v}^{i}$ are updated, all data needed for the next RK4 substep have been generated, so we return to Step 1.

4 Parameters

 damp_lorenz Scope: private REAL Description: Damping factor for the generalized Lorenz gauge. Has units of 1/length = 1/M. Typically set this parameter to 1.5/(maximum Delta t on AMR grids). Range Default: 0.0 *:* any real

 current_sheet_null_v Scope: restricted BOOLEAN Description: Shall we null the velocity normal to the current sheet? Default: no

 em_bc Scope: restricted KEYWORD Description: EM field boundary condition Range Default: copy copy Copy data from nearest boundary point frozen Frozen boundaries

 gamma_speed_limit Scope: restricted REAL Description: Maximum relativistic gamma factor. Note the default is much higher than IllinoisGRMHD. (GRFFE can handle higher Lorentz factors) Range Default: 2000.0 1:* Positive > 1, though you’ll likely have troubles far above 2000.

 min_radius_inside_of_which_conserv_to_prims_ffe_and_ffe_evolution_is_disabled Scope: restricted REAL Description: As parameter suggests, this is the minimum radius inside of which the conservatives-to-primitives solver is disabled. In the Aligned Rotator test, this should be set equal to R_NS_aligned_rotator. Range Default: -1. -1. ”disable the conservative-to-prim itive solver modification” (0:* any positive value

 sym_bz Scope: restricted REAL Description: In-progress equatorial symmetry support: Symmetry parameter across z axis for magnetic fields = +/- 1 Range Default: 1.0 -1.0:1.0 Set to +1 or -1.

 symmetry Scope: restricted KEYWORD Description: Currently only no symmetry supported, though work has begun in adding equatorial-symmetry support. FIXME: Extend ET symmetry interface to support symmetries on staggered gridfunctions Range Default: none none no symmetry, full 3d domain

 velocity_bc Scope: restricted KEYWORD Description: Chosen fluid velocity boundary condition Range Default: outflow outflow Outflow boundary conditions copy Copy data from nearest boundary point frozen Frozen boundaries

 lapse_timelevels Scope: shared from ADMBASE INT

 metric_timelevels Scope: shared from ADMBASE INT

 shift_timelevels Scope: shared from ADMBASE INT

5 Interfaces

Implements:

giraffe

Inherits:

boundary

tmunubase

hydrobase

grid

Grid Variables

5.0.1 PRIVATE GROUPS
 Group Names Variable Names Details diagnostic_gfs compact 0 failure_checker description Gridfunction to track conservative-to-primitives solver fixes. Beware that this gridfunction is overwritten at each RK substep. dimensions 3 distribution DEFAULT group type GF tags prolongation=”none” Checkpoint=”no” timelevels 1 variable type REAL grmhd_primitives_reconstructed_temps compact 0 temporary description Temporary variables used for primitives reconstruction vxr dimensions 3 vyr distribution DEFAULT vzr group type GF Bxr tags prolongation=”none” Checkpoint=”no” Byr timelevels 1 Bzr variable type REAL grmhd_conservatives_rhs compact 0 st_x_rhs description Storage for the right-hand side of the partial_t tilde{S}_i equations. Needed for MoL timestepping. st_y_rhs dimensions 3 st_z_rhs distribution DEFAULT group type GF tags prolongation=”none” Checkpoint=”no” timelevels 1 variable type REAL em_ax_rhs compact 0 Ax_rhs description Storage for the right-hand side of the partial_t A_x equation. Needed for MoL timestepping. dimensions 3 distribution DEFAULT group type GF tags prolongation=”none” Checkpoint=”no” timelevels 1 variable type REAL em_ay_rhs compact 0 Ay_rhs description Storage for the right-hand side of the partial_t A_y equation. Needed for MoL timestepping. dimensions 3 distribution DEFAULT group type GF tags prolongation=”none” Checkpoint=”no” timelevels 1 variable type REAL em_az_rhs compact 0 Az_rhs description Storage for the right-hand side of the partial_t A_z equation. Needed for MoL timestepping. dimensions 3 distribution DEFAULT group type GF tags prolongation=”none” Checkpoint=”no” timelevels 1 variable type REAL
 Group Names Variable Names Details em_psi6phi_rhs compact 0 psi6phi_rhs description Storage for the right-hand side of the partial_t (psi6̂ Phi) equation. Needed for MoL timestepping. dimensions 3 distribution DEFAULT group type GF tags prolongation=”none” Checkpoint=”no” timelevels 1 variable type REAL grmhd_cmin_cmax_temps compact 0 cmin_x description Store min and max characteristic speeds in all three directions. cmax_x dimensions 3 cmin_y distribution DEFAULT cmax_y group type GF cmin_z tags prolongation=”none” Checkpoint=”no” cmax_z timelevels 1 variable type REAL grmhd_flux_temps compact 0 st_x_flux description Temporary variables for storing the flux terms of tilde{S}_i. st_y_flux dimensions 3 st_z_flux distribution DEFAULT group type GF tags prolongation=”none” Checkpoint=”no” timelevels 1 variable type REAL tupmunu compact 0 TUPtt description T{̂mu nu} description stored to avoid expensive recomputation TUPtx dimensions 3 TUPty distribution DEFAULT TUPtz group type GF TUPxx tags prolongation=”none” Checkpoint=”no” TUPxy timelevels 1 TUPxz variable type REAL

5.0.2 PUBLIC GROUPS
 Group Names Variable Names Details grmhd_conservatives compact 0 mhd_st_x description Evolved mhd variables mhd_st_y dimensions 3 mhd_st_z distribution DEFAULT group type GF timelevels 3 variable type REAL em_ax compact 0 Ax description x-component of the vector potential description evolved when constrained_transport_scheme==3 dimensions 3 distribution DEFAULT group type GF tags Prolongation=”STAGGER011” timelevels 3 variable type REAL em_ay compact 0 Ay description y-component of the vector potential description evolved when constrained_transport_scheme==3 dimensions 3 distribution DEFAULT group type GF tags Prolongation=”STAGGER101” timelevels 3 variable type REAL em_az compact 0 Az description z-component of the vector potential description evolved when constrained_transport_scheme==3 dimensions 3 distribution DEFAULT group type GF tags Prolongation=”STAGGER110” timelevels 3 variable type REAL em_psi6phi compact 0 psi6phi description sqrt{gamma} Phi description where Phi is the em scalar potential dimensions 3 distribution DEFAULT group type GF tags Prolongation=”STAGGER111” timelevels 3 variable type REAL grmhd_primitives_allbutbi compact 0 vx description Components of three velocity description defined in terms of 4-velocity as: vî = uî/u0̂. Note that this definition differs from the Valencia formalism. vy dimensions 3 vz distribution DEFAULT group type GF tags InterpNumTimelevels=1 prolongation=”none” timelevels 1 variable type REAL
 Group Names Variable Names Details grmhd_primitives_bi compact 0 Bx description B-field components defined both at vertices (Bx description By Bx description Bz) as well as at staggered points [Bx_stagger at (i+1/2 Bx description j Bx description k) Bx description By_stagger at (i Bx description j+1/2 Bx description k) Bx description Bz_stagger at (i Bx description j Bx description k+1/2)]. By dimensions 3 Bz distribution DEFAULT Bx_stagger group type GF By_stagger tags InterpNumTimelevels=1 prolongation=”none” Bz_stagger timelevels 1 variable type REAL bssn_quantities compact 0 gtxx description BSSN quantities description computed from ADM quantities gtxy dimensions 3 gtxz distribution DEFAULT gtyy group type GF gtyz tags prolongation=”none” Checkpoint=”no” gtzz timelevels 1 gtupxx variable type REAL

Symmetry.h

6 Schedule

This section lists all the variables which are assigned storage by thorn WVUThorns/GiRaFFE. Storage can either last for the duration of the run (Always means that if this thorn is activated storage will be assigned, Conditional means that if this thorn is activated storage will be assigned for the duration of the run if some condition is met), or can be turned on for the duration of a schedule function.

Storage

 Always: ADMBase::metric[metric_timelevels] ADMBase::curv[metric_timelevels] ADMBase::lapse[lapse_timelevels] ADMBase::shift[shift_timelevels] GiRaFFE::BSSN_quantities grmhd_conservatives[3] em_Ax[3] em_Ay[3] em_Az[3] em_psi6phi[3] grmhd_primitives_allbutBi grmhd_primitives_Bi grmhd_primitives_reconstructed_temps grmhd_conservatives_rhs em_Ax_rhs em_Ay_rhs em_Az_rhs em_psi6phi_rhs grmhd_cmin_cmax_temps grmhd_flux_temps TUPmunu diagnostic_gfs

Scheduled Functions

MoL_Register

giraffe_registervars

register evolved, rhs variables in giraffe for mol

 After: bssn_registervars lapse_registervars Language: c Options: meta Type: function

CCTK_BASEGRID

giraffe_initsymbound

schedule symmetries

 After: lapse_initsymbound Language: c Type: function

HydroBase_Boundaries

giraffe_compute_b_and_bstagger_from_a

compute b and b_stagger from a

 After: giraffe_outer_boundaries_on_a_mu Language: c Sync: grmhd_primitives_bi Type: function

giraffe_conserv_to_prims_ffe

applies the ffe condition b2̂>e2̂ and recomputes the velocities

 After: giraffe_compute_b_and_bstagger_from_a Language: c Type: function

giraffe_outer_boundaries_on_vx_vy_vz

apply outflow-only, flat bcs on {vx,vy,vz}. outflow only == velocities pointed inward from outer boundary are set to zero.

 After: conserv_to_prims Language: c Sync: grmhd_primitives_allbutbi grmhd_conservatives Type: function

CCTK_POSTPOSTINITIAL

giraffe_postpostinitial

hydrobase_con2prim in cctk_postpostinitial sets conserv to prim then outer boundaries (obs, which are technically disabled). the post ob syncs actually reprolongate the conservative variables, making cons and prims inconsistent. so here we redo the con2prim, avoiding the sync afterward, then copy the result to other timelevels

 After: hydrobase_con2prim Before: mol_poststep Type: group

GiRaFFE_PostPostInitial

giraffe_initsymbound

schedule symmetries – actually just a placeholder function to ensure prolongations / processor syncs are done before outer boundaries are updated.

 Before: compute_b Language: c Sync: grmhd_conservatives em_ax em_ay em_az em_psi6phi Type: function

GiRaFFE_PostPostInitial

giraffe_compute_b_and_bstagger_from_a

compute b and b_stagger from a sync: grmhd_primitives_bi

 After: postid empostid lapsepostid Language: c Sync: grmhd_primitives_bi Type: function

GiRaFFE_PostPostInitial

giraffe_conserv_to_prims_ffe

applies the ffe condition b2̂>e2̂ and recomputes the velocities

 After: compute_b Language: c Type: function

GiRaFFE_PostPostInitial

giraffe_postpostinitial_set_symmetries__copy_timelevels

compute post-initialdata quantities

 After: compute_b p2c Language: c Type: function

MoL_CalcRHS

giraffe_driver_evaluate_ffe_rhs

evaluate rhss of grffe equations

 After: bssn_rhs shift_rhs Language: c Type: function

HydroBase_Boundaries

giraffe_initsymbound

schedule symmetries – actually just a placeholder function to ensure prolongations / processor syncs are done before outer boundaries are updated.

 After: hydrobase_applybcs Before: giraffe_outer_boundaries_on_a_mu Language: c Sync: grmhd_conservatives em_ax em_ay em_az em_psi6phi Type: function

HydroBase_Boundaries

giraffe_outer_boundaries_on_a_mu

apply linear extrapolation bcs on a_mu, so that bcs are flat on bî.

 After: giraffe_initsymbound Before: giraffe_compute_b_and_bstagger_from_a Language: c Sync: em_ax em_ay em_az em_psi6phi Type: function

Aliased Functions

 Alias Name: Function Name: GiRaFFE_PostPostInitial_Set_Symmetries__Copy_Timelevels mhdpostid GiRaFFE_compute_B_and_Bstagger_from_A compute_b GiRaFFE_driver_evaluate_FFE_rhs GiRaFFE_RHS_eval