c 2015
The FEniCS Project Version 1.5
Martin S. Alnæs
1, Jan Blechta
2, Johan Hake
3, August Johansson
4,
Benjamin Kehlet
5, Anders Logg
6, Chris Richardson
7, Johannes Ring
8, Marie
E. Rognes
9, and Garth N. Wells
101Simula Research Laboratory, [email protected] 2Charles University in Prague, [email protected]
3Simula Research Laboratory, [email protected] 4Simula Research Laboratory, [email protected] 5Simula Research Laboratory, [email protected]
6Chalmers University of Technology and University of Gothenburg, [email protected] 7University of Cambridge, [email protected]
8Simula Research Laboratory, [email protected] 9Simula Research Laboratory, [email protected] 10University of Cambridge, [email protected]
Received: May 28th, 2015; final revision: December 1st, 2015; published: December 7th, 2015.
Abstract: The FEniCS Project is a collaborative project for the development of innovative concepts and tools for automated scientific computing, with a particular focus on the solution of differential equations by finite element methods. The FEniCS Project consists of a collection of interoperable software components, including DOLFIN, FFC, FIAT, Instant, mshr, and UFL. This note describes the new features and changes introduced in the release of FEniCS version 1.5.
1
Overview
FEniCS version 1.5 was released on 12th January 2015. This article provides an overview of the new features of this release and serves as a citable reference for FEniCS version 1.5. The FEniCS software can be downloaded from the FEniCS Project web page athttp://fenicsproject.org. The FEniCS software consists of a collection of interoperable components. These are, in alpha-betical order, DOLFIN, FFC, FIAT, Instant, mshr, and UFL. In addition, FEniCS includes the code generation interface component UFC, which is now technically a part of FFC. All FEniCS compo-nents, except mshr, are licensed under the GNU LGPL. Due to upstream dependencies, mshr is licensed under the GNU GPL. The components are released simultaneously with the same major and minor version numbers, making it straightforward for users to find compatible versions of the components. The version number of packages that may be unchanged are still incremented to avoid divergence of version numbers.
2
New features
2.1 Parallel computing
The performance of parallel computations with DOLFIN continues to be enhanced. Notable enhancements and new features in the 1.5 release include:
• switch to local (process-wise) degree-of-freedom indexing; for more details see subsec-tion2.9;
• full support (including from Python) for problems with over 232dofs via complete support for 64-bit indices;
• substantial improvements in performance scaling and memory use for degree-of-freedom map construction;
• new parallel mesh refinement strategy;
• support for overlapping mesh ‘ghost’ layers in parallel;
• interior facet integrals are now supported in parallel, which enables discontinuous Galerkin methods in parallel;
• improvements in parallel IO using HDF5.
DOLFIN has been used to solve the Poisson equation with over 12 billion degrees of free-dom [Richardson and Wells,2015] on 24576 cores on a Cray XC30.
Improvements have been made to decrease the load on the filesystem during just-in-time com-pilation, which can be a bottleneck on large machines. Further effort is required to address the well-known issue of importing Python modules on parallel computers.
A memory corruption issue during forks on OFED-based (InfiniBand) clusters has been tracked down. Users of OFED machines are advised to read the Instant README file and export the INSTANT_SYSTEM_CALL_METHODenvironment variable.
2.2 New mesh refinement strategy
A new refinement algorithm has been adopted for DOLFIN, following the work ofPlaza and
Carey[2000]. This algorithm uses edge bisection to subdivide the marked triangles of a Mesh,
be they the cells themselves in two dimensions, or the facets of tetrahedra in three-dimensions. The subdivision is chosen so as to maximize the internal angles of the new triangulation, thus maintaining mesh quality after multiple refinements; see Figure 1. Edges which are marked for refinement propagate between processes in parallel, whilst the refinement operation is local, resulting in good scaling.
2.3 Mesh generation: the new mshr component
The mesh generation functionality of FEniCS, except for simple meshes like UnitSquareMesh and UnitCubeMesh, has been moved to a new FEniCS Component named mshr. The motivation for this change is twofold: first, to simplify the list of dependencies and reduce the amount of resources (CPU time and memory usage) for building DOLFIN (by moving the CGAL dependency to mshr); and second, to simplify the addition of new features to the new meshing component. Currently, both CGAL and Tetgen are available as mesh generation backends for mshr.
Much like the old meshing interface in DOLFIN, the new mshr interface allows simple generation of meshes from Constructive Solid Geometry (CSG) descriptions, as demonstrated by the example listed below. The generated mesh is shown in Figure2.
Figure 1: Tetrahedron refined multiple times, whilst preserving mesh quality.
Figure 2: A mesh generated from a CSG description in FEniCS. The left image shows the surface of the generated tetrahedral mesh while the right image shows a volume rendering in which the subtracted sphere in the center is visible.
Python code
1 from dolfin import *
2 from mshr import *
3
4 # Define geometry
5 box = Box ( Point (0 , 0 , 0) , Point (1 , 1 , 1)) 6 sphere = Sphere ( Point (0 , 0 , 0) , 0.3)
7 cylinder = Cylinder ( Point (0 , 0 , -1) , Point (0 , 0 , 1) , 1.0 , 0.5) 8 geometry = box + cylinder - sphere
9
10 # Generate mesh
11 mesh = generate_mesh ( geometry , 16 )
Through a combination of simple CSG primitives and Boolean operations (and, or, negation), meshes can be created for geometries ranging from simple domains like the canonical L-shaped domain, to relatively complex geometries. Figure3shows a pair of meshes generated using mshr.
Figure 3: Meshes generated from CSG geometries using the new FEniCS mesh generation com-ponent mshr.
Figure 4: Multimesh solution of the Stokes problem on two overlapping non-matching meshes.
2.4 Multimesh finite element methods
Multimesh finite element methods (CutFEM) are finite element methods posed on two or more possibly non-matching meshes. The formulation of multimesh finite element methods involves the formulation of variational problems on function spaces composed by regular function spaces on the intersecting meshes. Continuity between meshes is imposed using Nitsche’s method and stability ensured by adding suitable stabilization terms (ghost penalties) to the variational problem.
FEniCS 1.5 adds support for the formulation of multimesh methods, including automatic and efficient computation of mesh-mesh intersections, quadrature rules for cut cells and interfaces, and expression of integrals that typically appear in the formulation of multimesh/CutFEM methods. Figure4shows results for a Taylor–Hood formulation for the Stokes problem on two overlapping and intersecting meshes; a boundary-fitted mesh embedding a propeller-shaped hole, which overlaps a fixed background mesh; for details seeJohansson et al.[2015].
The FEniCS interface to multimesh finite element methods currently requires a user to define the integrals in terms of the newly added custom_integral interface. This new interface enables code generation for integrals expressed on arbitrary domains, among them cut cells, interfaces, and overlaps, as illustrated by the following UFL code for expression of a multimesh formulation of Poisson’s equation:
Python code
1 # Define custom measures ( simplify syntax in future versions )
2 dc0 = dc (0 , metadata={" num_cells ": 1}) 3 dc1 = dc (1 , metadata={" num_cells ": 2}) 4 dc2 = dc (2 , metadata={" num_cells ": 2}) 5
6 # Define measures for integration
7 dx = dx + dc0 # domain integral 8 di = dc1 # interface integral 9 do = dc2 # overlap integral 10 11 # Parameters 12 alpha = 4.0 13 beta = 4.0 14 15 # Bilinear form
16 a = dot( grad (u) , grad (v))*dx \
17 - dot( avg ( grad (u)) , jump (v , n))*di \ 18 - dot( avg ( grad (v)) , jump (u , n))*di \ 19 + alpha/h*jump (u)*jump (v)*di \
20 + dot( jump ( grad (u)) , jump ( grad (v)))*do
On the C++ side, multimesh function spaces must currently be explicitly constructed as demon-strated by the following excerpt from the multimesh-poisson demo:
C++ code
1 // Create function spaces
2 MultiMeshPoisson::FunctionSpace V0 ( mesh_0 ); 3 MultiMeshPoisson::FunctionSpace V1 ( mesh_1 ); 4 MultiMeshPoisson::FunctionSpace V2 ( mesh_2 ); 5
6 // Build multimesh function space
7 MultiMeshFunctionSpace V;
8 V. parameters (" multimesh ")[" quadrature_order "] = 2; 9 V. add ( V0 );
10 V. add ( V1 ); 11 V. add ( V2 ); 12 V. build () ;
Future improvements to the multimesh functionality of FEniCS will include the introduction of specific integration measures in UFL, so that the measures don’t need to be defined in terms of custom_measure, as well as simplified and higher level interfaces for assembly and problem solving in DOLFIN.
2.5 Assembly of point integrals
In addition to the classical cell integrals, exterior facet integrals, and interior facet integrals, FEniCS version 1.5 supports specification of point integrals. A point integral represents the integrand evaluated at each vertex, summed over the vertices of the mesh. Starting with FEniCS version 1.5, the DOLFIN assemblers recognize point integrals and assemble contributions from such integrals. We remark that for each vertex, the integrand will be restricted to the arbitrarily chosen first cell associated with this vertex prior to evaluation. This operation is therefore only consistently defined for functions and integrands that are continuous at the vertices.
2.6 Point integral solvers and Rush–Larsen schemes
The FEniCS PointIntegralSolvers are special-purpose solvers dedicated to solving multistage integration schemes defined for each vertex of a mesh. Such problems typically occur in con-nection with spatially varying systems of ODEs, for instance in electrophysiology. In FEniCS version 1.5, we have extended the range of available schemes to also include the Rush–Larsen
[Rush and Larsen,1978] and the generalized Rush–Larsen [Sundnes et al., 2009] schemes for solving systems of nonlinear ODEs.
2.7 Redesign of core symbolic representation and algorithms
The domain-specific language UFL represents equations as symbolic expression trees, where each node represents some value or mathematical operation. For nonlinear equations with large expression trees, the performance and memory overhead of symbolic computations and form compiler algorithms can become significant, especially when running in parallel, where this overhead is a limiting factor for scalability according to Amdahl’s law. This becomes even more important when FEniCS is combined with high-level algorithms, such as the dolfin-adjoint package, that rely extensively on symbolic algorithms from UFL. To reduce this overhead, the core representation of symbolic expressions has been redesigned (see ufl.core), followed by a rewrite of the core framework for developing additional symbolic algorithms (see ufl.corealg). Each expression tree node type now has the following attributes:
• ufl_operands Tuple of child nodes in expression tree. Equivalent to deprecated operands(). • ufl_shape Tuple of value shape dimensions. Equivalent to deprecated shape().
• ufl_free_indices Tuple of free index integer ids. Replaces deprecated free_indices(). • ufl_free_index_dimensions Tuple of dimensions associated with corresponding free index
ids in ufl_free_indices. Replaces deprecated free_indices().
The deprecated functions mentioned above are still available as wrappers around the new at-tributes. Type traits of symbolic expression classes have also been made available through an efficient property-based API using the naming scheme ExprType._ufl_*_ (see ufl.core.expr). This is mainly intended for internal usage but also for developers building on the symbolic capabilities of FEniCS.
A major guiding principle in the redesign of core algorithms in UFL was to replace all uses of expensive recursion in Python with loops. Algorithms for expression traversal (see module ufl.corealg.traversal) have all been reimplemented without recursion, and further fine-tuned for specific iteration scenarios. The former Transformer base class for visitor-like algorithms has been deprecated in favor of an implementation that avoids recursion. The new function map_expr_dag(function, expression)applies the given function to transform each expression tree node in a non-recursive post-order traversal. The function arguments include the node as well as the previously transformed node operands. This algorithm is further optimized to reduce the number of function calls and avoid duplicated expression tree nodes by (optionally) caching intermediate results in a hashmap with the original expression nodes as keys.
Previous implementations of the Transformer class can easily be rewritten as implementations of MultiFunction, which implements the same dynamic type dispatch mechanism, and passed as the function argument to map_expr_dag. Key algorithms such as automatic differentiation (apply_derivatives) and propagation of restrictions (apply_restrictions) have been reimple-mented in this optimized algorithm framework, and may serve as models. In addition, form signatures are now computed without first applying automatic differentiation, which reduces the symbolic overhead significantly when the signature is found in the form compiler cache. Together these improvements have reduced the symbolic overhead in FEniCS 1.5 by 20–60%. To give a few examples: the initial just-in-time (JIT) compilation of a Poisson equation form was reduced from 5s to 4s including C++ compilation, while for a complicated cardiac hyperelasticity model the JIT time was reduced from 103s to 48s. For the latter model, subsequent program runs now avoid a 2s delay in the signature computation used for disk cache lookup.
P− rΛk(∆n) k= 0 k = 1 k= 2 k = 3 n= 1 P DP n= 2 P RT[E,F] DP n= 3 P N1E N1F DP PrΛk(∆n) k= 0 k = 1 k= 2 k = 3 n= 1 P DP n= 2 P BDM[E,F] DP n= 3 P N2E N2F DP Q− rΛk(n) k= 0 k = 1 k= 2 k = 3 n= 1 Q DQ n= 2 Q RTC[E,F] DQ n= 3 Q NCE NCF DQ SrΛk(n) k= 0 k = 1 k= 2 k = 3 n= 1 S DPC n= 2 S BDMC[E,F] DPC n= 3 S AAE AAF DPC
Table 1: New notation for finite elements adopted from the Periodic Table of the Finite Elements.
2.8 Notation from Periodic Table of the Finite Elements
FEniCS now supports the notation for finite elements as set out in the Periodic Table of the Finite Elements [Arnold and Logg,2014] based on the finite element exterior calculus, seeArnold et al.
[2006]. The notation introduces new aliases for the existing elements in FEniCS and introduces new placeholder names for the not yet implemented elements on quadrilaterals and hexahedra. Earlier FEniCS notation (“Lagrange”, “CG”, etc.) is still supported but may be phased out in future versions. Table1summarizes the notation. In this table, n is the topological dimension of the finite element domain (1D, 2D, 3D), r is the polynomial degree and k is the form degree; k= 0 means scalars, k = 1 means 1-forms (oriented line segments), k = 2 means 2-forms (oriented surfaces) and k= 3 means 3-forms (oriented volumes).
Figure5shows a miniature (but high resolution) version of the periodic table. The full version can be downloaded from http://femtable.org.
As an example, the following code shows how to instantiate a pair of cubic Nédélec face elements of the first and second kinds on a tetrahedron:
Python code
1 element_1 = FiniteElement (" N1F ", " tetrahedron ", 3) 2 element_2 = FiniteElement (" N2F ", " tetrahedron ", 3)
2.9 Changes in degree-of-freedom map construction
A number of performance improvements have been made in the degree-of-freedom (DOF) map construction, and changes to how to DOF maps are order have been made. Specifically:
• DOLFIN now uses local (process-wise) numbering of degrees of freedom, which has re-duced the memory use of degree-of-freedom maps. This change also permits some new developments in interfacing to linear-algebra backends.
• The degree-of-freedom map construction code has been re-written, reducing the time for construction and substantially improving parallel scaling of construction.
• Node-wise block structure in DOF maps, e.g. a fixed number of DOFs at each node, is now automatically detected. This provides better data locality and faster graph-based DOF map reordering.
k 0 1 0 1 2 0 1 2 3 0 1 2 3 4 k 0 1 0 1 2 0 1 2 3 0 1 2 3 4 k 0 1 0 1 2 0 1 2 3 0 1 2 3 4 k 0 1 0 1 2 0 1 2 3 0 1 2 3 4 r = 1 2 2 3 6 3 4 12 12 4 5 20 30 20 5 r = 1 2 1 3 3 1 4 6 4 1 5 10 10 5 1 r = 1 2 1 4 4 1 8 12 6 1 16 32 24 8 1 r = 1 2 2 4 8 3 8 24 18 4 16 64 72 32 5 2 3 3 6 12 6 10 30 30 10 15 60 90 60 15 2 3 2 6 8 3 10 20 15 4 15 40 45 24 5 2 3 2 9 12 4 27 54 36 8 81 216 216 96 16 2 3 3 8 14 6 20 48 39 10 48 144 168 84 15 3 4 4 10 20 10 20 60 60 20 35 140 210 140 35 3 4 3 10 15 6 20 45 36 10 35 105 126 70 15 3 4 3 16 24 9 64 144 108 27 256 768 864 432 81 3 4 4 12 22 10 32 84 72 20 80 272 336 180 35 4 5 5 15 30 15 35 105 105 35 70 280 420 280 70 4 5 4 15 24 10 35 84 70 20 70 224 280 160 35 4 5 4 25 40 16 125 300 240 64 625 2000 2400 1280 256 4 5 5 17 32 15 50 135 120 35 136 472 606 340 70 5 6 6 21 42 21 56 168 168 56 126 504 756 504 126 5 6 5 21 35 15 56 140 120 35 126 420 540 315 70 5 6 5 36 60 25 216 540 450 125 1296 4320 5400 3000 625 5 6 6 23 44 21 74 204 186 56 216 768 1014 588 126 6 7 7 28 56 28 84 252 252 84 210 840 1260 840 210 6 7 6 28 48 21 84 216 189 56 210 720 945 560 126 6 7 6 49 84 36 343 882 756 216 2401 8232 10584 6048 1296 6 7 7 30 58 28 105 294 273 84 328 1188 1602 952 210 7 8 8 36 72 36 120 360 360 120 330 1320 1980 1320 330 7 8 7 36 63 28 120 315 280 84 330 1155 1540 924 210 7 8 7 64 112 49 512 1344 1176 343 4096 14336 18816 10976 2401 7 8 8 38 74 36 144 408 384 120 480 1764 2418 1464 330 2 2 3 3 4 4 5 5 6 6 7 7 8 8 2 1 3 2 4 3 5 4 6 5 7 6 8 7 2 1 3 2 4 3 5 4 6 5 7 6 8 7 2 2 3 3 4 4 5 5 6 6 7 7 8 8 3 6 3 6 12 6 10 20 10 15 30 15 21 42 21 28 56 28 36 72 36 3 3 1 6 8 3 10 15 6 15 24 10 21 35 15 28 48 21 36 63 28 4 4 1 9 12 4 16 24 9 25 40 16 36 60 25 49 84 36 64 112 49 4 8 3 8 14 6 12 22 10 17 32 15 23 44 21 30 58 28 38 74 36 4 12 12 4 10 30 30 10 20 60 60 20 35 105 105 35 56 168 168 56 84 252 252 84 120 360 360 120 4 6 4 1 10 20 15 4 20 45 36 10 35 84 70 20 56 140 120 35 84 216 189 56 120 315 280 84 8 12 6 1 27 54 36 8 64 144 108 27 125 300 240 64 216 540 450 125 343 882 756 216 512 1344 1176 343 8 24 18 4 20 48 39 10 32 84 72 20 50 135 120 35 74 204 186 56 105 294 273 84 144 408 384 120 5 20 30 20 5 15 60 90 60 15 35 140 210 140 35 70 280 420 280 70 126 504 756 504 126 210 840 1260 840 210 330 1320 1980 1320 330 5 10 10 5 1 15 40 45 24 5 35 105 126 70 15 70 224 280 160 35 126 420 540 315 70 210 720 945 560 126 330 1155 1540 924 210 16 32 24 8 1 81 216 216 96 16 256 768 864 432 81 625 2000 2400 1280 256 1296 4320 5400 3000 625 2401 8232 10584 6048 1296 4096 14336 18816 10976 2401 16 64 72 32 5 48 144 168 84 15 80 272 336 180 35 136 472 606 340 70 216 768 1014 588 126 328 1188 1602 952 210 480 1764 2418 1464 330
P
er
io
di
c T
ab
le o
f th
e F
ini
te El
em
en
ts
k =0 k =0 k =0 k =0 r=1 r=1 r=1 n =1 n =2 n =3 r=2 r=2 r=2 r=3 r=3 r=3 k =1 k =1 k =1 k =1 k =2 k =2 k =2 k =2 k =3 k =3 k =3 k =3 The t ab le p re se nts t he p rim ary s pa ces o f f inite e lem en ts f or t he dis cre tiz ation o f t he f un dam en tal o pe ra tors o f v ec tor c alc ulu s: t he gra die nt, c url, a nd d ive rg en ce. A f inite e lem ent s pa ce i s a s pa ce o f pie ce w ise p oly nom ial f un ctio ns o n a d om ain d ete rm ined b y: ( 1) a m esh o f t he d om ain i nto p oly he dral c ells c alle d ele m en ts, ( 2) a f inite dime nsiona l s pa ce of po lyn om ial fu nc tion s on ea ch eleme nt ca lle d the sh ap e fu nc tio ns , a nd ( 3) a u nis olv ent s et o f f un ctio nals o n t he sh ape f un ctio ns of ea ch ele m en t c alled degr ee s of f ree dom (D OFs) , ea ch D OF b ein g a ss oc iat ed t o a ( ge ne ra lize d) f ace o f t he e lem en t, and s pe cif ying a q ua nti ty w hic h t ak es a s ing le v alue f or a ll e lem en ts sh aring the fa ce . T he ele m en t d iag ram s de pic t the DO Fs and th eir ass oc iat ion to fa ce s. The s pa ce s an d de pic ted o n t he l eft h alf o f t he t ab le are t he t w o p rim ary f am ilies o f f inite e lem en t s pa ces f or m es hes o f sim plic es, a nd t he s pa ces are t he t w o p rim ary f am ilies o f f inite e lem en t s pa ces f or m es hes o f an d are t he t w o p rim ary f am ilies o f f inite e lem en t s pa ces f or m es hes o f o n t he r igh t s ide a re f or m es he s o f c ub es or b ox es. E ac h i s d efine d i n a ny dim en sio n n≥ 1 for e ach v alu e o f t he p olynom ial d eg ree r≥ 1, a nd e ach v alu e o f 0 ≤ k≤ n. T he p aram ete r k re fe rs t o t he o pe ra tor: t he s pa ces c on sist of d iffe re ntial k-f orm s w hic h b elo ng t o t he d om ain o f t he kth e xte rior de riv ative . T hu s fo r k= 0, the sp ac es dis cre tize the So bo lev sp ac e H 1 , the d om ain o f t he g ra die nt o pe rato r; f or k= 1, t hey d isc re tize H (c url), the d om ain o f t he c url; f or k= n – 1 t hey d isc re tize H (div), t he d om ain of t he d ive rg en ce; a nd f or k = n , t hey d isc re tize L2 . Th e s pa ces a nd , w hic h c oin cid e, a re t he e arli est f inite ele m en ts, g oin g b ack i n t he c ase r = 1 o f l ine ar e lem en ts t o Cou-ra nt,1 a nd c olle ctive ly r efe rre d t o a s th e L agr ange e leme nts . T he sp ac es and , w hich a lso c oin cid e, a re t he d isc on ti-nu ou s Ga le rkin e lem en ts, c on sis tin g o f p iec ew ise p oly nom ials w ith no in te relem ent co nti nu ity im po sed , fi rst in trod uced b y Ree d a nd Hil l. 2 T he s pa ce in 2 d im en sio ns w as i ntrod uc ed b y Ra via rt an d T hom as 3 a nd g en era lized t o t he 3 -dim en sio nal s pa ces an d b y N éd éle c, 4 w hil e is d ue t o Bre zzi, D ou gla s a nd M ari ni 5 in 2 dim en sio ns, i ts g en era liza tio n t o 3 dim ensio ns ag ain du e to N édéle c. 6 T he un ified tre atm en t a nd no tatio n of the in 2 dim en sio ns, i ts g en era liza tio n t o 3 dim ensio ns ag ain an d fam ilies i s d ue t o Arn old , F alk a nd W int her a s p art o f fi nit e ele m ent e xte rio r ca lcu lus , 7 e xtend ing e arlier w ork o f H iptmai r fo r t he fam ily. 8 T he s pa ce is t he s pan o f t he eleme nta ry f orm s int ro du ce d b y W hit ne y. 9 R. C ou ra nt, Bu lle tin o f t he A m eric an M at hem at ical S oc iet y 4 9, 19 43 . W . H. R eed a nd T . R. H ill, Los A lam os r ep ort L A-U R-7 3-479 , 19 73. P. A . R av iar t a nd J . M. T ho m as , Le ctu re N otes i n M at hem at ics 6 06 , S pri ng er, 1 97 7. J. C . N éd éle c, N um eris che M at hem atik 3 5, 1 980 . F. B re zzi, J . D ou glas J r., a nd L . D. M arini, N um eris che M at hem atik 4 7, 19 85 . J. C . N éd éle c, N um eris che M at hem atik 5 0, 1 986 . D. N. A rn old, R .S. F alk , a nd R . W int he r, A cta N um erica 1 5, 2 00 6. R. H ipt m air, Mat hem at ics o f C om putat ion 6 8, 1 999 . H. W hit ne y, Ge om etric I nte grat ion T he ory , 1 957. D. N. A rn old, D. B offi, a nd F . B on izz on i, N um eris che M at he mat ik, 2 014 . D. N. A rn old a nd G . A w an ou , M at hem at ics o f C om putat ion , 2 013 . A. L og g, K .-A . M ard al, a nd G . N . W ells (ed s.) , A utomat ed S olu tion o f D iffere nti al Eq uat ions b y t he F inite E lem ent M eth od , S pri ng er, 2 01 2. R. C . K irb y, ACM T ran sa ctio ns o n M at hem at ical S oftw are 3 0, 2 00 4. A. L ogg a nd G . N. W ells , A CM T ran sa ctio ns o n M at hem at ica l S oftw are 3 7, 2 010 . M . A lnæ s, A . L og g, K . B. Ø lga ard, M . E. R og ne s, a nd G . N. W ells , AC M T ran sa cti on s on M at hem at ical S oftw are 4 0, 2 014 . 1. 2. 3. 4. 5. 6. 7. 8. 9. 10 . 11 . 12 . 13 . 14 . 15 . The f am ily of c ub ica l e lem en ts c an b e d erived f rom t he 1 -di-m en sio nal L ag ran ge a nd d isc on tin uo us G ale rkin e lem en ts b y a tens or pro du ct c on str uc tion d eta iled b y A rno ld, B offi a nd B on izzo ni, 10 bu t f or the m os t p art w ere pre se nted ind ivid ua lly a long w ith the c orr es po n-din g s im plic ial e lem en ts i n t he p ap ers m en tio ne d. T he s ec ond c ub ical fam ily is d ue t o Arn old a nd A w an ou. 11 The f inite e lem en ts in t his t ab le h ave b ee n i m ple m en ted a s p art o f the FE niC S P roject .12, 13, 1 4 E ach m ay b e r efe re nc ed i n t he Un ifie d Fo rm La ng ua ge (U FL) 15 b y g ivin g i ts f am ily, s ha pe, a nd d eg re e, w ith t he fam ily a s s how n o n t he t ab le. F or e xam ple , t he s pa ce b y g ivin g i ts f am ily, s ha pe, a nd d eg re e, w ith t he m ay be r eferre d t o i n U FL a s: FiniteEl em ent( "N 2E ", t et ra hedr on, 3 ) Alt ern ative ly, t he e lem en ts m ay b e a cc es sed i n a u nif orm f as hio n a s: FiniteEl em ent("P-", shape, r, k) FiniteEl em ent("P", shape, r, k) FiniteEl em ent("Q-", shape, r, k) FiniteEl em ent("S", shape, r, k) for FiniteEl em ent("S", shape, r, k) , FiniteEl em ent("S", shape, r, k) , FiniteEl em ent("S", shape, r, k) , a nd FiniteEl em ent("S", shape, r, k) , res pe ctiv ely . (" P", i nt er va l, 1 ) (" P", i nt er va l, 1 ) (" DP ", i nt er va l, 0 ) (" DP ", i nt er va l, 1 ) (" P", i nt er va l, 2 ) (" P", i nt er va l, 2 ) (" DP ", i nt er va l, 1 ) (" DP ", i nt er va l, 2 ) (" P", i nt er va l, 3 ) (" P", i nt er va l, 3 ) (" DP ", i nt er va l, 2 ) (" DP ", i nt er va l, 3 ) 2 2 1 2 3 3 2 3 4 4 3 4 P 1 P 1 dP 0 dP 1 P 2 P 2 dP 1 dP 2 P 3 P 3 dP 2 dP 3 3 3 4 4 4 8 1 3 9 8 12 14 4 6 16 12 22 9 10 8 8 12 24 6 18 1 4 27 20 54 48 36 39 8 10 64 32 14 4 84 10 8 72 27 20 1 3 4 4 4 4 12 6 6 3 6 10 10 15 30 10 10 6 10 20 20 36 60 3 6 6 12 1 4 8 12 20 30 4 10 15 20 45 60 10 20 (" P", t ri an gl e, 1 ) (" P", t ri an gl e, 1 ) (" Q", q ua dr il at er al, 1 ) (" S", q ua dr il at er al, 1 ) (" RTC [E ,F ]", q ua dr ilat er al , 1) (" BD MC [E,F ]", q ua dr il at er al, 1 ) (" DQ ", q ua dr il at er al, 0 ) (" DP C", q ua dr il at er al, 1 ) (" Q", q ua dr il at er al, 2 ) (" S", q ua dr il at er al, 2 ) (" RTC [E ,F ]", q ua dr ilat er al , 2 ) (" BD MC [E,F ]", q ua dr il at er al, 2 ) (" DQ ", q ua dr il at er al, 1 ) (" DP C", q ua dr il at er al, 2 ) (" Q", q ua dr il at er al, 3 ) (" S", q ua dr il at er al, 3 ) (" RTC [E ,F ]", q ua dr ilat er al , 3) (" BD MC [E,F ]", q ua dr il at er al, 3 ) (" DQ ", q ua dr il at er al, 2 ) (" DP C", q ua dr il at er al, 3 ) (" Q", h exah ed ro n, 1 ) (" S", h exah ed ro n, 1 ) (" NC E", h exah ed ro n, 1 ) (" AA E", h exah ed ro n, 1 ) (" NC F", h exah ed ro n, 1 ) (" AAF", h exah ed ro n, 1 ) (" DQ ", h ex ah ed ro n, 0 ) (" DP C", h exah ed ro n, 1 ) (" Q", h exah ed ro n, 2 ) (" S", h exah ed ro n, 2 ) (" NC E", h exah ed ro n, 2 ) (" AA E", h exah ed ro n, 2 ) (" NC F", h exah ed ro n, 2 ) (" AAF", h exah ed ro n, 2 ) (" DQ ", h ex ah ed ro n, 1 ) (" DP C", h exah ed ro n, 2 ) (" Q", h exah ed ro n, 3 ) (" S", h exah ed ro n, 3 ) (" NC E", h exah ed ro n, 3 ) (" AA E", h exah ed ro n, 3 ) (" NC F", h exah ed ro n, 3 ) (" AAF", h exah ed ro n, 3 ) (" DQ ", h ex ah ed ro n, 2 ) (" DP C", h exah ed ro n, 3 ) (" DP ", t ri an gl e, 0 ) (" DP ", t ri an gl e, 1 ) (" P", t et ra he dr on, 1 ) (" P", t et ra he dr on, 1 ) (" P", t et ra he dr on, 1 ) (" P", t ri an gl e, 2 ) (" P", t ri an gl e, 2 ) (" DP ", t ri an gl e, 1 ) (" DP ", t ri an gl e, 2 ) (" P", t et ra he dr on, 2 ) (" P", t et ra he dr on, 2 ) (" P", t ri an gl e, 3 ) (" P", t ri an gl e, 3 ) (" DP ", t ri an gl e, 2 ) (" DP ", t ri an gl e, 3 ) (" P", t et ra he dr on, 3 ) (" P", t et ra he dr on, 3 ) (" RT [E ,F ]", t ri an gl e, 1 ) (" BD M[ E, F] ", t ri an gl e, 1 ) (" N1 E", t et ra he dr on, 1 ) (" N2 E", t et ra he dr on, 1 ) (" N1 F", t et ra he dr on, 1 ) (" N2 F", t et ra he dr on, 1 ) (" DP ", t et ra he dr on, 0 ) (" DP ", t et ra he dr on, 1 ) (" RT [E ,F ]", t ri an gl e, 2 ) (" BD M[ E, F] ", t ri an gl e, 2 ) (" N1 E", t et ra he dr on, 2 ) (" N2 E", t et ra he dr on, 2 ) (" N1 F", t et ra he dr on, 2 ) (" N2 F", t et ra he dr on, 2 ) (" DP ", t et ra he dr on, 1 ) (" DP ", t et ra he dr on, 2 ) (" RT [E ,F ]", t ri an gl e, 3 ) (" BD M[ E, F] ", t ri an gl e, 3 ) (" N1 E", t et ra he dr on, 3 ) (" N2 E", t et ra he dr on, 3 ) (" N1 F", t et ra he dr on, 3 ) (" N2 F", t et ra he dr on, 3 ) (" DP ", t et ra he dr on, 2 ) (" DP ", t et ra he dr on, 3 ) P 1 P 1 Q 1 S 1 dQ 0 dPc 1 Q 2 S 2 dQ 1 dPc 2 Q 3 S 3 dQ 2 dPc 3 Q 1 S 1 dQ 0 dPc 1 Q 2 S 2 dQ 1 dPc 2 Q 3 S 3 dQ 2 dPc 3 dP 0 dP 1 P 1 P 1 P 1 P 2 P 2 dP 1 dP 2 P 2 P 2 P 3 P 3 dP 2 dP 3 P 3 P 3 N1 1 N2 1 N2 1 N1 1 N1 2 N1 2 N1 3 N1 3 dP 0 dP 1 dP 1 dP 2 dP 2 dP 3 N1 e N1 f N1 e N1 f N1 e N1 f (" Q", i nt er va l, 1 ) (" S", i nt er va l, 1 ) (" DQ ", i nt er va l, 0 ) (" DP C", i nt er va l, 1 ) (" Q", i nt er va l, 2 ) (" S", i nt er va l, 2 ) (" DQ ", i nt er va l, 1 ) (" DP C", i nt er va l, 2 ) (" Q", i nt er va l, 3 ) (" S", i nt er va l, 3 ) (" DQ ", i nt er va l, 2 ) (" DP C", i nt er va l, 3 ) 2 2 1 2 3 3 2 3 4 4 3 4 Q 1 S 1 dQ 0 dPc 1 Q 2 S 2 dQ 1 dPc 2 Q 3 S 3 dQ 2 dPc 3 n = 1 n = 1 n = 1 n = 1 n = 2 n = 2 n = 2 n = 2 n = 3 n = 3 n = 3 n = 3 n = 4 n = 4 n = 4 n = 4 W eight functionsfor DOFs Symbol of element of freedom (DOFs)Element with degrees Legen
d Fi n it e e le m e nt s R e fe re n c e s Dimension of element function space
Finite element exterior
calculus notation Element specification in FEniCS 24 Co nc ept a nd s cie ntific c on te nt: D ou glas N . A rn old ( Un ive rsity of M innes ota) a nd A nd ers L ogg ( Ch alm ers U niv ersity o f Te ch no log y). G raph ic d es ign: M att ias S ch läg er. T he p ro du ction o f t his p os ter h as b een s uppo rted b y S im ula R esea rch La bo rato ry a nd i s p art ially b as ed o n w ork s up porte d b y t he U .S. N ation al S cie nce F ou nd ation u nder g ra nt DM S-111 52 91. Fin din gs d o n ot n ec es sa rily r epre sent t he v iews o f S im ula o r of t he N SF. P rodu ced i n 2 014 a nd l ice nsed u nd er a C re ative Com mon s A ttr ibution -Sha re Alike 4 .0 I nte rna tiona l licen se. fem table .org [e/f] RT [e/f] RT 1 RT [e/f] RT 2 RT [e/f] RT 3 BDM [e/f] BDMc [e/f] BDMc [e/f] BDMc [e/f] BDM 1 BDMc 1 BDMc 2 BDMc 3 BDM [e/f] BDM 2 BDM [e/f] BDM 3 N2 e Nc e AA e AA f AA e AA f AA e AA f Nc f Nc e Nc f Nc e Nc f N2 f N2 e N2 f N2 2 N2 2 N2 e N2 f N2 3 RTc [e/f] RTc [e/f] RTc [e/f] N2 3 RTc 1 RTc 2 RTc 3 Nc 1 AA 1 AA 1 AA 2 AA 2 AA 3 AA 3 Nc 1 Nc 2 Nc 2 Nc 3 Nc 3 PTofFE_poster_fin.indd 1 2014-09-22 14:24
Figure 6: Comparison of sparsity patterns of the Taylor–Hood Stokes operator on the DOLFIN gearmesh.
Figure 7: Comparison of sparsity patterns of the Taylor–Hood Stokes operator on a NACA 0018 airfoilmesh.
Improvements in sparsity patterns that follow from improved DOF map ordering are shown in Figures6 and7. The sparsity patterns produced by DOLFIN 1.5.0 are better clustered around the diagonal. When DOLFIN is configured with SCOTCH, the SCOTCH implementation of Gibbs-Poole–Stockmeyer reordering is used.
The code for reproducing the sparsity patterns in Figures6and7and patterns on other meshes can be found at https://www.repository.cam.ac.uk/handle/1810/252670. The meshes are shown athttp://fenicsproject.org/download/data.html#meshes.
2.10 Linear algebra interface
FEniCS uses the PETSc and SLEPc libraries as backends providing parallel infrastructure for linear algebra, non-linear solvers, and eigensolvers. The wrapper layer to these packages has been improved, in particular, as follows:
• PETScTAOSolver, the DOLFIN interface to the PETSc TAO framework, which provides solvers for non-linear optimization problems, has been introduced;
• LinearOperator, the DOLFIN interface to matrix-free operators, can now be unwrapped into a respective PETSc or petsc4py object;
• SLEPcEigenSolver, the DOLFIN interface to eigensolvers, can now be unwrapped into a respective SLEPc or slepc4py object.
The latter two extend the feature already available for other backend wrappers, e.g., PETScMatrix, PETScKrylovSolver, etc. This feature allows for finer, but still convenient, control over a solution process and other details, in such cases when the coverage of backend features or options in DOLFIN is not sufficiently detailed.
In this release, support for the Trilinos Epetra backend has been removed. Support for the newer Trilinos Tpetra backend will be added to a future release.
2.11 Use of C++ 11
The FEniCS team has started using selected C++11 features, allowing removal of the dependency on Boost shared pointers and some simplifications of the C++ source code. The set of features is limited for the time being, to remain compatible with some common compilers. GCC 4.6.3 is known to be compatible.
For users of the DOLFIN C++ interface, the use of C++11 can lead to less verbose code by using the key word auto, initializer lists, and range-based loops, for instance.
2.12 Python versions
FEniCS now requires Python 2.7, and has experimental support for Python 3.x. As part of supporting Python 3, FIAT no longer depends on Scientific Python. In place of Scientific Python, which does not support Python 3, FIAT now depends on SymPy.
2.13 Packaging and installation
As before, FEniCS is available as a binary package as part of the standard Debian and Ubuntu repositories. For users who wish to access the latest FEniCS versions before these have propagated downstream, a personal package archive (PPA) is provided (ppa:fenics-packages/fenics). A binary package is also available for Mac OSX.
With the release of version 1.5, FEniCS has retired the installer Dorsal in favor of the new tool fenics-install.sh. This script relies on HashDist (https://hashdist.github.io/) for installation of FEniCS and its dependencies. Using this script, users can easily build FEniCS with a one-line command:
curl -s http://fenicsproject.org/fenics-install.sh | bash
FEniCS developers (who need to modify the source code) are encouraged to use the two related scripts fenics-install-all.sh and fenics-install-component.sh as standard tools in their normal workflow. These scripts are part of the FEniCS Developer Tools repository on BitBucket. In addition, FEniCS can now also be installed via a community-supported Conda recipe, see
https://github.com/Juanlu001/fenics-recipes/releases/tag/v1.5.0as well as via a
3
New demo programs
Some new example programs have been added to demonstrate the use of new user-level features. The new demo programs are:
• Smoothed aggregation algebraic multigrid for three-dimensional elasticity. The demo il-lustrates the construction and specification of the near-nullspace which is required by the multigrid preconditioner. It also demonstrates how to construct a scalable solver for elas-ticity problems.
• Two new demos illustrating the implementation of multimesh-methods: multimesh-poisson and multimesh-stokes.
4
Interface changes
The following interface changes were made in the release of FEniCS version 1.5:
• The classes FacetArea, FacetNormal, CellSize, CellVolume, SpatialCoordinate,
Circumradius, MinFacetEdgeLength, and MaxFacetEdgeLength now require a Mesh argu-ment instead of a Cell arguargu-ment.
• The signature for the assemble function has been simplified to not require/accept the argu-ments coefficients, cells, and common_cell.
• Differentiation of expressions with respect to a Coefficient or Function using diff does not require the function to be wrapped in a variable construct.
• Quadrature degree and rule name can be specified as keywords to form integration mea-sures, i.e. f*dx(degree=3, rule="canonical"). The syntax
Measure.__getitem__(mesh_function).__call__(subdomain_id),
e.g., dx[mesh_function](42), has been deprecated in favor of keyword arguments, for example: dx(subdomain_data=mesh_function, subdomain_id=42).
• GenericTensors cannot be reinitialized anymore, hence the reset_sparsity parameter has been removed from all assemble functions.
• Deprecated MPI::process_number and MPI::num_processes were removed in favor of MPI::rankand MPI::size respectively.
• GenericVector.__setitem__, e.g., vec[indices] = values, now takes local indices which can be list of ints, NumPy array of ints, int, or full slice :. Type of values can be scalar, NumPy array, or GenericVector where applicable. Operation is collective and finalizes the vector automatically.
5
Dependencies
FEniCS, mostly DOLFIN, depends on a number of external packages. Here we list and describe these external packages, along with required version numbers (to the best of our knowledge). Necessary dependencies:
• C++11 compiler (GCC ≥ 4.6 and Clang 3.6 are known to work), see section2.11for details • Boost ≥ 1.48; provides some low-level data structures and algorithms, DOF reordering and
mesh coloring [Schling,2011]
• Eigen ≥ 3.0; provides data structures and operations used by adaptive solvers [Guennebaud
et al.,2015]
• Python 2.7 or ≥ 3.2; six (Python 2 and 3 compatibility tool); needed by FIAT, UFL, FFC, and Instant; optionally needed for Python interface to DOLFIN and mshr
• NumPy; Python package providing data structures and operations on N-dimensional arrays
[van der Walt et al.,2011]
• SymPy; Python symbolic maths library, used by FIAT [SymPy Development Team,2014] Optional dependencies:
• OpenMP; supports parallel computing on shared memory systems • MPI; supports parallel computing on distributed memory systems
• PETSc ≥ 3.3, < 3.6; serves as parallel (linear) algebra backend; provides data structures and routines for handling parallel vectors, matrices, Krylov solvers, sparse direct solvers, various preconditioners and non-linear solvers [Balay et al.,2014b,a,1997]
• petsc4py ≥ 3.3,< 3.6; provides Python bindings to PETSc [Dalcin et al.,2011] • SLEPc ≥ 3.3,< 3.6; provides parallel eigen-problem solvers [Hernandez et al.,2005] • slepc4py ≥ 3.5.1,< 3.6; provides Python bindings to SLEPc [Dalcin et al.,2011]
• UMFPACK; provides sequential sparse LU decomposition using multifrontal method [Davis,
2004]
• CHOLMOD; provides sequential sparse Cholesky decomposition using supernodal method
[Chen et al.,2008]
• PaStiX ≥ 5.2.1; provides parallel (both distributed and threaded) sparse LU and Cholesky decomposition [Hénon et al.,2002]
• Trilinos ≥ 11.0.0; provides mesh partitioning and coloring [Heroux et al.,2005]
• SCOTCH; provides mesh partitioning and DOF reordering [Chevalier and Pellegrini,2006] • ParMETIS ≥ 4.0.2; provides mesh partitioning [Karypis and Kumar,1998]
• SWIG ≥ 2.0 (with Python 2) or ≥ 3.0.3 (with Python 3); tool needed for generating Python interface to DOLFIN and mshr
• flufl.lock; implements file locking (used by Instant) on NFS file system
• HDF5; provides parallel, scalable IO backend; needs to be built with parallel support [The
HDF Group,2015]
• zlib; reading compressed XML files and compressed VTK output • VTK ≥ 5.2; provides interactive plotting in DOLFIN
• CGAL 4.5.1, TetGen 1.5.0; mshr backends, built automatically by mshr build system [The
CGAL Project,2015,Si,2015]
• GMP, MPFR; arbitrary-precision and multiple-precision arithmetic libraries, required by mshr [Granlund and the GMP development team,2014,Fousse et al.,2007]
• pytest; Python testing tool, needed for running unit tests • Sphinx ≥ 1.1.0; enables building documentation
• Qt4; provides API for writing graphical applications • Soya; Python 3D engine, used for plotting finite elements
6
How to cite FEniCS 1.5
Users of FEniCS version 1.5 are encouraged to cite this article, in addition to one or more of the publications listed on the FEniCS Project web site:
http://fenicsproject.org/citing/
7
Acknowledgments
Although this article lists as authors only those developers who have made significant contri-butions specifically to the release of FEniCS 1.5, we gratefully acknowledge the contricontri-butions by many people to the FEniCS Project, including Martin S. Alnæs, Jan Blechta, Juan Luis Cano Rodríguez Patrick Farrell, Johan Hake, Johan Hoffman, Johan Jansson, Niclas Jansson, August Johansson, Claes Johnson, Benjamin Kehlet, Robert C. Kirby, Matthew Knepley, Miroslav Kuchta, Hans Petter Langtangen, Anders Logg, Kent-Andre Mardal, Andre Massing, Mikael Mortensen, Harish Narayanan, Chris Richardson, Johannes Ring, Marie E. Rognes, L. Ridgway Scott, Ola Skavhaug, Andy Terrel, Garth N. Wells, and Kristian Ølgaard.
The FEniCS Project is supported by The Research Council of Norway through a Centre of Ex-cellence grant to the Center for Biomedical Computing at Simula Research Laboratory, project number 179578. Anders Logg acknowledges support by the Swedish Research Council Grant No. 2014–6093. Jan Blechta acknowledges the support of the project LL1202 in the programme ERC-CZ funded by the Ministry of Education, Youth and Sports of the Czech Republic.
References
D. N. Arnold and A. Logg. Periodic table of the finite elements. SIAM News, 2014.
D. N. Arnold, R. S. Falk, and R. Winther. Finite element exterior calculus, homological tech-niques, and applications. Acta numerica, 15:1–155, 2006. URLhttp://dx.doi.org/10.1017/
S0962492906210018.
S. Balay, W. D. Gropp, L. C. McInnes, and B. F. Smith. Efficient management of parallelism in object oriented numerical software libraries. In E. Arge, A. M. Bruaset, and H. P. Langtangen, editors, Modern Software Tools in Scientific Computing, pages 163–202. Birkhäuser Press, 1997.
URLhttp://dx.doi.org/10.1007/978-1-4612-1986-6_8.
S. Balay, S. Abhyankar, M. F. Adams, J. Brown, P. Brune, K. Buschelman, V. Eijkhout, W. D. Gropp, D. Kaushik, M. G. Knepley, L. C. McInnes, K. Rupp, B. F. Smith, and H. Zhang. PETSc users manual. Technical Report ANL-95/11 - Revision 3.5, Argonne National Laboratory, 2014a. URL
http://www.mcs.anl.gov/petsc.
S. Balay, S. Abhyankar, M. F. Adams, J. Brown, P. Brune, K. Buschelman, V. Eijkhout, W. D. Gropp, D. Kaushik, M. G. Knepley, L. C. McInnes, K. Rupp, B. F. Smith, and H. Zhang. PETSc Web page, 2014b. URLhttp://www.mcs.anl.gov/petsc.
Y. Chen, T. A. Davis, W. W. Hager, and S. Rajamanickam. Algorithm 887: CHOLMOD, supernodal sparse Cholesky factorization and update/downdate. ACM Trans. Math. Softw., 35(3):22:1–22:14, Oct. 2008. ISSN 0098-3500. URLhttp://doi.acm.org/10.1145/1391989.1391995.
C. Chevalier and F. Pellegrini. PT-Scotch: A tool for efficient parallel graph ordering. In 4th International Workshop on Parallel Matrix Algorithms and Applications (PMAA’06), IRISA, Rennes, France, Sept. 2006.
L. D. Dalcin, R. R. Paz, P. A. Kler, and A. Cosimo. Parallel distributed computing using Python. Advances in Water Resources, 34(9):1124 – 1139, 2011. ISSN 0309-1708. URLhttp://dx.doi.
org/10.1016/j.advwatres.2011.04.013. New Computational Methods and Software Tools.
T. A. Davis. Algorithm 832: UMFPACK v4.3—an unsymmetric-pattern multifrontal method. ACM Trans. Math. Softw., 30(2):196–199, June 2004. ISSN 0098-3500. URLhttp://doi.acm.
org/10.1145/992200.992206.
L. Fousse, G. Hanrot, V. Lefèvre, P. Pélissier, and P. Zimmermann. MPFR: A multiple-precision binary floating-point library with correct rounding. ACM Transactions on Mathematical Software, 33(2):13:1–13:15, June 2007. URLhttp://doi.acm.org/10.1145/1236463.1236468.
T. Granlund and the GMP development team. GNU MP: The GNU Multiple Precision Arithmetic Library, 6.0.0 edition, 2014. URLhttp://gmplib.org/.
G. Guennebaud, B. Jacob, et al. Eigen v3, 2015. URLhttp://eigen.tuxfamily.org.
P. Hénon, P. Ramet, and J. Roman. PaStiX: A High-Performance Parallel Direct Solver for Sparse Symmetric Definite Systems. Parallel Computing, 28(2):301–321, Jan. 2002. URLhttp://dx.
doi.org/10.1016/S0167-8191(01)00141-7.
V. Hernandez, J. E. Roman, and V. Vidal. SLEPc: A scalable and flexible toolkit for the solution of eigenvalue problems. ACM Trans. Math. Software, 31(3):351–362, 2005. URLhttp://dx.doi.
org/10.1145/1089014.1089019.
M. A. Heroux, R. A. Bartlett, V. E. Howle, R. J. Hoekstra, J. J. Hu, T. G. Kolda, R. B. Lehoucq, K. R. Long, R. P. Pawlowski, E. T. Phipps, A. G. Salinger, H. K. Thornquist, R. S. Tuminaro, J. M. Willenbring, A. Williams, and K. S. Stanley. An overview of the Trilinos project. ACM Trans. Math. Softw., 31(3):397–423, 2005. ISSN 0098-3500. URLhttp://doi.acm.org/10.1145/
1089014.1089021.
A. Johansson, M. G. Larson, and A. Logg. High order cut finite element methods for the stokes problem. Advanced Modeling and Simulation in Engineering Sciences, 2(24), 2015. doi: 10.1186/ s40323-015-0043-7.
G. Karypis and V. Kumar. A fast and high quality multilevel scheme for partitioning irregular graphs. SIAM J. Sci. Comput., 20(1):359–392, Dec. 1998. ISSN 1064-8275. URLhttp://dx.doi.
org/10.1137/S1064827595287997.
A. Plaza and G. Carey. Local refinement of simplicial grids based on the skeleton. Applied Numerical Mathematics, 32:195–218, 2000. URLhttp://dx.doi.org/10.1016/S0168-9274(99)00022-7. C. N. Richardson and G. N. Wells. Parallel scaling of DOLFIN on ARCHER. figshare.com,
http://figshare.com/articles/Parallel_scaling_of_DOLFIN_on_ARCHER/1304537, 2015.
URLhttp://dx.doi.org/10.6084/m9.figshare.1304537.
S. Rush and H. Larsen. A practical algorithm for solving dynamic membrane equations. IEEE Trans Biomed Eng, 25(4):389–392, Jul 1978. URLhttp://dx.doi.org/10.1109/TBME.1978.326270. B. Schling. The Boost C++ Libraries. XML Press, 2011. ISBN 0982219199, 9780982219195.
H. Si. TetGen, a Delaunay-based quality tetrahedral mesh generator. ACM Trans. Math. Softw., 41 (2):11:1–11:36, Feb. 2015. ISSN 0098-3500. URLhttp://doi.acm.org/10.1145/2629697.
J. Sundnes, R. Artebrant, O. Skavhaug, and A. Tveito. A second-order algorithm for solving dynamic cell membrane equations. IEEE Trans Biomed Eng, 56(10):2546–2548, Oct 2009. URL
http://dx.doi.org/10.1109/TBME.2009.2014739.
SymPy Development Team. SymPy: Python library for symbolic mathematics, 2014. URLhttp:
//www.sympy.org.
The CGAL Project. CGAL User and Reference Manual. CGAL Editorial Board, 4.6 edition, 2015.
URLhttp://doc.cgal.org/4.6/Manual/packages.html.
The HDF Group. Hierarchical data format, version 5, 2015. URLhttp://www.hdfgroup.org/
HDF5/.
S. van der Walt, S. Colbert, and G. Varoquaux. The NumPy Array: A structure for efficient numerical computation. Computing in Science Engineering, 13(2):22–30, March 2011. ISSN 1521-9615. URLhttp://dx.doi.org/10.1109/MCSE.2011.37.