Dissipation

Erik Schnetter <schnetter@aei.mpg.de>, Bernard Kelly <bernard.j.kelly@nasa.gov>

\( \)Date\( \)

Abstract

Add \(n\)th-order Kreiss-Oliger dissipation to the right hand side of evolution equations. This thorn is intended for time evolutions that use MoL.

1 Physical System

For a description of Kreiss-Oliger artificial dissipation, see [1].

The additional dissipation terms appear as follows, for a general grid function \(U\). Here, the tensor character of the field is irrelevant: each component of, say, \(\tilde {\gamma }_{ij}\) is treated as an independent field for dissipation purposes.

\begin {eqnarray*} \partial _t U &=& \partial _t U + (-1)^{(p+3)/2} \epsilon \frac {1}{2^{p+1}} \left ( h_x^{p} \frac {\partial ^{(p+1)}}{\partial x^{(p+1)}} + h_y^{p} \frac {\partial ^{(p+1)}}{\partial y^{(p+1)}} + h_z^{p} \frac {\partial ^{(p+1)}}{\partial z^{(p+1)}}\right ) U, \\ &=& \partial _t U + (-1)^{(p+3)/2} \epsilon \frac {h^{p}}{2^{p+1}} \left ( \frac {\partial ^{(p+1)}}{\partial x^{(p+1)}} + \frac {\partial ^{(p+1)}}{\partial y^{(p+1)}} + \frac {\partial ^{(p+1)}}{\partial z^{(p+1)}}\right ) U, \end {eqnarray*}

where \(h_x\), \(h_y\), and \(h_z\) are the local grid spacings in each Cartesian direction, and the second equality holds in the usual situation where the three are equal: \(h_x = h_y = h_z = h\).

2 Implementation in Cactus

The Dissipation thorn’s dissipation rate is controlled by a small number of parameters:

Currently available values of order are \(p \in \{1, 3, 5, 7, 9\}\). To apply dissipation at order \(p\) requires that we have at least \((p+1)/2\) ghostzones — \(\{1, 2, 3, 4, 5\}\), respectively.

The list of fields to be dissipated is specified in the parameter vars. The thorn does not allow for individually tuned dissipation strengths for different fields. However, the dissipation strength \(\epsilon \) can be varied according to refinement level, using the parameter array epsdis_for_level, which overrides epsdiss if set.

The thorn also allows for enhanced dissipation within the apparent horizons, triggered by the boolean parameter extra_dissipation_in_horizons, and near the outer boundary, triggered by the boolean parameter extra_dissipation_at_outerbound. Both of these default to “no”.

2.1 Acknowledgements

I thank Scott Hawley who wrote a very similar thorn HawleyThorns/Dissipation for evolutions that do not use MoL; this thorn here is modelled after his.

References

[1]   H. Kreiss and J. Oliger, Methods for the Approximate Solution of Time Dependent Problems, vol. 10 of Global Atmospheric Research Programme (GARP): GARP Publication Series (GARP Publication, 1973)

3 Parameters




ah_max_epsdis
Scope: restricted REAL



Description: maximal epsdis



Range Default: -1.0
*:*
<0 for ’off’, >=0 for maximal epsdis in horizon






ah_radius_offset
Scope: restricted REAL



Description: Offset to the distance from the AH.



Range Default: 0.0
*:*
negative values shift inwards, positive outwards






ah_slope
Scope: restricted REAL



Description: Slope inside AH



Range Default: 0.2
*:*
Slope from the outside value to the inside value in AHs






epsdis
Scope: restricted REAL



Description: Dissipation strength



Range Default: 0.2
*:*
0 for no dissipation. Unstable for epsdis<0 and epsdis>1/3






epsdis_for_level
Scope: restricted REAL



Description: Alternate epsdis for a specific refinement level



Range Default: -1.0
:
Negative indicates use default






extra_dissipation_at_outerbound
Scope: restricted BOOLEAN



Description: increase dissipation at outer boundary



Default: no






extra_dissipation_in_horizons
Scope: restricted BOOLEAN



Description: extra dissipation in horizons



Default: no






horizon_number
Scope: restricted INT



Description: horizon number for extra dissipation in horizons – AHFinderDirect number



