The Interpolate2 thorn provides interpatch interpolation.
The interpolator works in several steps.
In the first step, during startup, it decides which points need to be set via interpolation. This is usually a layer N grid points deep at the boundaries of the patches, excluding ghost zones, and also excluding the outer boundaries.
After each regridding, the Coordinates thorn iterates over these grid points, converts their locations to global coordinates, and finds out which patch “owns” each location. It then assumes that this location is sufficiently far in the interior of the patch that one can apply a full interpolation stencil there. That is, the interpolation source must be surrounded by sufficiently many ghost zones, outer boundary points, or additional overlap points that the stencil does not include any other inter-patch boundary points. This condition depends, among other things, on the grid spacings in the patches, and thus there is no generic rule. It is tested each time via a dummy interpolation.
At this point, Interpolate2 also calculates and stores the weights for the interpolation stencils, because calculating them is somewhat expensive. If the interpolation point is on a 2D plane, 1D line, or on a grid point (with a small tolerance of about \(10^{-12}\)), then the interpolation dimension is reduced, so that either 2D or 1D interpolation is performed whenever possible, or even “0D” interpolation (i.e. copying of grid points).
Finally, each time the symmetry boundary conditions are applied, these stencils are evaluated and the result transferred (via MPI) to the target process.
Interpolate2 provides the same interface as Interpolate, but it uses the CarpetInterp2 thorn to perform the actual interpolation instead of CarpetInterp. This is more efficient.
continue_if_selftest_fails | Scope: private | BOOLEAN |
Description: Continue if the self test fails – this is only for debugging
| ||
Default: no | ||
fill_patch0_radius_max | Scope: private | REAL |
Description: Interpolate to patch 0 up to this radius
| ||
Range | Default: 1e+30 | |
0.0:* | ||
fill_patch0_radius_min | Scope: private | REAL |
Description: Interpolate to patch 0 from this radius on
| ||
Range | Default: 1e+30 | |
0.0:* | ||
fill_patch0_xyradius_max | Scope: private | REAL |
Description: Interpolate to patch 0 up to this cylindrical radius in the x-y plane
| ||
Range | Default: 1e+30 | |
0.0:* | ||
fill_patch0_xyradius_min | Scope: private | REAL |
Description: Interpolate to patch 0 from this cylindrical radius in the x-y plane on
| ||
Range | Default: 1e+30 | |
0.0:* | ||
interpolate_zero | Scope: private | BOOLEAN |
Description: Set interpolation result to zero – this is only for debugging
| ||
Default: no | ||
interpolator_order | Scope: private | INT |
Description: Interpolation order
| ||
Range | Default: 4 | |
0:* | ||
interpolator_order_matter | Scope: private | INT |
Description: Interpolation order for those variables having an ’interpolator=matter’ tag
| ||
Range | Default: -1 | |
-1 | Don’t use special matter interpolator
| |
1 | 1st-order Lagrange
| |
2 | 2nd order ENO
| |
poison | Scope: private | REAL |
Description: Poison value to detect uninitialised variables
| ||
Range | Default: -4.2e+20 | |
*:* | ||
shift_edges | Scope: private | BOOLEAN |
Description: Artificially shift coordinates of grid function edges (use this for DGFE)
| ||
Default: no | ||
verbose | Scope: private | BOOLEAN |
Description: Produce debug output
| ||
Default: no | ||
Implements:
interpolate
Inherits:
coordinates
grid
Group Names | Variable Names | Details | |
test | test | compact | 0 |
description | Test grid function | ||
dimensions | 3 | ||
distribution | DEFAULT | ||
group type | GF | ||
tags | tensortypealias=”Scalar” Checkpoint=”no” Prolongation=”none” | ||
timelevels | 1 | ||
variable type | REAL | ||
Group Names | Variable Names | Details | |
source_patch | compact | 0 | |
Sn | description | source patch number | |
description | -1 for interior points | ||
Sn | description | -2 for outer boundary points | |
Sn | description | -3 for inter-processor ghost points | |
Sn | description | -4 for symmetry boundary points | |
dimensions | 3 | ||
distribution | DEFAULT | ||
group type | GF | ||
tags | Checkpoint=”no” Prolongation=”none” | ||
timelevels | 1 | ||
variable type | INT | ||
Uses header:
tensortypes.h
loopcontrol.h
carpetinterp2.hh
This section lists all the variables which are assigned storage by thorn Llama/Interpolate2. 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: | Conditional: |
source_patch | test |
CCTK_BASEGRID
interpolate2init
initialise interpolating inter-patch boundaries
After: | choosepatchsystem | |
correctcoordinates | ||
spatialcoordinates | ||
coordinates_setglobalcoords_group | ||
Language: | c | |
Reads: | grid::coordinates | |
coordinates::interpolate_boundary_points | ||
coordinates::jacobian | ||
Type: | function | |
Writes: | sn(everywhere) | |
CCTK_BASEGRID
interpolate2test
test interpolating inter-patch boundaries
After: | interpolate2init | |
Storage: | test | |
Type: | group | |
Interpolate2Test
interpolate2testinit
test: initialise test grid function
Language: | c | |
Reads: | grid::coordinates | |
sn(everywhere) | ||
Type: | function | |
Writes: | test(everywhere) | |
Interpolate2Test
interpolate2testselectbcs
test: interpolate test grid function
After: | interpolate2testinit | |
Language: | c | |
Options: | level | |
Sync: | test | |
Type: | function | |
Interpolate2Test
applybcs
test: interpolate test grid function
After: | interpolate2testselectbcs | |
Options: | level | |
Type: | group | |
Interpolate2Test
interpolate2testcheck
test: check test grid function
After: | interpolate2testapplybcs | |
Language: | c | |
Reads: | grid::coordinates | |
sn(everywhere) | ||
test(everywhere) | ||
Type: | function | |
BoundaryConditions
interpolate2applybc
apply interpolating inter-patch boundaries
Language: | c | |
Options: | level | |
Reads: | grid::coordinates | |
coordinates::jacobian | ||
sn | ||
Type: | function | |
Alias Name: | Function Name: |
ApplyBCs | Interpolate2TestApplyBCs |