Commit 149eca45 authored by Mike Kirby's avatar Mike Kirby
Browse files


parent 0116a0de
% Preface
Like with any software project, people want to know it origins: what motivated it, what and who drove it, and what
constrained it. \nek{} officially started as a project idea in 2004 in Salt Lake City, UT, USA and we registered
the first commit to SVN in 2006. The basic backstory is as follows: Mike Kirby (University of Utah) and Spencer
Sherwin (Imperial College London) had both studied under George Karniadakis. Though Mike and Spencer did
not overlap in terms of their studies (Spencer was a Princeton graduate while Mike was a Brown graduate), they
both worked on \emph{Nektar}, a \shp{} element code supervised by George. George's research group has
had a long history of involvement in various software projects, e.g. PRISM (which has continued its existence
under Hugh Blackburn) and \emph{Nektar}. Spencer and George initiated the \emph{Nektar} code with triangular (2D) and
tetrahedral (3D) \shp{} elements in the early 1990s, and the code grew and evolved with additions
by Igor Lomtev, Tim Warburton, Mike Kirby, etc., all under the PhD advisor direction of George. Spencer
graduated from Princeton under George's supervision in 1995 and went on to Imperial College London
as a faculty member; Mike graduated from Brown under George's supervision in 2002 and went on to the
University of Utah in 2002. In 2004, Mike and Spencer teamed up to re-write \emph{Nektar} in light of modern
C++ programming practices and in light of what had been learned in the decade or so since its foundation.
What were the observations that motivated \nek{}? The first observation was that \emph{Nektar}'s origin
was triangular and tetrahedral \shp{} elements as applied to incompressible fluid mechanics
problems (i.e. the incompressible Navier-Stokes equations). These ideas were extended to
the compressible Navier-Stokes by Lomtev and the two parallel paths joined and extended into
what is often called Hybrid \emph{Nektar} by Tim Warburton. Hybrid \emph{Nektar} (referred to as \emph{Nektar} from
here on out) used the C++ programming paradigm to facilitate hybrid elements: triangles and
quadrilaterals in 2D and tetrahedra, hexahedra, prisms and pyramids in 3D. In addition, Warburton
structured the code in a way to allow extensions to the Arbitrary Lagrangian Eulerian (ALE) formulation
within \emph{Nektar}, as well as various other features such as the \emph{Nektar} Magneto-Hydrodynamics (MHD) solver.
Mike was mentored (as a student) by Warburton and continued to expansion of \emph{Nektar} (e.g. compressible
ALE solver, fluid-structure interaction capabilities, etc.). The upside of this expansion was that \emph{Nektar} could
be used for solver more and more engineering problems; the downside was that continually expanding and extending
\emph{Nektar} without re-evaluating its fundamental design meant that some components became quite
cumbersome from the programming perspective.
The second observation was occurred was that \shp{} elements as used within the incompressible
fluid mechanics world could be viewed as a special case of the broader set of high-order finite element methods
as applied to various fluid and solid mechanics systems. In fact, in a much wider context, these methods
represent ways of discretizing various partial differential equations (PDEs) using their weak (variational) form.
During the 1990s, it became more and more apparent that there was a broader context and a broader
community for discussing and disseminating the ideas surrounding high-order finite elements, and
correspondingly a fruitful environment for cross-pollination of ideas and programming practices.
With all this in mind, Mike and Spencer set out to re-architect \emph{Nektar} from the ground up, and in homage
to its C++ core, this new software suite was called \shp{}. \shp{}
is an open-source software framework designed to support the development
of high-performance scalable solvers for partial differential equations using
the \shp element method. High-order methods are gaining prominence in
several engineering and biomedical applications due to their improved accuracy
over low-order techniques} at reduced computational cost for a given number of degrees of freedom. However,
their proliferation is often limited by their complexity, which makes
these methods challenging to implement and use. \nek{} is an initiative to
overcome this limitation by encapsulating the mathematical complexities of the underlying method within an
efficient C++ framework, making the techniques more accessible to the broader
scientific and industrial communities.
% %
The software supports a variety of discretization techniques and implementation
strategies, 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 \shp{} element methods,
while the associated collection of pre-written PDE solvers provides
out-of-the-box application-level functionality and a template for users who wish to develop
solutions for addressing questions in their own scientific domains.
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment