AHFinder

Miguel Alcubierre/Latex version by Peter Diener

\( \)Date\( \)

Abstract

Finding Apparent Horizons in a numerical spacetime

1 Purpose

Thorn AHFinder finds Apparent Horizons (AHs) in numerical spacetimes. It calulates various quantities like horizon area and its corresponding mass.

2 Using AHFinder

Thorn AHFinder can be used either with a minimization or a flow algorithm.

2.1 Parameters

General parameters

Parameters used in evolutions

Parameters specifying the expansion of the surface in sperical harmonics.

Looking for three horizons

The finder can also be used to look for three horizons each time. This is done by just running the algorithm three consecutive times with different initial guesses, and is useful for simulations of black hole collisions.

Further parameters for the initial guess

The initial guess can be furthermore controlled by some parameters which are set to ”no” by default.

Parameters for surface intergrals

Parameters indicating symmetries

Parameters for minimization algorithm

Parameters for the flow algorithm

The character of the different flows and the \(\alpha \) and \(\beta \) parameters are described in Carsten Gundlach’s paper on his pseudo-spectral apparent horizon finder (gr-qc/9707050).

Parameters for output

Parameters for mask

2.2 Minimal parameter settings

Usually only a few of the parameters described above are needed in the parameter file. The simplest parameter settings for using the flow algorithm for a full 3D horizon with a large sphere as initial guess is

interpolation_order = 2     # Second order interpolation
ahf_active          = "yes"
ahf_flow            = "yes"
ahf_phi             = "yes"

This looks for a non-axisymmetric horizon around the origin with lmax = 8 and using the flow algorithm. It starts with the largest sphere that fits in the 3D grid and outputs 2D grid functions. The other parameters can be used if needed.

2.3 Hints for parameter settings

In full 3D the flow algorithm is faster than the minimization algorithm. However, in cases when there are very few terms in the expansion in spherical harmonics the minimization can be faster. In axisymmetry this typically happens for lmax\(\leq 10\).

While the default settings usually work fine, they can be changed to meet special purposes:

2.4 Output to Files

The output of the thorn consists of two gridfunctions and several one dimensional output files.

2.5 Some results with the finder

The finder has been examined with puncture initial data for single and binary-black hole scenarios.

Calculations with different grid spacings but constant grid size show convergence of the horizon area.

This has been checked with different linear momenta in the z direction \(P_{z}=(0M,2M,5M)\) and vanishing spin. Also for \(P_{z}=2M\) and a spin of \(5M\) in the x direction the horizon converges. Figure 1 shows the case with \(P_{z}=2M\) and vanishing spin.


PIC


Figure 1: Convergence of the horizon area for \(P_{z}=2M\)

Further, not only the area converges but also the shape of the horizon. For both the minimization and the flow algorithm the horizon converges to the same shape, as can be seen from the coefficients fo the expansion. The order of convergence for the coefficients is between 1.4 and 1.7.

By using the parameters ahf_xc, ahf_yc, ahf_zc it can also be shown that the finder also locates horizons which are not centered. This works in general as long as the surface can be expanded in spherical harmonics around this point, but the error increases with the off-centering.

The parameter ahf_r0 can be used e.g. when dealing with two black holes. If one searches for separate horizons one can center the finder on one of the locations of the holes and use an initial radius ahf_r0 smaller than the coordinate distance of the holes. With this parameter settings the single horizon can be found faster. But also a setup with an initial sphere of maximum radius should work at least for the flow algorithm. This has been checked with puncture data for two holes with vanishing linear and angular momentum for each hole (equivalent to Brill-Lindquist data) and is shown in Figure 2. Here for a coordinate distance of the holes of 1.6M the separated horizons for the holes are found but no common horizon. For a coordinate distance of 1.5M a common horizon is found and also single ones, which are inner surfaces in this case. This coincides with other work where the critical coordinate distance for a single horizon is between 1.53M and 1.56M (gr-qc/9809004).


PIC


Figure 2: Horizon positions for BL data

The dashed lines show inner trapped surfaces in the left figure and the surface where the algorithm stopped without finding a horizon in the right figure.

Also the Misner case was checked. Here for \(\mu \) = 1.35 a common horizon is found. For \(\mu \) = 1.37 separated horizons are found. From the literature we know that (e.g. gr-qc/9809004) the critical value of \(\mu \) is 1.36. This is confirmed by the horizon finder.

