Z4c Thorn for use with CarpetX

Erik Schnetter <eschnetter@perimeterinstitute.ca >

April 26, 2024

Abstract

This Thorn implements the Z4c formulation of the Einstein Equations [?]. It also monitors the stability of those equations [?].

1 Using This Thorn

The SpacetimeX/Z4c thorn reads (i.e. in Z4c_Initial1) and, if the parameter Z4c::calc_ADM_vars is set (which is true by default), writes (i.e. in Z4c_ADM) the ADM variables (i.e. CarpetX/ADMBaseX) automatically.

Derivatives are hard-coded to fourth order. However, should it be desired, second order is also possible by editing the constant deriv_order in derivs.hxx to the value 2.

This thorn integrates with the CarpetX/ODESolvers thorn.

References

@articleHilditch:2012fp, author = ”Hilditch, David and Bernuzzi, Sebastiano and Thierfelder, Marcus and Cao, Zhoujian and Tichy, Wolfgang and Bruegmann, Bernd”, title = ”Compact binary evolutions with the Z4c formulation”, journal = ”Phys. Rev.”, volume = ”D88”, year = ”2013”, pages = ”084057”, doi = ”10.1103/PhysRevD.88.084057”, eprint = ”1212.2901”, archivePrefix = ”arXiv”, primaryClass = ”gr-qc”, SLACcitation = ” @articlecao2012numerical, title=Numerical stability of the Z4c formulation of general relativity, author=Cao, Zhoujian and Hilditch, David, journal=Physical Review D, volume=85, number=12, pages=124032, year=2012, publisher=APS

2 Parameters




alphag_floor
Scope: private REAL



Description: Floor for alphaG



