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]. | |
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().
| 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.
| 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_basis | Selection flag (0 = NSEL_BSPLINES_ORIGINAL). |
| orb5x::BSplinesBasis::~BSplinesBasis | ( | ) |
Destructor – frees FFTW plans/buffers and resets Kokkos Views.
|
delete |
FFTW-owned bases cannot be copied.
|
noexcept |
Transfer grids, buffers, and FFTW plans.
| 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.
| [in] | gridx_ | Radial evaluation coordinates. |
| [in] | gridy_ | Periodic poloidal evaluation coordinates [rad]. |
| [out] | output | Real values shaped by the two evaluation grids. |
| [in] | input | Flattened real spline coefficients. |
| 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.
| [in] | gridx_ | Radial evaluation coordinates. |
| [in] | gridy_ | Periodic poloidal evaluation coordinates [rad]. |
| [out] | output | Complex values shaped by the two evaluation grids. |
| [in] | input | Flattened complex spline coefficients. |
| 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.
| [in] | gridx_ | Radial evaluation coordinates. |
| [in] | gridy_ | Poloidal evaluation coordinates [rad]. |
| [out] | f | Expansion values. |
| [out] | dfdx | Radial derivatives. |
| [out] | dfdy | Poloidal derivatives [rad^-1]. |
| [in] | input | Flattened spline coefficients. |
Evaluate nonperiodic radial basis functions at x.
| [out] | fun | Array of degree nonzero basis values. |
| [out] | pos | Corresponding zero-based coefficient indices. |
| [in] | x | Radial coordinate in [xmin,xmax]. |
Evaluate radial basis values and physical-coordinate derivatives.
| [out] | fun | Basis values. |
| [out] | fund | Derivatives \(dB_i/dx\). |
| [out] | pos | Coefficient indices. |
| [in] | x | Radial coordinate. |
Evaluate periodic poloidal basis values and wrapped indices.
| [out] | fun | Array of degree nonzero basis values. |
| [out] | pos | Corresponding wrapped coefficient indices. |
| [in] | y | Poloidal angle [rad]. |
| void orb5x::BSplinesBasis::computeBSplinesY_fft | ( | Kokkos::View< Complex * > & | basisspline_m_out, |
| Real | y | ||
| ) | const |
Evaluate the Fourier representation of the poloidal spline basis.
| [out] | basisspline_m_out | Complex basis factors by poloidal mode. |
| [in] | y | Poloidal angle [rad]. |
Evaluate periodic poloidal basis values and derivatives.
| [out] | fun | Nonzero basis values. |
| [out] | fund | Physical derivatives dB_i/dy [rad^-1]. |
| [out] | pos | Wrapped coefficient indices. |
| [in] | y | Poloidal angle [rad]. |
Evaluate periodic toroidal basis values and wrapped indices.
| [out] | fun | Array of degree nonzero basis values. |
| [out] | pos | Corresponding wrapped coefficient indices. |
| [in] | z | Toroidal angle [rad]. |
| void orb5x::BSplinesBasis::computeBSplinesZ_fft | ( | Kokkos::View< Complex * > & | bspline_n_out, |
| Real | z | ||
| ) | const |
Evaluate the Fourier representation of the toroidal spline basis.
| [out] | bspline_n_out | Complex basis factors by toroidal mode. |
| [in] | z | Toroidal angle [rad]. |
| Real orb5x::BSplinesBasis::computeCouplingCoeff | ( | int | n, |
| int | NB | ||
| ) | const |
Compute a periodic B-spline Fourier coupling coefficient.
| [in] | n | Signed Fourier mode number. |
| [in] | NB | Number of periodic basis intervals. |
| void orb5x::BSplinesBasis::computeMapping1to2 | ( | int | a, |
| int & | i, | ||
| int & | j | ||
| ) | const |
Invert computeMapping2to1() for one-based indices.
| [in] | a | One-based flattened coefficient index. |
| [out] | i | First/radial index. |
| [out] | j | Second/periodic index. |
| int orb5x::BSplinesBasis::computeMapping2to1 | ( | int | i, |
| int | j | ||
| ) | const |
Map one-based (i,j) indices to a one-based flat index.
| [in] | i | First/radial basis index. |
| [in] | j | Second/periodic basis index. |
j + ny*(i-1).
|
static |
Map one-based (i,j) indices using a caller-supplied period.
| [in] | i | First index. |
| [in] | j | Second index. |
| [in] | n | Second-dimension extent. |
j + n*(i-1).
|
static |
Destroy the global instance (matches old destroyBSplinesBasisModule).
|
static |
Create or replace the process-wide basis instance.
| [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_basis | Basis implementation selector. |
initBSplinesBasis in BSplinesBasis.F90.
|
static |
Access the process-wide basis instance.
| std::runtime_error | if initBSplinesBasis() has not been called. |
|
noexcept |
Release current resources and take ownership from the source.
|
delete |
Copy assignment is disabled.
| Kokkos::View<Complex*> orb5x::BSplinesBasis::basisspline_m |
Fourier-transformed poloidal spline.
| Kokkos::View<Complex*> orb5x::BSplinesBasis::basisspline_n |
Fourier-transformed toroidal spline.
| int orb5x::BSplinesBasis::bsplines_uniform |
Uniform-grid selector retained from the Fortran basis module.
| int orb5x::BSplinesBasis::degree |
Number/order selector of locally nonzero basis functions.
| Real orb5x::BSplinesBasis::dx |
Uniform radial interval width.
| Real orb5x::BSplinesBasis::dx_inv |
Inverse radial interval width.
| Real orb5x::BSplinesBasis::dy |
Uniform poloidal interval width [rad].
| Real orb5x::BSplinesBasis::dy_inv |
Inverse poloidal interval width.
| Real orb5x::BSplinesBasis::dz |
Uniform toroidal interval width [rad].
| Real orb5x::BSplinesBasis::dz_inv |
Inverse toroidal interval width.
| Kokkos::View<Real*> orb5x::BSplinesBasis::gridX |
Radial knot/grid coordinates.
| Kokkos::View<Real*> orb5x::BSplinesBasis::gridY |
Poloidal knot/grid coordinates [rad].
| Kokkos::View<Real*> orb5x::BSplinesBasis::gridZ |
Toroidal knot/grid coordinates [rad].
| Complex orb5x::BSplinesBasis::icomplex |
Imaginary unit used by spectral phase calculations.
| Real orb5x::BSplinesBasis::lx |
Radial domain length xmax-xmin.
| Real orb5x::BSplinesBasis::ly |
Poloidal period [rad].
| Real orb5x::BSplinesBasis::lz |
Toroidal period [rad].
| int orb5x::BSplinesBasis::ns_loc |
Number of radial solution coefficients including endpoint basis support.
| int orb5x::BSplinesBasis::nx |
Number of radial intervals.
| int orb5x::BSplinesBasis::ny |
Number of periodic poloidal intervals.
| int orb5x::BSplinesBasis::nz |
Number of periodic toroidal intervals.
| Real orb5x::BSplinesBasis::xmax |
Upper radial boundary.
| Real orb5x::BSplinesBasis::xmin |
Lower radial boundary.
| Real orb5x::BSplinesBasis::ymax |
Upper poloidal boundary [rad].
| Real orb5x::BSplinesBasis::ymin |
Lower poloidal boundary [rad].
| Real orb5x::BSplinesBasis::zmax |
Upper toroidal boundary [rad].
| Real orb5x::BSplinesBasis::zmin |
Lower toroidal boundary [rad].