Baikal: An Einstein Toolkit thorn for solving Einstein’s equations in the BSSN formalism, in Cartesian coordinates

Zachariah B. Etienne <zachetie *at* gmail *dot* com>

May 18, 2020

Abstract

Baikal solves Einstein’s equations of general relativity in the BSSN formalism. Given that the complications and super-short-lengthscale variations usually associated with the stress-energy tensor \(T^{\mu \nu }\) in strongly curved spacetimes, this thorn implements finite-difference derivatives up to and including 4th order, but no higher. All codes within this thorn were generated using the Python-based NRPy+ infrastructure, which may be found at http://nrpyplus.net/ (alt link: https://github.com/zachetienne/nrpytutorial).

Both Baikal and its sister thorn BaikalVacuum are fully documented in Jupyter notebooks within NRPy+, and the latest documentation for BaikalETK (the name of the combined Baikal / BaikalVacuum project) may be found in the Tutorial-ETK_thorn-BaikalETK.ipynb Jupyter notebook here:

https://github.com/zachetienne/nrpytutorial

Also the NRPy+ Jupyter documentation can be navigated via the following link:

https://nbviewer.jupyter.org/github/zachetienne/nrpytutorial/blob/master/Tutorial-ETK_thorn-BaikalETK.ipynb

1 Planned features

2 Parameters




diss_strength
Scope: restricted REAL



Description: (see NRPy+ for parameter definition)



Range Default: 0.1
*:*
All values accepted. NRPy+ does not restrict the allowed ranges of parameters yet.






eta
Scope: restricted REAL



Description: (see NRPy+ for parameter definition)



Range Default: 2.0
*:*
All values accepted. NRPy+ does not restrict the allowed ranges of parameters yet.






fd_order
Scope: restricted INT



Description: (see NRPy+ for parameter definition)



Range Default: 4
*:*
All values accepted. NRPy+ does not restrict the allowed ranges of parameters yet.






lapse_floor
Scope: restricted REAL



Description: (see NRPy+ for parameter definition)



Range Default: 1e-15
*:*
All values accepted. NRPy+ does not restrict the allowed ranges of parameters yet.






pi
Scope: restricted REAL



Description: (see NRPy+ for parameter definition)



Range Default: 3.14159265358979323846264338327950288
*:*
All values accepted. NRPy+ does not restrict the allowed ranges of parameters yet.






dtlapse_evolution_method
Scope: shared from ADMBASE KEYWORD



Extends ranges:



Baikal






dtshift_evolution_method
Scope: shared from ADMBASE KEYWORD



Extends ranges:



Baikal






evolution_method
Scope: shared from ADMBASE KEYWORD



Extends ranges:



Baikal






lapse_evolution_method
Scope: shared from ADMBASE KEYWORD



Extends ranges:



Baikal






shift_evolution_method
Scope: shared from ADMBASE KEYWORD



Extends ranges:



Baikal



3 Interfaces

General

Implements:

baikal

Inherits:

admbase

boundary

grid

tmunubase

Grid Variables

3.0.1 PUBLIC GROUPS





  Group Names     Variable Names   Details    




evol_variables compact 0
aDD00GF description Evolved gridfunctions.
aDD01GF dimensions 3
aDD02GF distribution DEFAULT
aDD11GF group type GF
aDD12GF timelevels 3
aDD22GF variable type REAL




evol_variables_rhs compact 0
aDD00_rhsGF description Right-hand-side gridfunctions.
aDD01_rhsGF dimensions 3
aDD02_rhsGF distribution DEFAULT
aDD11_rhsGF group type GF
aDD12_rhsGF tags InterpNumTimelevels=1 prolongation=”none” checkpoint=”no”
aDD22_rhsGF timelevels 1
alpha_rhsGF variable type REAL




