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 ADMBASE INT






metric_timelevels
Scope: shared from ADMBASE INT






shift_timelevels
Scope: shared from ADMBASE INT



4 Interfaces

General

Implements:

nrpyellipticet

Inherits:

admbase

grid

Grid Variables

4.0.1 PRIVATE GROUPS




  Group Names     Variable Names    Details   




nrpyellipticet_relaxation_vars   compact0
uuGF   descriptionThese are the variables NRPyEllipticET solves for. E.g.
    descriptionfor conformally flat BBH
uuGF   descriptionuuGF is the nonsingular part of the conformal factor.
  dimensions3
  distributionDEFAULT
  group typeGF
  tagsprolongation=”none”
  timelevels1
 variable typeREAL




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