Date

### Abstract

Provides the basic ADM variables used in the $3+1$ formalism

### 1 Purpose

Thorn ADMBase provides core infrastructure for thorns implementing general relativity on a 3D grid in the $3+1$ formalism. It provides the basic variables (3-metric, extrinsic curvature, lapse and shift vector) for the $3+1$ formalism, in addition to a set of parameters to regulate the methods used for their evolution. These variables are used to communicate between thorns providing initial data, evolution methods and analysis routines for the $3+1$ formalism. In addition, the variables can be used as a mechanism to interact with alternative formalisms, as long as routines can be written to transform alternative variables into these $3+1$ variables.

#### 2.1 3+1 Variables

The variables provided by ADMBase are:

• The 3-metric tensor, ${g}_{ij}$

gxx, gxy, gxz,gyy, gyz,gzz

• The extrinsic curvature tensor, ${K}_{ij}$

kxx, kxy, kxz,kyy,kyz,kzz

• The lapse function, $\alpha$

alp

• The (optional) shift vector ${\beta }^{i}$

betax, betay,betaz

By default the metric and extrinsic curvature tensors are assumed to be physical, however these semantics can be changed by use of the metric_type parameter. ADMBase provides the default value of physical, however another thorn can extend this parameter, for example to specify that the variables gxx etc actually refer to the conformal 3-metric.

#### 2.2 Initial Data

Initial data for the $3+1$ variables is specified by the initial_data (3-metric and extrinsic curvature), initial_lapse (lapse), and initial_shift (shift) parameters. By default, ADMBase initialises the 3-metric and extrinsic curvature to Minkowski and the lapse to one. Initial data thorns override these defaults by extending the parameters. To see which initial data sets are available in your executable run for example

./cactus_<config> -o admbase::initial_data | grep Range


The CactusEinstein arrangement includes thorns providing initial data for various black hole combinations, perturbed black holes and linear gravitational waves.

#### 2.3 Evolution Methods

Analogous to specifying initial data, evolution methods are chosen by the evolution_method (3-metric and extrinsic curvature), lapse_evolution_method (lapse), and shift_evolution_method (shift) parameters. By default, ADMBase does not evolve the 3-metric or extrinsic curvature, and holds the lapse and shift static.

#### 3.1 3+1 Variables

It is highly recommended that all thorns which inherit from ADMBase check the value of the metric_type parameter in a routine scheduled at CCTK_PARAMCHECK and signal an error if the metric type is not recognised. (See the source file ParamCheck.c in any of the thorns in the CactusEinstein arrangement for examples of this, and note that the PARAMCHECK time bin is a good place to check for illegal/bad combinations of parameters, and also to inform the user of any relevent details of the parameters she has chosen).

ADMBase allocates one timelevel of memory for all variables, except the shift, which is only allocated if the initial_shift parameter is set to a value other than ‘none’. (‘none’ is the default.) The state of the shift storage is indicated by the shift_state grid scalar. This is 1 if there is storage for the shift, and 0 otherwise.

The thorn provides, on request, initial data to set the metric and extrinsic curvature to flat space in cartesian coordinates, to set the initial lapse to one and the initial shift to zero.

#### 3.2 Initial Data

To include your initial data sets for the 3-metric, extrinsic curvature, lapse and shift in the ADMBase infrastructure, extend the keyword parameters initial_data, initial_lapse and initial_shift. For example, in the param.ccl file of CactusEinstein/IDAnalyticBH,

shares: ADMBase

EXTENDS KEYWORD initial_data
{
"schwarzschild"      :: "One Schwarzshild black hole"
"bl_bh"              :: "Brill Lindquist black holes"
"misner_bh"          :: "Misner black holes"
"multiple_misner_bh" :: "Multiple Misner black holes"
"kerr"        :: "One Kerr black hole"
}


ADMBase also schedules two groups ADMBase_InitialData and ADMBase_InitialGauge in this order at CCTK_INITIAL. Initial data and initial gauge thorns should schedule their routines to run in this group, for example

if (CCTK_Equals(initial_data,"schwarzschild"))
{
{
LANG: C
} "Construct initial data for a single Schwarzschild black hole"
}


ADMBase also schedules a group ADMBase_PostInitial at CCTK_INITIAL after both ADMBase_InitialData and ADMBase_InitialGauge. This group is meant for thorns that modify the initial data, such as e.g. adding noise to an exact solution.

### 4 Shift Vector

It is only relatively recently that numerical relativists have started to use a shift vector in 3D calculations, and previously, to save space, storage for the shift vector was not allocated. If the parameter initial_shift is set to none, ADMBase does not allocate storage for betax, betay, betaz and sets the grid scalar shift_state to 0. In all other cases the shift_state parameter is set to 1.

Thorns using the shift should always check that storage for the shift is allocated before using it.

