This thorn generates numerical relativity initial data by solving the constraints of general relativity using the hyperbolic relaxation method.
The hyperbolic relaxation method of [1] converts an elliptic problem into a hyperbolic one. The prototypical elliptic problem—Poisson’s equation—reads \begin {equation} \nabla ^{2}\vec {u} = \vec {\rho }\;, \end {equation} where \(\vec {u}\) is a set of unknowns and \(\vec {\rho }\) are sources. One introduces a relaxation time \(t\) and replaces this elliptic equation with \begin {equation} \partial _{t}^{2}\vec {u} + \eta \partial _{t}\vec {u} = c^{2}\left (\nabla ^{2}\vec {u} - \vec {\rho }\right )\;, \end {equation} where \(\eta \) is a damping parameter with units of inverse time and \(c\) is the speed of the relaxation waves. One then evolves this hyperbolic equation until a steady state is reached at \(t=t_{\star }\), for which \begin {equation} \left .\partial _{t}^{2}\vec {u}\right |_{t=t_{\star }} = 0 = \left .\partial _{t}\vec {u}\right |_{t=t_{\star }}\;, \end {equation} and thus \(\left .\vec {u}\right |_{t=t_{\star }}\) is also a solution to the original elliptic problem. For more details of how this method is implemented in NRPyEllipticET, please see [2].
As described in [2], NRPyEllipticET solves the Hamiltonian constraint using the conformal transverse-traceless (CTT) decomposition, i.e., \begin {equation} \hat \nabla ^{2}u + \frac {1}{8}\tilde {A}_{ij}\tilde {A}^{ij}\left (\psi _{\rm singular}+u\right )^{-7} = 0\;, \end {equation} where \(\hat \nabla _{i}\) is the covariant derivative compatible with the flat spatial metric \(\hat \gamma _{ij}\), \(\hat \nabla ^{2} = \hat \nabla _{i}\hat \nabla ^{i}\), \(\tilde {A}_{ij} = \psi ^{-4}A_{ij}\), where \(A_{ij}\) is the traceless part of the extrinsic curvature, and \(\psi \) is the conformal factor, given by \begin {equation} \psi = \psi _{\rm singular} + u \equiv 1 + \sum _{n=1}^{N_{p}}\frac {m_{n}}{2|\vec {x}_{n}|} + u\;, \end {equation} where \(m_{n}\) are \(\vec {x}_{n}\) are the bare mass and position vector of the \(n\)th puncture and \(u\) is a to-be-determined non-singular piece of the conformal factor.
We thus solve the Hamiltonian constraint using the hyperbolic relaxation method, i.e., \begin {align} \partial _{t}u &= v - \eta u\;,\\ \partial _{t}v &= c^{2}\left [\hat {\nabla }^{2}u + \frac {1}{8}\tilde {A}_{ij}\tilde {A}^{ij}\left (\psi _{\rm singular} + u\right )\right ]\;, \end {align}
where the first equation defines \(v\).
[1] Rüter, H. R., Hildich, D., Bugner, M., and Brügmann, B., Phys. Rev. D 98, 084044, 2018 (arXiv: 1708.07358).
[2] Assumpção, T., Werneck, L. R., Etienne, Z. B., and Pierre Jacques, T., Phys. Rev. D 105, 104037, 2022 (arXiv: 2111.02424).
cfl_factor | Scope: private | REAL |
Description: CFL factor of the relaxation time evolution.
| ||
Range | Default: 0.7 | |
0:1 | Between zero and one. For higher resolutions this will have
to be lowered.
| |
conformally_flat_bbh_puncture_0_bare_mass | Scope: private | REAL |
Description: Bare mass of first puncture
| ||
Range | Default: 1e123 | |
0:* | Must be positive
| |
1e123 | Forbidden value to make sure it is explicitly set in the parfile
| |
conformally_flat_bbh_puncture_0_p | Scope: private | REAL |
Description: Linear momentum of first puncture
| ||
Range | Default: (none) | |
*:* | This parameter can have any value
| |
conformally_flat_bbh_puncture_0_pos | Scope: private | REAL |
Description: Position of first puncture
| ||
Range | Default: (none) | |
*:* | This parameter can have any value
| |
conformally_flat_bbh_puncture_0_s | Scope: private | REAL |
Description: Angular momentum of first puncture
| ||
Range | Default: (none) | |
*:* | This parameter can have any value
| |
conformally_flat_bbh_puncture_1_bare_mass | Scope: private | REAL |
Description: Bare mass of second puncture
| ||
Range | Default: 1e123 | |
0:* | Must be positive
| |
1e123 | Forbidden value to make sure it is explicitly set in the parfile
| |
conformally_flat_bbh_puncture_1_p | Scope: private | REAL |
Description: Linear momentum of second puncture
| ||
Range | Default: (none) | |
*:* | This parameter can have any value
| |
conformally_flat_bbh_puncture_1_pos | Scope: private | REAL |
Description: Position of second puncture
| ||
Range | Default: (none) | |
*:* | This parameter can have any value
| |
conformally_flat_bbh_puncture_1_s | Scope: private | REAL |
Description: Angular momentum of second puncture
| ||
Range | Default: (none) | |
*:* | This parameter can have any value
| |
domain_size | Scope: private | REAL |
Description: Domain size for the initial data
| ||
Range | Default: 1e6 | |
0:* | Must be positive
| |
eta_damping | Scope: private | REAL |
Description: Wave equation damping parameter
| ||
Range | Default: -1 | |
0:* | Must be positive
| |
-1 | Compute optimum
eta_damping (requires domain_size=1e6; sinh_width=0.07;
foci_position=5)
| |
foci_position | Scope: private | REAL |
Description: Position of the foci of the prolate spheroidal coordinate system. Typically the position
of the puncture.
| ||
Range | Default: 5.0 | |
0:* | Must be positive
| |
info_output_freq | Scope: private | INT |
Description: Print progress of relaxation time evolution every info_output_freq iterations
| ||
Range | Default: (none) | |
0:* | Any positive value. 0 disables it
| |
initial_data_type | Scope: private | STRING |
Description: Type of initial data generated by NRPyEllipticET
| ||
Range | Default: ConformallyFlatBBH | |
ConformallyFlatBBH | Conformally flat binary black hole initial data
| |
interpolation_order | Scope: private | INT |
Description: Interpolation order
| ||
Range | Default: 4 | |
0:* | Must be positive
| |
interpolator_name | Scope: private | STRING |
Description: Interpolator name
| ||
Range | Default: Lagrange polynomial interpolation | |
.+ | Can be anything
| |
lapse_exponent_n | Scope: private | REAL |
Description: Exponent of lapse initial data alpha = psin}
| ||
Range | Default: -2 | |
*:* | This parameter can have any value
| |
log_target_residual | Scope: private | REAL |
Description: Stopping criterion: log10(l2norm(residual))
| ||
Range | Default: -16.0 | |
*:0 | Should be negative, since we typically want small residuals
| |
max_iterations | Scope: private | INT |
Description: Maximum number of time steps in the relaxation time evolution.
| ||
Range | Default: 10000 | |
0:* | Must be positive
| |
n0 | Scope: private | INT |
Description: Number of points in the xx0 direction
| ||
Range | Default: 128 | |
0:* | Must be positive
| |
n1 | Scope: private | INT |
Description: Number of points in the xx1 direction
| ||
Range | Default: 128 | |
0:* | Must be positive
| |
n2 | Scope: private | INT |
Description: Number of points in the xx2 direction
| ||
Range | Default: 16 | |
0:* | Must be positive
| |
nrpy_epsilon | Scope: private | REAL |
Description: Small number to avoid singularities at the punctures
| ||
Range | Default: 1e-8 | |
*:* | Can be anything
| |
number_of_lct | Scope: private | REAL |
Description: Number of light-crossing times
| ||
Range | Default: 5.5e-6 | |
0:* | Must be positive
| |
orbital_plane | Scope: private | STRING |
Description: Orbital plane
| ||
Range | Default: xy | |
xy | Orbital plane is the xy-plane
| |
yx | Equivalent to xy
| |
xz | Orbital plane is the xz-plane
| |
zx | Equivalent to xz
| |
position_shift | Scope: private | REAL |
Description: Shift punctures on the axis while keeping their distance fixed
| ||
Range | Default: (none) | |
*:* | Can be anything
| |
residual_integration_radius | Scope: private | REAL |
Description: The L2-norm of the residual is integrated in a sphere with this radius.
| ||
Range | Default: 100.0 | |
0:* | Must be positive; if set to >=domain_size then will integrate
over the entire NRPy+-generated grid.
| |
sinh_width | Scope: private | REAL |
Description: This parameter controls how densily sampled the regions near the punctures are.
Smaller values => higher resolution
| ||
Range | Default: 0.07 | |
0:* | Must be positive
| |
verbose | Scope: private | BOOLEAN |
Description: Whether or not to print information as the relaxation progresses
| ||
Default: no | ||
initial_data | Scope: shared from ADMBASE | KEYWORD |
Extends ranges:
| ||
NRPyEllipticET | Initial data from NRPyEllipticET solution
| |
initial_dtlapse | Scope: shared from ADMBASE | KEYWORD |
Extends ranges:
| ||
NRPyEllipticET | Initial dtlapse from NRPyEllipticET solution
| |
initial_dtshift | Scope: shared from ADMBASE | KEYWORD |
Extends ranges:
| ||
NRPyEllipticET | Initial dtshift from NRPyEllipticET solution
| |
initial_lapse | Scope: shared from ADMBASE | KEYWORD |
Extends ranges:
| ||
see [1] below | Based on the initial conformal factor
| |
see [1] below | Averaged lapse for two puncture black holes
| |
[1]
NRPyEllipticET-psi\^n
[1]
NRPyEllipticET-averaged
initial_shift | Scope: shared from ADMBASE | KEYWORD |
Extends ranges:
| ||
NRPyEllipticET | Initial shift from NRPyEllipticET solution
| |
lapse_timelevels | Scope: shared from ADMBASE | INT |
metric_timelevels | Scope: shared from ADMBASE | INT |
shift_timelevels | Scope: shared from ADMBASE | INT |
Implements:
nrpyellipticet
Inherits:
admbase
grid
Group Names | Variable Names | Details | |
nrpyellipticet_relaxation_vars | compact | 0 | |
uuGF | description | These are the variables NRPyEllipticET solves for. E.g. | |
description | for conformally flat BBH | ||
uuGF | description | uuGF is the nonsingular part of the conformal factor. | |
dimensions | 3 | ||
distribution | DEFAULT | ||
group type | GF | ||
tags | prolongation=”none” | ||
timelevels | 1 | ||
variable type | REAL | ||
This section lists all the variables which are assigned storage by thorn EinsteinInitialData/NRPyEllipticET. 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: | |
ADMBase::metric[metric_timelevels] ADMBase::curv[metric_timelevels] ADMBase::lapse[lapse_timelevels] ADMBase::shift[shift_timelevels] | |
NRPyEllipticET::NRPyEllipticET_relaxation_vars | |
ADMBase_InitialData
nrpyellipticet
set up metric fields for binary black hole initial data
Language: | c | |
Reads: | grid::x(everywhere) | |
grid::y(everywhere) | ||
grid::z(everywhere) | ||
Type: | function | |
Writes: | admbase::alp(everywhere) | |
admbase::betax(everywhere) | ||
admbase::betay(everywhere) | ||
admbase::betaz(everywhere) | ||
admbase::kxx(everywhere) | ||
admbase::kxy(everywhere) | ||
admbase::kxz(everywhere) | ||
admbase::kyy(everywhere) | ||
admbase::kyz(everywhere) | ||
admbase::kzz(everywhere) | ||
admbase::gxx(everywhere) | ||
admbase::gxy(everywhere) | ||
admbase::gxz(everywhere) | ||
admbase::gyy(everywhere) | ||
admbase::gyz(everywhere) | ||
admbase::gzz(everywhere) | ||
ADMBase_InitialData
nrpyellipticet_cleanup
deallocate memory for arrays used when computing initial data
After: | nrpyellipticet | |
Language: | c | |
Options: | global-late | |
Type: | function | |