ORB5X 1.0.0
Performance-portable global electromagnetic gyrokinetic PIC code
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
 Transfer grids, buffers, and FFTW plans.
 
 BSplinesBasis (const BSplinesBasis &)=delete
 FFTW-owned bases cannot be copied.
 
 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
 Evaluate a real 2-D spline expansion on a tensor grid.
 
void computeBSplinesGridValues_cpx (const Kokkos::View< Real * > &gridx_, const Kokkos::View< Real * > &gridy_, Kokkos::View< Complex ** > &output, const Kokkos::View< Complex * > &input) const
 Evaluate a complex 2-D spline expansion on a tensor grid.
 
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
 Evaluate a real spline expansion and both coordinate derivatives.
 
void computeBSplinesX (Real *fun, int *pos, Real x) const
 Evaluate nonperiodic radial basis functions at x.
 
void computeBSplinesXD (Real *fun, Real *fund, int *pos, Real x) const
 Evaluate radial basis values and physical-coordinate derivatives.
 
void computeBSplinesY (Real *fun, int *pos, Real y) const
 Evaluate periodic poloidal basis values and wrapped indices.
 
void computeBSplinesY_fft (Kokkos::View< Complex * > &basisspline_m_out, Real y) const
 Evaluate the Fourier representation of the poloidal spline basis.
 
void computeBSplinesYD (Real *fun, Real *fund, int *pos, Real y) const
 Evaluate periodic poloidal basis values and derivatives.
 
void computeBSplinesZ (Real *fun, int *pos, Real z) const
 Evaluate periodic toroidal basis values and wrapped indices.
 
void computeBSplinesZ_fft (Kokkos::View< Complex * > &bspline_n_out, Real z) const
 Evaluate the Fourier representation of the toroidal spline basis.
 
Real computeCouplingCoeff (int n, int NB) const
 Compute a periodic B-spline Fourier coupling coefficient.
 
void computeMapping1to2 (int a, int &i, int &j) const
 Invert computeMapping2to1() for one-based indices.
 
int computeMapping2to1 (int i, int j) const
 Map one-based (i,j) indices to a one-based flat index.
 
BSplinesBasis & operator= (BSplinesBasis &&) noexcept
 Release current resources and take ownership from the source.
 
BSplinesBasis & operator= (const BSplinesBasis &)=delete
 Copy assignment is disabled.
 
 ~BSplinesBasis ()
 Destructor – frees FFTW plans/buffers and resets Kokkos Views.
 

Static Public Member Functions

static int computeMapping2to1bis (int i, int j, int n)
 Map one-based (i,j) indices using a caller-supplied period.
 
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 or replace the process-wide basis instance.
 
static BSplinesBasis & instance ()
 Access the process-wide basis instance.
 

Public Attributes

Kokkos::View< Complex * > basisspline_m
 Fourier-transformed poloidal spline.
 
Kokkos::View< Complex * > basisspline_n
 Fourier-transformed toroidal spline.
 
int bsplines_uniform
 Uniform-grid selector retained from the Fortran basis module.
 
int degree
 Number/order selector of locally nonzero basis functions.
 
Real dx
 Uniform radial interval width.
 
Real dx_inv
 Inverse radial interval width.
 
Real dy
 Uniform poloidal interval width [rad].
 
Real dy_inv
 Inverse poloidal interval width.
 
Real dz
 Uniform toroidal interval width [rad].
 
Real dz_inv
 Inverse toroidal interval width.
 
Kokkos::View< Real * > gridX
 Radial knot/grid coordinates.
 
Kokkos::View< Real * > gridY
 Poloidal knot/grid coordinates [rad].
 
Kokkos::View< Real * > gridZ
 Toroidal knot/grid coordinates [rad].
 
Complex icomplex
 Imaginary unit used by spectral phase calculations.
 
Real lx
 Radial domain length xmax-xmin.
 
Real ly
 Poloidal period [rad].
 
