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.
- Ensure
CoordRThetais defined inpolarpoissonlikeassembler.hpp.
- Allow
neumann_spline_quadrature_coefficients_1dto work withHOMOGENEOUS_HERMITEboundary conditions. - Fix non-uniform periodic interpolation point selection.
- Modified
Quadratureto allow the batched operator to work on strided data.
- Removed the mini-app and moved it to its own repository mini-app.
- 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.
- 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.
- 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
Lagrangeclass.
- Remove the default PDI configuration file for the mini-app.
- Remove
Interpolatorclasses:IInterpolatorLagrangeInterpolatorSplineInterpolator
- 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.
- 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.
- 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.
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.
- Remove unused temporal dimension
TingeometryXVx.
- Allow access to slices extracted from
const DerivField. - Fixed
LAPACKECMake target definition. - Uses patched cray-mpich package forcing using of the GTL on dependencies.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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).
- 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.
- 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.
- 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.
- 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.
- 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
- 1D Semi-Lagrangian spatial advection (
- Collisions
- Collision operator in
$(v_\parallel,\mu)$
- Collision operator in
- 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
- Coordinate transformation operators
- 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
- Definition of quadrature coefficients
- Timestepping methods
- Euler
- Crank-Nicolson
- 2nd order Runge-Kutta (RK2)
- 3rd order Runge-Kutta (RK3)
- 4th order Runge-Kutta (RK4)
- This is an early development release (
v0.x); APIs may change