ORB5X 1.0.0
Performance-portable global electromagnetic gyrokinetic PIC code
 
Loading...
Searching...
No Matches
orb5x::BSplinesBasis Class Reference

B-spline basis module for the solver. More...

#include "bsplines_basis.hpp"

+ Collaboration diagram for orb5x::BSplinesBasis:

Public Member Functions

 BSplinesBasis (BSplinesBasis &&) noexcept
 
 BSplinesBasis (const BSplinesBasis &)=delete
 
 BSplinesBasis (int nx_, int ny_, int nz_, int degree_, Real xmin_, Real xmax_, Real ymin_, Real ymax_, Real zmin_, Real zmax_, int nsel_bsplines_basis)
 Construct and fully initialise the B-spline basis.
 
void computeBSplinesGridValues (const Kokkos::View< Real * > &gridx_, const Kokkos::View< Real * > &gridy_, Kokkos::View< Real ** > &output, const Kokkos::View< Real * > &input) const
 Compute B-spline grid values (real input).
 
void computeBSplinesGridValues_cpx (const Kokkos::View< Real * > &gridx_, const Kokkos::View< Real * > &gridy_, Kokkos::View< Complex ** > &output, const Kokkos::View< Complex * > &input) const
 Compute B-spline grid values (complex input).
 
void computeBSplinesGridValuesWithDerivative (const Kokkos::View< Real * > &gridx_, const Kokkos::View< Real * > &gridy_, Kokkos::View< Real ** > &f, Kokkos::View< Real ** > &dfdx, Kokkos::View< Real ** > &dfdy, const Kokkos::View< Real * > &input) const
 Compute B-spline grid values and derivatives.
 
void computeBSplinesX (Real *fun, int *pos, Real x) const
 Compute B-splines at point x (radial, non-periodic).
 
void computeBSplinesXD (Real *fun, Real *fund, int *pos, Real x) const
 Compute B-splines and derivatives at point x.
 
void computeBSplinesY (Real *fun, int *pos, Real y) const
 Compute B-splines at point y (poloidal, periodic).
 
void computeBSplinesY_fft (Kokkos::View< Complex * > &basisspline_m_out, Real y) const
 Compute B-splines Fourier transform at point y (poloidal).
 
void computeBSplinesYD (Real *fun, Real *fund, int *pos, Real y) const
 Compute B-splines and derivatives at point y.
 
void computeBSplinesZ (Real *fun, int *pos, Real z) const
 Compute B-splines at point z (toroidal, periodic).
 
void computeBSplinesZ_fft (Kokkos::View< Complex * > &bspline_n_out, Real z) const
 Compute B-splines Fourier transform at point z (toroidal).
 
Real computeCouplingCoeff (int n, int NB) const
 Compute coupling coefficient for periodic B-splines.
 
void computeMapping1to2 (int a, int &i, int &j) const
 Map 1D index to 2D (i,j) (1-based).
 
int computeMapping2to1 (int i, int j) const
 Map 2D (i,j) to 1D index (1-based): a = j + ny*(i-1).
 
BSplinesBasisoperator= (BSplinesBasis &&) noexcept
 
BSplinesBasisoperator= (const BSplinesBasis &)=delete
 
 ~BSplinesBasis ()
 Destructor – frees FFTW plans/buffers and resets Kokkos Views.
 

Static Public Member Functions

static int computeMapping2to1bis (int i, int j, int n)
 Map 2D (i,j) to 1D index with custom period n.
 
static void destroyBSplinesBasisModule ()
 Destroy the global instance (matches old destroyBSplinesBasisModule).
 
static void initBSplinesBasis (int nx_, int ny_, int nz_, int degree_, Real xmin_, Real xmax_, Real ymin_, Real ymax_, Real zmin_, Real zmax_, int nsel_bsplines_basis)
 Create/replace the global instance (matches old initBSplinesBasis).
 
static BSplinesBasisinstance ()
 Access the global instance. Throws if not yet initialised.
 

Public Attributes

Kokkos::View< Complex * > basisspline_m
 Fourier-transformed poloidal spline.
 
Kokkos::View< Complex * > basisspline_n
 Fourier-transformed toroidal spline.
 
int bsplines_uniform
 
int degree
 
Real dx
 
Real dx_inv
 
Real dy
 
Real dy_inv
 
Real dz
 
Real dz_inv
 
Kokkos::View< Real * > gridX
 
Kokkos::View< Real * > gridY
 