Real lz
 Toroidal period [rad].
 
int ns_loc
 Number of radial solution coefficients including endpoint basis support.
 
int nx
 Number of radial intervals.
 
int ny
 Number of periodic poloidal intervals.
 
int nz
 Number of periodic toroidal intervals.
 
Real xmax
 Upper radial boundary.
 
Real xmin
 Lower radial boundary.
 
Real ymax
 Upper poloidal boundary [rad].
 
Real ymin
 Lower poloidal boundary [rad].
 
Real zmax
 Upper toroidal boundary [rad].
 
Real zmin
 Lower toroidal boundary [rad].
 

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

FFTW-owned bases cannot be copied.

◆ BSplinesBasis() [3/3]

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

Transfer grids, buffers, and FFTW plans.

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

Evaluate a real 2-D spline expansion on a tensor grid.

Parameters
[in]gridx_Radial evaluation coordinates.
[in]gridy_Periodic poloidal evaluation coordinates [rad].
[out]outputReal values shaped by the two evaluation grids.
[in]inputFlattened real spline coefficients.

◆ 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

Evaluate a complex 2-D spline expansion on a tensor grid.

Parameters
[in]gridx_Radial evaluation coordinates.
[in]gridy_Periodic poloidal evaluation coordinates [rad].
[out]outputComplex values shaped by the two evaluation grids.
[in]inputFlattened complex spline coefficients.

◆ 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

Evaluate a real spline expansion and both coordinate derivatives.

Parameters
[in]gridx_Radial evaluation coordinates.
[in]gridy_Poloidal evaluation coordinates [rad].
[out]fExpansion values.
[out]dfdxRadial derivatives.
[out]dfdyPoloidal derivatives [rad^-1].
[in]inputFlattened spline coefficients.

◆ computeBSplinesX()

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

Evaluate nonperiodic radial basis functions at x.

Parameters
[out]funArray of degree nonzero basis values.
[out]posCorresponding zero-based coefficient indices.
[in]xRadial coordinate in [xmin,xmax].

◆ computeBSplinesXD()

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

Evaluate radial basis values and physical-coordinate derivatives.

Parameters
[out]funBasis values.
[out]fundDerivatives \(dB_i/dx\).
[out]posCoefficient indices.
[in]xRadial coordinate.

◆ computeBSplinesY()

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

Evaluate periodic poloidal basis values and wrapped indices.

Parameters
[out]funArray of degree nonzero basis values.
[out]posCorresponding wrapped coefficient indices.
[in]yPoloidal angle [rad].

◆ computeBSplinesY_fft()

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

Evaluate the Fourier representation of the poloidal spline basis.

Parameters
[out]basisspline_m_outComplex basis factors by poloidal mode.
[in]yPoloidal angle [rad].

◆ computeBSplinesYD()

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

Evaluate periodic poloidal basis values and derivatives.

Parameters
[out]funNonzero basis values.
[out]fundPhysical derivatives dB_i/dy [rad^-1].
[out]posWrapped coefficient indices.
[in]yPoloidal angle [rad].

◆ computeBSplinesZ()

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

Evaluate periodic toroidal basis values and wrapped indices.

Parameters
[out]funArray of degree nonzero basis values.
[out]posCorresponding wrapped coefficient indices.
[in]zToroidal angle [rad].

◆ computeBSplinesZ_fft()

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

Evaluate the Fourier representation of the toroidal spline basis.

Parameters
[out]bspline_n_outComplex basis factors by toroidal mode.
[in]zToroidal angle [rad].

◆ computeCouplingCoeff()

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

Compute a periodic B-spline Fourier coupling coefficient.

Parameters
[in]nSigned Fourier mode number.
[in]NBNumber of periodic basis intervals.
Returns
Real mass/coupling factor for that mode.

◆ computeMapping1to2()

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

Invert computeMapping2to1() for one-based indices.

Parameters
[in]aOne-based flattened coefficient index.
[out]iFirst/radial index.
[out]jSecond/periodic index.

