Provides the basic ADM variables used in the \(3+1\) formalism
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.
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.
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.
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.
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.
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")) { schedule Schwarzschild in ADMBase_InitialData { 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.
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.
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 | ||
Implements:
admbase
Inherits:
grid
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 | ||
Uses header:
Symmetry.h
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.
Always: | Conditional: |
shift_state dtlapse_state dtshift_state | shift[shift_timelevels] |
lapse[lapse_timelevels] | dtlapse[lapse_timelevels] |
metric[metric_timelevels] curv[metric_timelevels] | dtshift[shift_timelevels] |
CCTK_PARAMCHECK (conditional)
admbase_paramcheck
check consistency of parameters
Language: | c | |
Options: | global | |
Type: | function | |
CCTK_INITIAL (conditional)
admbase_initialdata
schedule group for calculating adm initial data
Type: | group | |
CCTK_BASEGRID (conditional)
admbase_setdtshiftstateon
set the dtshift_state variable to 1
Language: | c | |
Type: | function | |
Writes: | admbase::dtshift_state(everywhere) | |
CCTK_BASEGRID (conditional)
admbase_setdtshiftstateoff
set the dtshift_state variable to 0
Language: | c | |
Type: | function | |
Writes: | admbase::dtshift_state(everywhere) | |
ADMBase_InitialGauge (conditional)
admbase_shiftzero
set the shift to 0 at all points
Language: | c | |
Type: | function | |
Writes: | admbase::shift(everywhere) | |
admbase::shift_p(everywhere) | ||
admbase::shift_p_p(everywhere) | ||
ADMBase_InitialGauge (conditional)
admbase_dtlapsezero
set the dtlapse to 0 at all points
Language: | c | |
Type: | function | |
Writes: | admbase::dtalp(everywhere) | |
dtalp_p(everywhere) | ||
dtalp_p_p(everywhere) | ||
ADMBase_InitialGauge (conditional)
admbase_dtshiftzero
set the dtshift to 0 at all points
Language: | c | |
Type: | function | |
Writes: | admbase::dtshift(everywhere) | |
admbase::dtshift_p(everywhere) | ||
admbase::dtshift_p_p(everywhere) | ||
CCTK_PRESTEP (conditional)
admbase_lapsestatic
copy the lapse to the current time level
Language: | c | |
Reads: | admbase::alp_p(everywhere) | |
admbase::dtalp_p(everywhere) | ||
Type: | function | |
Writes: | admbase::alp(everywhere) | |
admbase::dtalp(everywhere) | ||
CCTK_PRESTEP (conditional)
admbase_shiftstatic
copy the shift to the current time level
Language: | c | |
Reads: | admbase::shift_p(everywhere) | |
admbase::dtshift_p(everywhere) | ||
Type: | function | |
Writes: | admbase::shift(everywhere) | |
admbase::dtshift(everywhere) | ||
CCTK_PRESTEP (conditional)
admbase_static
copy the metric and extrinsic curvature to the current time level
Language: | c | |
Reads: | admbase::curv_p(everywhere) | |
admbase::metric_p(everywhere) | ||
Type: | function | |
Writes: | admbase::curv(everywhere) | |
admbase::metric(everywhere) | ||
CCTK_WRAGH (conditional)
einstein_initsymbound
set up gf symmetries
Language: | c | |
Options: | global | |
Type: | function | |
MoL_PostStep (conditional)
admbase_boundaries
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)
admbase_initialgauge
schedule group for the adm initial gauge condition
After: | admbase_initialdata | |
Type: | group | |
MoL_PostStep (conditional)
applybcs
apply the boundary conditions of admbase
After: | admbase_boundaries | |
Before: | admbase_setadmvars | |
Type: | group | |
CCTK_POSTREGRID (conditional)
admbase_initialdata
schedule group for calculating adm initial data
Type: | group | |
CCTK_POSTREGRIDINITIAL (conditional)
admbase_initialdata
schedule group for calculating adm initial data
Type: | group | |
CCTK_POSTREGRID (conditional)
admbase_initialgauge
schedule group for the adm initial gauge condition
After: | admbase_initialdata | |
Before: | mol_poststep | |
Type: | group | |
CCTK_POSTREGRIDINITIAL (conditional)
admbase_initialgauge
schedule group for the adm initial gauge condition
After: | admbase_initialdata | |
Before: | mol_poststep | |
Type: | group | |
MoL_PostStep
admbase_setadmvars
set the adm variables before this group, and use them afterwards
Type: | group | |
MoL_PseudoEvolution
admbase_setadmvars
set the adm variables before this group, and use them afterwards
Type: | group | |
CCTK_INITIAL (conditional)
admbase_postinitial
schedule group for modifying the adm initial data, such as e.g. adding noise
After: | admbase_initialdata | |
admbase_initialgauge | ||
Type: | group | |
ADMBase_InitialData (conditional)
admbase_cartesianminkowski
set the metric and extrinsic curvature to cartesian minkowski values
Language: | c | |
Type: | function | |
Writes: | admbase::curv(everywhere) | |
admbase::metric(everywhere) | ||
admbase::metric_p(everywhere) | ||
admbase::metric_p_p(everywhere) | ||
admbase::curv_p(everywhere) | ||
admbase::curv_p_p(everywhere) | ||
admbase::alp(everywhere) | ||
admbase::shift(everywhere) | ||
admbase::dtalp(everywhere) | ||
admbase::dtshift(everywhere) | ||
admbase::shift_state(everywhere) | ||
admbase::dtlapse_state(everywhere) | ||
admbase::dtshift_state(everywhere) | ||
ADMBase_InitialGauge (conditional)
admbase_lapseone
set the lapse to 1 at all points
Language: | c | |
Type: | function | |
Writes: | admbase::alp(everywhere) | |
admbase::alp_p(everywhere) | ||
admbase::alp_p_p(everywhere) | ||
CCTK_BASEGRID (conditional)
admbase_setshiftstateon
set the shift_state variable to 1
Language: | c | |
Type: | function | |
Writes: | admbase::shift_state(everywhere) | |
CCTK_BASEGRID (conditional)
admbase_setshiftstateoff
set the shift_state variable to 0
Language: | c | |
Type: | function | |
Writes: | admbase::shift_state(everywhere) | |
CCTK_BASEGRID (conditional)
admbase_setdtlapsestateon
set the dtlapse_state variable to 1
Language: | c | |
Type: | function | |
Writes: | admbase::dtlapse_state(everywhere) | |
CCTK_BASEGRID (conditional)
admbase_setdtlapsestateoff
set the dtlapse_state variable to 0
Language: | c | |
Type: | function | |
Writes: | admbase::dtlapse_state(everywhere) | |
Alias Name: | Function Name: |
ApplyBCs | ADMBase_ApplyBCs |