auxevol_variables compact 0
RbarDD00GF description Auxiliary gridfunctions needed for evaluating the RHSs.
RbarDD01GF dimensions 3
RbarDD02GF distribution DEFAULT
RbarDD11GF group type GF
RbarDD12GF tags InterpNumTimelevels=1 prolongation=”none” checkpoint=”no”
RbarDD22GF timelevels 1
T4UU00GF variable type REAL




aux_variables compact 0
HGF description Auxiliary gridfunctions for e.g.
  description diagnostics.
MSQUAREDGF dimensions 3
MU0GF distribution DEFAULT
MU1GF group type GF
MU2GF timelevels 3
variable type REAL




Uses header:

Symmetry.h

Boundary.h

Slicing.h

4 Schedule

This section lists all the variables which are assigned storage by thorn WVUThorns/Baikal. 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:  
evol_variables[3]  
evol_variables_rhs[1]  
auxevol_variables[1]  
aux_variables[3]  
   

Scheduled Functions

CCTK_STARTUP

  baikal_registerslicing

  register 3+1 slicing condition

 

  Language: c
  Options: meta
  Type: function

Driver_BoundarySelect (conditional)

  baikal_specify_driver_boundaryconditions

  register boundary conditions in presync bin driver_boundaryselect.

 

  Language: c
  Options: meta
  Type: function

MoL_CalcRHS (conditional)

  baikal_rhs_eval_order_2

  evaluate bssn rhss, at finite-differencing order 2

 

  After: baikal_ricci
  Language: c
  Reads: evol_variables(everywhere)
    auxevol_variables(interior)
  Type: function
  Writes: evol_variables_rhs(interior)

MoL_CalcRHS (conditional)

  baikal_rhs_eval_order_4

  evaluate bssn rhss, at finite-differencing order 4

 

  After: baikal_ricci
  Language: c
  Reads: evol_variables(everywhere)
    auxevol_variables(interior)
  Type: function
  Writes: evol_variables_rhs(interior)

MoL_CalcRHS (conditional)

  baikal_specify_newrad_boundaryconditions_parameters

  newrad boundary conditions, scheduled right after rhs eval.

 

  After: baikal_rhs
  Language: c
  Reads: evol_variables(everywhere)
  Type: function
  Writes: evol_variables_rhs(boundary)

MoL_PostStep (conditional)

  baikal_bssn_to_adm

  perform bssn-to-adm conversion. useful for diagnostics.

 

  After: baikal_evol_applybcs
  Before: admbase_setadmvars
  Language: c
  Reads: add00gf
    add01gf
    add02gf
    add11gf
    add12gf
    add22gf
    hdd00gf
    hdd01gf
    hdd02gf
    hdd11gf
    hdd12gf
    hdd22gf
    vetu0gf
    vetu1gf
    vetu2gf
    betu0gf
    betu1gf
    betu2gf
    cfgf
    trkgf
    alphagf
  Type: function
  Writes: admbase::metric(everywhere)
    admbase::shift(everywhere)
    admbase::curv(everywhere)
    admbase::dtshift(everywhere)
    admbase::lapse(everywhere)

MoL_PostStep (conditional)

  baikal_enforce_detgammahat_constraint

  enforce detgammabar = detgammahat (= 1 in cartesian)

 

  Language: c
  Reads: hdd00gf
    hdd01gf
    hdd02gf
    hdd11gf
    hdd12gf
    hdd22gf
  Type: function
  Writes: hdd00gf(everywhere)
    hdd01gf(everywhere)
    hdd02gf(everywhere)
    hdd11gf(everywhere)
    hdd12gf(everywhere)
    hdd22gf(everywhere)

MoL_PostStep (conditional)

  baikal_floor_the_lapse

  set lapse = max(lapse_floor, lapse)

 

  Before: baikal_enforce_detgammahat_constraint
  Language: c
  Reads: alphagf(everywhere)
  Type: function
  Writes: alphagf(everywhere)

MoL_PostStep (conditional)

  baikal_specify_evol_boundaryconditions

  register boundary conditions and perform amr+interprocessor synchronization

 

  Language: c
  Options: level
  Sync: evol_variables
  Type: function