Kokkos::View< Real * > gridZ
 
Complex icomplex
 
Real lx
 
Real ly
 
Real lz
 
int ns_loc
 
int nx
 
int ny
 
int nz
 
Real xmax
 
Real xmin
 
Real ymax
 
Real ymin
 
Real zmax
 
Real zmin
 

Detailed Description

B-spline basis module for the solver.

Manages B-spline grids, FFTW plans, and evaluation functions. Construct with grid and degree parameters; the destructor releases FFTW plans and Kokkos Views automatically (RAII).

A singleton-style static instance is kept for backward compatibility with existing call sites that use BSplinesBasis::method(...). New code should prefer the instance API via BSplinesBasis::instance().

Constructor & Destructor Documentation

◆ BSplinesBasis() [1/3]

orb5x::BSplinesBasis::BSplinesBasis ( int  nx_,
int  ny_,
int  nz_,
int  degree_,
Real  xmin_,
Real  xmax_,
Real  ymin_,
Real  ymax_,
Real  zmin_,
Real  zmax_,
int  nsel_bsplines_basis 
)

Construct and fully initialise the B-spline basis.

Parameters
nx_,ny_,nz_Number of intervals in each direction.
degree_B-spline order (1..4 = number of non-zero basis fns).
xmin_Lower radial-domain boundary.
xmax_Upper radial-domain boundary.
ymin_Lower poloidal-domain boundary.
ymax_Upper poloidal-domain boundary.
zmin_Lower toroidal-domain boundary.
zmax_Upper toroidal-domain boundary.
nsel_bsplines_basisSelection flag (0 = NSEL_BSPLINES_ORIGINAL).

◆ ~BSplinesBasis()

orb5x::BSplinesBasis::~BSplinesBasis ( )

Destructor – frees FFTW plans/buffers and resets Kokkos Views.

◆ BSplinesBasis() [2/3]

orb5x::BSplinesBasis::BSplinesBasis ( const BSplinesBasis )
delete

◆ BSplinesBasis() [3/3]

orb5x::BSplinesBasis::BSplinesBasis ( BSplinesBasis &&  )
noexcept

Member Function Documentation

◆ computeBSplinesGridValues()

void orb5x::BSplinesBasis::computeBSplinesGridValues ( const Kokkos::View< Real * > &  gridx_,
const Kokkos::View< Real * > &  gridy_,
Kokkos::View< Real ** > &  output,
const Kokkos::View< Real * > &  input 
) const

Compute B-spline grid values (real input).

◆ computeBSplinesGridValues_cpx()

void orb5x::BSplinesBasis::computeBSplinesGridValues_cpx ( const Kokkos::View< Real * > &  gridx_,
const Kokkos::View< Real * > &  gridy_,
Kokkos::View< Complex ** > &  output,
const Kokkos::View< Complex * > &  input 
) const

Compute B-spline grid values (complex input).

◆ computeBSplinesGridValuesWithDerivative()

void orb5x::BSplinesBasis::computeBSplinesGridValuesWithDerivative ( const Kokkos::View< Real * > &  gridx_,
const Kokkos::View< Real * > &  gridy_,
Kokkos::View< Real ** > &  f,
Kokkos::View< Real ** > &  dfdx,
Kokkos::View< Real ** > &  dfdy,
const Kokkos::View< Real * > &  input 
) const

Compute B-spline grid values and derivatives.

◆ computeBSplinesX()

void orb5x::BSplinesBasis::computeBSplinesX ( Real fun,
int *  pos,
Real  x 
) const

Compute B-splines at point x (radial, non-periodic).

◆ computeBSplinesXD()

void orb5x::BSplinesBasis::computeBSplinesXD ( Real fun,
Real fund,
int *  pos,
Real  x 
) const

Compute B-splines and derivatives at point x.

◆ computeBSplinesY()

void orb5x::BSplinesBasis::computeBSplinesY ( Real fun,
int *  pos,
Real  y 
) const

Compute B-splines at point y (poloidal, periodic).

◆ computeBSplinesY_fft()

void orb5x::BSplinesBasis::computeBSplinesY_fft ( Kokkos::View< Complex * > &  basisspline_m_out,
Real  y 
) const

Compute B-splines Fourier transform at point y (poloidal).

◆ computeBSplinesYD()

void orb5x::BSplinesBasis::computeBSplinesYD ( Real fun,
Real fund,
int *  pos,
Real  y 
) const

Compute B-splines and derivatives at point y.

◆ computeBSplinesZ()

