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.

Implementation

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.

Tests

TODO

Notes

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

Checklist

  • 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