The information of when a horizon was found can be seen in the cactus-logfile. There will be output from the thorn even if no horizon was found.

References

3 Parameters




ahf_1doutput
Scope: private BOOLEAN



Description: 1D output of grid functions?



Default: no






ahf_2doutput
Scope: private BOOLEAN



Description: 2D output of grid functions?



Default: no






ahf_3doutput
Scope: private BOOLEAN



Description: 3D output of grid functions?



Default: no






ahf_areamap
Scope: private BOOLEAN



Description: Find area map?



Default: no






ahf_cartoon
Scope: private BOOLEAN



Description: Cartoon mode?



Default: no






ahf_find3
Scope: private BOOLEAN



Description: Searching for 3 surfaces?



Default: no






ahf_findafter
Scope: private INT



Description: After how many iterations look for horizons



Range Default: (none)
0:
Any positive integer






ahf_findaftertime
Scope: private REAL



Description: After how much time look for horizons



Range Default: 0.0
0.0:
Any positive real number. If non-zero overides ahf_findafter






ahf_findevery
Scope: private INT



Description: How often to look for horizons



Range Default: 1
1:
Set to 1 for searching each iteration






ahf_flow
Scope: private BOOLEAN



Description: Use flow instead of minimization?



Default: no






ahf_flowa
Scope: private REAL



Description: alpha parameter for flow



Range Default: 0.01
:
Anything






ahf_flowb
Scope: private REAL



Description: beta parameter for flow



Range Default: 0.5
:
Anything






ahf_flowc
Scope: private REAL



Description: Weight of C flow



Range Default: 1.0
:
Anything






ahf_flowh
Scope: private REAL



Description: Weight of H flow



Range Default: 0.0
:
Anything






ahf_flowiter
Scope: private INT



Description: Maximum number of iterations for flow



Range Default: 200
0:
Anything






ahf_flown
Scope: private REAL



Description: Weight of N flow



Range Default: 0.0
:
Anything






ahf_flowtol
Scope: private REAL



Description: Tolerance for flow



Range Default: 0.0001
:
Anything






ahf_gaussout
Scope: private BOOLEAN



Description: Output gaussian curvature of horizon?



Default: yes






ahf_guess_absmin
Scope: private BOOLEAN



Description: Use absolute min to start minimization?



Default: no






ahf_guessold
Scope: private BOOLEAN



Description: Use old horizon as initial guess?



Default: no






ahf_guessverbose
Scope: private BOOLEAN



Description: Print info on initial guess?



Default: no






ahf_hdf5output
Scope: private BOOLEAN



Description: HDF5 output of AHFinder data?



Default: no






ahf_inner
Scope: private BOOLEAN



Description: Look for inner horizon?



Default: no






ahf_l0_guess
Scope: private REAL



Description: Manual guess for l=0 component



Range Default: 1.0
:
Anything






ahf_l10_guess
Scope: private REAL



Description: Manual guess for l=10 component



Range Default: 0.0
:
Anything






ahf_l12_guess
Scope: private REAL



Description: Manual guess for l=12 component



Range Default: 0.0
:
Anything






ahf_l14_guess
Scope: private REAL



Description: Manual guess for l=14 component



Range Default: 0.0
:
Anything






ahf_l16_guess
Scope: private REAL



Description: Manual guess for l=16 component



Range Default: 0.0
:
Anything






ahf_l18_guess
Scope: private REAL



Description: Manual guess for l=18 component



Range Default: 0.0
:
Anything






ahf_l2_guess
Scope: private REAL



Description: Manual guess for l=2 component



Range Default: 0.0
:
Anything






ahf_l4_guess
Scope: private REAL



Description: Manual guess for l=4 component



Range Default: 0.0
:
Anything






ahf_l6_guess
Scope: private REAL



Description: Manual guess for l=6 component



Range Default: 0.0
:
Anything






ahf_l8_guess
Scope: private REAL



Description: Manual guess for l=8 component



Range Default: 0.0
:
Anything






ahf_lmax
Scope: private INT



Description: Maximum number of terms in theta expansion



Range Default: 8
0:19
Range from 0 to 19






ahf_logfile
Scope: private BOOLEAN



Description: Write log file?



Default: no






ahf_manual_guess
Scope: private BOOLEAN



Description: Use specified coefficients for guess?



Default: no