void orb5x::BSplinesBasis::computeBSplinesZ ( Real fun,
int *  pos,
Real  z 
) const

Compute B-splines at point z (toroidal, periodic).

◆ computeBSplinesZ_fft()

void orb5x::BSplinesBasis::computeBSplinesZ_fft ( Kokkos::View< Complex * > &  bspline_n_out,
Real  z 
) const

Compute B-splines Fourier transform at point z (toroidal).

◆ computeCouplingCoeff()

Real orb5x::BSplinesBasis::computeCouplingCoeff ( int  n,
int  NB 
) const

Compute coupling coefficient for periodic B-splines.

◆ computeMapping1to2()

void orb5x::BSplinesBasis::computeMapping1to2 ( int  a,
int &  i,
int &  j 
) const

Map 1D index to 2D (i,j) (1-based).

◆ computeMapping2to1()

int orb5x::BSplinesBasis::computeMapping2to1 ( int  i,
int  j 
) const

Map 2D (i,j) to 1D index (1-based): a = j + ny*(i-1).

◆ computeMapping2to1bis()

static int orb5x::BSplinesBasis::computeMapping2to1bis ( int  i,
int  j,
int  n 
)
static

Map 2D (i,j) to 1D index with custom period n.

◆ destroyBSplinesBasisModule()

static void orb5x::BSplinesBasis::destroyBSplinesBasisModule ( )
static

Destroy the global instance (matches old destroyBSplinesBasisModule).

◆ initBSplinesBasis()

static void orb5x::BSplinesBasis::initBSplinesBasis ( int  nx_,
int  ny_,
int  nz_,
int  degree_,
Real  xmin_,
Real  xmax_,
Real  ymin_,
Real  ymax_,
Real  zmin_,
Real  zmax_,
int  nsel_bsplines_basis 
)
static

Create/replace the global instance (matches old initBSplinesBasis).

◆ instance()

static BSplinesBasis & orb5x::BSplinesBasis::instance ( )
static

Access the global instance. Throws if not yet initialised.

◆ operator=() [1/2]

BSplinesBasis & orb5x::BSplinesBasis::operator= ( BSplinesBasis &&  )
noexcept

◆ operator=() [2/2]

BSplinesBasis & orb5x::BSplinesBasis::operator= ( const BSplinesBasis )
delete

Member Data Documentation

◆ basisspline_m

Kokkos::View<Complex*> orb5x::BSplinesBasis::basisspline_m

Fourier-transformed poloidal spline.

◆ basisspline_n

Kokkos::View<Complex*> orb5x::BSplinesBasis::basisspline_n

Fourier-transformed toroidal spline.

◆ bsplines_uniform

int orb5x::BSplinesBasis::bsplines_uniform

◆ degree

int orb5x::BSplinesBasis::degree

◆ dx

Real orb5x::BSplinesBasis::dx

◆ dx_inv

Real orb5x::BSplinesBasis::dx_inv

◆ dy

Real orb5x::BSplinesBasis::dy

◆ dy_inv

Real orb5x::BSplinesBasis::dy_inv

◆ dz

Real orb5x::BSplinesBasis::dz

◆ dz_inv

Real orb5x::BSplinesBasis::dz_inv

◆ gridX

Kokkos::View<Real*> orb5x::BSplinesBasis::gridX

◆ gridY

Kokkos::View<Real*> orb5x::BSplinesBasis::gridY

◆ gridZ

Kokkos::View<Real*> orb5x::BSplinesBasis::gridZ

◆ icomplex

Complex orb5x::BSplinesBasis::icomplex

◆ lx

Real orb5x::BSplinesBasis::lx

◆ ly

Real orb5x::BSplinesBasis::ly

◆ lz

Real orb5x::BSplinesBasis::lz

◆ ns_loc

int orb5x::BSplinesBasis::ns_loc

◆ nx

int orb5x::BSplinesBasis::nx

◆ ny

int orb5x::BSplinesBasis::ny

◆ nz

int orb5x::BSplinesBasis::nz

◆ xmax

Real orb5x::BSplinesBasis::xmax

◆ xmin

Real orb5x::BSplinesBasis::xmin

◆ ymax

Real orb5x::BSplinesBasis::ymax

◆ ymin

Real orb5x::BSplinesBasis::ymin

◆ zmax

Real orb5x::BSplinesBasis::zmax

◆ zmin

Real orb5x::BSplinesBasis::zmin

The documentation for this class was generated from the following file: