Utopia - a performance-portable C++ library for non-linear algebra
Utopia is a C++ embedded domain specific language designed for parallel non-linear solution strategies. Utopia combines advantages of high-level programming interfaces with the advantages of scripting languages. On the one hand, it allows using high-level abstractions while providing access to the native low-level data-structures. On the other hand, it facilitates expressing complex numerical procedures by means of few lines of code. This is achieved by separating the model from the computation, thus allowing us to keep the implementation details hidden from the code of applications such as non-linear solution algorithms and finite element assembly. This separation is realized by using C++ meta-programming and particular evaluation strategies which allow mapping an abstract representation of the computation to the actual code computing the result.