Chapter 2

Nektar++ [15], is an open-source software framework designed to support the development of high-performance scalable solvers for partial differential equations using the spectral/hp element method. What in part makes Nektar++ unique is that it is an initiative to overcome the mathematical complexities of the methods by encapsulating them within an efficient cross-platform C++ software environment, consequently making the techniques more accessible to the broader scientific and industrial communities. The software supports a variety of discretization techniques and implementation strategies [61171612], supporting methods research as well as application-focused computation, and the multi-layered structure of the framework allows the user to embrace as much or as little of the complexity as they need. The libraries capture the mathematical constructs of spectral/hp element methods in the form of a hierarchy of C++ components, while the associated collection of pre-written PDE solvers provides out-of-the-box functionality across a range of application areas, as well as a template for users who wish to develop solutions for addressing questions in their own scientific domains.

The cross-platform nature of the software libraries enables the rapid development of solvers for use in a wide variety of computing environments. The code accommodates both small research problems, suitable for desktop computers, and large-scale industrial simulations, requiring modern HPC infrastructure, where there is a need to maintain efficiency and scalability up to many thousands of processor cores.

Nektar++ provides a single codebase with the following key features:

In addition to the core functionality listed above, Nektar++ includes a number of solvers covering a range of application areas. A range of pre-processing and post-processing utilities are also included with support for popular mesh and visualization formats, and an extensive test suite ensures the robustness of the core functionality.

 2.1 The Ethos of Nektar++
 2.2 The Structure of Nektar++
 2.3 Assumed Proficiencies
 2.4 Other Software Implementations and Frameworks
 2.5 How to Use This Document