Thorn ADMMass can compute the ADM mass from quantities in ADMBase.
The ADM mass evaluated as either surface integrals at infinity or volume integrals over entire hypersurfaces give a measure of the total energy in the spacetime.
The ADM mass can be defined [1] as a surface integral over a sphere with infinite radius: \begin {equation} \label {eq:ADM_mass} M_{\mbox {\tiny ADM}}=\frac {1}{16\pi }\oint _\infty \sqrt {\gamma }\gamma ^{ij}\gamma ^{kl} (\gamma _{ik,j}-\gamma _{ij,k})\text {d}\! S_l \end {equation} . This is, assuming \(\alpha =1\) at infinity, equivalent to \begin {equation} \label {eq:ADM_mass_volume} M_{\mbox {\tiny ADM}}=\frac {1}{16\pi }\int \left (\alpha \sqrt {\gamma }\gamma ^{ij}\gamma ^{kl} (\gamma _{ik,j}-\gamma _{ij,k})\right )_{,l}\text {d}\!^{\,3}\!\!x \end {equation} . In practice, the following equation can also be used within the thorn: \begin {equation} \label {eq:ADM_mass_lapse} M_{\mbox {\tiny ADM}}=\frac {1}{16\pi }\oint _\infty \alpha \sqrt {\gamma }\gamma ^{ij}\gamma ^{kl} (\gamma _{ik,j}-\gamma _{ij,k})\text {d}\! S_l. \end {equation} This differs from equation (??) by the factor \(\alpha \) inside the integral. For evaluations of those equations at infinity, \(\alpha =1\) is assumed, and they are equal. For evaluations at a finite distance, however, this is usually not the case and the approximation of the ADM mass is gauge-dependent [1]. Depending on circumstances, either (??), (?? or (??) might give better results.
Multiple measurements can be done for both volume and surface integral, but the limit for both is 100 (change param.ccl if you need more). You need to specify the number of integrations with ADMMass_number (and ADMMass will perform both integrations that many times).
Also note that this thorn uses the ADMMacros for derivatives. Thus, converegence of results is limited to the order of these derivatives (ADMMacros::spatial_order).
ADMMass provides several possibilities to specify the (finite) integration domain, both for surface and volume integral, which we list in the following:
Surface Integral (over rectangular domain)
ADMMass_distance_from_grid_boundary: specifies the distance between the physical domain boundary and the integration domain. If this is set, this fully specifies the domain boundary.
ADMMass_surface_distance: specifies a distance of the integration boundary from a given point, specified using ADMMass_x_pos[3].
Otherwise, ADMMass_[xyz]_[min|max] specify a rectangular integration domain.
Volume Integral (over sphere)
If ADMMass_use_all_volume_as_volume_radius is set, the whole volume is used for integration.
If ADMMass_use_surface_distance_as_volume_radius is set and ADMMass_volume_radius is not (negative), ADMMass_surface_distance is used to specify the integration radius.
Otherwise, ADMMass_volume_radius specifies this radius.
ADMMass_[xyz]_pos specify the position of the integration sphere.
Use ADMMass_Excise_Horizons to exclude domains where thorn OutsideMask didn’t specify domain as outside. This can be used to, e.g. excise black hole apparent horizons.
You should output ADMMass::ADMMass_Masses for the result of the integrations, which will include the results for the volume integral, the usual surface integral and the sorface integral including the lapse.
[1] N. O Murchadha and J. W. York, “Gravitational energy,” Phys. Rev. D 10, 2345 (1974). doi:10.1103/PhysRevD.10.2345
admmass_debug | Scope: private | BOOLEAN |
Description: Enable some info at runtime
| ||
Default: no | ||
admmass_distance_from_grid_boundary | Scope: private | REAL |
Description: distance between the grid boundaries and the surface of the integration box
| ||
Range | Default: -1.0 | |
: | <=0 for disable, positive otherwise
| |
admmass_excise_horizons | Scope: private | BOOLEAN |
Description: Should we exclude the region inside the AH to the volume integral
| ||
Default: no | ||
admmass_number | Scope: private | INT |
Description: number of measurements
| ||
Range | Default: 1 | |
0: | 0 or positive
| |
admmass_surface_distance | Scope: private | REAL |
Description: distance between the above-defined center of the integration (cubic) box and its
surface
| ||
Range | Default: -1.0 | |
: | <=0 for disable, positive otherwise
| |
admmass_use_all_volume_as_volume_radius | Scope: private | BOOLEAN |
Description: Use the whole grid for volume integration
| ||
Default: no | ||
admmass_use_surface_distance_as_volume_radius | Scope: private | BOOLEAN |
Description: Use ADMMass_surface_distance instead of ADMMass_volume_radius
| ||
Default: yes | ||
admmass_volume_radius | Scope: private | REAL |
Description: radius of the sphere inside which the volume integral is computed
| ||
Range | Default: -1.0 | |
: | <=0 for disable, positive otherwise
| |
admmass_x_max | Scope: private | REAL |
Description: x position of the righttmost yz-plane for the integration box
| ||
Range | Default: 100.0 | |
: | anything
| |
admmass_x_min | Scope: private | REAL |
Description: x position of the leftmost yz-plane for the integration box
| ||
Range | Default: -100.0 | |
: | anything
| |
admmass_x_pos | Scope: private | REAL |
Description: x position of the center of the integration box
| ||
Range | Default: 0.0 | |
: | anything
| |
admmass_y_max | Scope: private | REAL |
Description: y position of the rightmost xz-plane for the integration box
| ||
Range | Default: 100.0 | |
: | anything
| |
admmass_y_min | Scope: private | REAL |
Description: y position of the leftmost xz-plane for the integration box
| ||
Range | Default: -100.0 | |
: | anything
| |
admmass_y_pos | Scope: private | REAL |
Description: y position of the center of the integration box
| ||
Range | Default: 0.0 | |
: | anything
| |
admmass_z_max | Scope: private | REAL |
Description: z position of the rightmost xy-plane for the integration box
| ||
Range | Default: 100.0 | |
: | anything
| |
admmass_z_min | Scope: private | REAL |
Description: z position of the leftmost xy-plane for the integration box
| ||
Range | Default: -100.0 | |
: | anything
| |
admmass_z_pos | Scope: private | REAL |
Description: z position of the center of the integration box
| ||
Range | Default: 0.0 | |
: | anything
| |
Implements:
admmass
Inherits:
admbase
admmacros
staticconformal
spacemask
Group Names | Variable Names | Details | |
admmass_loopcounterg | compact | 0 | |
ADMMass_LoopCounter | description | ADMMass LoopCounter | |
dimensions | 0 | ||
distribution | CONSTANT | ||
group type | SCALAR | ||
timelevels | 1 | ||
variable type | INT | ||
admmass_masses | compact | 0 | |
ADMMass_SurfaceMass | description | ADMMass Scalars | |
ADMMass_SurfaceMass_Lapse | dimensions | 0 | |
ADMMass_VolumeMass | distribution | CONSTANT | |
group type | SCALAR | ||
tags | checkpoint=”no” | ||
timelevels | 1 | ||
vararray_size | ADMMass_number | ||
variable type | REAL | ||
admmass_gfs_surface | compact | 0 | |
ADMMass_SurfaceMass_GF | description | ADMMass gridfunctions for surface integration | |
dimensions | 3 | ||
distribution | DEFAULT | ||
group type | GF | ||
tags | Prolongation=”none” tensortypealias=”Scalar” checkpoint=”no” | ||
timelevels | 3 | ||
variable type | REAL | ||
admmass_gfs_volume | compact | 0 | |
ADMMass_VolumeMass_pot_x | description | ADMMass gridfunctions for volume integration | |
ADMMass_VolumeMass_pot_y | dimensions | 3 | |
ADMMass_VolumeMass_pot_z | distribution | DEFAULT | |
ADMMass_VolumeMass_GF | group type | GF | |
tags | Prolongation=”none” tensortypealias=”Scalar” checkpoint=”no” | ||
timelevels | 3 | ||
variable type | REAL | ||
admmass_box | compact | 0 | |
ADMMass_box_x_min | description | Physical coordinates of the surface on which the integral is computed | |
ADMMass_box_x_max | dimensions | 0 | |
ADMMass_box_y_min | distribution | CONSTANT | |
ADMMass_box_y_max | group type | SCALAR | |
ADMMass_box_z_min | tags | checkpoint=”no” | |
ADMMass_box_z_max | timelevels | 1 | |
variable type | REAL | ||
grid_spacing_product | grid_spacing_product | compact | 0 |
description | product of cctk_delta_space | ||
description | to be computed in local mode and later used in global mode (carpet problems) | ||
dimensions | 0 | ||
distribution | CONSTANT | ||
group type | SCALAR | ||
tags | checkpoint=”no” | ||
timelevels | 1 | ||
variable type | REAL | ||
Uses header:
SpaceMask.h
This section lists all the variables which are assigned storage by thorn EinsteinAnalysis/ADMMass. 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: | |
ADMMass_LoopCounterG | |
ADMMass_Masses | |
ADMMass_GFs_surface[3] | |
ADMMass_GFs_volume[3] | |
CCTK_INITIAL
admmass_initloopcounter
initialise the loop counter for admmass
Language: | c | |
Options: | global | |
Type: | function | |
CCTK_POSTSTEP
admmass_setloopcounter
set the loop counter to the value of the parameter admmass:admmass_number
After: | outsidemask_updatemask | |
Language: | c | |
Options: | global | |
Type: | function | |
CCTK_POSTSTEP
admmass
admmass loop
After: | admmass_setloopcounter | |
Storage: | admmass_gfs_surface[3] | |
admmass_gfs_volume[3] | ||
admmass_box | ||
grid_spacing_product | ||
Type: | group | |
While: | admmass::admmass_loopcounter | |
ADMMass
admmass_loop
decrement loop counter
Language: | c | |
Options: | global | |
Type: | function | |
ADMMass
admmass_surface
calculate the admmass using a surface integral: local routine
After: | admmass_loop | |
Language: | c | |
Options: | global | |
loop-local | ||
Sync: | admmass_gfs_surface | |
Type: | function | |
ADMMass
admmass_surface_global
calculate the admmass using a surface integral: global routine
After: | admmass_surface | |
Language: | c | |
Options: | global | |
Type: | function | |
ADMMass
admmass_surface_lapse
calculate the admmass*lapse using a surface integral: local routine
After: | admmass_surface_global | |
Language: | c | |
Options: | global | |
loop-local | ||
Sync: | admmass_gfs_surface | |
Type: | function | |
ADMMass
admmass_surface_lapse_global
calculate the admmass*lapse using a surface integral: global routine
After: | admmass_surface_lapse | |
Language: | c | |
Options: | global | |
Type: | function | |
ADMMass
admmass_volume
calculate the admmass using a volume integral: local routine
After: | admmass_surface_lapse_global | |
Language: | c | |
Options: | global | |
loop-local | ||
Sync: | admmass_gfs_volume | |
Type: | function | |
ADMMass
admmass_volume_global
calculate the admmass using a volume integral: global routine
After: | admmass_volume | |
Language: | c | |
Options: | global | |
Type: | function | |