NRPyEllipticET

Leo R. Werneck <wernecklr@gmail.com>,
Thiago Assumpção <assumpcaothiago@gmail.com>,
Zach Etienne <zachetie@gmail.com>,
Terrence Pierre Jacques <tp0052@mix.wvu.edu>

August, 2022

Abstract

This thorn generates numerical relativity initial data by solving the constraints of general relativity using the hyperbolic relaxation method.

1 Introduction

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].

2 Initial data types

2.1 Conformally flat binary black hole initial data

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\).

References

[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).

3 Parameters




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 = psi{ˆ n}



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 ADMBASEINT






metric_timelevels
Scope: shared from ADMBASEINT






shift_timelevels
Scope: shared from ADMBASEINT



4 Interfaces

General

Implements:

nrpyellipticet

Inherits:

admbase

grid

Grid Variables

4.0.1 PRIVATE GROUPS





  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




5 Schedule

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.

Storage

 

Always:  
ADMBase::metric[metric_timelevels] ADMBase::curv[metric_timelevels] ADMBase::lapse[lapse_timelevels] ADMBase::shift[shift_timelevels]  
NRPyEllipticET::NRPyEllipticET_relaxation_vars  
   

Scheduled Functions

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