Coordinates

Parthenon currently provides a coordinates class ``UniformCartesian`` for a uniform Cartesian coordinate system. In the near future we will provide uniform spherical and uniform cylindrical coordinate systems. Other coordinate systems may be implemented in downstream codes. Alternatively, coordinate systems can be incorporated in the fluid equations such as is done inPhoebus.

Coordinate objects under the Coordinates_t type are created for each meshblock. Coordinate information such as positions of different elements within each cell (cell centers, face centers, edge centers, and nodes), distance between elements, and integration elements (cell widths, edge centers, face areas, and cell volumes) can be accessed from the coordinate object for each meshblock. The coordinates object for meshblock b in a variable pack var_pack can be accessed via var_pack.GetCoords(b).

The interface for coordinate systems is derived from Athena++ but with new names and with directions, faces, and edges specified by either template parameters at compile time or arguments at run time instead of with different function names. For ease of conversion from Athena++, we summarize the new coordinate functions with their Athena++ predecessors.

Position of elements (replacing x1v, x1f, x1s2 etc. in Athena++)

Xc<int dir>(const int idx); //Cell Centers
Xf<int face, int dir>(const int idx); //Face Centers
Xe<int edge, int dir>(const int idx); //Edge Centers
Xn< int dir>(const int idx); //Cell Nodes

where 1<=dir<=3 is which component of the direction being queried (i.e. x,y,z), face and edge specify which face/edge is being queried, and idx is the index along dir. For the function Xf, when dir==face it gives the same face position as x1f, x2f, and x3f in Athena++. When dir!=face, it returns the face-average position, lying within the plane of the face, which replaces x1s2, x1s3, x2s1, x2s3, x3s1, and x3s2 in Athena++. Xe and Xn have no equivalents in Athena++ put return the positions of off-cell-center locations consistent with these positions computed from cell-centers and face-centers in Athena++.

Distance between elements (previously dx1v, dx1f etc. )

Dxc<int dir>(const int idx); //Distance between cell centers along dir
Dxf<int dir, int face>(const int idx); //Distance between face centers along dir
Dxe<int dir, int edge>(const int idx); //Distance between edge centers along dir
Dxn< int dir>(const int idx); //Distance between cell Nodes along dir

Likewise, face, edge, Dxe, and Dxn are new to get distances between different elements along different dimensions.

Integration elements (replacing CenterWidth1, Edge1Length, Face1Area, and CellVolume)

CellWidth<int dir>( const int k, const int j, const int i); //Cell Width at cell center
FaceArea<int face>( const int k, const int j, const int i); //Area of Face
EdgeLength<int edge>( const int k, const int j, const int i); //Length of edge
CellVolume( const int k, const int j, const int i); //CellVolume

These functions take all three indices to accommodate extension to spherical and cylindrical.

Compile Time vs. Run Time Parameters

For each of these functions that take parameters dir, face, and/or edge as template parameters at compile time, we also introduce as needed versions with runtime parameters appending FA to the function name for “function-arguments.” For example,

FaceAreaFA( const int dir, const int k, const int j, const int i); //Face Areas

This convention avoids naming conflicts between simplified functions and runtime functions. These run-time versions are implemented on an as-needed basis.

This page will be expanded with the implementation of spherical and cylindrical coordinates.