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

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

Zachariah B.xEtienne <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 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-ETKxthorn-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

Currently Baikal / BaikalVacuum do not officially support numerical grids containing symmetry assumptions, but appropriate symmetries should be registered. Users are encouraged to proceed with caution when using symmetries. Future work will include adding official support for symmetries.

Baikal / BaikalVacuum do not yet support an extensive variety of gauge conditions, instead defaulting to the tried-and-true standard moving puncture gauge conditions ( lapse combined with the “Gamma”-driving shift [though note that Baikal / BaikalVacuum refer to the “Gamma” variable as the “Lambda” variable]). Additional gauge condition options will eventually be added.

Baikal / BaikalVacuum do not support Llama-based multiblock (e.g., cubed sphere) grids, and adding this support is currently not a high priority.

2 Parameters

11 dissxstrength 10 Scope: restricted01 REAL

11 Description: (see NRPy+ for parameter definition)

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

11

11 eta  10 Scope: restricted01  REAL

11 Description: (see NRPy+ for parameter definition)

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

11

11 fdxorder  10 Scope: restricted01  INT

11 Description: (see NRPy+ for parameter definition)

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

11 lapsexfloor  10 Scope: restricted01  REAL

11 Description: (see NRPy+ for parameter definition)

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

11

11 pi  10 Scope: restricted01  REAL

11 Description: (see NRPy+ for parameter definition)

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

11

11 dtlapsexevolutionxmethod10 Scope: shared from ADMBASE01  KEYWORD

11 Extends ranges:

11 Baikal  10

11

11 dtshiftxevolutionxmethod10 Scope: shared from ADMBASE01  KEYWORD

11 Extends ranges:

11 Baikal  10

11

11 evolutionxmethod  10 Scope: shared from ADMBASE01  KEYWORD

11 Extends ranges:

11 Baikal  10

11

11 lapsexevolutionxmethod 10 Scope: shared from ADMBASE01  KEYWORD

11 Extends ranges:

11 Baikal  10

11

11 shiftxevolutionxmethod 10 Scope: shared from ADMBASE01  KEYWORD

11 Extends ranges:

11 Baikal  10

11

3 Interfaces General Implements: baikal

Inherits: admbase boundary grid tmunubase

Grid Variables

3.0.1 PUBLIC GROUPS

11 x Group Names x 10 x Variable Names x01 Details x 11 x
11  evolxvariables  10                    01  compact 11 0
11                    10  aDD00GF  01 description 11 Evolved gridfunctions.
11                    10  aDD01GF  01 dimensions 11 3
11                    10  aDD02GF  01 distribution 11 DEFAULT
11                    10  aDD11GF  01 group type 11 GF
11                    10  aDD12GF  01 timelevels 11 3
11                    10  aDD22GF  01 variable type 11 REAL
11 evolxvariablesxrhs 10                    01  compact 11 0
11                    10  aDD00xrhsGF 01 description 11 Right-hand-side gridfunctions.
11                    10  aDD01xrhsGF 01 dimensions 11 3
11                    10  aDD02xrhsGF 01 distribution 11 DEFAULT
11                    10  aDD11xrhsGF 01 group type 11 GF
11 10 aDD12xrhsGF 01 tags 11 InterpNumTimelevels=1 prolongation=”none” checkpoint=”no”
11                    10  aDD22xrhsGF 01 timelevels 11 1
11                    10  alphaxrhsGF 01 variable type 11 REAL
11 auxevolxvariables 10                    01  compact 11 0
11                    10  RbarDD00GF 01 description 11 Auxiliary gridfunctions needed for evaluating the RHSs.
11                    10  RbarDD01GF 01 dimensions 11 3
11                    10  RbarDD02GF 01 distribution 11 DEFAULT
11                    10  RbarDD11GF 01 group type 11 GF
11 10 RbarDD12GF 01 tags 11 InterpNumTimelevels=1 prolongation=”none” checkpoint=”no”
11                    10  RbarDD22GF 01 timelevels 11 1
11                    10  T4UU00GF  01 variable type 11 REAL
11  auxxvariables  10                    01  compact 11 0
11                    10  HGF  01 description 11 Auxiliary gridfunctions for e.g.
11                    10  x  01 description 11 diagnostics.
11                    10 MSQUAREDGF 01 dimensions 11 3
11                    10  MU0GF  01 distribution 11 DEFAULT
11                    10  MU1GF  01 group type 11 GF
11                    10  MU2GF  01 timelevels 11 3
11                    10                    01 variable type 11 REAL

11

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 x

11 Always:  11 x
11 evolxvariables[3]  11 x
11 evolxvariablesxrhs[1] 11 x
11 auxevolxvariables[1] 11 x
11 auxxvariables[3]  11 x

11 x  11 x

11

Scheduled Functions

CCTKxSTARTUP x baikalxregisterslicing x register 3+1 slicing condition x

11 x 11 Language: 11 c
11 x 11 Options: 11 meta
11 x 11 Type:  11 function

11

DriverxBoundarySelect (conditional) x baikalxspecifyxdriverxboundaryconditions x register boundary conditions in presync bin driverxboundaryselect. x

11 x 11 Language: 11 c
11 x 11 Options: 11 meta
11 x 11 Type:  11 function

11

MoLxCalcRHS (conditional) x baikalxrhsxevalxorderx2 x evaluate bssn rhss, at finite-differencing order 2

11 x 11 After:  11 baikalxricci
11 x 11 Language: 11 c
11 x 11 Reads:  11 evolxvariables(everywhere)
11 x 11 x  11 auxevolxvariables(interior)
11 x 11 Type:  11 function
11 x 11 Writes: 11 evolxvariablesxrhs(interior)

11

MoLxCalcRHS (conditional) x baikalxrhsxevalxorderx4 x evaluate bssn rhss, at finite-differencing order 4 x

11 x 11 After:  11 baikalxricci
11 x 11 Language: 11 c
11 x 11 Reads:  11 evolxvariables(everywhere)
11 x 11 x  11 auxevolxvariables(interior)
11 x 11 Type:  11 function
11 x 11 Writes: 11 evolxvariablesxrhs(interior)

11

MoLxCalcRHS (conditional) x baikalxspecifyxnewradxboundaryconditionsxparameters x newrad boundary conditions, scheduled right after rhs eval. x

11 x 11 After:  11 baikalxrhs
11 x 11 Language: 11 c
11 x 11 Reads:  11 evolxvariables(everywhere)
11 x 11 Type:  11 function
11 x 11 Writes: 11 evolxvariablesxrhs(boundary)

11

MoLxPostStep (conditional) x baikalxbssnxtoxadm x perform bssn-to-adm conversion. useful for diagnostics.

11 x 11 After:  11 baikalxevolxapplybcs
11 x 11 Before: 11 admbasexsetadmvars
11 x 11 Language: 11 c
11 x 11 Reads:  11 add00gf
11 x 11 x  11 add01gf
11 x 11 x  11 add02gf
11 x 11 x  11 add11gf
11 x 11 x  11 add12gf
11 x 11 x  11 add22gf
11 x 11 x  11 hdd00gf
11 x 11 x  11 hdd01gf
11 x 11 x  11 hdd02gf
11 x 11 x  11 hdd11gf
11 x 11 x  11 hdd12gf
11 x 11 x  11 hdd22gf
11 x 11 x  11 vetu0gf
11 x 11 x  11 vetu1gf
11 x 11 x  11 vetu2gf
11 x 11 x  11 betu0gf
11 x 11 x  11 betu1gf
11 x 11 x  11 betu2gf

11 x 11 x  11 cfgf

11 x 11 x  11 trkgf
11 x 11 x  11 alphagf
11 x 11 Type:  11 function
11 x 11 Writes: 11 admbase::metric(everywhere)
11 x 11 x  11 admbase::shift(everywhere)
11 x 11 x  11 admbase::curv(everywhere)
11 x 11 x  11 admbase::dtshift(everywhere)
11 x 11 x  11 admbase::lapse(everywhere)

11

MoLxPostStep (conditional) x baikalxenforcexdetgammahatxconstraint x enforce detgammabar = detgammahat (= 1 in cartesian) x

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

11

MoLxPostStep (conditional) x baikalxfloorxthexlapse x set lapse = max(lapsexfloor, lapse) x

11 x 11 Before: 11 baikalxenforcexdetgammahatxconstraint
11 x 11 Language: 11 c
11 x 11 Reads:  11 alphagf(everywhere)
11 x 11 Type:  11 function
11 x 11 Writes: 11 alphagf(everywhere)

MoLxPostStep (conditional) x baikalxspecifyxevolxboundaryconditions x register boundary conditions and perform amr+interprocessor synchronization x

11 x 11 Language: 11 c
11 x 11 Options: 11 level
11 x 11 Sync:  11 evolxvariables
11 x 11 Type:  11 function

11

MoLxPostStep (conditional) x applybcs x apply registered boundary conditions x

11 x 11 After: 11 baikalxspecifyxevolxboundaryconditions
11 x 11 Type: 11 group

11

MoLxPseudoEvolution (conditional) x baikalxbssnxconstraintsxorderx2 x compute bssn (hamiltonian and momentum) constraints, at finite-differencing order 2 x

11 x 11 Language: 11 c
11 x 11 Reads:  11 add00gf
11 x 11 x  11 add01gf
11 x 11 x  11 add02gf
11 x 11 x  11 add11gf
11 x 11 x  11 add12gf
11 x 11 x  11 add22gf
11 x 11 x  11 hdd00gf
11 x 11 x  11 hdd01gf
11 x 11 x  11 hdd02gf
11 x 11 x  11 hdd11gf
11 x 11 x  11 hdd12gf
11 x 11 x  11 hdd22gf
11 x 11 x  11 trkgf

11 x 11 x  11 cfgf

11 x 11 x  11 lambdau0gf
11 x 11 x  11 lambdau1gf
11 x 11 x  11 lambdau2gf
11 x 11 x  11 alphagf
11 x 11 x  11 vetu0gf
11 x 11 x  11 vetu1gf
11 x 11 x  11 vetu2gf
11 x 11 x  11 t4uu00gf
11 x 11 x  11 t4uu01gf
11 x 11 x  11 t4uu02gf
11 x 11 x  11 t4uu03gf
11 x 11 Type:  11 function
11 x 11 Writes: 11 auxxvariables

11

MoLxPseudoEvolution (conditional) x baikalxbssnxconstraintsxorderx4 x compute bssn (hamiltonian and momentum) constraints, at finite-differencing order 4

11 x 11 Language: 11 c
11 x 11 Reads:  11 add00gf
11 x 11 x  11 add01gf
11 x 11 x  11 add02gf
11 x 11 x  11 add11gf
11 x 11 x  11 add12gf
11 x 11 x  11 add22gf
11 x 11 x  11 hdd00gf
11 x 11 x  11 hdd01gf
11 x 11 x  11 hdd02gf
11 x 11 x  11 hdd11gf
11 x 11 x  11 hdd12gf
11 x 11 x  11 hdd22gf
11 x 11 x  11 trkgf

11 x 11 x  11 cfgf

11 x 11 x  11 lambdau0gf
11 x 11 x  11 lambdau1gf
11 x 11 x  11 lambdau2gf
11 x 11 x  11 alphagf
11 x 11 x  11 vetu0gf
11 x 11 x  11 vetu1gf
11 x 11 x  11 vetu2gf
11 x 11 x  11 t4uu00gf
11 x 11 x  11 t4uu01gf
11 x 11 x  11 t4uu02gf
11 x 11 x  11 t4uu03gf
11 x 11 Type:  11 function
11 x 11 Writes: 11 auxxvariables

11

CCTKxBASEGRID x baikalxsymmetryxregistrationxoldcartgrid3d x register symmetries, the cartgrid3d way. x

11 x 11 Language: 11 c
11 x 11 Options: 11 global
11 x 11 Type:  11 function

11

MoLxPseudoEvolution x baikalxbssnxtoxadm x perform bssn-to-adm conversion in molxpseudoevolution. needed for proper hydrobase integration.

11 x 11 After:  11 baikalxauxxapplybcs
11 x 11 Language: 11 c
11 x 11 Reads:  11 add00gf
11 x 11 x  11 add01gf
11 x 11 x  11 add02gf
11 x 11 x  11 add11gf
11 x 11 x  11 add12gf
11 x 11 x  11 add22gf
11 x 11 x  11 hdd00gf
11 x 11 x  11 hdd01gf
11 x 11 x  11 hdd02gf
11 x 11 x  11 hdd11gf
11 x 11 x  11 hdd12gf
11 x 11 x  11 hdd22gf
11 x 11 x  11 vetu0gf
11 x 11 x  11 vetu1gf
11 x 11 x  11 vetu2gf
11 x 11 x  11 betu0gf
11 x 11 x  11 betu1gf
11 x 11 x  11 betu2gf

11 x 11 x  11 cfgf

11 x 11 x  11 trkgf
11 x 11 x  11 alphagf
11 x 11 Type:  11 function
11 x 11 Writes: 11 admbase::metric(everywhere)
11 x 11 x  11 admbase::shift(everywhere)
11 x 11 x  11 admbase::curv(everywhere)
11 x 11 x  11 admbase::dtshift(everywhere)
11 x 11 x  11 admbase::lapse(everywhere)

11

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

11 x 11 Before: 11 baikalxbssnxconstraints
11 x 11 Language: 11 c
11 x 11 Reads:  11 tmunubase::stressxenergyxscalar
11 x 11 x  11 tmunubase::stressxenergyxvector
11 x 11 x  11 tmunubase::stressxenergyxtensor
11 x 11 x  11 hdd00gf
11 x 11 x  11 hdd01gf
11 x 11 x  11 hdd02gf
11 x 11 x  11 hdd11gf
11 x 11 x  11 hdd12gf
11 x 11 x  11 hdd22gf
11 x 11 x  11 alphagf

11 x 11 x  11 cfgf

11 x 11 x  11 vetu0gf
11 x 11 x  11 vetu1gf
11 x 11 x  11 vetu2gf
11 x 11 Type:  11 function
11 x 11 Writes: 11 t4uu00gf(everywhere)
11 x 11 x  11 t4uu01gf(everywhere)
11 x 11 x  11 t4uu02gf(everywhere)
11 x 11 x  11 t4uu03gf(everywhere)
11 x 11 x  11 t4uu11gf(everywhere)
11 x 11 x  11 t4uu12gf(everywhere)
11 x 11 x  11 t4uu13gf(everywhere)
11 x 11 x  11 t4uu22gf(everywhere)
11 x 11 x  11 t4uu23gf(everywhere)
11 x 11 x  11 t4uu33gf(everywhere)

MoLxPseudoEvolution x baikalxspecifyxauxxboundaryconditions x register boundary conditions and perform amr+interprocessor synchronization x

11 x 11 After:  11 baikalxbssnxconstraints
11 x 11 Language: 11 c
11 x 11 Options: 11 level
11 x 11 Sync:  11 auxxvariables
11 x 11 Type:  11 function

11

MoLxPseudoEvolution x applybcs x apply registered boundary conditions x

11 x 11 After: 11 baikalxspecifyxauxxboundaryconditions
11 x 11 Type: 11 group

11

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

11 x 11 After:  11 symmetryxregistration
11 x 11 Language: 11 c
11 x 11 Type:  11 function
11 x 11 Writes: 11 evolxvariablesxrhs(everywhere)

11

CCTKxINITIAL (conditional) x baikalxadmxtoxbssnxorderx2 x convert initial data into bssn variables x

11 x 11 After:  11 admbasexpostinitial
11 x 11 Language: 11 c
11 x 11 Reads:  11 admbase::metric
11 x 11 x  11 admbase::shift
11 x 11 x  11 admbase::curv
11 x 11 x  11 admbase::dtshift
11 x 11 x  11 admbase::lapse
11 x 11 Sync:  11 evolxvariables
11 x 11 Type:  11 function
11 x 11 Writes: 11 evolxvariables

11

CCTKxINITIAL (conditional) x baikalxadmxtoxbssnxorderx4 x convert initial data into bssn variables

11 x 11 After:  11 admbasexpostinitial
11 x 11 Language: 11 c
11 x 11 Reads:  11 admbase::metric
11 x 11 x  11 admbase::shift
11 x 11 x  11 admbase::curv
11 x 11 x  11 admbase::dtshift
11 x 11 x  11 admbase::lapse
11 x 11 Sync:  11 evolxvariables
11 x 11 Type:  11 function
11 x 11 Writes: 11 evolxvariables

11

MoLxRegister (conditional) x baikalxmolxregistration x register variables for mol x

11 x 11 Language: 11 c
11 x 11 Options: 11 meta
11 x 11 Type:  11 function

11

MoLxCalcRHS (conditional) x baikalxriccixevalxorderx2 x compute ricci tensor, needed for bssn rhss, at finite-differencing order 2 x

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

11

MoLxCalcRHS (conditional) x baikalxriccixevalxorderx4 x compute ricci tensor, needed for bssn rhss, at finite-differencing order 4

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

11

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

11 x 11 Before: 11 baikalxrhs
11 x 11 Language: 11 c
11 x 11 Reads:  11 tmunubase::stressxenergyxscalar
11 x 11 x  11 tmunubase::stressxenergyxvector
11 x 11 x  11 tmunubase::stressxenergyxtensor
11 x 11 x  11 hdd00gf
11 x 11 x  11 hdd01gf
11 x 11 x  11 hdd02gf
11 x 11 x  11 hdd11gf
11 x 11 x  11 hdd12gf
11 x 11 x  11 hdd22gf
11 x 11 x  11 alphagf

11 x 11 x  11 cfgf

11 x 11 x  11 vetu0gf
11 x 11 x  11 vetu1gf
11 x 11 x  11 vetu2gf
11 x 11 Type:  11 function
11 x 11 Writes: 11 t4uu00gf(everywhere)
11 x 11 x  11 t4uu01gf(everywhere)
11 x 11 x  11 t4uu02gf(everywhere)
11 x 11 x  11 t4uu03gf(everywhere)
11 x 11 x  11 t4uu11gf(everywhere)
11 x 11 x  11 t4uu12gf(everywhere)
11 x 11 x  11 t4uu13gf(everywhere)
11 x 11 x  11 t4uu22gf(everywhere)
11 x 11 x  11 t4uu23gf(everywhere)
11 x 11 x  11 t4uu33gf(everywhere)

11

Aliased Functions

11 Alias Name: xxxxxxx  11 Function Name:
11 ApplyBCs  11 BaikalxauxxApplyBCs
11 BaikalxBSSNxconstraintsxorderx2  11 BaikalxBSSNxconstraints
11 BaikalxBSSNxconstraintsxorderx4  11 BaikalxBSSNxconstraints
11 BaikalxRiccixevalxorderx2  11 BaikalxRicci
11 BaikalxRiccixevalxorderx4  11 BaikalxRicci
11 BaikalxSymmetryxregistrationxoldCartGrid3D 11 Symmetryxregistration
11 Baikalxrhsxevalxorderx2  11 BaikalxRHS
11 Baikalxrhsxevalxorderx4  11 BaikalxRHS