Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[UNRELEASED]
Added
- Add GVEC in the toolchains.
Fixed
- Fix compilation errors due to use of
std::make_tuplein functions that are GPU compatible. - Fix errors in
InterfaceDerivCoeffsfor uniform patches with a different \(\Delta x\).
Changed
- Rename
SingleInterfaceDerivativesCalculatortoInterfaceDerivCoeffs. - Rename
SingleInterfaceDerivativesCalculatorCollectiontoInterfaceDerivCoeffsCollection. - Rename
SingleInterfaceDerivativesCalculator::get_function_coefficients()toInterfaceDerivCoeffs::get_approx_deriv(). - Rename file
single_interface_derivatives_calculator.hpptointerface_derivative_coefficients.hpp. - Rename file
single_interface_derivatives_calculator_collection.hpptointerface_derivative_coefficients_collection.hpp.
Deprecated
Removed
- Removed
.span_viewand.span_cviewfrom Gyselalib++ objects.
Dependency requirements
- Remove Dask dependency in the tests.
- Update DDC to v0.16.0.
[v0.8.0] - 2026-09-09
Added
- Add an
extrapolation_ruleargument toGMGPolarPoissonLikeSolver. Default no extrapolation. - Add a new constructor for
GaussLegendrefrom an index range describing the cell edges. - Add a
GradientCreatoroperator to group derivative calculations. - Add a
NDLagrangeEvaluatorclass. - Add
eval_basis_and_n_derivsfunction to Lagrange basis operators. - Add
derivfunction to Lagrange evaluation. - Add
concepts::InterpolationBuilder1Dandconcepts::Interpolation1D. - Add new constructors for
MultipatchFieldMemto allow labelling. - Add more labels to memory allocations.
- Add a
NDIdentityInterpolationBuilderclass. - Add a new abstract class
IPolarPoissonLikeSolver. - Add data type parametrisation to
ConstantIdentityInterpolationExtrapolationRule. - Add support for arbitrary precision quadrature.
- Add support for arbitrary precision norm calculations.
- Add an element-wise version of
SplinePolarFootFinderto reduce memory consumption. - Add a
landau4d_fft_lagrangetarget for 3D Landau damping with Lagrange interpolation. - Add an optional
IdxRangeargument to the constructor ofLagrangeInterpolator. - Add a new
init_lagrange_dependent_idx_rangemethod. - Add a MPI scope guard.
- Add MI250X toolchain for LUMI.
- Add a CMake option to control the discovery timeout of Gyselalib++ tests.
- Added
PolarFootFinderto replaceSplinePolarFootFinderfor clarity of Advection and Foot finding spaces. - Allow polar advection to modify a subset of the distribution function.
- Add a
LocalPartialDerivativeCreatorconcept to describe partial derivatives that can be called locally. - Add a method
get_derivativetoCentralFDMPartialDerivativeso it respects theLocalPartialDerivativeCreatorconcept. - Add class
GMGPolarPoissonLikeSolverto allow the use of GMGPolar as a polar Poisson solver. - Add GMGPolar in the toolchains.
- Allow
SplineInterpolatorandLagrangeInterpolatorto specify custom extrapolation rules. - Allow
IdentityInterpolationBuilderclass to take a field on a strided layout. - Add a
DiscreteMappingclass to handle ND mappings whose values are only known at the mesh points of a grid. - Add a
CoordWithOPointclass to recognise radial and poloidal components of a 2D coordinate. - Add MI300 toolchain for Adastra.
- Add CMake installation commands and call the package
gyselalibxx.
Fixed
- Fix missing load of
pdiplugin-pycallin some Spack-based toolchains. - Fix missing update of Spack repos before loading environments.
- Fix missing
PDIEvent(initialisation)in the guiding centre (X,Y) simulation. - Fix
ddcHelper::assign_elementsto allow a ND tensor to be truncated to a MD tensor (with M\<N). - Fix use of
PolarSplineFEMPoissonLikeSolverwith a ND metric tensor (with N>2). - Decrease memory usage in
BslAdvection1D. - Fix
compute_coeffs_on_mappingto allow integration when a coordinate change allows the determinant of the Jacobian to be calculated with less information than is required to calculate the Jacobian matrix. - Fix hardcoded Homogeneous Hermite boundary conditions in
BslAdvection1D. - Decrease memory usage in
SplinePolarFootFinder. - Fix GCC version on Adastra toolchains.
- Fix use of
BslAdvectionSpatialandBslAdvectionVelocitywith non-double precision. - Fix H100 toolchain on Jean-Zay.
- Fix Lagrange basis non-uniform initialisation for a sub-domain.
- Fix use of
ExtrapolationRule::Constantfor 2D splines. - Fix use of a generic interpolator in
FEM1DPoissonSolver,PolarFootFinderandBslAdvectionPolar. - Fix use of polar advection with
DiscreteMappingclass.
Changed
- Changed the name of class
SplineBuliderDerivField2Dto fix typo (->SplineBuilderDerivField2D). - Update DDC to v0.15.0 (see also v0.14.0 and v0.13.0).
- Changed FindLAPACKE CMake module to the version in DDC.
- Renamed
DiscreteToCartesian->DiscretePoloidalCSSplineMapping. - Renamed
DiscreteToCartesianBuilder->DiscretePoloidalCSSplineMappingBuilder. - Changed
BslAdvectionPolartemplate parameters and constructor to take a builder and evaluator instead of anInterpolator2D. - Changed new
concepts::InterpolationEvaluatorconcept and associatedInterpolationEvaluatorTraitsclass to generalise to ND. - Changed new
concepts::InterpolationBuilderconcept and associatedInterpolationBuilderTraitsclass to generalise to ND. - Renamed
ACTIVATE_RESTART_TESTS->GYSELALIBXX_ACTIVATE_RESTART_TESTS. - Renamed
POISSON_2D_BUILD_TESTING->GYSELALIBXX_POISSON_2D_BUILD_TESTING. - Pin toolchains to Python 3.13.
- Disable some costly variants in Spack based toolchains.
- Changed the order of arguments to
PolarSplineFEMPoissonLikeSolverto respect output argument first convention. - Use any callable in
PolarSplineFEMPoissonLikeAssemblerinstead of spline coefficients. - Add interpolation operators to
PolarSplineFEMPoissonLikeSolverconstructor. - Take pointwise values for
PolarSplineFEMPoissonLikeSolver::update_coefficients. - Allow pointwise values to be passed to
PolarSplineFEMPoissonLikeSolver::operator(). - Rename
polarpoissonlikesolver.hpp->polar_spline_fem_poisson_like_solver.hpp. - Allow the components and determinant of the Jacobian of a coordinate transformation to be any floating point precision.
- Prefixed the name of the Kokkos region with "(GSLX)"
- Use Simpson quadrature for XYVxVy Landau damping.
- Update py-dask in the CPU Spack toolchain.
- Disable python for PDI and pdiplugin-pycall on macOS.
- Enforce version of Kokkos Tools in all toolchains for reproducibility.
- Remove default O1 optimisation flag.
- Changed type of species identifier read in
read_speciesPDI event (frominttoint64). - Remove version constraint on the indirect dependency Kokkos-FFT.
- Use uppercase L suffix for long double literals.
- Allow passing fields defined on strided domains to
BslAdvection1D. - Allow
run_cppcheckCI script to be run in parallel. - Simplify
restrict_to_idx_rangeimplementation. - Rename CMake options
POLAR_SPLINES_TEST_DEGREE_[MIN/MAX]toGYSELALIBXX_POLAR_SPLINES_TEST_DEGREE_[MIN/MAX]. - Changed
ExtrapolationRule::RULENAMEfrom an enum toExtrapolationRule::RuleName, a struct tag in a namespace. - Remove the C compiler dependency.
- Make the dependency on GoogleTest dependent on the CMake option
GYSELALIBXX_BUILD_TESTING. - Group extrapolation rules by dimension in
SplineInterpolatorandLagrangeInterpolator. - Group spline boundary closure rules by dimension in
SplineInterpolator. - Change the
LagrangeInterpolatortemplates to allow ND cases to be handled. - Change the
SplineInterpolatortemplates to allow 2D cases to be handled. - Setup
GMGPolarinGMGPolarPoissonLikeSolver::update_coefficientsinstead ofGMGPolarPoissonLikeSolver::operator(). - Use
Interpolatorconcept instead ofBuilderandEvaluatorclasses to simplify classes: PolarFootFinderDiscretePoloidalCSSplineMappingBuilderRefinedDiscretePoloidalCSSplineMappingBuilderBslPredCorrRThetaBslExplicitPredCorrRThetaBslImplicitPredCorrRThetaPolarSplineFEMPoissonLikeSolverGMGPolarPoissonLikeSolver- The CMake namespace
gslxhas been renamedgyselalibxx.
Deprecated
- Deprecated
SplinePolarFootFinder.
Removed
- Remove DDC submodule.
- Remove 2D
Interpolatorclasses: IInterpolator2DSplineInterpolator2D- Remove Google Test submodule.
- Remove ruche toolchain.
- Remove
GYSELALIBXX_VERSION_*CMake variables. - Remove out-of-date Leonardo toolchain.
- Remove unuseful defaulted template parameters
MinBoundandMaxBoundfromLagrangeInterpolator. - Remove unused superclass
IPolarFootFinder. - Remove BslAdvectionPolar::operator() taking
advection_field_xy_centre. - Remove
cartesian_tag_*aliases in mappings. - Remove
cylindrical_tag_*andtoroidal_tag_*aliases inToroidalToCylindrical. - Remove
LAPACKdependency (LAPACKEremains).
[v0.7.0] - 2026-03-18
Added
- Add
SplineInterpolatorclass to group a compatible DDC spline builder and evaluator. - Add
LagrangeInterpolatorclass to group a compatible builder and evaluator. - Add constructors taking a
concepts::Interpolatorclass instance for: BslAdvectionSpatialBslAdvectionVelocityBslAdvection1DFEM1DPoissonSolver- Add a constructor to
BslAdvection1Dto use the same interpolator type for both the advected function and the advection field. - Add new constructors for
VectorFieldMemto support labels as used in DDC and Kokkos. - Added index range assertions in
Quadrature.
Fixed
- Add missing
enable_tensor_typeforCartesianLeviCivitaTensorand LeviCivitasize().
Changed
- Add Koliop in all toolchains.
- Changed spline boundary condition in velocity dimensions in the XVx and XYVxVy geometries to use homogeneous Hermite boundary conditions.
- Change
BslAdvectionVelocityto stop providing values for the derivatives at the boundaries. - Add labels to all parallel constructs and many variable allocations.
- Completed the porting of
PolarSplineFEMPoissonLikeAssemblerto GPU (less memory, fewer data transfers, faster execution). - Changed interface of PolarSplineFEMPoissonLikeSolver to split initialisation from coefficient setting.
Deprecated
- Deprecate constructors taking both builders and evaluators n favour of constructors taking Interpolator classes for:
BslAdvectionSpatialBslAdvectionVelocityBslAdvection1DFEM1DPoissonSolver
Removed
- Remove deprecated
Lagrangeclass. - Remove Koliop submodule.
[v0.6.2] - 2026-03-06
Fixed
- Ensure
CoordRThetais defined inpolarpoissonlikeassembler.hpp.
[v0.6.1] - 2026-03-06
Fixed
- Allow
neumann_spline_quadrature_coefficients_1dto work withHOMOGENEOUS_HERMITEboundary conditions. - Fix non-uniform periodic interpolation point selection.
Changed
- Modified
Quadratureto allow the batched operator to work on strided data.
Removed
- Removed the mini-app and moved it to its own repository mini-app.
[v0.6.0] - 2026-03-05
Added
- Add
UniformLagrangeBasisandNonUniformLagrangeBasisclasses describing Lagrange bases using the second barycentric formulation. - Add the fluid moments computation in pycall block to the mini-application
- Add
IdentityInterpolationBuilderto copy data required for an interpolation operator. - Add
LagrangeEvaluatorto evaluate a Lagrange polynomial centred on a given point. - Added error messages when wrong input is provided to a simulation.
- Add
concepts::InterpolationBuilderto makeIdentityInterpolationBuilderandddc::SplineBuilderinterchangeable. - Add
concepts::InterpolationEvaluatorto makeLagrangeEvaluatorandddc::SplineEvaluatorinterchangeable. - Allow
BslAdvection1D,BslAdvectionSpatial, andBslAdvectionVelocityto use variable precision.
Fixed
- Fix incorrect
memory_spacetype alias inDerivFieldMem. - Fix incorrect
memory_spacetype alias inDerivField. - Fix a memory leak in
DerivFieldMem. - Fix
ddc::coordinatecalled onddc::DiscreteElementoutside of the domain of definition insingle_interface_derivatives_calculator.hppand tests. - Fix a memory leak related to an object of type
PC_tree_tnot destroyed. - Fix boundary conditions in
single_interface_derivatives_calculator_collection_test.cpp. - Fix the finite differences method on a periodic domain.
- Fix the warning for using the deprecated target
PDI::pdistarting from PDI 1.10.1.
Changed
- Remove
ddc_syncutility. - Use generic binaries in the CPU Spack toolchain.
- Remove Kokkos-related submodules.
- Remove recursion from submodules synchronisation.
- Add missing
module purgein Persee toolchains. - Advection operators are now templated on
InterpolationBuilderandInterpolationEvaluatorconcepts instead ofInterpolatorclasses. - Use GCC 14 in the Jean-Zay toolchain.
- Reduce memory footprint of
FEM1DPoissonSolver. - Update DDC to v0.11.0.
- Moved assembly of the stiffness matrix from
PolarSplineFEMPoissonLikeSolverto newPolarSplineFEMPoissonLikeAssemblerclass.
Deprecated
- Deprecated
Lagrangeclass.
Removed
- Remove the default PDI configuration file for the mini-app.
- Remove
Interpolatorclasses: IInterpolatorLagrangeInterpolatorSplineInterpolator
[v0.5.0] - 2026-02-04
Added
- Add a temporary
SplineBuliderDerivField2Dto allow building a 2D spline representation from data stored in aDerivField. - Allow
FFTPoissonSolverto use variable precision. - Add
SingleInterfaceDerivativesCalculatorto compute an interface derivative of an equivalent global spline. - Add
SingleInterfaceDerivativeCalculatorCollectionto collect differentSingleInterfaceDerivativesCalculator. - Add a mini-application
gys_io.cppto test I/O performance and in-situ diagnostics on 5D distribution functions - Add Kokkos Tools in the environment on Persee toolchains
- Add a constructor of
SingleInterfaceDerivativesCalculatorfor the approximated interface derivatives. - Added support for A100 Raven cluster Spack toolchain.
- Add new function
ddcHelper::assign_elementsto assign elements of a tensor to another tensor containing the same elements. - Add a new coordinate transformation
LinearCoordTransform. - Add a new coordinate transformation
OrthogonalCoordTransforms.
Fixed
- Fix derivative indexing of a
DerivFieldobject. - Fix transposition of arrays with more than 7 dimensions.
- Fix missing guards in
FindLAPACKE.cmakeleading to duplicate target. - Fix spurious segfaults for toolchains based on Spack environment views.
Changed
- Extract spline definitions from
geometry.hppfiles into files calledspline_definitions_<geom_descriptor>.hppwhich are dedicated to tests or simulations. - Rename
geometry.hppfiles togeometry_<geom_descriptor>.hppto reflect the geometry that they describe. DerivFieldobjects are initialised on GPU by default.- Update DDC to v0.10.0.
- Change some Python class
scattered_coordarguments to keyword-only. - Increase C++ version to 20.
- Use concepts to describe coordinate transformation classes.
- Update koliop to v0.1.2.
- Make koliop discoverable with
find_package. - Simplify toolchains by disabling koliop LTO by default.
- Update Persee toolchains to GCC 13.
Deprecated
PolarBSplines::eval_deriv_r,PolarBSplines::eval_deriv_theta, andPolarBSplines::eval_deriv_r_and_thetaare deprecated in favour ofPolarBSplines::eval_deriv.PolarSplineEvaluator::deriv_dim_1,PolarSplineEvaluator::deriv_dim_2, andPolarSplineEvaluator::deriv_dim_1_and_2are deprecated in favour ofPolarSplineEvaluator::deriv.
Removed
- Remove unused temporal dimension
TingeometryXVx.
[v0.4.1] - 2025-12-12
Fixed
- Allow access to slices extracted from
const DerivField. - Fixed
LAPACKECMake target definition. - Uses patched cray-mpich package forcing using of the GTL on dependencies.
[v0.4.0] - 2025-12-10
Added
- Add getters to
DerivFieldtypes to access the associated index ranges. - Add H100 Jean-Zay toolchain.
- Add an
operator()inBslAdvectionPolarto advect a function with an advection field along<R, Theta>. The operator averages the values of the advection field on the first ring to get its value at the O-point. - Add
static_assertexpressions for spline builder/evaluator pairs. - Added
equilibrium::init_from_inputmethod to choose XVx equililibrium in input file.
Fixed
- Ensure
std::absorKokkos::absis preferred overabs. - Specify return type for Lie-Poisson operator explicitly for better error messages.
- Ensure
copy_to_vector_spacecan be called for different memory layouts.
Changed
- Use patched recipes for the CPU Spack toolchain.
- Inject Kokkos Tools lib directory to
LD_LIBRARY_PATHin the Adastra toolchains. - Update and reorganize the Persee toolchains.
- Add pdiplugin-pycall to Persee toolchains.
- Add an assertion to
PolarSplinesto ensure that the domain matches the assumptions. - Allow a local installation of Kokkos > v4.4.1 to be used by CMake.
- Rename static variable
is_curvilinear_2d_mapping_vto the more accurate:is_coord_transform_with_o_point_v. - Move Python cache files out of the Spack installation tree on Adastra and Jean-Zay.
- Use CCFR environment variables on CINES and IDRIS machines when possible.
- Update DDC dependency to v0.9.0.
- Combine
landau_fftandbumpontail_fftexecutables into avlasovpoisson_xvx_fftexecutable. - Combine
landau_fem_uniformandbumpontail_fem_uniformexecutables into avlasovpoisson_xvx_fem_uniformexecutable. - Make the choice of equililibrium an input parameter for
vlasovpoisson_xvxexecutables. - Move static class method
BumpontailEquilibrium::init_from_inputto namespacebumpontail_equilibrium::init_from_input. - Move static class method
MaxwellianEquilibrium::init_from_inputto namespacemaxwellian_equilibrium::init_from_input. - Update CPU Spack toolchain to Spack v1 and update packages, for example Kokkos 4.7, Python 3.12:.
- Update Adastra Spack toolchains to Spack v1 and update packages, for example Kokkos 4.7, Python 3.12:. Use OpenBLAS instead of Cray LibSci and raw GCC compilers.
- Update Jean-Zay Spack toolchain to Spack v1 and update packages, for example Kokkos 4.7, Python 3.12:.
- Use LAPACKE to call LAPACK functions.
[v0.3.0] - 2025-09-03
Added
- Add a curl operator.
- Port
PolarSplineEvaluatormethods to GPU. - Add methods to
PolarSplineEvaluatorto avoid unnecessary creation of fields of coordinates. - Allow a
DerivFieldto be stored in aMultipatchField. - Add
DerivFieldOnPatchandIdxRangeSliceOnPatchaliases for theMultipatchFieldintypes.hpp. - Allow
minandmaxfrommath_tools.hppto be called from GPU. - Add a
periodic_strips_non_uniform_2d_9patchesgeometry.
Fixed
- Modify
ruche.v100/environment.shfile to fix tokamaxi simulation segfault issues. - Fix type of derivatives stored in
DerivFieldMemandDerivFieldtypes. - Fixed memory error in
PolarSplineFEMPoissonLikeSolver. - Remove non-parallelisable loop in
PolarSplineFEMPoissonLikeSolver::init_nnz_per_line. - Remove use of
std::cyl_bessel_jwhich is not available in libc++. - Fix
mi250.hipcc.adastra.spacktoolchain. - Fix uninitialised values being used as an initial guess for the result of the matrix equation in
PolarSplineFEMPoissonLikeSolver. - Fix missing grids when calling
collect_grids_on_dim_t. - Fix
is_borrowed_deriv_field_v<>inderivative_field_common.hppfile. - Fix
phi_eqin diocotron and vortex-merger simulations.
Changed
- Change interface of
EdgeTransformation::search_for_matchto return anout_of_bounds_idxinstead of a boolean. - Change spack setup in CPU installation script (
prepare.sh) to create and use independent spack installation. - Change template parameters of
PolarSplineEvaluatorto add execution and memory space information. - Allow
get_idx_rangeto be called from a GPU execution space. - Uniformise toolchains.
- Allow batch CSR convergence parameters to be specified in the constructor of
PolarSplineFEMPoissonLikeSolver. - Change the internals of
PolarSplineFEMPoissonLikeSolverto precalculate fewer values. - Change the internals of
PolarSplineFEMPoissonLikeSolverto avoid calls to DDC's internals. - Clean up code in
BslPredCorrRTheta::operator(). - Clean up code in
BslExplicitPredCorrRTheta::operator(). - Clean up code in
BslImplicitPredCorrRTheta::operator(). - Ported
PolarSplineFEMPoissonLikeSolver::operator()to GPU. The RHS function passed as argument will now be evaluated on GPU. - Change constructor arguments of
BslImplicitPredCorrRThetato pass a spline builder and evaluator which operate on GPU. - Remove the const version of
get_values_field()and change it intoget_values_const_field()inDerivFieldCommon. - Change alias in (r, theta) geometry
DConstVectorFieldRTheta->DVectorConstFieldRTheta. - Change constructor arguments of
VortexMergerEquilibriato pass a spline builder and evaluator which operate on GPU. - Port
PoissonLikeRHSFunctionfrom the (r, theta) geometry to GPU. - Change constructor argument of
PoissonLikeRHSFunctionfrom the (r, theta) geometry to pass spline coefficients on GPU. - Use Spack to install the Kokkos ecosystem in the MI250 Adastra toolchain.
- Use Spack to install the Kokkos ecosystem in the GENOA Adastra toolchain.
- Use a single rocm stack on Adastra.
Deprecated
Removed
- Remove deprecated method
PolarBSplines::integrals. - Remove unhelpful
PolarSplineclasses in favour ofDField<IdxRange<PolarBSplines>>types. - Remove unused broken method
PolarSplineEvaluator::integrate. - Remove
minandmaxfrommath_tools.hpp(functionality is available in std and Kokkos namespaces).
[v0.2.0] - 2025-07-03
Added
- Add a Gyroaverage operator with tests for circular geometry.
- Curvilinear coordinate change classes have an O-point method to retrieve the O-point in the non-curvilinear coordinates.
- Add a batched
operator()toDiscreteToCartesianallowing a field of coordinates to be converted. - Add a
LiePoissonBracket::operator()overload which takes a 2D tensor as the second argument to the bracket. - Add a function
PDI_expose_vector_fieldto output a vector field via PDI. - Add a
control_pointsmethod toDiscreteToCartesianto allow all control points to be retrieved at once.
Fixed
- Fix uninitialized warning in the
Tensorclass. - Fix unused
m_magnetic_fieldvariable inMaxwellianEquilibriumclass. - Fix break points incorrectly labelled as knots.
- Fix minimum version requirement of Kokkos.
- Fix tolerance of floating point comparisons in JacobianMatrixAndJacobianCoefficients and MultipatchSplineEvaluatorTest tests
- Fix unnecessary
std::movecalls. - Fix missing assertion in
LeviCivitaTensorto prevent division by 0 when Jacobian is calculated at singular point. - Fix bad result of
is_tensor_vforIdentityTensor.
Changed
- Bumped the minimum CMake version to 3.25 to benefit from the
add_subdirectory(.. SYSTEM)feature. - Change the interface of
IVlasovSolverandIQNSolveringeometryXYVxVyto store the electric field in aVectorField. - Integration of
ddc::StridedDiscreteDomainby makingIdxRangeSlicea type alias. - The parameter
iter_starthas been removed from the constructor ofRestartInitialisation. - Generalise
compute_coeffs_on_mappingto work with any mapping. - Rely on GPU-aware MPI to allow GPU-direct MPI for
MPITransposeAllToAll. - Curvilinear coordinate change classes take a
Coordtype to specify the O-point in the constructor. - Allow
init_discrete_spaceto be used to initialisePolarBSplineswith a GPU-basedDiscreteToCartesiancoordinate change operator.
Deprecated
[v0.1.1] - 2025-05-30
Fixed
- Fix paths in root
CMakeLists.txtfile to ensure it can be correctly used in a submodule. - Update remaining use of
ddc::Coordinateto use Gyselalib++ conventions (Coord). - Update coding conventions to match what is applied.
[v0.1.0] - 2025-05-28
Added
- First release of Gyselalib++
- Advection operators
- 1D Semi-Lagrangian spatial advection (\( \frac{df_s}{dt}= \sqrt{\frac{m_e}{m_s}} v \frac{\partial f_s}{\partial x} \))
- 1D Semi-Lagrangian velocity advection (\( \frac{df_s}{dt}= q_s \sqrt{\frac{m_e}{m_s}} E \frac{\partial f_s}{\partial v} \))
- 1D Semi-Lagrangian advection with a provided advection field
- 2D Semi-Lagrangian advection on a polar plane with a provided advection field
- Collisions
- Collision operator in \((v_\parallel,\mu)\)
- Coordinate transformation operators and tools
- Coordinate transformation operators
- Triangular Barycentric coordinates <-> Cartesian coordinates
- Circular coordinates <-> Cartesian coordinates
- Cylindrical coordinates <-> Cartesian coordinates
- Tokamak-shaped Czarny coordinates <-> Cartesian coordinates
- Toroidal coordinates -> Cylindrical coordinates
- Discrete coordinates -> Cartesian coordinates
- Identity transformation
- Composite coordinate transformation
- Tools to manage coordinate transformations by:
- Getting the inverse Jacobian matrix at a given coordinate
- Getting the inverse Jacobian matrix at the O-point (to provide explicit equations without an if)
- Evaluate the metric tensor at a given coordinate
- Map a vector from one vector space to another
- Additional data types
- DerivativeField to store a field and its boundary derivatives
- VectorField
- Tensor type and tools
- Levi-Civita tensor
- Identity tensor
- Tensor multiplication operator
- Interpolation operators
- Lagrange interpolation
- Spline interpolation
- Polar spline evaluation
- General Mathematical tools
- Methods for calculating the L-norms
- Derivative calculators
- Finite differences method (with and without known boundary values)
- Derivatives from 1D or 2D spline representations
- Constant derivatives of a known value
- Miscellaneous
- sum
- norm
- modulo
- pow for integer powers
- factorial
- min
- max
- determinant
- inverse
- scalar product
- tensor product
- Solvers for matrix equations with different sparsity patterns
- Banded matrix
- Batched CSR (compressed sparse row) matrix
- Batched ELL matrix
- Batched tridiagonal matrix
- Matrix with dense corners
- Matrix with dense bottom right-hand corner
- Dense matrix
- Positive-definite symmetric tridiagonal matrix
- Periodic banded matrix (banded plus top-right and bottom-left corners)
- MPI parallelisation tools
- MPI all to all transposition
- Solvers for partial differential equation (PDEs)
- 1D Finite elements method (FEM)
- 1D Fast Fourier transform (FFT)
- Polar Poisson-like solver to solve \( - \nabla \cdot (\alpha \nabla \phi) + \beta \phi = \rho \) on a polar domain
- Quadrature methods and tools
- Definition of quadrature coefficients
- Gauss-Legendre
- Trapezoid
- Simpson
- Spline-based quadrature (with homogeneous Neumann boundary conditions or with an equal number of spline bases and interpolation points)
- ND coefficients from multiple 1D quadrature coefficients
- Definition of quadrature coefficients to calculate a volume on general coordinates
- Timestepping methods
- Euler
- Crank-Nicolson
- 2nd order Runge-Kutta (RK2)
- 3rd order Runge-Kutta (RK3)
- 4th order Runge-Kutta (RK4)
Notes
- This is an early development release (
v0.x); APIs may change