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 SPACEMASK BOOLEAN



4 Interfaces

General

Implements:

dissipation

Inherits:

grid

sphericalsurface

spacemask

Grid Variables

4.0.1 PRIVATE GROUPS




  Group Names    Variable Names    Details   




epsdisa_group   compact0
epsdisA   descriptiondissipation array for spatially different dissipation
  dimensions3
  distributionDEFAULT
  group typeGF
  tagsCheckpoint=”no” Prolongation=”none”
  timelevels1
 variable typeREAL




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