A data structure for working with Lagrange Interpolating Polynomials in one, two, and three dimensions.
The Lagrange data-structure stores the information necessary to interpolate between two
sets of grid-points and to estimate the derivative of data at native grid points. Routines for
multidimensional interpolation are based on the tensor product of 1-D interpolants. It is
assumed that the polynomial degree (and the interpolation nodes) are the same in each direction.
This assumption permits the storage of only one array of interpolation nodes and barycentric
weights and is what allows this data structure to be flexible.
The SELF_DataObj class is a base class for all data objects in SELF.
A data object in SELF is a multidimensional array of data, represented
on both host and device, that is associated with an interpolant, metadata,
and (optionally) an equation string.
Type extensions of the SELF_DataObj include scalars, vectors, and tensors
in 1-D, 2-D, and 3-D using the storage patterns that are expected for
derivative and interpolation operations defined in SELF_Lagrange.f90
Additionally, each extended type has the necessary attributes to store
information on element interiors and element boundaries, both of which
are commonly used for spectral element solvers.
Nodes of different colours represent the following:
Solid arrows point from a derived type to the parent type which it
extends. Dashed arrows point from a derived type to the other
types it contains as a components, with a label listing the name(s) of
said component(s). Where possible, edges connecting nodes are given different colours to make them easier to distinguish in large graphs.