File coordinates_accessor.hxx

Defines

COORDINATES_ACCESSOR_H__
COORD_FN1(symbol)

Create functions to access data e.g. dx(index) by casting the Offset to an int and passing to lookup function

e.g. COORD_FN1(dx) defines a function BoutReal dx(int index) const {…}

COORD_FN(...)

Generates lookup functions for each symbol Macro should accept up to 10 arguments

e.g. COORD_FN(dx, dy) produces two functions BoutReal dx(int index) const {…} BoutReal dy(int index) const {…}

struct CoordinatesAccessor
#include <coordinates_accessor.hxx>

Provide (hopefully) fast access to Coordinates data e.g. grid spacing, metric tensors etc.

Contains only two member variables:

  • data a BoutReal pointer

  • mesh_nz an int

data is striped, so that quantities at a given grid cell are packed together.

Example

auto coord_acc = CoordinatesAccessor(mesh->getCoordinates()); coord_acc.dx(index) -> BoutReal at cell index

Notes

Public Types

enum Offset

Offsets of each coordinates variable into the striped array.

Values:

enumerator dx
enumerator dy
enumerator dz
enumerator d1_dx
enumerator d1_dy
enumerator d1_dz
enumerator J
enumerator B
enumerator Byup
enumerator Bydown
enumerator G1
enumerator G3
enumerator g11
enumerator g12
enumerator g13
enumerator g22
enumerator g23
enumerator g33
enumerator g_11
enumerator g_12
enumerator g_13
enumerator g_22
enumerator g_23
enumerator g_33
enumerator end

Public Functions

CoordinatesAccessor() = delete
explicit CoordinatesAccessor(const Coordinates *coords)

Constructor from Coordinates Copies data from coords, doesn’t modify it

inline BoutReal lookup(int index, int offset) const

Lookup value in data array, based on the cell index and the variable offset

inline BoutReal dx(int index) const
inline BoutReal dy(int index) const
inline BoutReal dz(int index) const
inline BoutReal d1_dx(int index) const
inline BoutReal d1_dy(int index) const
inline BoutReal d1_dz(int index) const
inline BoutReal J(int index) const
inline BoutReal B(int index) const
inline BoutReal Byup(int index) const
inline BoutReal Bydown(int index) const
inline BoutReal G1(int index) const
inline BoutReal G3(int index) const
inline BoutReal g11(int index) const
inline BoutReal g12(int index) const
inline BoutReal g13(int index) const
inline BoutReal g22(int index) const
inline BoutReal g23(int index) const
inline BoutReal g33(int index) const
inline BoutReal g_11(int index) const
inline BoutReal g_12(int index) const
inline BoutReal g_13(int index) const
inline BoutReal g_22(int index) const
inline BoutReal g_23(int index) const
inline BoutReal g_33(int index) const

Public Members

BoutReal *data

Underlying data pointer. This array includes all Coordinates fields interleaved

int mesh_nz

For converting from 3D to 2D index.

Public Static Functions

static std::size_t clear(const Coordinates *coords = nullptr)

Clear the cache of Coordinates data

By default this clears everything; if only a specific Coordinates should be removed then that can be specified.

Returns the number of data arrays removed (mainly to assist in testing)

Public Static Attributes

static constexpr int stripe_size = static_cast<int>(Offset::end)

The number of values for each grid point Note: This might be > end to align to memory boundaries e.g. 32-byte boundaries -> multiples of 32 / 8 = 4 desirable