MoL_PostStep (conditional)

  applybcs

  apply registered boundary conditions

 

  After: baikal_specify_evol_boundaryconditions
  Type: group

MoL_PseudoEvolution (conditional)

  baikal_bssn_constraints_order_2

  compute bssn (hamiltonian and momentum) constraints, at finite-differencing order 2

 

  Language: c
  Reads: add00gf
    add01gf
    add02gf
    add11gf
    add12gf
    add22gf
    hdd00gf
    hdd01gf
    hdd02gf
    hdd11gf
    hdd12gf
    hdd22gf
    trkgf
    cfgf
    lambdau0gf
    lambdau1gf
    lambdau2gf
    alphagf
    vetu0gf
    vetu1gf
    vetu2gf
    t4uu00gf
    t4uu01gf
    t4uu02gf
    t4uu03gf
  Type: function
  Writes: aux_variables

MoL_PseudoEvolution (conditional)

  baikal_bssn_constraints_order_4

  compute bssn (hamiltonian and momentum) constraints, at finite-differencing order 4

 

  Language: c
  Reads: add00gf
    add01gf
    add02gf
    add11gf
    add12gf
    add22gf
    hdd00gf
    hdd01gf
    hdd02gf
    hdd11gf
    hdd12gf
    hdd22gf
    trkgf
    cfgf
    lambdau0gf
    lambdau1gf
    lambdau2gf
    alphagf
    vetu0gf
    vetu1gf
    vetu2gf
    t4uu00gf
    t4uu01gf
    t4uu02gf
    t4uu03gf
  Type: function
  Writes: aux_variables

CCTK_BASEGRID

  baikal_symmetry_registration_oldcartgrid3d

  register symmetries, the cartgrid3d way.

 

  Language: c
  Options: global
  Type: function

MoL_PseudoEvolution

  baikal_bssn_to_adm

  perform bssn-to-adm conversion in mol_pseudoevolution. needed for proper hydrobase integration.

 

  After: baikal_aux_applybcs
  Language: c
  Reads: add00gf
    add01gf
    add02gf
    add11gf
    add12gf
    add22gf
    hdd00gf
    hdd01gf
    hdd02gf
    hdd11gf
    hdd12gf
    hdd22gf
    vetu0gf
    vetu1gf
    vetu2gf
    betu0gf
    betu1gf
    betu2gf
    cfgf
    trkgf
    alphagf
  Type: function
  Writes: admbase::metric(everywhere)
    admbase::shift(everywhere)
    admbase::curv(everywhere)
    admbase::dtshift(everywhere)
    admbase::lapse(everywhere)

MoL_PseudoEvolution

  baikal_t4dd_to_t4uu

  compute t4uu from t4dd (provided in et?? from tmunubase), needed for bssn constraints

 

  Before: baikal_bssn_constraints
  Language: c
  Reads: tmunubase::stress_energy_scalar
    tmunubase::stress_energy_vector
    tmunubase::stress_energy_tensor
    hdd00gf
    hdd01gf
    hdd02gf
    hdd11gf
    hdd12gf
    hdd22gf
    alphagf
    cfgf
    vetu0gf
    vetu1gf
    vetu2gf
  Type: function
  Writes: t4uu00gf(everywhere)
    t4uu01gf(everywhere)
    t4uu02gf(everywhere)
    t4uu03gf(everywhere)
    t4uu11gf(everywhere)
    t4uu12gf(everywhere)
    t4uu13gf(everywhere)
    t4uu22gf(everywhere)
    t4uu23gf(everywhere)
    t4uu33gf(everywhere)

MoL_PseudoEvolution

  baikal_specify_aux_boundaryconditions

  register boundary conditions and perform amr+interprocessor synchronization

 

  After: baikal_bssn_constraints
  Language: c
  Options: level
  Sync: aux_variables
  Type: function

