Matteo Cicuttin: Thursday 2 March at 3 pm, A415 Inria Paris.
Abstract: Discontinuous Skeletal methods are devised at the mathematical level in a dimension-independent and cell-shape-independent fashion. Their implementation, at least in principle, should conserve this feature: a single piece of code should be able to work in any space dimension and to deal with any cell shape. It is not common, however, to see software packages taking this approach. In the vast majority of the cases, the codes are capable to run only on few very specific kinds of mesh, or only in 1D or 2D or 3D. On the one hand, this can happen simply because a fully general tool is not always needed. On the other hand, the programming languages commonly used by the scientific computing community (in particular Fortran and Matlab) are not easily amenable to an implementation which is generic and efficient at the same time. The usual (and natural) approach, in conventional languages, is to have different versions of the code, for example one specialized for 1D, one for 2D and one for 3D applications, making the overall maintenance of the codes rather cumbersome. The same considerations generally apply to the handling of mesh cells with various shapes, i.e., codes written in conventional languages generally support only a limited (and set in advance) number of cell shapes.
Generic programming offers a valuable tool to address the above issues: by writing the code generically, it is possible to avoid making any assumption neither on the dimension (1D, 2D, 3D) of the problem, nor on the kind of mesh. In some sense, writing generic code resembles writing pseudocode: the compiler will take care of giving the correct meaning to each basic operation. As a result, with generic programming there will be still differents versions of the code, but they will be generated by the compiler, and not by the programmer. As these considerations suggest, generic programming is a static technique: if correctly realized, the abstractions do not penalize the performance at runtime, because they will leave no trace in the generated code.
In this talk we will discuss how the Hybrid High Order method is implemented atop of DiSk++, a newly developed library for the generic implementation of Discontinuous Skeletal methods.