### 5 Parameters

 admbase_boundary_condition Scope: restricted STRING Description: Boundary condition for ADMBase variables Range Default: flat must be a registered boundary condition

 dtlapse_evolution_method Scope: restricted KEYWORD Description: The dtlapse evolution method Range Default: static static dtlapse is not evolved ID-apply-regrid dtlapse is not evolved and initial data is used to fill in new grid points after regridding ID-apply-always dtlapse is not evolved and initial data is used to fill in new grid points before each step and after grid changes

 dtshift_evolution_method Scope: restricted KEYWORD Description: The dtshift evolution method Range Default: static static dtshift is not evolved ID-apply-regrid dtshift is not evolved and initial data is used to fill in new grid points after regridding ID-apply-always dtshift is not evolved and initial data is used to fill in new grid points before each step and after grid changes

 evolution_method Scope: restricted KEYWORD Description: The metric an extrinsic curvature evolution method Range Default: static none The metric and extrinsic curvature are not evolved static The metric and extrinsic curvature are not evolved ID-apply-regrid The metric and extrinsic curvature are not evolved and initial data is used to fill in new grid points after regridding ID-apply-always The metric and extrinsic curvature are not evolved and initial data is used to fill in new grid points before each step and after grid changes

 initial_data Scope: restricted KEYWORD Description: Initial metric and extrinsic curvature datasets Range Default: Cartesian Minkowski Cartesian Minkowski Minkowski values in cartesian coordinates

 initial_dtlapse Scope: restricted KEYWORD Description: Initial dtlapse value Range Default: none none Dtlapse is inactive zero Dtlapse is zero

 initial_dtshift Scope: restricted KEYWORD Description: Initial dtshift value Range Default: none none Dtshift is inactive zero Dtshift is zero

 initial_lapse Scope: restricted KEYWORD Description: Initial lapse value Range Default: one one Uniform lapse

 initial_shift Scope: restricted KEYWORD Description: Initial shift value Range Default: zero none Shift is inactive zero Shift is zero

 lapse_evolution_method Scope: restricted KEYWORD Description: The lapse evolution method Range Default: static static lapse is not evolved ID-apply-regrid lapse is not evolved and initial data is used to fill in new grid points after regridding ID-apply-always lapse is not evolved and initial data is used to fill in new grid points before each step and after grid changes

 lapse_prolongation_type Scope: restricted KEYWORD Description: The kind of boundary prolongation for the lapse Range Default: Lagrange Lagrange standard prolongation (requires several time levels) none no prolongation (use this if you do not have enough time levels active)

 lapse_timelevels Scope: restricted INT Description: Number of time levels for the lapse Range Default: 1 0:3

 metric_prolongation_type Scope: restricted KEYWORD Description: The kind of boundary prolongation for the metric and extrinsic curvature Range Default: Lagrange Lagrange standard prolongation (requires several time levels) none no prolongation (use this if you do not have enough time levels active)

 metric_timelevels Scope: restricted INT Description: Number of time levels for the metric and extrinsic curvature Range Default: 1 0:3

 metric_type Scope: restricted KEYWORD Description: The semantics of the metric variables (physical, static conformal, etc) Range Default: physical physical metric and extrinsic curvature are the physical ones

 shift_evolution_method Scope: restricted KEYWORD Description: The shift evolution method Range Default: static static shift is not evolved ID-apply-regrid shift is not evolved and initial data is used to fill in new grid points after regridding ID-apply-always shift is not evolved and initial data is used to fill in new grid points before each step and after grid changes

 shift_prolongation_type Scope: restricted KEYWORD Description: The kind of boundary prolongation for the shift Range Default: Lagrange Lagrange standard prolongation (requires several time levels) none no prolongation (use this if you do not have enough time levels active)

 shift_timelevels Scope: restricted INT Description: Number of time levels for the shift Range Default: 1 0:3

### 6 Interfaces

Implements:

Inherits:

grid

#### Grid Variables

##### 6.0.1 PUBLIC GROUPS
 Group Names Variable Names Details shift_state shift_state compact 0 description state of storage for shift dimensions 0 distribution CONSTANT group type SCALAR timelevels 1 variable type INT dtlapse_state dtlapse_state compact 0 description state of storage for dtlapse dimensions 0 distribution CONSTANT group type SCALAR timelevels 1 variable type INT dtshift_state dtshift_state compact 0 description state of storage for dtshift dimensions 0 distribution CONSTANT group type SCALAR timelevels 1 variable type INT metric compact 0 gxx description ADM 3-metric g_ij gxy dimensions 3 gxz distribution DEFAULT gyy group type GF gyz tags tensortypealias=”DD_sym” ProlongationParameter=”ADMBase::metric_prolongation_type” gzz timelevels 3 variable type REAL curv compact 0 kxx description ADM extrinsic curvature K_ij kxy dimensions 3 kxz distribution DEFAULT kyy group type GF kyz tags tensortypealias=”DD_sym” ProlongationParameter=”ADMBase::metric_prolongation_type” kzz timelevels 3 variable type REAL lapse compact 0 alp description ADM lapse function alpha dimensions 3 distribution DEFAULT group type GF tags tensortypealias=”Scalar” ProlongationParameter=”ADMBase::lapse_prolongation_type” timelevels 3 variable type REAL
 Group Names Variable Names Details shift compact 0 betax description ADM shift function betaî betay dimensions 3 betaz distribution DEFAULT group type GF tags tensortypealias=”U” ProlongationParameter=”ADMBase::shift_prolongation_type” timelevels 3 variable type REAL dtlapse compact 0 dtalp description Time derivative of ADM lapse function alpha dimensions 3 distribution DEFAULT group type GF tags tensortypealias=”Scalar” ProlongationParameter=”ADMBase::lapse_prolongation_type” timelevels 3 variable type REAL dtshift compact 0 dtbetax description Time derivative of ADM shift function betaî dtbetay dimensions 3 dtbetaz distribution DEFAULT group type GF tags tensortypealias=”U” ProlongationParameter=”ADMBase::shift_prolongation_type” timelevels 3 variable type REAL

Symmetry.h

### 7 Schedule

This section lists all the variables which are assigned storage by thorn EinsteinBase/ADMBase. 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: Conditional: shift_state dtlapse_state dtshift_state lapse[1] dtshift[1] dtshift[2] dtshift[3] metric[1] curv[1] metric[2] curv[2] metric[3] curv[3] lapse[2] lapse[3] shift[1] shift[2] shift[3] dtlapse[1] dtlapse[2] dtlapse[3]

#### Scheduled Functions

CCTK_PARAMCHECK (conditional)

check consistency of parameters

 Language: c Options: global Type: function

CCTK_INITIAL (conditional)

schedule group for calculating adm initial data

 Type: group

CCTK_BASEGRID (conditional)

set the dtshift_state variable to 1

 Language: c Type: function Writes: admbase::dtshift_state(everywhere)

CCTK_BASEGRID (conditional)

set the dtshift_state variable to 0

 Language: c Type: function Writes: admbase::dtshift_state(everywhere)

set the shift to 0 at all points

set the dtlapse to 0 at all points

 Language: c Type: function Writes: admbase::dtalp(everywhere) dtalp_p dtalp_p_p

set the dtshift to 0 at all points

CCTK_PRESTEP (conditional)

copy the lapse to the current time level

CCTK_PRESTEP (conditional)

copy the shift to the current time level

CCTK_PRESTEP (conditional)

copy the metric and extrinsic curvature to the current time level

CCTK_WRAGH (conditional)

einstein_initsymbound

set up gf symmetries

 Language: c Options: global Type: function

MoL_PostStep (conditional)

select admbase boundary conditions - may be required for mesh refinement

 Before: admbase_setadmvars Language: c Options: level Sync: lapse dtlapse shift dtshift metric curv Type: function

CCTK_INITIAL (conditional)

schedule group for the adm initial gauge condition

MoL_PostStep (conditional)

applybcs

apply the boundary conditions of admbase

CCTK_POSTREGRID (conditional)

schedule group for calculating adm initial data

 Type: group

CCTK_POSTREGRIDINITIAL (conditional)

schedule group for calculating adm initial data

 Type: group

CCTK_POSTREGRID (conditional)

schedule group for the adm initial gauge condition

 After: admbase_initialdata Before: mol_poststep Type: group

CCTK_POSTREGRIDINITIAL (conditional)

schedule group for the adm initial gauge condition

 After: admbase_initialdata Before: mol_poststep Type: group

MoL_PostStep

set the adm variables before this group, and use them afterwards

 Type: group

MoL_PseudoEvolution

set the adm variables before this group, and use them afterwards

 Type: group

CCTK_INITIAL (conditional)

schedule group for modifying the adm initial data, such as e.g. adding noise

set the metric and extrinsic curvature to cartesian minkowski values

set the lapse to 1 at all points

 Language: c Type: function Writes: admbase::alp(everywhere) alp_p alp_p_p

CCTK_BASEGRID (conditional)

set the shift_state variable to 1

 Language: c Type: function Writes: admbase::shift_state(everywhere)

CCTK_BASEGRID (conditional)

set the shift_state variable to 0

 Language: c Type: function Writes: admbase::shift_state(everywhere)

CCTK_BASEGRID (conditional)

set the dtlapse_state variable to 1

 Language: c Type: function Writes: admbase::dtlapse_state(everywhere)

CCTK_BASEGRID (conditional)