ORB5X 1.0.0
Performance-portable global electromagnetic gyrokinetic PIC code
Loading...
Searching...
No Matches
bsplines.hpp File Reference

B-spline types and operations for spclibs C++ port. More...

#include "../prec_const.hpp"
#include "matrix.hpp"
#include "pppack.hpp"
#include <Kokkos_Core.hpp>
#include <vector>
#include <memory>
Include dependency graph for bsplines.hpp:
This graph shows which files directly or indirectly include this file:

Classes

struct  orb5x::spclibs::Spline1D
 1-dimensional B-spline More...
struct  orb5x::spclibs::Spline2D
 2-dimensional B-spline (tensor product) More...
struct  orb5x::spclibs::Spline2D1D
 2D+1D B-spline (for axisymmetric problems) More...

Namespaces

namespace  orb5x
namespace  orb5x::spclibs

Typedefs

using orb5x::spclibs::spline1d = Spline1D
using orb5x::spclibs::spline2d = Spline2D
using orb5x::spclibs::spline2d1d = Spline2D1D

Functions

void orb5x::spclibs::basfun (Real x, const Spline1D &sp, Real *fun, int left, int nderiv=1)
 Evaluate basis functions and derivatives at a point.
void orb5x::spclibs::calc_integ (const Spline1D &sp, Real *integ)
 Calculate integral of each basis function.
void orb5x::spclibs::CompMassMatrix (const Spline1D &sp, GBMat &mat)
 Compute mass matrix for FEM discretization.
void orb5x::spclibs::CompMassMatrix (const Spline1D &sp, PeriodicMat &mat)
void orb5x::spclibs::def_basfun (Real x, const Spline1D &sp, Real *fun, int *left=nullptr, int nderiv=1)
 Define basis functions at a point (auto-locates interval).
void orb5x::spclibs::destroy_sp (Spline1D &sp)
void orb5x::spclibs::destroy_sp (Spline2D &sp)
void orb5x::spclibs::destroy_sp (Spline2D1D &sp)
void orb5x::spclibs::get_dim (const Spline1D &sp, int &dim, int *nx=nullptr, int *nidbas=nullptr)
 Get dimension information from 1D spline.
void orb5x::spclibs::get_dim (const Spline2D &sp, int dim[2], int nx[2]=nullptr, int nidbas[2]=nullptr)
 Get dimension information from 2D spline.
void orb5x::spclibs::get_gauss (const Spline1D &sp, int &n, int i=-1, Real *x=nullptr, Real *w=nullptr)
 Get Gauss quadrature information from spline.
void orb5x::spclibs::get_splcoef (const Spline1D &sp, const Real *bcoef, Real *fvals)
 Get function values from spline coefficients.
void orb5x::spclibs::gridval (const Spline1D &sp, const Real *xgrid, int npts, const Real *bcoef, Real *fvals, int jder=0)
 Evaluate spline on a grid of points.
void orb5x::spclibs::gridval (const Spline2D &sp, const Real *xgrid1, int npts1, const Real *xgrid2, int npts2, const Real *bcoef, Real *fvals, int jder1=0, int jder2=0)
 Evaluate 2D spline on a 2D grid.
void orb5x::spclibs::gridval (const Spline2D1D &sp, const Real *xgrid1, int npts1, const Real *xgrid2, int npts2, const Real *xgrid3, int npts3, const Real *bcoef, Real *fvals, int jder1=0, int jder2=0, int jder3=0)
 Evaluate 3D spline (2D+1D) on a 3D grid.
bool orb5x::spclibs::is_equid (const Real *grid, int n)
 Check if a grid is equidistant.
void orb5x::spclibs::locintv (const Spline1D &sp, Real x, int &left)
 Locate interval containing x in spline knot sequence.
void orb5x::spclibs::set_splcoef (Spline1D &sp, const Real *fvals, Real *bcoef)
 Set spline coefficients from function values.
void orb5x::spclibs::set_spline (const int p[2], const int ngauss[2], const Real *grid1, int ngrid1, const Real *grid2, int ngrid2, Spline2D &sp, const bool period[2]=nullptr, bool nlppform=true, const int nlequid[2]=nullptr)
 Initialize a 2D spline.
void orb5x::spclibs::set_spline (const int p[3], const int ngauss[3], const Real *grid1, int ngrid1, const Real *grid2, int ngrid2, const Real *grid3, int ngrid3, Spline2D1D &sp, const bool period[3]=nullptr, bool nlppform=true, const int nlequid[3]=nullptr)
 Initialize a 2D+1D spline.
void orb5x::spclibs::set_spline (int p, int ngauss, const Real *grid, int ngrid, Spline1D &sp, bool period=false, bool nlppform=true, int nlequid=-1)
 Initialize a 1D spline.

Detailed Description

B-spline types and operations for spclibs C++ port.

This file is a C++ translation of the Fortran module bsplines.f90 from spclibs. It provides B-spline interpolation and finite element discretization.

Key types:

  • Spline1D: 1-dimensional B-spline
  • Spline2D: 2-dimensional B-spline (tensor product of two Spline1D)
  • Spline2D1D: 2D+1D B-spline (for axisymmetric problems)