Skip to content

Draft: TensorRegions core data structures

Chris Cantwell requested to merge ccantwel/nektar:feature/tensorregions into master

Issue/feature addressed

Nektar++ currently supports solving PDEs in up to three dimensions. Some problems, such as the Vlasov-Poisson equation in modelling plasma kinetics, requires the solution of a higher-dimensional PDE in a potentially six-dimensional position-velocity space. A natural solution to this is to construct a finite element space as a tensor-product of our existing lower-dimensional finite element spaces.

Proposed solution

Implementation of a TensorRegions library, which represents a finite element space on a tensor-product of lower-dimensional finite element spaces (from MultiRegions). This MR provides the initial groundwork for this library, including the core data structures.


There are two core classes in the proposed TensorRegions library:

  • TensorRegion, which encapsulates the high-dimensional finite element space;
  • TensorStorage, which encapsulates the storage of a solution on such a space. The TensorStorage class has a subclass TensorStorage::View, which allows one to operate on the data along a particular slice of the high-dimensional space (corresponding to one of the lower-dimensional spaces). There is also the ability to extract the data (of type Array)from the view, as well as inject data back into the higher-dimensional storage.




This MR corresponds to deliverable D1.1 for the UKAEA project on solving high-dimensional plasma kinetics in Nektar++.


  • Functions and classes, or changes to them, are documented.
  • User guide/documentation is updated.
  • Changelog is updated.
  • Suitable tests added for new functionality.
  • Newly added files are correctly formatted.
  • License added to any new files.
  • No extraneous files have been added (e.g. compiler output or test data files).
Edited by Chris Cantwell

Merge request reports