◆ computeMapping2to1()

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

Map one-based (i,j) indices to a one-based flat index.

Parameters
[in]iFirst/radial basis index.
[in]jSecond/periodic basis index.
Returns
j + ny*(i-1).

◆ computeMapping2to1bis()

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

Map one-based (i,j) indices using a caller-supplied period.

Parameters
[in]iFirst index.
[in]jSecond index.
[in]nSecond-dimension extent.
Returns
j + n*(i-1).

◆ 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 or replace the process-wide basis instance.

Parameters
[in]nx_Radial interval count.
[in]ny_Poloidal interval count.
[in]nz_Toroidal interval count.
[in]degree_B-spline order/number of locally nonzero functions.
[in]xmin_Lower radial boundary.
[in]xmax_Upper radial boundary.
[in]ymin_Lower poloidal boundary [rad].
[in]ymax_Upper poloidal boundary [rad].
[in]zmin_Lower toroidal boundary [rad].
[in]zmax_Upper toroidal boundary [rad].
[in]nsel_bsplines_basisBasis implementation selector.
Note
Matches initBSplinesBasis in BSplinesBasis.F90.

◆ instance()

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

Access the process-wide basis instance.

Returns
Initialized basis object.
Exceptions
std::runtime_errorif initBSplinesBasis() has not been called.

◆ operator=() [1/2]

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

Release current resources and take ownership from the source.

◆ operator=() [2/2]

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

Copy assignment is disabled.

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

Uniform-grid selector retained from the Fortran basis module.

◆ degree

int orb5x::BSplinesBasis::degree

Number/order selector of locally nonzero basis functions.

◆ dx

Real orb5x::BSplinesBasis::dx

Uniform radial interval width.

◆ dx_inv

Real orb5x::BSplinesBasis::dx_inv

Inverse radial interval width.

◆ dy

Real orb5x::BSplinesBasis::dy

Uniform poloidal interval width [rad].

◆ dy_inv

Real orb5x::BSplinesBasis::dy_inv

Inverse poloidal interval width.

◆ dz

Real orb5x::BSplinesBasis::dz

Uniform toroidal interval width [rad].

◆ dz_inv

Real orb5x::BSplinesBasis::dz_inv

Inverse toroidal interval width.

◆ gridX

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

Radial knot/grid coordinates.

◆ gridY

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

Poloidal knot/grid coordinates [rad].

◆ gridZ

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

Toroidal knot/grid coordinates [rad].

◆ icomplex

Complex orb5x::BSplinesBasis::icomplex

Imaginary unit used by spectral phase calculations.

◆ lx

Real orb5x::BSplinesBasis::lx

Radial domain length xmax-xmin.

◆ ly

Real orb5x::BSplinesBasis::ly

Poloidal period [rad].

◆ lz

Real orb5x::BSplinesBasis::lz

Toroidal period [rad].

◆ ns_loc

int orb5x::BSplinesBasis::ns_loc

Number of radial solution coefficients including endpoint basis support.

◆ nx

int orb5x::BSplinesBasis::nx

Number of radial intervals.

◆ ny

int orb5x::BSplinesBasis::ny

Number of periodic poloidal intervals.

◆ nz

int orb5x::BSplinesBasis::nz

Number of periodic toroidal intervals.

◆ xmax

Real orb5x::BSplinesBasis::xmax

Upper radial boundary.

◆ xmin

Real orb5x::BSplinesBasis::xmin

Lower radial boundary.

◆ ymax

Real orb5x::BSplinesBasis::ymax

Upper poloidal boundary [rad].

◆ ymin

Real orb5x::BSplinesBasis::ymin

Lower poloidal boundary [rad].

◆ zmax

Real orb5x::BSplinesBasis::zmax

Upper toroidal boundary [rad].

◆ zmin

Real orb5x::BSplinesBasis::zmin

Lower toroidal boundary [rad].


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