File interpolation_xz.hxx#
Typedefs
-
using XZMonotonicHermiteSpline = XZHermiteSplineBase<true>#
Monotonic Hermite spline interpolator
Similar to XZHermiteSpline, so uses most of the same code. Forces the interpolated result to be in the range of the neighbouring cell values. This prevents unphysical overshoots, but also degrades accuracy near maxima and minima. Perhaps should only impose near boundaries, since that is where problems most obviously occur.
-
using XZHermiteSpline = XZHermiteSplineBase<false>#
-
template<class DerivedType>
using RegisterXZInterpolation = XZInterpolationFactory::RegisterInFactory<DerivedType>#
Functions
-
class XZInterpolation#
Subclassed by XZHermiteSplineBase< false >, XZBilinear, XZHermiteSplineBase< monotonic >, XZLagrange4pt
Public Functions
-
virtual ~XZInterpolation() = default#
-
virtual void calcWeights(const Field3D &delta_x, const Field3D &delta_z, const std::string ®ion = "RGN_NOBNDRY") = 0#
-
virtual void calcWeights(const Field3D &delta_x, const Field3D &delta_z, const BoutMask &mask, const std::string ®ion = "RGN_NOBNDRY") = 0#
-
virtual Field3D interpolate(const Field3D &f, const Field3D &delta_x, const Field3D &delta_z, const std::string ®ion = "RGN_NOBNDRY") = 0#
-
virtual Field3D interpolate(const Field3D &f, const Field3D &delta_x, const Field3D &delta_z, const BoutMask &mask, const std::string ®ion = "RGN_NOBNDRY") = 0#
-
inline void setYOffset(int offset)#
-
inline virtual std::vector<ParallelTransform::PositionsAndWeights> getWeightsForYUpApproximation(int i, int j, int k)#
-
inline virtual std::vector<ParallelTransform::PositionsAndWeights> getWeightsForYDownApproximation(int i, int j, int k)#
-
inline virtual std::vector<ParallelTransform::PositionsAndWeights> getWeightsForYApproximation(int i, int j, int k, int yoffset)#
Public Members
-
int y_offset#
-
virtual ~XZInterpolation() = default#
-
template<bool monotonic>
class XZHermiteSplineBase : public XZInterpolation# Public Functions
-
inline ~XZHermiteSplineBase()#
-
virtual void calcWeights(const Field3D &delta_x, const Field3D &delta_z, const std::string ®ion = "RGN_NOBNDRY") override#
-
virtual void calcWeights(const Field3D &delta_x, const Field3D &delta_z, const BoutMask &mask, const std::string ®ion = "RGN_NOBNDRY") override#
-
virtual Field3D interpolate(const Field3D &f, const std::string ®ion = "RGN_NOBNDRY") const override#
-
virtual Field3D interpolate(const Field3D &f, const Field3D &delta_x, const Field3D &delta_z, const std::string ®ion = "RGN_NOBNDRY") override#
-
virtual Field3D interpolate(const Field3D &f, const Field3D &delta_x, const Field3D &delta_z, const BoutMask &mask, const std::string ®ion = "RGN_NOBNDRY") override#
-
virtual std::vector<ParallelTransform::PositionsAndWeights> getWeightsForYApproximation(int i, int j, int k, int yoffset) override#
Return position and weight of points needed to approximate the function value at the point that the field line through (i,j,k) meets the (j+1)-plane. For the case where only the z-direction is not aligned to grid points, the approximation is: f(i,j+1,k*) = h00_z * f(i,j+1,k) + h01_z * f(i,j+1,k+1)
h10_z * dfdz(i,j+1,k) + h11_z * dfdz(i,j+1,k+1) = h00_z * f(i,j+1,k) + h01_z * f(i,j+1,k+1)
h10_z * ( f(i,j+1,k+1) - f(i,j+1,k-1) ) / 2
h11_z * ( f(i,j+1,k+2) - f(i,j+1,k) ) / 2 for k* a point between k and k+1. Therefore, this function returns position weight (i, j+1, k-1) - h10_z / 2 (i, j+1, k) h00_z - h11_z / 2 (i, j+1, k+1) h01_z + h10_z / 2 (i, j+1, k+2) h11_z / 2
-
inline ~XZHermiteSplineBase()#
-
class XZLagrange4pt : public XZInterpolation#
Public Functions
-
virtual void calcWeights(const Field3D &delta_x, const Field3D &delta_z, const std::string ®ion = "RGN_NOBNDRY") override#
-
virtual void calcWeights(const Field3D &delta_x, const Field3D &delta_z, const BoutMask &mask, const std::string ®ion = "RGN_NOBNDRY") override#
-
virtual Field3D interpolate(const Field3D &f, const std::string ®ion = "RGN_NOBNDRY") const override#
-
virtual Field3D interpolate(const Field3D &f, const Field3D &delta_x, const Field3D &delta_z, const std::string ®ion = "RGN_NOBNDRY") override#
-
virtual void calcWeights(const Field3D &delta_x, const Field3D &delta_z, const std::string ®ion = "RGN_NOBNDRY") override#
-
class XZBilinear : public XZInterpolation#
Public Functions
-
virtual void calcWeights(const Field3D &delta_x, const Field3D &delta_z, const std::string ®ion = "RGN_NOBNDRY") override#
-
virtual void calcWeights(const Field3D &delta_x, const Field3D &delta_z, const BoutMask &mask, const std::string ®ion = "RGN_NOBNDRY") override#
-
virtual Field3D interpolate(const Field3D &f, const std::string ®ion = "RGN_NOBNDRY") const override#
-
virtual void calcWeights(const Field3D &delta_x, const Field3D &delta_z, const std::string ®ion = "RGN_NOBNDRY") override#
-
class XZMonotonicHermiteSplineLegacy : public XZHermiteSplineBase<false>#
-
class XZInterpolationFactory : public Factory<XZInterpolation, XZInterpolationFactory, Mesh*>#
Public Functions
Public Static Functions
-
static void ensureRegistered()#
-
static void ensureRegistered()#