The Llama multipatch infrastructure

Original authors: Denis Pollney, Christian Reisswig, Erik Schnetter, Nils Dorband, Peter Diener

June 22, 2024


Llama is a collection of thorns that defines a set of curvilinear multipatch grids in Cactus. The grids are allowed to overlap. Interpatch boundary data is exchanged via interpolation.

1 Introduction

The Llama1 code was implemented to allow one to use multiple curvilinear grid patches within Cactus. The ability to have multiple grid “maps” is provided by Carpet. Patch systems, and their coordinate systems and transformations are defined in Llama.

The core of Llama consists of the following core thorns:

In addition, there are a number of optional thorns:

2 Using Llama

What follows is a brief introduction to using Llama. It assumes that you are familiar with the two papers describing Llama [12].

Llama: Coordinates provides grid functions for Jacobians, inverse Jacobians, and the derivitives of the Jacobian between the local coordinates of a given patch and the global Cartesian coordinates. It also provides a volume form to compute volume integrals in the global frame, taking into account the non-trivial overlap between patches.

2.1 Obtaining This Thorn

The public version of Llama can be found on the website

2.2 Basic Usage

Here, we describe the basic parameter settings for Coordinates and Interpolate2. Parameters that are specific to a given patch system are described in the sections below.

The following parameters must be set for multipatch evolution:

The following basic parameters need to be set

With cell-centered AMR, the following parameters must be set:

2.3 Patch systems

Currently, we support the following patch systems:

2.3.1 Thornburg04: 7-patch system

The following basic parameters need to be set for this patch system:

2.3.2 Thornburg04nc: 6-patch system

This has the same parameters as the Thornburg04 patch system, with the exception of Coordinates::h_cartesian, which has no meaning.

2.4 Visualizing multi-patch data

The CarpetHDF5 plugin for VisIt [3] supports reading multi-patch HDF5 files out of the box. It does however require that coordinates were output along with the actual data files. Assuming that your current options for HDF5 output look like this

IOHDF5::out_vars = "HydroBase::rho"

it is sufficient to change them to

CarpetIOHDF5::one_file_per_group = "no" # this is required by multipatch
IOHDF5::out_vars = "HydroBase::rho grid::coordinates"

VisIt will present the Cartesian and curvilinear parts of the grid as two different meshes and two different variables.

3 History

The approximate time line is something like this:


[1]   D. Pollney, C. Reisswig, E. Schnetter, N. Dorband and P. Diener, Phys. Rev. D 83, 044045 (2011), arXiv:0910.3803.

[2]   C. Reisswig, R. Haas, C. D. Ott, E. Abdikamalov, P. Mösta, D. Pollney and E. Schnetter, Phys. Rev. D 87, 064023 (2013), arXiv:1212.1191.

[3]   VisIt visualization tool