EuroSciPy logo


Cambridge, UK - 27-30 August 2014

Enhancing SfePy with Isogeometric Analysis

Robert Cimrman


SfePy (Simple Finite Elements in Python, is a framework for solving various kinds of problems (mechanics, physics, biology, ...) described by partial differential equations (PDEs) in two or three space dimensions. It is written mostly in Python and relies on the scientific Python software stack, most notably on fast vectorized operations provided by NumPy arrays, with heavy use of advanced broadcasting and "index tricks" features. C and Cython are used in places where vectorization is not possible, or is too difficult or unreadable. Other scientific Python packages used include: SciPy solvers and algorithms, Matplotlib for 2D and simple 3D plots, Mayavi for 3D plots and simple postprocessing GUI, SymPy for symbolic operations/code generation, PyTables for storing solutions and related data, etc.

SfePy is based on a nowadays standard and well-established numerical technique for finding approximate solutions of PDEs, or discretization method, the finite element method (FEM) [1]. In this method a continuous solution domain is approximated by a polygonal domain composed of small basic subdomains with a simple geometric shape (e.g. triangles in 2D, tetrahedrons in 3D) - the elements. The continuous fields of the PDEs are approximated by polynomials defined on the individual elements. This approximation is (usually) continuous over the whole domain, but its derivatives are only piece-wise continuous.

While the FEM approach has been very successful so far in solving a great number of engineering and other problems, it has some drawbacks. Let us point out those relevant to our topic:

  • Making a FE mesh from computer-aided design (CAD) geometrical description is in general a difficult task that takes a significant portion of the total problem solution time [2].

  • Some problems require/would be easier to solve if a higher continuity of approximation, both of the domain geometry and the fields, was available.

In the poster we present an enhancement to SfePy that should address the above drawbacks - an implementation of Isogeometric Analysis (IGA) [2]. In IGA, the CAD geometrical description in terms of NURBS (Non-uniform rational B-spline) patches is used directly for the approximation of the unknown fields, without the intermediate FE mesh. This means:

  • The domain boundary is as smooth as it should be - the geometry is exact.

  • The NURBS basis can have as high continuity as required (at least on a single patch).

Our implementation uses a variant of IGA based on Bézier extraction operators [3] that is suitable for inclusion into existing FE codes.


[1] Thomas J. R. Hughes, The Finite Element Method: Linear Static and Dynamic Finite Element Analysis, Dover Publications, 2000.

[2] J. Austin Cottrell, Thomas J.R. Hughes, Yuri Bazilevs. Isogeometric Analysis: Toward Integration of CAD and FEA. John Wiley & Sons. 2009

[3] Michael J. Borden, Michael A. Scott, John A. Evans, and Thomas J.R. Hughes: Isogeometric Finite Element Data Structures based on Bezier Extraction of NURBS, Int. J. Numer. Meth. Engng., 87: 15–47. doi: 10.1002/nme.2968, 2011