ahf_mask
Scope: private KEYWORD



Description: Use mask?



Range Default: off
off
Mask is off
strong
Mask set only for definite horizons
weak
Mask set for both definite and probable horizons






ahf_mask_0
Scope: private BOOLEAN



Description: Mask for first horizon with find3?



Default: yes






ahf_mask_1
Scope: private BOOLEAN



Description: Mask for second horizon with find3?



Default: yes






ahf_mask_2
Scope: private BOOLEAN



Description: Mask for third horizon with find3?



Default: yes






ahf_mask_time
Scope: private REAL



Description: Time after which to start setting the mask



Range Default: -1.0
:
Anything goes. Negative number means setting the mask as soon as possible






ahf_maskbuffer
Scope: private INT



Description: Number of grid points in mask buffer zone



Range Default: 5
0:*
Positive please






ahf_maskshrink
Scope: private REAL



Description: Shrink factor for mask



Range Default: 0.8
0.0:1.0
Must be positive and not larger than 1






ahf_masktype
Scope: private KEYWORD



Description: Type of mask



Range Default: cube
lego
Mask is a lego sphere
cube
Mask is a cube
poly
Mask is a polyhedra






ahf_maxchange
Scope: private REAL



Description: Maximum relative difference between 1 big and 2 small steps



Range Default: 0.1
:
Anything






ahf_maxiter
Scope: private INT



Description: Maximum number of iterations of POWELL



Range Default: 10
:
Any sensible integer value






ahf_minarea
Scope: private BOOLEAN



Description: Minimize area instead of expansion?



Default: no






ahf_minchange
Scope: private REAL



Description: Minimum relative difference between 1 big and 2 small steps



Range Default: 0.01
:
Anything






ahf_nn0
Scope: private INT



Description: Number of subdivisions of c0(0) for initial guess



Range Default: 10
:
Some positive integer






ahf_nn2
Scope: private INT



Description: Number of subdivisions of c0(2) for initial guess



Range Default: 10
:
Some positive integer






ahf_nphi
Scope: private INT



Description: Number of subdivisions in phi



Range Default: 100
1:
Any sensible integer






ahf_ntheta
Scope: private INT



Description: Number of subdivisions in theta



Range Default: 100
1:
Any sensible integer






ahf_octant
Scope: private KEYWORD



Description: Octant symmetry?



Range Default: no
no
No octant symmetry
yes
Octant symmetry: reflection symmetry on all three coordinate planes
high
Octant symmetry + symmetry of rotation of pi/2 around z axis






ahf_offset
Scope: private BOOLEAN



Description: Center offset from origin?



Default: no






ahf_phi
Scope: private BOOLEAN



Description: Expand also in phi? (seach for non-axisymmetric surface)



Default: no






ahf_r0
Scope: private REAL



Description: Radius of initial sphere (0 forces largest sphere)



Range Default: 0.0
:
Anything






ahf_r0_0
Scope: private REAL



Description: Radius of first initial sphere for find3 (0 forces largest sphere)



Range Default: 0.0
:
Anything






ahf_r0_1
Scope: private REAL



Description: Radius of second initial sphere for find3 (0 forces largest sphere)



Range Default: 0.0
:
Anything






ahf_r0_2
Scope: private REAL



Description: Radius of third initial sphere for find3 (0 forces largest sphere)



Range Default: 0.0
:
Anything






ahf_refx
Scope: private BOOLEAN



Description: Reflection symmetry x->-x?



Default: no






ahf_refy
Scope: private BOOLEAN



Description: Reflection symmetry y->-y?



Default: no






ahf_refz
Scope: private BOOLEAN



Description: Reflection symmetry z->-z?



Default: no






ahf_reportalways
Scope: private BOOLEAN



Description: Report for all surfaces found (yes) or just for apparent horizons (no)



Default: no






ahf_shiftcoeff
Scope: private REAL



Description: Coefficient for shift



Range Default: 0.0
:
Anything goes






ahf_sloppyguess
Scope: private BOOLEAN



Description: Use sphere as initial guess?



Default: no






ahf_tol
Scope: private REAL



Description: Tolerance for minimization routines



Range Default: 0.1
0:
A sensible positive number






ahf_trapped_surface
Scope: private BOOLEAN



Description: Minimize (expansion + delta) to find trapped surface?



Default: no






ahf_verbose
Scope: private BOOLEAN



