Implementation of a XFEM toolbox in Diffpack

The Diffpack Development Framework is an object-oriented software environment for the numerical solution of partial differential equations (PDEs). By its design, Diffpack intends to close the gap between black-box simulation packages and technical computing environments using interpreted computer languages. The framework provides a high degree of modeling flexibility, while still offering the computational efficiency needed for most demanding simulation problems in science and engineering. Technically speaking, Diffpack is a collection of C++ libraries with classes, functions and utility programs. The numerical functionality is embedded in an environment of software engineering tools supporting the management of Diffpack development projects. Diffpack supports a variety of numerical methods with distinct focus on the finite element method (FEM) but has no inherent restrictions on the types of PDEs and therefore applications to be solved. The key point of partition of unity enriched methods such as XFEM and GFEM is to help capture discontinuities and singularities or large gradients in solutions, which are not well resolved by h or p refinement [1]. The general idea is that the mesh need not conform to the moving boundaries so that minimal or no remeshing is required during the analysis. Our main motivation is to provide a generic implementation of enrichment within a flexible C++ environment, namely the Diffpack platform. The work was inspired by some of our earlier work [6,9] and that of other colleagues [5,7,8]. We demonstrate how object-oriented programming is particularly useful for the treatment of data structures and operations associated with XFEM : mesh-geometry interaction, non-standard integration rules, application of boundary conditions, treatment of level set data [2,6]. We detail the implementation of such features and verify and validate their implementation based on [5]. We show results based on unshifted, shifted [1] and study the behaviour of the stable generalized finite element method (SGFEM) to avoid blending effects and help control the conditioning of the system matrix [4]. For integration of elements cut by interface we use an in-house Delaunay Triangulation algorithm proposed by [3,5] and presented in detail in a companion paper.