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.
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.
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\).
The Dissipation thorn’s dissipation rate is controlled by a small number of parameters:
order is the order \(p\) of the dissipation, implying the use of the \((p+1)\)-st spatial derivatives;
epsdiss is the overall dissipation strength \(\epsilon \).
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”.
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.
[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)
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 |
Implements:
dissipation
Inherits:
grid
sphericalsurface
spacemask
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 | ||
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.
Always: | |
epsdisA_group | |
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 | |