Description: Print messages to screen?



Default: yes






ahf_veryverbose
Scope: private BOOLEAN



Description: Print messages at each iteration step to screen?



Default: no






ahf_wander
Scope: private BOOLEAN



Description: Allow the center to wander?



Default: no






ahf_xc
Scope: private REAL



Description: x-coordinate of center of expansion



Range Default: 0.0
:
Anything






ahf_xc_0
Scope: private REAL



Description: x-coordinate of center of expansion for first surface with find3



Range Default: 0.0
:
Anything






ahf_xc_1
Scope: private REAL



Description: x-coordinate of center of expansion for second surface with find3



Range Default: 0.0
:
Anything






ahf_xc_2
Scope: private REAL



Description: x-coordinate of center of expansion for third surface with find3



Range Default: 0.0
:
Anything






ahf_yc
Scope: private REAL



Description: y-coordinate of center of expansion



Range Default: 0.0
:
Anything






ahf_yc_0
Scope: private REAL



Description: y-coordinate of center of expansion for first surface with find3



Range Default: 0.0
:
Anything






ahf_yc_1
Scope: private REAL



Description: y-coordinate of center of expansion for second surface with find3



Range Default: 0.0
:
Anything






ahf_yc_2
Scope: private REAL



Description: y-coordinate of center of expansion for third surface with find3



Range Default: 0.0
:
Anything






ahf_zc
Scope: private REAL



Description: z-coordinate of center of expansion



Range Default: 0.0
:
Anything






ahf_zc_0
Scope: private REAL



Description: z-coordinate of center of expansion for first surface with find3



Range Default: 0.0
:
Anything






ahf_zc_1
Scope: private REAL



Description: z-coordinate of center of expansion for second surface with find3



Range Default: 0.0
:
Anything






ahf_zc_2
Scope: private REAL



Description: z-coordinate of center of expansion for third surface with find3



Range Default: 0.0
:
Anything






horizon_to_announce_centroid
Scope: private INT



Description: For which horizon should we announce the centroid to driftcorrect



Range Default: (none)
don’t announce the centroid
1:3
announce this horizon’s centroid each time we find it






horizon_to_output_centroid
Scope: private INT



Description: For which horizon should we output the centroid



Range Default: (none)
don’t output any centroids
1:3
output this horizon’s centroid each time we find it






interpolation_operator
Scope: private STRING



Description: Name of interpolation operator to use



Range Default: uniform cartesian
.+
A valid name for a registered interpolation operator






interpolation_order
Scope: private INT



Description: Order for interpolation



Range Default: 2
1:4
Choose between first and fourth order interpolation






trapped_surface_delta
Scope: private REAL



Description: find (expansion = delta) surface



Range Default: 0.0
:
Just a real number






ahf_active
Scope: restricted BOOLEAN



Description: Activate AHFinder?



Default: no






ahf_persists
Scope: restricted BOOLEAN



Description: Do the finder grid functions stay around?



Default: no






use_mask
Scope: shared from SPACEMASKBOOLEAN



4 Interfaces

General

Implements:

ahfinder

Inherits:

admbase

staticconformal

spacemask

grid

io

admmacros

Grid Variables

4.0.1 PRIVATE GROUPS





  Group Names     Variable Names   Details    




triggergroup compact 0
triggervar description For triggering output
dimensions 0
distribution CONSTANT
group type SCALAR
timelevels 1
variable type INT




ahfgradient compact 0
ahfgradx description Grid functions for gradients
ahfgrady dimensions 3
ahfgradz distribution DEFAULT
ahfgradn group type GF
timelevels 1
variable type REAL




ahfinder_gauss compact 0
ahfgauss description Grid function for gaussian curvature calculation
dimensions 3
distribution DEFAULT
group type GF
timelevels 1
variable type REAL




find3grid compact 0
ahfgrid3 description Grid functions to use in find3 algorithm
ahf_exp3 dimensions 3
distribution DEFAULT
group type GF
timelevels 1
variable type REAL




ahf_centroid compact 0
ahf_centroid_x description Centroid of one of the horizons
ahf_centroid_y dimensions 0
ahf_centroid_z distribution CONSTANT
group type SCALAR
timelevels 1
variable type REAL




drift_check compact 0
drift_first description For checking if its the first drift correction
dimensions 0
distribution CONSTANT
group type SCALAR
timelevels 1
variable type INT








  Group Names     Variable Names   Details    




out_scalars compact 0
out_mass description Output of scalar variables
out_radius dimensions 0
out_area distribution CONSTANT
out_perimeter group type SCALAR
out_meridian1 timelevels 1
out_meridian2 variable type REAL




out_1d_legen compact 0
out_c0 description Output of c0 coefficients
dimensions 1
distribution CONSTANT
group type ARRAY
size AHF_LMAX
timelevels 1
variable type REAL




out_2d_legen compact 0
out_cc description Output of cc and cs coefficients
out_cs dimensions 2
distribution CONSTANT
group type ARRAY
size AHF_LMAX
  size AHF_LMAX
timelevels 1
variable type REAL




ahfinder_gaussian compact 0
gaussian description Gaussian Curvature
dimensions 2
distribution CONSTANT
group type ARRAY
size AHF_NTHETA+1
  size AHF_NPHI+1
timelevels 1
variable type REAL




4.0.2 PUBLIC GROUPS





  Group Names     Variable Names   Details    




ahfindergrid compact 0
ahfgrid description Horizon function
dimensions 3
distribution DEFAULT
group type GF
timelevels 1
variable type REAL




ahfinderexp compact 0
ahf_exp description Expansion
dimensions 3
distribution DEFAULT
group type GF
timelevels 1
variable type REAL




ahfmask compact 0
ahmask description Grid function for masking
dimensions 3
distribution DEFAULT
group type GF
timelevels 1
variable type REAL




hole1_bounds compact 0
dhole1_xmin description Bounds of excision box for hole 1
dhole1_ymin dimensions 0
dhole1_zmin distribution CONSTANT
dhole1_xmax group type SCALAR
dhole1_ymax timelevels 1
dhole1_zmax variable type REAL




hole2_bounds compact 0
dhole2_xmin description Bounds of excision box for hole 2
dhole2_ymin dimensions 0
dhole2_zmin distribution CONSTANT
dhole2_xmax group type SCALAR
dhole2_ymax timelevels 1
dhole2_zmax variable type REAL




hole3_bounds compact 0
dhole3_xmin description Bounds of excision box for hole 3
dhole3_ymin dimensions 0
dhole3_zmin distribution CONSTANT
dhole3_xmax group type SCALAR
dhole3_ymax timelevels 1
dhole3_zmax variable type REAL




5 Schedule

This section lists all the variables which are assigned storage by thorn EinsteinAnalysis/AHFinder. 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

 

  Conditional:
  hole1_bounds hole2_bounds hole3_bounds ahf_centroid
  out_scalars
  ahfinder_gaussian
  out_1d_legen out_2d_legen
  ahfindergrid ahfinderexp ahfgradient ahfinder_gauss find3grid
  ahfmask
  ahfmask
  hole1_bounds hole2_bounds hole3_bounds
   

Scheduled Functions

CCTK_WRAGH

  ahfinder_setsym

  set symmetries for ahfinder grid functions

 

  Language: fortran
  Options: global
  Type: function

CCTK_STARTUP

  ahfinder_startup

  register ahfinder as an io method

 

  Language: c
  Options: global
  Type: function

CCTK_PARAMCHECK

  ahfinder_paramcheck

  check for physical or conformal metric

 

  Language: fortran
  Options: global
  Type: function

CCTK_INITIAL

  ahfinder_initoutput

  create output files, write headers

 

  Language: fortran
  Type: function

CCTK_ANALYSIS (conditional)

  ahfinder

  call apparent horizon finder with persisting grid functions

 

  Before: driftcorrect
  Language: fortran
  Storage: triggergroup
  Triggers: triggergroup
  Type: function

CCTK_ANALYSIS (conditional)

  ahfinder

  call apparent horizon finder

 

  Before: driftcorrect
  Language: fortran
  Storage: ahfindergrid
    ahfinderexp
    ahfgradient
    ahfinder_gauss
    find3grid
    ahfmask
    triggergroup
  Triggers: triggergroup
  Type: function

CCTK_ANALYSIS (conditional)

  ahfinder

  call apparent horizon finder with persisting mask

 

  Before: driftcorrect
  Language: fortran
  Storage: ahfindergrid
    ahfinderexp
    ahfgradient
    ahfinder_gauss
    find3grid
    triggergroup
  Triggers: triggergroup
  Type: function