MoL_PseudoEvolution

  applybcs

  apply registered boundary conditions

 

  After: baikal_specify_aux_boundaryconditions
  Type: group

CCTK_BASEGRID

  baikal_zero_rhss

  idea from lean: set all rhs functions to zero to prevent spurious nans

 

  After: symmetry_registration
  Language: c
  Type: function
  Writes: evol_variables_rhs(everywhere)

CCTK_INITIAL (conditional)

  baikal_adm_to_bssn_order_2

  convert initial data into bssn variables

 

  After: admbase_postinitial
  Language: c
  Reads: admbase::metric
    admbase::shift
    admbase::curv
    admbase::dtshift
    admbase::lapse
  Sync: evol_variables
  Type: function
  Writes: evol_variables

CCTK_INITIAL (conditional)

  baikal_adm_to_bssn_order_4

  convert initial data into bssn variables

 

  After: admbase_postinitial
  Language: c
  Reads: admbase::metric
    admbase::shift
    admbase::curv
    admbase::dtshift
    admbase::lapse
  Sync: evol_variables
  Type: function
  Writes: evol_variables

MoL_Register (conditional)

  baikal_mol_registration

  register variables for mol

 

  Language: c
  Options: meta
  Type: function

MoL_CalcRHS (conditional)

  baikal_ricci_eval_order_2

  compute ricci tensor, needed for bssn rhss, at finite-differencing order 2

 

  Before: baikal_rhs
  Language: c
  Reads: hdd00gf
    hdd01gf
    hdd02gf
    hdd11gf
    hdd12gf
    hdd22gf
    lambdau0gf
    lambdau1gf
    lambdau2gf
  Type: function
  Writes: rbardd00gf
    rbardd01gf
    rbardd02gf
    rbardd11gf
    rbardd12gf
    rbardd22gf

MoL_CalcRHS (conditional)

  baikal_ricci_eval_order_4

  compute ricci tensor, needed for bssn rhss, at finite-differencing order 4

 

  Before: baikal_rhs
  Language: c
  Reads: hdd00gf
    hdd01gf
    hdd02gf
    hdd11gf
    hdd12gf
    hdd22gf
    lambdau0gf
    lambdau1gf
    lambdau2gf
  Type: function
  Writes: rbardd00gf
    rbardd01gf
    rbardd02gf
    rbardd11gf
    rbardd12gf
    rbardd22gf

MoL_CalcRHS (conditional)

  baikal_t4dd_to_t4uu

  compute t4uu from t4dd (provided in et?? from tmunubase), needed for bssn rhss

 

  Before: baikal_rhs
  Language: c
  Reads: tmunubase::stress_energy_scalar
    tmunubase::stress_energy_vector
    tmunubase::stress_energy_tensor
    hdd00gf
    hdd01gf
    hdd02gf
    hdd11gf
    hdd12gf
    hdd22gf
    alphagf
    cfgf
    vetu0gf
    vetu1gf
    vetu2gf
  Type: function
  Writes: t4uu00gf(everywhere)
    t4uu01gf(everywhere)
    t4uu02gf(everywhere)
    t4uu03gf(everywhere)
    t4uu11gf(everywhere)
    t4uu12gf(everywhere)
    t4uu13gf(everywhere)
    t4uu22gf(everywhere)
    t4uu23gf(everywhere)
    t4uu33gf(everywhere)

Aliased Functions

 

Alias Name:         Function Name:
ApplyBCs Baikal_aux_ApplyBCs
Baikal_BSSN_constraints_order_2 Baikal_BSSN_constraints
Baikal_BSSN_constraints_order_4 Baikal_BSSN_constraints
Baikal_Ricci_eval_order_2 Baikal_Ricci
Baikal_Ricci_eval_order_4 Baikal_Ricci
Baikal_Symmetry_registration_oldCartGrid3D Symmetry_registration
Baikal_rhs_eval_order_2 Baikal_RHS
Baikal_rhs_eval_order_4 Baikal_RHS