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