Range Default: 1.0e-10
(0:*






boundary_conditions
Scope: private KEYWORD



Description: boundary conditions



Range Default: CarpetX
NewRadX
radiative boundary conditions using NewRadX
CarpetX
use CarpetX default boundary conditions






calc_adm_vars
Scope: private BOOLEAN



Description: Calculate ADM variables



Default: yes






calc_admrhs_vars
Scope: private BOOLEAN



Description: Calculate RHS of ADM variables



Default: yes






calc_constraints
Scope: private BOOLEAN



Description: Calculate constraints



Default: yes






chi_floor
Scope: private REAL



Description: Floor for chi



Range Default: 1.0e-10
(0:*






epsdiss
Scope: private REAL



Description: Dissipation coefficient <arXiv:gr-qc/0610128>



Range Default: 0.32
0.0:*






eta
Scope: private REAL



Description: eta



Range Default: 2.0
*:*






f_mu_l
Scope: private REAL



Description: mu_L = f_mu_L / alpha



Range Default: 2.0
*:*






f_mu_s
Scope: private REAL



Description: mu_S = f_mu_S / alphaˆ2



Range Default: 1.0
*:*






kappa1
Scope: private REAL



Description: kappa1



Range Default: 0.02
*:*






kappa2
Scope: private REAL



Description: kappa2



Range Default: 0.0
*:*






n_alphag
Scope: private INT



Description: n power of outgoing boundary rˆn  fall off rate for alpha



Range Default: 1
0:2
1 is my guess






n_at
Scope: private INT



Description: n power of outgoing boundary rˆn  fall off rate for At_ij



Range Default: 1
0:2
Maybe 1?






n_betag
Scope: private INT



Description: n power of outgoing boundary rˆn  fall off rate for beta



Range Default: 1
0:2
1 is my guess






n_chi
Scope: private INT



Description: n power of outgoing boundary rˆn  fall off rate for chi



Range Default: 1
0:2
1 is reasonable






n_gammat
Scope: private INT



Description: n power of outgoing boundary rˆn  fall off rate for gammat_ij



Range Default: 1
0:2
1 is reasonable






n_gamt
Scope: private INT



Description: n power of outgoing boundary rˆn  fall off rate for Gamtî



Range Default: 1
0:2
Maybe 1?






n_kh
Scope: private INT



Description: n power of outgoing boundary rˆn  fall off rate for Kh



Range Default: 1
0:2
Maybe 1?






n_theta
Scope: private INT



Description: n power of outgoing boundary rˆn  fall off rate for Theta



Range Default: 1
0:2
Maybe 1?






set_theta_zero
Scope: private BOOLEAN



Description: set Theta to zero, which converts Z4c to BSSN



Default: no



3 Interfaces

General

Implements:

z4c

Inherits:

admbasex

tmunubasex

Grid Variables

3.0.1 PRIVATE GROUPS





  Group Names     Variable Names   Details    




chi chi compact 0
description chi
dimensions 3
distribution DEFAULT
group type GF
tags rhs=”chi_rhs” dependents=”ADMBaseX::metric”
timelevels 1
variable type REAL




gamma_tilde compact 0
gammatxx description gamma-tilde
gammatxy dimensions 3
gammatxz distribution DEFAULT
gammatyy group type GF
gammatyz tags parities={+1 +1 +1 -1 -1 +1 -1 +1 -1 +1 +1 +1 +1 -1 -1 +1 +1 +1} rhs=”gamma_tilde_rhs” dependents=”ADMBaseX::metric”
gammatzz timelevels 1
variable type REAL




k_hat compact 0
Kh description K-hat
dimensions 3
distribution DEFAULT
group type GF
tags rhs=”K_hat_rhs” dependents=”ADMBaseX::curv”
timelevels 1
variable type REAL




a_tilde compact 0
Atxx description A-tilde
Atxy dimensions 3
Atxz distribution DEFAULT
Atyy group type GF
Atyz tags parities={+1 +1 +1 -1 -1 +1 -1 +1 -1 +1 +1 +1 +1 -1 -1 +1 +1 +1} rhs=”A_tilde_rhs” dependents=”ADMBaseX::curv”
Atzz timelevels 1
variable type REAL




gam_tilde compact 0
Gamtx description Gamma-tilde
Gamty dimensions 3
Gamtz distribution DEFAULT
group type GF
tags parities={-1 +1 +1 +1 -1 +1 +1 +1 -1} rhs=”Gam_tilde_rhs”
timelevels 1
variable type REAL




theta Theta compact 0
description Theta
dimensions 3
distribution DEFAULT
group type GF
tags rhs=”Theta_rhs” dependents=”ADMBaseX::curv”
timelevels 1
variable type REAL








  Group Names     Variable Names   Details    




alphag alphaG compact 0
description alpha
dimensions 3
distribution DEFAULT
group type GF
tags rhs=”alphaG_rhs” dependents=”ADMBaseX::lapse ADMBaseX::dtlapse”
timelevels 1
variable type REAL




betag compact 0
betaGx description beta
betaGy dimensions 3
betaGz distribution DEFAULT
group type GF
tags parities={-1 +1 +1 +1 -1 +1 +1 +1 -1} rhs=”betaG_rhs” dependents=”ADMBaseX::shift ADMBaseX::dtshift”
timelevels 1
variable type REAL




ztc compact 0
ZtCx description Z-tilde
ZtCy dimensions 3
ZtCz distribution DEFAULT
group type GF
tags parities={-1 +1 +1 +1 -1 +1 +1 +1 -1} checkpoint=”no”
timelevels 1
variable type REAL




hc HC compact 0
description H
dimensions 3
distribution DEFAULT
group type GF
tags checkpoint=”no”
timelevels 1
variable type REAL




mtc compact 0
MtCx description M-tilde
MtCy dimensions 3
MtCz distribution DEFAULT
group type GF
tags parities={-1 +1 +1 +1 -1 +1 +1 +1 -1} checkpoint=”no”
timelevels 1
variable type REAL




allc allC compact 0
description constraint monitor
dimensions 3
distribution DEFAULT
group type GF
tags checkpoint=”no”
timelevels 1
variable type REAL








  Group Names     Variable Names   Details    




chi_rhs chi_rhs compact 0
description chi
dimensions 3
distribution DEFAULT
group type GF
tags checkpoint=”no”
timelevels 1
variable type REAL




gamma_tilde_rhs compact 0
gammatxx_rhs description gamma-tilde
gammatxy_rhs dimensions 3
gammatxz_rhs distribution DEFAULT
gammatyy_rhs group type GF
gammatyz_rhs tags parities={+1 +1 +1 -1 -1 +1 -1 +1 -1 +1 +1 +1 +1 -1 -1 +1 +1 +1} checkpoint=”no”
gammatzz_rhs timelevels 1
variable type REAL




k_hat_rhs compact 0
Kh_rhs description K-hat
dimensions 3
distribution DEFAULT
group type GF
tags checkpoint=”no”
timelevels 1
variable type REAL




a_tilde_rhs compact 0
Atxx_rhs description A-tilde
Atxy_rhs dimensions 3
Atxz_rhs distribution DEFAULT
Atyy_rhs group type GF
Atyz_rhs tags parities={+1 +1 +1 -1 -1 +1 -1 +1 -1 +1 +1 +1 +1 -1 -1 +1 +1 +1} checkpoint=”no”
Atzz_rhs timelevels 1
variable type REAL




gam_tilde_rhs compact 0
Gamtx_rhs description Gamma-tilde
Gamty_rhs dimensions 3
Gamtz_rhs distribution DEFAULT
group type GF
tags parities={-1 +1 +1 +1 -1 +1 +1 +1 -1} checkpoint=”no”
timelevels 1
variable type REAL




theta_rhs Theta_rhs compact 0
description Theta
dimensions 3
distribution DEFAULT
group type GF
tags checkpoint=”no”
timelevels 1
variable type REAL








  Group Names     Variable Names   Details    




alphag_rhs alphaG_rhs compact 0
description alpha
dimensions 3
distribution DEFAULT
group type GF
tags checkpoint=”no”
timelevels 1
variable type REAL




betag_rhs compact 0
betaGx_rhs description beta
betaGy_rhs dimensions 3
betaGz_rhs distribution DEFAULT
group type GF
tags parities={-1 +1 +1 +1 -1 +1 +1 +1 -1} checkpoint=”no”
timelevels 1
variable type REAL




Uses header:

defs.hxx

div.hxx

dual.hxx

loop_device.hxx

mat.hxx

simd.hxx

sum.hxx

vec.hxx

vect.hxx

newradx.hxx

4 Schedule

This section lists all the variables which are assigned storage by thorn SpacetimeX/Z4c. 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:  
chi  
gamma_tilde  
MtC  
allC  
chi_rhs  
gamma_tilde_rhs  
K_hat_rhs  
A_tilde_rhs  
Gam_tilde_rhs  
Theta_rhs  
alphaG_rhs  
betaG_rhs  
K_hat  
A_tilde  
Gam_tilde  
Theta  
alphaG  
betaG  
ZtC  
HC  
   

Scheduled Functions

CCTK_INITIAL

  z4c_initialgroup

  convert adm to z4c variables

 

  After: admbasex_postinitial
  Type: group

CCTK_INITIAL (conditional)

  z4c_poststepgroup

  post-process z4c variables

 

  After: z4c_initialgroup
  Before: admbasex_setadmvars
  Type: group

Z4c_InitialGroup

  z4c_initial1

  convert adm to z4c variables, part 1

 

  Language: c
  Reads: admbasex::metric(interior)
    admbasex::curv(interior)
    admbasex::lapse(interior)
    admbasex::shift(interior)
  Sync: gamma_tilde
  Type: function
  Writes: chi(interior)
    gamma_tilde(interior)
    k_hat(interior)
    a_tilde(interior)
    theta(interior)
    alphag(interior)
    betag(interior)

Z4c_InitialGroup

  z4c_initial2

  convert adm to z4c variables, part 2

 

  After: z4c_initial1
  Language: c
  Reads: gamma_tilde(everywhere)
  Type: function
  Writes: gam_tilde(interior)

Z4c_PostStepGroup

  z4c_enforce

  enforce algebraic z4c constraints

 

  Language: c
  Reads: chi(interior)
    gamma_tilde(interior)
    a_tilde(interior)
    alphag(interior)
  Sync: chi
    gamma_tilde
    k_hat
    a_tilde
    gam_tilde
    theta
    alphag
    betag
  Type: function
  Writes: chi(interior)
    gamma_tilde(interior)
    a_tilde(interior)
    alphag(interior)

Z4c_PostStepGroup (conditional)

  z4c_adm

  convert z4c to adm variables

 

  After: z4c_enforce
  Language: c
  Reads: chi(everywhere)
    gamma_tilde(everywhere)
    k_hat(everywhere)
    a_tilde(everywhere)
    gam_tilde(everywhere)
    theta(everywhere)
    alphag(everywhere)
    betag(everywhere)
  Type: function
  Writes: admbasex::metric(everywhere)
    admbasex::curv(everywhere)
    admbasex::lapse(everywhere)
    admbasex::dtlapse(everywhere)
    admbasex::shift(everywhere)
    admbasex::dtshift(everywhere)

Z4c_PostStepGroup2 (conditional)

  z4c_adm2

  calculate second time derivatives of adm variables

 

  Language: c
  Reads: chi(everywhere)
    gamma_tilde(everywhere)
    k_hat(everywhere)
    a_tilde(everywhere)
    gam_tilde(everywhere)
    theta(everywhere)
    alphag(everywhere)
    betag(everywhere)
    tmunubasex::ettt(interior)
    tmunubasex::etti(interior)
    tmunubasex::etij(interior)
  Sync: admbasex::dtcurv
    admbasex::dt2lapse
    admbasex::dt2shift
  Type: function
  Writes: admbasex::dtcurv(interior)
    admbasex::dt2lapse(interior)
    admbasex::dt2shift(interior)

Z4c_AnalysisGroup (conditional)

  z4c_constraints

  calculate z4c constraints

 

  Language: c
  Reads: chi(everywhere)
    gamma_tilde(everywhere)
    k_hat(everywhere)
    a_tilde(everywhere)
    gam_tilde(everywhere)
    theta(everywhere)
    alphag(everywhere)
    betag(everywhere)
    tmunubasex::ettt(interior)
    tmunubasex::etti(interior)
    tmunubasex::etij(interior)
  Type: function
  Writes: ztc(interior)
    hc(interior)
    mtc(interior)
    allc(interior)

Z4c_RHSGroup (conditional)

  z4c_rhs

  calculate z4c rhs

 

  Language: c
  Reads: chi(everywhere)
    gamma_tilde(everywhere)
    k_hat(everywhere)
    a_tilde(everywhere)
    gam_tilde(everywhere)
    theta(everywhere)
    alphag(everywhere)
    betag(everywhere)
    tmunubasex::ettt(interior)
    tmunubasex::etti(interior)
    tmunubasex::etij(interior)
  Type: function
  Writes: chi_rhs(interior)
    gamma_tilde_rhs(interior)
    k_hat_rhs(interior)
    a_tilde_rhs(interior)
    gam_tilde_rhs(interior)
    theta_rhs(interior)
    alphag_rhs(interior)
    betag_rhs(interior)

Z4c_RHSGroup (conditional)

  z4c_apply_newradx_boundary_conditions

  apply radiative boundary conditions to z4c rhs variables using newradx

 

  After: z4c_rhs
  Language: c
  Reads: chi(everywhere)
    gamma_tilde(everywhere)
    k_hat(everywhere)
    a_tilde(everywhere)
    gam_tilde(everywhere)
    theta(everywhere)
    alphag(everywhere)
    betag(everywhere)
    chi_rhs(interior)
    gamma_tilde_rhs(interior)
    k_hat_rhs(interior)
    a_tilde_rhs(interior)
    gam_tilde_rhs(interior)
    theta_rhs(interior)
    alphag_rhs(interior)
    betag_rhs(interior)
  Type: function
  Writes: chi_rhs(interior)
    gamma_tilde_rhs(interior)
    k_hat_rhs(interior)
    a_tilde_rhs(interior)
    gam_tilde_rhs(interior)
    theta_rhs(interior)
    alphag_rhs(interior)
    betag_rhs(interior)

CCTK_INITIAL

  z4c_poststepgroup2

  post-process z4c variables, part 2

 

  After: tmunubasex_settmunuvars
    z4c_poststepgroup
  Before: admbasex_setadmrhs
  Type: group

CCTK_POSTREGRID

  z4c_poststepgroup

  post-process z4c variables

 

  Before: admbasex_setadmvars
  Type: group

CCTK_POSTREGRID

  z4c_poststepgroup2

  post-process z4c variables, part 2

 

  After: tmunubasex_settmunuvars
    z4c_poststepgroup
  Before: admbasex_setadmrhs
  Type: group

CCTK_ANALYSIS

  z4c_analysisgroup

  analyse z4c variables

 

  Type: group

ODESolvers_PostStep

  z4c_poststepgroup

  post-process z4c variables

 

  Before: admbasex_setadmvars
  Type: group

ODESolvers_PostStep

  z4c_poststepgroup2

  post-process z4c variables, part 2

 

  After: tmunubasex_settmunuvars
    z4c_poststepgroup
  Before: admbasex_setadmrhs
  Type: group

ODESolvers_RHS

  z4c_rhsgroup

  calculate z4c rhs

 

  Type: group

CCTK_WRAGH

  z4c_test

  self-test

 

  Language: c
  Options: meta
  Type: function