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

- the Piecewise Parabolic Method (PPM) for reconstruction,
- the Harten, Lax, van Leer (HLL/HLLE) approximate Riemann solver, and
- 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.

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\u2215\alpha ,-{\beta}^{i}\u2215\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}-{\mathit{\epsilon}}^{\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}{\mathit{\epsilon}}^{\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 ${\mathit{\epsilon}}^{\nu \mu \sigma \eta}=\left[\nu \mu \sigma \eta \right]\u2215\sqrt{\left|g\right|}$ 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}{\mathit{\epsilon}}^{\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):

- 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{\u0303}{S}}_{i}=\sqrt{\gamma}{S}_{i}$,
$${\partial}_{t}{\stackrel{\u0303}{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) - 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{\u0303}{{B}^{i}}=\sqrt{\gamma}{B}^{i}$
as
$${\partial}_{t}{\stackrel{\u0303}{B}}^{i}+{\partial}_{j}\left({v}^{j}{\stackrel{\u0303}{B}}^{i}-{v}^{i}{\stackrel{\u0303}{B}}^{j}\right)=0,$$ (15) where ${v}^{j}={u}^{j}\u2215{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{\u0303}{S}}_{j}}{\sqrt{\gamma}{B}^{2}}-{\beta}^{i}.$$ (16)

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 ${\mathcal{\mathcal{A}}}_{\mu}=\Phi {n}_{\mu}+{A}_{\mu}$, where ${A}_{\mu}$ is spatial (${A}_{\mu}{n}^{\mu}=0$), instead of the magnetic fields directly.

Variable(s) | storage location |

Metric terms, $\text{}P\text{}$, ${\stackrel{\u0303}{S}}_{i}$ | $\left(i,j,k\right)$ |

${B}^{x}$, ${\stackrel{\u0303}{B}}^{x}$ | $\left(i+\frac{1}{2},j,k\right)$ |

${B}^{y}$, ${\stackrel{\u0303}{B}}^{y}$ | $\left(i,j+\frac{1}{2},k\right)$ |

${B}^{z}$, ${\stackrel{\u0303}{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}={\mathit{\epsilon}}_{ijk}{v}^{j}{B}^{k}-{\partial}_{i}\left(\alpha \Phi -{\beta}^{j}{A}_{j}\right),$$ | (17) |

where ${\mathit{\epsilon}}_{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}={\mathit{\epsilon}}^{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{\u0304}{v}}^{i}$ and vector potential one-form ${A}_{\mu}$ be set initially. Regarding the former, the “Valencia” 3-velocity ${\stackrel{\u0304}{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{\u0304}{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{\u0303}{S}}_{i}$ is given by

$${\stackrel{\u0303}{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{\u0303}{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{\u0303}{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{\u0303}{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{\u0303}{S}}_{i}$ via

$${\stackrel{\u0303}{S}}_{i}\to {\stackrel{\u0303}{S}}_{i}-\frac{\left({\stackrel{\u0303}{S}}_{j}{\stackrel{\u0303}{B}}^{j}\right){\stackrel{\u0303}{B}}_{i}}{{\stackrel{\u0303}{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{\u0303}{S}}_{i}$ according to Eq. 92 in Ref. [?]. After ${\stackrel{\u0303}{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 $\left|z\right|\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.

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 |

Implements:

giraffe

Inherits:

admbase

boundary

spacemask

tmunubase

hydrobase

grid

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 | |

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 | |

Adds header:

GiRaFFE_headers.h

Uses header:

Symmetry.h

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.

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 | |

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 | |

AddToTmunu

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 | |

AddToTmunu

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 | |

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 |