Range Default: -1
-1
do not use a horizon
1:*
horizon number (from AHFinderDirect); starts from 1






ob_slope
Scope: restricted REAL



Description: slope at outer boundary



Range Default: 5
0:*
increase dissipation






order
Scope: restricted INT



Description: Dissipation order



Range Default: 3
1
first order accurate dissipation (using a second derivative)
3
third order accurate dissipation (using a fourth derivative)
5
fifth order accurate dissipation (using a sixth derivative)
7
seventh order accurate dissipation (using an eighth derivative)
9
ninth order accurate dissipation (using a tenth derivative)






outer_bound_npoints
Scope: restricted INT



Description: number of points in which dissipation should be increased



Range Default: 3
0:*
positive number






outer_boundary_max_epsdis
Scope: restricted REAL



Description: maximal epsdis



Range Default: -1.0
*:*
<0 for ’off’, >=0 for maximal epsdis at the outer boundary






respect_emask
Scope: restricted BOOLEAN



Description: respect excision mask



Default: no






surface_number
Scope: restricted INT



Description: horizon number for extra dissipation in horizons – SphericalSurface number



Range Default: -1
-1
do not use a spherical surface
0:*
surface number (from SphericalSurface); starts from 0






update_ah_every
Scope: restricted INT



Description: how often to update the AH information for dissipation



Range Default: 1
0:*
positive iteration number






use_dissipation_near_excision
Scope: restricted BOOLEAN



Description: Apply excision near the excision boundary (does not work for high orders)



Default: yes






vars
Scope: restricted STRING



Description: List of evolved grid functions that should have dissipation added



Range Default: (none)
.*
must be a valid list of grid functions






verbose
Scope: restricted BOOLEAN



Description: produce log output



Default: no






use_mask
Scope: shared from SPACEMASKBOOLEAN



4 Interfaces

General

Implements:

dissipation

Inherits:

grid

sphericalsurface

spacemask

Grid Variables

4.0.1 PRIVATE GROUPS





  Group Names     Variable Names   Details    




epsdisa_group compact 0
epsdisA description dissipation array for spatially different dissipation
dimensions 3
distribution DEFAULT
group type GF
tags Checkpoint=”no” Prolongation=”none”
timelevels 1
variable type REAL




5 Schedule

This section lists all the variables which are assigned storage by thorn CactusNumerical/Dissipation. 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:  
epsdisA_group  
   

Scheduled Functions

CCTK_PARAMCHECK

  dissipation_paramcheck

  check dissipation parameters for consistency

 

  Language: c
  Type: function

CCTK_BASEGRID

  dissipation_basegrid

  ensure that there are enough ghost zones

 

  Language: c
  Type: function
  Writes: dissipation::epsdisa(everywhere)

CCTK_POSTSTEP

  setup_epsdis

  setup spatially varying dissipation

 

  After: sphericalsurface_hasbeenset
  Language: c
  Reads: grid::x
    grid::y
    grid::z
    spacemask::emask
    sphericalsurface::sf_info
    sphericalsurface::sf_origin
    sphericalsurface::sf_valid
  Sync: epsdisa_group
  Type: function
  Writes: dissipation::epsdisa(everywhere)

CCTK_POSTREGRIDINITIAL

  setup_epsdis

  setup spatially varying dissipation

 

  Language: c
  Reads: grid::x
    grid::y
    grid::z
    spacemask::emask
    sphericalsurface::sf_info
    sphericalsurface::sf_origin
    sphericalsurface::sf_valid
  Sync: epsdisa_group
  Type: function
  Writes: dissipation::epsdisa(everywhere)

CCTK_POSTREGRID

  setup_epsdis

  setup spatially varying dissipation

 

  Language: c
  Reads: grid::x
    grid::y
    grid::z
    spacemask::emask
    sphericalsurface::sf_info
    sphericalsurface::sf_origin
    sphericalsurface::sf_valid
  Sync: epsdisa_group
  Type: function
  Writes: dissipation::epsdisa(everywhere)

MoL_PostRHS

  dissipation_add

  add kreiss-oliger dissipation to the right hand sides

 

  Language: c
  Reads: epsdisa_group
  Type: function