FCMLab: A Finite Cell Research Toolbox for MATLAB
Transcript of FCMLab: A Finite Cell Research Toolbox for MATLAB
FCMLab: A Finite Cell Research Toolbox for MATLAB
N. Zandera,∗, T. Boga, M. Elhaddada, R. Espinozaa, H. Hua, A. Jolyb, C. Wua, P. Zerbea, A. Dusterc, S. Kollmannsbergera,
J. Parviziand, M. Ruesse, D. Schillingerf, E. Ranka
aChair for Computation in Engineering, Technische Universitat Munchen, Arcisstr. 21, 80333 Munchen, GermanybEcole des Ponts ParisTech, 6 et 8 avenue Blaise Pascal, 77455 Marne-la-Vallee cedex 2, France
cNumerische Strukturanalyse mit Anwendungen in der Schiffstechnik, Technische Universitat Hamburg-Harburg,
Schwarzenbergstr. 95c, 21073 Hamburg, GermanydDepartment of Mechanical Engineering, Isfahan University of Technology, Isfahan 84156 83111, Iran
eAerospace Structures and Computational Mechanics, Delft University of Technology, Kluyverweg 1, 2629 HS Delft, The NetherlandsfDepartment of Civil Engineering, University of Minnesota, 500 Pillsbury Drive S.E., Minneapolis, 55455 MN, USA
Abstract
The recently introduced Finite Cell Method combines the fictitious domain idea with the benefits of high-order finite elements.
Although previous publications demonstrated the method’s excellent applicability in various contexts, the implementation of a
three-dimensional Finite Cell code is challenging. To lower the entry barrier, this work introduces the object-oriented MATLAB
toolbox FCMLab allowing for an easy start into this research field and for rapid prototyping of new algorithmic ideas. The paper
reviews the essentials of the methods applied and explains in detail the class structure of the framework. Furthermore, the usage of
the toolbox is discussed by means of different two- and three-dimensional examples demonstrating all important features of FCMLab
(http://fcmlab.cie.bgu.tum.de/).
Keywords: Finite Cell Method, fictitious domain methods, MATLAB, object-oriented finite elements, high-order finite elements,
p-FEM
1. Introduction
For decades, the Finite Element Method (FEM) has been
among the most prominent approaches to solve partial differ-
ential equations (PDEs) numerically. Many theoretical and al-
gorithmic enhancements of the method now allow to simulate
very complex scenarios in science and technology. What re-
mains unchanged, however, is the central idea to describe the
PDE’s solution and the domain geometry using the same mesh.
This dual-use of elements for the approximation of the geomet-
ric shape and solution characteristics implies e.g. that distorted
elements have to be avoided, as they would degrade the nu-
merical accuracy. For non-trivial geometries, this constraint
complicates the mesh generation processes considerably and
renders the method’s intrinsic need for a geometry-conforming
discretization as one often limiting factor in daily engineering
practice.
Alternative numerical approaches try to drop this limitation
by separating the discretization of the solution from that of the
geometry. Prominent examples are meshless and element-free
methods [1, 2]. Also the Generalized Finite Element, Immersed
Boundary, Fictitious Domain, Fat Boundary, Cartesian Grid-
FEM and certain variants of extended Finite Element Meth-
ods follow this approach [3–16]. For a comprehensive review
see [17–19]. A common idea of these methods is to approxi-
∗Corresponding author.
Email address: [email protected] (N. Zander)
mate the PDE’s solution using a non geometry-conforming dis-
cretization (approximation mesh) and to capture the actual do-
main geometry on a separate geometry mesh. Many of these
approaches use a rather fine approximation mesh on which lin-
ear shape functions are spanned. This h-FEM-like concept
has been extended to higher orders by the Finite Cell Method
(FCM), combining a fictitious domain approach with the ben-
efits of high-order finite elements (p-FEM). The Finite Cell
Method was first introduced in [20, 21], where its potential was
demonstrated for linear-elastic examples in two and three di-
mensions. Various extensions of the FCM confirm its versatility
in the context of topology optimization [22], geometrically non-
linear continuum mechanics [23], adaptive mesh-refinement
[24–27], computational steering [28, 29], biomedical engi-
neering [30], numerical homogenization [31], elastoplasticity
[32], wave propagation in heterogeneous materials [33, 34],
local enrichment for material interfaces [35], convection dif-
fusion problems [36, 37], thin-walled structures [38], design-
through-analysis and iso-geometric-analysis [26, 27, 39, 40],
weak coupling of non-matching, multi-patch geometries [41],
and multi-physical applications [42]. The potential of high-
order-fictitious-domain methods is also demonstrated in the
context of Kantorovich methods [43, 44], immersed B-Spline
methods (I-Splines) [45, 6, 46], and eXtended Finite Element
Methods (XFEM) [13–16].
Yet, research in this field essentially demands for the avail-
ability of a high-order Finite Element code, which is not trivial
to implement. To lower this entry barrier, the goal of the present
Preprint submitted to Advances in Engineering Software May 23, 2014
work is to introduce FCMLab, an object-oriented MATLAB tool-
box tailored for quick prototyping of new algorithmic ideas.
Similar open-source software projects have been launched re-
cently in the communities of hp-FEM, XFEM, meshless meth-
ods, and isogeometric analysis (see e.g. [47–54]). The authors
hope that this work will be helpful for researches interested in
high-order fictitious domain methods. For this purpose, the sec-
ond section of this paper briefly explains the essential concepts
of high-order Finite Elements and of the Finite Cell Method.
The most important parts of the code design are outlined in the
third section. The fourth section explains how to use the tool-
box by different examples in two and three dimensions.
2. High-order Finite Elements and Finite Cells
As indicated in the introduction, this section outlines the
essential ideas of the Finite Cell Method. As a model prob-
lem, linear elasticity will be considered and some basics of the
p-version of the Finite Element Method, being a prerequisite
for the FCM will be sketched, briefly.
2.1. Model problem
Consider a two- or three dimensional domain Ω with bound-
ary ∂Ω divided into Neumann and Dirichlet parts ΓN and ΓD,
respectively, such that
ΓN ∩ ΓD = ∅ and ΓN ∪ ΓD = ∂Ω.
Assuming linear-elastic behaviour, the deformation u caused
by a body force b is described by the following set of partial
differential equations:
∇ · σ + b = 0 ∀ x ∈ Ω (1a)
σ = C : ε ∀ x ∈ Ω (1b)
ε =1
2
[
∇u + (∇u)⊤]
∀ x ∈ Ω (1c)
σ · n = t ∀ x ∈ ΓN (1d)
u = u ∀ x ∈ ΓD. (1e)
Here, σ and ε denote the stress and strain tensor, respectively,
and C is the linear-elastic constitutive tensor. t and u are the
traction and displacement vectors prescribed on the respective
boundaries. n is the outward-pointing normal vector on the
boundary.
Following the principal of virtual work described e.g. in [55–
58], the above equation is transferred into its corresponding
weak form:
Find u ∈ H1 (Ω) such that
a (u, v) = f (v) ∀ v ∈ H1 (Ω) (2a)
with a (u, v) =
∫
Ω
ε (v) : C : ε (u) dΩ (2b)
and f (v) =
∫
Ω
v · b dΩ +
∫
ΓN
v · t dΓ, (2c)
with H1 denoting the Sobolev space of order 1.
On the basis of the weak formulation, the Finite Element
Method is applied to approximate the analytical solution. To
this end, the infinite-dimensional Sobolev space is restricted to
an n-dimensional subspace Vh ⊂ H1 being spanned by the basis
B = N1,N2, . . . ,Nn. This allows to express the numerical ap-
proximation uh ∈ Vh as a linear combination of basis functions:
uh =
n∑
i=1
Niui, (3)
with ui denoting the degrees of freedom related to shape func-
tions Ni. Following a Bubnov-Galerkin approach, the space of
test functions v is reduced to the same space Vh [55]. Thus, the
same basis representation can be employed for the test functions
vh ∈ Vh. To determine the unknown degrees of freedom, the
above representation is inserted into the weak form (2) yielding
a system of linear equations
Ku = b, (4)
which has to be solved for the unknowns u. Typically, K and b
are denoted as stiffness matrix and external force vector.
2.2. p-version of the Finite Element Method
Nodal-Modes Edge-Modes
Edge-Modes Internal-Modes
N1Di
(r)
N1Dj
(s)
Figure 2: Tensor-product structure of legendre-based shape functions
The type of basis functions N has a major influence on the
characteristics of the numerical method. For the Finite Cell
Method, any high-order basis can be utilized. So far p-FEM
shape functions [57, 59], NURBS, being used in isogeometric
analysis [60], and Gauss-Lobatto-Legendre polynomials, used
in the Spectral Cell Method [33], have been applied success-
fully. Currently, FCMLab only provides basis functions from the
p-version.
2
-1 -0.5 0.5 1
-1
-0.5
0.5
1
(a) Linear modes
-1 -0.5 0.5 1
-1
-0.5
0.5
1
(b) Quadratic mode
-1 -0.5 0.5 1
-1
-0.5
0.5
1
(c) Cubic mode
Figure 1: 1D Legendre-based shape functions
-1
0
1
-1
0
1
0
1
2
(a) Nodal-mode
-1
0
1
-1
0
1
-1
-0.5
0
(b) Edge-mode
-1
0
1
-1
0
1
0
0.1
0.2
(c) Internal-mode
Figure 3: Two-dimensional mode types
Its one dimensional shape functions N1Di
(see Figure 1) are
defined as integrated Legendre polynomials [57]. They yield a
hierarchical basis, which is superior to the classical Lagrange
basis from a numerical point of view as the condition number
of the corresponding stiffness matrix remains constant for an in-
creasing polynomial degree (in case of Laplace problems). Al-
though this property does not carry over to higher dimensions,
a comparatively low condition number is maintained.
To obtain a two- or three-dimensional basis on a unit-square
or -cube, the one-dimensional shape functions are combined in
a tensor product
N2Di, j (r, s) = N1D
i (r) N1Dj (s)
and N3Di, j,k (r, s, t) = N2D
i, j (r, s) N1Dk (t) .
As depicted in Figure 2, the elements of the two-dimensional
tensor-product space can be sorted into the following three
groups:
Nodal-mode The combination of two one-dimensional nodal-
modes gives rise to the well known bi-linear modes (see
Figure 3a). Just as in 1D, these can be associated directly
to one node giving the group its name.
Edge-mode The combination of a one-dimensional internal-
mode and a one-dimensional nodal-mode results in a func-
tion that is non-zero at only one edge (see Figure 3b).
Therefore, the mode can be directly associated to that edge
and, thus, identified as a two-dimensional edge-mode.
Internal-mode The combination of two one-dimensional
internal-modes yields a function that is zero on all four
nodes and edges (see Figure 3c). The mode can, therefore,
be directly associated to the face and thus, identified as a
bubble- or internal-mode.
This mode concept naturally extends into three-dimensions,
where also internal- or volume-modes have to be considered.
Different alternatives to the tensor-product space, such as
a trunk-space or anisotropic polynomial-degree-templates, are
discussed in [61, 57]. They are currently not implemented in
FCMLab but might be added in the future.
2.3. The Finite Cell Method
As discussed in the introduction, mesh-generation is often
time consuming and sometimes even a limiting factor when us-
ing FEM for industrial applications. This problem becomes
even more severe for the p-version of the Finite Element
3
Ωphy
tt = 0 on ∂Ω∪
ΓN
ΓD
Ω f ic
Ω∪=Ωphy ∪ Ω f icα = 1.0
α = 0.0
Figure 4: The Finite Cell idea [23]
Method: although the solution can be represented by much less
and thus coarser elements compared to the h-version, they have
to assume possibly complex shapes of the domain’s surface, to
deliver accurate results [57]. The Finite Cell Method (FCM)
[20, 21], combining the benefits of higher-order Finite Elements
with the ideas of fictitious domain methods, overcomes these
mesh generation problems. The basics of the method are briefly
reviewed in the first part of this section, whereas the second
part addresses the imposition of boundary conditions for non
boundary-conforming discretizations.
2.3.1. Basic concept
The essential idea of the Finite Cell Method is to simplify the
mesh-generation process by separating the approximation of
the analytical solution from the geometry representation of the
physical domain. For this purpose, two independent discretiza-
tions are introduced: the solution and the integration mesh. The
first mesh is used to approximate the analytical solution and,
thus, spans the shape functions. However, it does not resolve
the geometry of the domain. This is done by the second mesh,
which is completely independent of the first one and does not
introduce any additional degrees of freedom.
Solution mesh. The first step to separate the two meshes is to
embed the actual physical domain Ωphy in a fictitious domain
Ω f ic such that their union Ω∪ yields a simple shape (see Fig-
ure 4). To recover the original boundary value problem on the
new domain Ω∪, an indicator function α is defined as
α(x) =
1 ∀ x ∈ Ωphy
0 ∀ x < Ωphy1.
(5)
1 Choosing α as zero outside of the physical domain negatively influences
the condition number of the stiffness matrix. To control the conditioning, the
value of α is typically set to a small value that allows to solve the system of
equations without numerical problems. Experience shows that the direct solvers
implemented in MATLAB can handle values of α ≈ 10−10 without major diffi-
culties.
The bi-linear form a(·, ·) can then be rewritten as
a (u, v) =
∫
Ωphy
ε (v) : C : ε (u) dΩ
=
∫
Ωphy
1 · ε (v) : C : ε (u) dΩ
+
∫
Ω f ic
0 · ε (v) : C : ε (u) dΩ
≈
∫
Ω∪
α · ε (v) : C : ε (u) dΩ.
The right hand side f (·) can be treated analogously. In this way,
the meshing of the complex physical domain can be simplified
drastically, as the simply-shaped domain Ω∪ can be discretized
instead using a Cartesian-shaped solution mesh, which renders
the mesh-generation process trivial. To avoid a confusion of
names, the resulting non boundary-conforming, high-order ele-
ments are denoted as Finite Cells giving the method its name.
Integration mesh. The second step is to recover the domain ge-
ometry using a separate integration mesh. In principle, this sec-
ond mesh can be generated following various strategies. One
possibility is to use conforming integration simplices by tri-
angulating the physical domain. XFEM- and Level Set-based
methods commonly apply this strategy [14, 15]. Typically, this
approach is used with linear simplices. However, the method
can also be extended to higher-orders as shown in [13, 62–
64, 16, 65, 66].
An alternative strategy, which is followed within this work,
is to use a space-tree as integration mesh (see e.g. [67]). Start-
ing from the non-conforming solution mesh, cut cells are recur-
sively refined towards the domain boundary yielding a quad- or
octree structure (see Figure 5). This approach has the advantage
that it requires only a simple inside-outside test. It can therefore
also be applied in conjunction with simple geometry modelling
techniques such as voxel-models, whereas the triangulation ap-
proach demands for a more advanced geometry representation.
2.3.2. Boundary conditions
A challenging task being a consequence of the non boundary-
conforming discretization is the imposition of boundary condi-
tions.
4
finite cell mesh
k=0 k=1 k=2
k=3 k=4 k=5
with geometric
boundary
Figure 5: Integration via space-trees [23]
Like in the classical FEM, homogeneous, ’natural’ Neu-
mann boundary conditions need no special treatment in the
FCM. Inhomogeneous Neumann boundary conditions demand
to explicitly include the boundary integral term of the linear
form (2c). As the boundary is not resolved by edges of the finite
cells, a classical integration over the element edges is not possi-
ble. Instead, an explicit surface discretization is introduced on
which the traction integral can be evaluated. Just as the previ-
ously described integration mesh, this surface integration mesh
is independent of the actual solution mesh and does not intro-
duce additional degrees of freedom. A convenient way to gener-
ate this mesh – supported by FCMLab– is to provide the surface
of interest as an STL2 file. The STL format is supported by
most CAD systems and represents surfaces as a collection of
linear triangles over which the integration can be performed.
In contrast to the Neumann case, the incorporation of Dirich-
let boundary conditions is more challenging. Classically, they
are imposed by explicitly choosing the shape functions from
kinematically admissible spaces, such that the prescribed val-
ues are met on the boundary by definition [57]. This imposes
the boundary conditions in the strong sense and can also be
followed in the case of non-boundary conforming discretiza-
tions by adapting the admissible function spaces for the partic-
ular geometry under consideration. Popular methods following
this idea are for example web- and i-spline based methods (see
e.g. [68, 45]). An alternative approach followed in this work
is to extend the weak formulation such that it directly incorpo-
rates the Dirichlet boundary conditions. Possible strategies for
this purpose are for example the Lagrange Multiplier or Penalty
Method [56, 69, 23, 70]. An alternative is to use an approach
originally introduced by Nitsche in [71] for the Laplace prob-
2Surface Tesselation Language
lem, which was later extended to other applications [72–75].
The idea of this method is to extend the original weak form (2)
by additional constraining expressions as follows:
a (u, v) = a (u, v) −
∫
ΓD
(σ (u) · n) · v dΓ
−
∫
ΓD
(σ (v) · n) · u dΓ + β
∫
ΓD
v · u dΓ
and f (v) = f (v) −
∫
ΓD
(σ (v) · n) · u dΓ + β
∫
ΓD
v · u dΓ.
The first additional integral of the bi-linear form follows natu-
rally from the divergence theorem when the test functions are
not restricted to be homogeneous on the boundary. It, therefore,
insures the method’s consistency. The second additional term
of a and the first additional term of f are introduced to yield a
symmetric stiffness matrix. The two remaining integrals are in-
troduced for numerical stabilization, since coercivity might be
lost when subtracting the consistency terms from the bilinear
form. With this extension, the discrete problem can be refor-
mulated incorporating the Dirichlet boundary conditions in the
weak sense as follows:
Find uh ∈V (Ω) such that
a (uh, vh) = f (vh) ∀ vh ∈ V (Ω) .
In analogy to Neumann boundary conditions, the constraining
expressions are evaluated using a separate surface integration
mesh.
The major advantage of Nitsche-like methods is their inher-
ent consistency, which ensures that the solution of the origi-
nal strong problem (1) also solves the modified weak problem
5
[73, 76, 74]. However, the major challenge of this approach is
to select the stability parameter β large enough to ensure the co-
ercivity of the modified weak form. As shown in [74, 72, 73],
the correct value of β is dependent on the mesh-size h, the poly-
nomial degree p, and the material parameters. [73–75] suggest
to solve an auxiliary eigenvalue-problem to estimate β. How-
ever, their investigations show that choosing a value higher than
the threshold has no significant effect on the numerical result.
Following the work of [23, 40, 42], who showed that also an
empirical choice of the stability parameter yields good results,
the eigenvalue-estimate is omitted in this work.
3. Code design
FCMLab is an object-oriented MATLAB toolbox, which is in-
tended to provide an easy entry point into the research field of
higher-order fictitious domain methods. This section presents a
compact outline of the code design. To this end, the two most
frequently applied design patterns are introduced in the first part
of the section. In the second part, the most important classes of
the toolkit and their mutual dependencies are explained. The
description of the code expects the reader to be familiar with
general MATLAB programming and knowledge of object ori-
ented concepts in MATLAB, as described e.g. in [78, 79].
3.1. Applied design patterns
In the context of object-oriented software engineering, cer-
tain types of design problems keep on re-appearing, indepen-
dent of the actual application under consideration. For this rea-
son, design patterns have been developed as reusable template
solutions for the most prominent design problems. A classi-
cal reference in this context is the textbook by Gamma, Helm,
Johnson, and Vlissides [77].
3.1.1. Strategy pattern
The strategy pattern is a behavioral pattern aiming to decou-
ple a family of algorithms from the actually calling code. For
this purpose, different algorithms are implemented as separate
classes. They all inherit from the same base class which defines
the common interface. The client code then implements against
this abstract interface and not against the actual implementa-
tions. Thus, the calling codes and the algorithms are decoupled,
allowing to refactor and maintain the implementation of differ-
ent algorithms without affecting the client code. Furthermore,
the family of algorithms can be extended by simply adding new
sub-classes. A numeric-oriented example is depicted in Fig-
ure 6a.
3.1.2. Factory method pattern
The factory method pattern is a creational pattern aiming to
simplify the creation of complex products. For this purpose,
the creational process is decoupled from the client code by
introducing an abstract creator class. This specifies the inter-
face functions that create the respective object. These factory-
methods are then implemented in different sub-classes deciding
in which way the final product is constructed. This approach
allows the client code to implement against the abstract inter-
face without knowing about the details of the different creator
classes. In this way, the implementation of the creational pro-
cess can be exchanged easily as the calling code remains unaf-
fected. A numeric-oriented example is depicted in Figure 6b.
The factory idea can be extended to the abstract factory pat-
tern, which allows to create complex product families easily.
Within FCMLab, both versions of the pattern are applied and
combined.
3.2. Code Verification
Besides the aspects of extensibility and maintainability, a
third important request when developing a software framework
is to ensure and maintain code correctness and consistency. For
this purpose, FCMLab is developed in a test-driven manner (see
e.g. [80, 81]). The framework is, thus, equipped with a test
suite, which verifies the correctness of the individual modules
following the idea of unit tests. Furthermore, the full simula-
tion pipeline is tested using examples with analytical solutions
which allow to verify the numerical results. To ensure code
correctness during the on-going development process, a contin-
uous integration system is employed, which automatically exe-
cutes the entire test suite as soon as changes are committed to
the version control system. To this end, we utilize the MAT-
LAB xUnit Test Framework [82], the continuous integration
server Jenkins (formally known as Hudson) [83], and Apache
Subversion (SVN) [84].
3.3. Program structure
The aim of FCMLab is to provide a prototyping framework in
which new algorithmic ideas can be tested easily. Therefore,
the framework has to be structured such that different com-
ponents can be exchanged easily without affecting other parts
of the code. The design must thus aim for high cohesion of
the individual modules – in the sense that all libraries, classes,
and functions have one clearly defined responsibility–and low
coupling between the modules. To address these issues, the
program is decomposed hierarchically into the sub-systems de-
picted in Figure 7. These are then arranged as layers such that
each module only depends on lower layers. This architecture
Geometry
Embedded Domain
Integration
Topology
Material
Element
Mesh
Boundary Conditions
Analysis Post Processing
Driver Files
Figure 7: Layered decomposition of FCMLab
6
MultiGrid GaussSeidelCG
Analysis
+run(...)
AbsSolver
+solve(...)
(a) Strategy Pattern
1DMeshFactory 2DMeshFactory
AbsMeshFactory
+createElements(...)
+createNodes(...)
ElasticQuad
AbsElement
Mesh
ElasticBar
Topology
(b) Factory Method Pattern
Figure 6: Commonly used design patterns [77]
allows to regard each layer as a virtual machine with a clearly
defined task, whose implementation can be exchanged without
affecting up-stream elements. The details of the different pack-
ages are explained in the following sections.
3.3.1. Geometry
The geometry packages provide essential geometric objects
such as vertices, lines, quadrilaterals, and hexahedra (see Fig-
ure 8). These are realized as separate classes and grouped ac-
cording to their dimensionality as abstract curves, areas, and
volumes. These abstractions all implement the class AbsGeom-
etry that specifies the interface functions listed in Table 1.
Function Name Parameter
calcJacobian(...) local coordinates
mapLocalToGlobal(...) local coordinates
mapGlobalToLocal(...) global coordinates
Table 1: Interface-functions of geometry package
TriQuad
AbsCurve
Hexa
Vertex AbsVolumeAbsArea
Line
AbsGeometry
+calcJacobian(...)+mapLocalToGlobal(...)
+mapGlobalToLocal(...)
Figure 8: Class structure of geometry package
3.3.2. Topology
As discussed in Section 2.2, the Legendre-based shape func-
tions can be associated to the different topological components.
Therefore, the topology package, depicted in Figure 9, is re-
sponsible for handling the degrees of freedom. To this end,
a Dof class is defined, which is then aggregated by the Abs-
Topology class. This interface is implemented by the classes
Node, Edge, Face, and Solid that hold objects of their respec-
tive geometric counterparts. Furthermore, the classes store the
associated polynomial degree of the shape functions.
3.3.3. Embedded domain
As discussed in Section 2.3, the essential idea of the Finite
Cell Method is to decouple the solution mesh from the geome-
try and to recover the original domain on the integration level.
This demands for a separate geometry representation, which is
provided by the embedded domain package (see Figure 10). It
contains the abstract AbsEmbeddedDomain class, which spec-
ifies the interface function getDomainIndex(...) determin-
ing the domain in which a point under consideration lies. This
interface is implemented by different concrete domains, such as
simple geometric objects that can be specified explicitly (e.g.
sphere, rectangle, ellipse). Furthermore, FCMLab provides an
implementation that allows to create embedded domains on the
basis of CT-scan-data. This VoxelDomain class reads in the
CT-data from a single ASCII file format, which linearizes the
three-dimensional matrix. The origin and the bounding box are
extracted automatically. Based on this information, the Finite
Cell mesh can be created. The list of domain types can be ex-
tended easily to suit new needs.
In addition to the domain description, the FCM demands for
an explicit representation of the boundary for application of
boundary conditions. For this purpose, the package provides a
AbsBoundaryFactory class, which specifies the getBound-
ary(...) function returning a surface description as a list of
geometric simplices. Presently, several explicit geometries such
as circles and rectangles are provided as well as an implemen-
tation to read STL files3, which can be exported from a CAD
model. Again, this list can be extended easily for new applica-
tions.
3For this purpose, the stlread function provided by Doron Harlev is used,
which is available on the MATLAB Central File Exchange platform: http://
www.mathworks.com/matlabcentral/fileexchange/6678-stlread
7
3.3.4. Integration
As discussed in Section 2.3, the domain integration for the
FCM is carried out over a separate integration mesh. For this
purpose, the integration package defines the non-abstract class
Integrator. This class provides the service function in-
tegrate(...), taking the integrand and the integration do-
main as arguments. To generate the integration mesh, the in-
tegrator aggregates the abstract classes AbsPartitioner and
AbsIntegrationScheme. The AbsPartitioner serves as an
interface for different partitioning strategies (see Figure 11).
Currently, FCMLab provides one-, two-, and three-dimensional
space trees as concrete partitioning strategies. These could be
extended by different schemes, such as triangulations. The
class AbsIntegrationScheme provides interfaces to get one-
dimensional integration coordinates and weights. At present,
the quadrature rule for Gauss-Legendre integration is available,
which is used mostly in Finite Element Analysis [55].
3.3.5. Material
The material package contains different constitutive rela-
tions. To encapsulate these from the other parts of the code,
the AbsMaterial class is defined, which specifies the interface
functionality listed in Table 2.
In addition to providing the constitutive properties, the mate-
rial package is also responsible for defining the Finite Cell indi-
cator function α introduced in Section 2.3. For this purpose, the
third method in the table is specified, which returns the α-value
of the respective material. The idea is to associate one material
for each domain: on the physical domains, the “real” materials
are defined with α = 1.0; on the fictitious domains, auxiliary
“void” materials are defined with α→ 0 4. This concept allows
to handle all domains and materials in the same way during the
integration process.
As depicted in Figure 12, FCMLab provides material laws for
linear-elastic simulations. Again, this list can be extended by
new materials easily as the other parts of the code implement
against the interface defined by AbsMaterial.
4To avoid numerical difficulties due to badly conditioned matrices, an α-
value of 10−10 is chosen for the numerical examples of Section 4
Node Solid
AbsTopology
+getDofs(...)
Dof
+getId(...)
+getValue(...)
+setValue(...)
Vertex
Face
AbsCurve
Edge
AbsArea AbsVolume
Figure 9: Class structure of topology package
VoxelDomainAnnularPlate IBeam
AbsEmbeddedDomain
+getDomainIndex(...)
(a) Selection of provided domains
CircularBoundaryFactory
AbsBoundaryFactory
+getBoundary(...)
STLBoundaryFactory
(b) Selection of provided boundaries
Figure 10: Class structure of embedded domain package
AbsEmbeddedDomain
AbsPartitioner
+subdivide(...)
OctTree GaussLegendre
AbsIntegrationScheme
+getCoordinates(...)
+getWeights(...)
QuadTree
AbsGeometry
AbsIntegrator
+integrate(...)
Integrand
Figure 11: Class structure of integration package
Function Name Parameter
getMaterialMatrix(...) none
getDensity(...) none
getScalingFactor(...) none
Table 2: Interface-functions of material package
3.3.6. Element
The element package is the kernel of the toolbox. It is re-
sponsible for computing the stiffness matrix and the right-hand-
side vector of an element. For this purpose, the abstract Abs-
Element class is defined aggregating its topological compo-
nents, a material, and a domain and offers the interface func-
tions listed in Table 3. To implement these services, the shape
functions and their derivatives need to be evaluated and ar-
ranged in matrices. As this process depends on the dimension-
ality of the problem, the strategy pattern is applied by encapsu-
lating the shape-function evaluation into respective sub-classes
(see Figure 13). In this way, the higher-level parts of the code
8
HookePlaneStress HookePlaneStrain
AbsMaterial
+getMaterialMatrix(...)
+getDensity(...)
+getScalingFactor(...)
Hooke3DHooke1D
Figure 12: Class structure of material package
can use the abstract element without having to know about the
details of the setup and the dimensionality. As the creation of
an element is rather complex, different factories are provided to
generate the most commonly used types.
Function Name Parameter
calcStiffnessMatrix(...) none
calcMassMatrix(...) none
calcBodyLoadVector(...) load function
getLocationMatrix(...) none
getDofVector(...) load case id
Table 3: Interface-functions of element package
ElasticHexaElasticQuad
AbsElement
+calcStiffnessMatrix(...)
+calcMassMatrix(...)+calcBodyLoadVector(...)
+getLocationMatrix(...)
+getDofVector(...)
AbsMaterial
ElasticBar
Figure 13: Class structure of element package
3.3.7. Mesh
The mesh package provides components to create and oper-
ate on one-, two-, and three-dimensional Cartesian meshes. For
this purpose, a non-abstract Mesh class is defined aggregating
the respective topological components as well as all elements
(see Figure 14). As services, it offers the functions listed in Ta-
ble 4. Furthermore, the mesh package offers different schemes
to number the degrees of freedom. To this end, the AbsNumber-
ingScheme is defined, which assigns the degrees of freedoms
to the topological components. The interface is implemented
by concrete strategies sorting the unknowns either according to
their associated polynomial degree or to their topological com-
ponent.
Following the abstract factory pattern, the mesh creation pro-
cess is encapsulated into the abstract AbsMeshFactory class
that handles the setup of the topology, the elements, and the
numbering scheme.
AbsNumberingScheme
+assignDofs(...)
TopologicalSorting
AbsElement
Mesh
+assembleStiffnessMatrix(...)
+assembleMassMatrix(...)+calcBodyLoadVector(...)
+assembleLoadVector(...)
+scatterSolution(...)
PolynomialDegreeSorting
Figure 14: Class structure of mesh package
Function Name Parameter
assembleStiffnessMatrix(...) none
assembleMassMatrix(...) none
assembleLoadVector(...) load case id
scatterSolution(...) solution
Table 4: Interface-functions of mesh package
3.3.8. Boundary condition
The boundary condition package offers the possibility to
constrain the numerical system using Neumann and Dirichlet
boundary conditions. As described in Section 2.3, the latter can
be applied in the strong and in the weak sense. To break the
complexity of the package, it is split into sub-systems, which
are explained in the following paragraphs5.
Dirichlet boundary conditions. To apply Dirichlet boundary
conditions, the abstract AbsDirichletBoundaryCondition
class is introduced. It provides the interface function modi-
fyLinearSystem(...), which takes the mesh and the sys-
tem of linear equations as arguments and applies the bound-
ary conditions. From this super class, the StrongDirichlet-
BoundaryCondition and WeakDirichletBoundaryCondi-
tion are derived.
Strong Dirichlet boundary conditions directly operate on
degrees of freedom. Since the latter are associated to
5Within the figures of the different packages, the terms DBC and NBC are
used as abbreviations for Dirichlet and Neumann boundary conditions. Within
FCMLab, the full class names are spelled out.
9
StrongPenaltyDirichletAlgorithm
AbsStrongConstrainingAlgorithm
+modifyLinearSystem(...)
AbsStrongDBC
+modifyLinearSystem(...)
StrongDirectConstrainingAlgorithm
StrongFaceDBCStrongEdgeDBCStrongNodeDBC
Figure 15: Class structure of strong boundary condition Package5
WeakPenaltyAlgorithm WeakNitscheAlgorithm
WeakDBC
+modifyLinearSystem(...)
AbsWeakConstrainingAlgorithm
+modifyLinearSystem(...)
Integrator
AbsTractionOperator
+getTractionVector(...)
TractionElastic3DTractionElastic2DAbsGeometry
Figure 16: Class structure of weak boundary condition Package5
LoadFunction
LoadCase
+addBodyLoad(...)
+addNeumannBoundaryCondition(...)
WeakNeumannBoundaryCondition
AbsIntegrationScheme
NodalNeumannBoundaryCondition
AbsNeumannBoundaryCondition
+augmentLoadVector(...)
AbsGeometry
Figure 17: Class structure of neumann boundary condition Package5
10
the topological components (see Section 3.3.2), three differ-
ent classes are derived from AbsStrongDirichletBound-
aryCondition. They handle the corresponding tasks for
nodes, edges, and faces, respectively (see Figure 15). In prin-
ciple, strong Dirichlet boundary conditions can be applied in
various ways. To allow for this flexibility, the strategy pat-
tern is applied by introducing the interface class AbsStrong-
ConstrainingAlgorithm. Presently, two implementations
of this interface are provided: The first is the StrongPenal-
tyDirichletAlgorithm, which constrains the respective de-
grees of freedom by adding a specified penalty value on the
main diagonal of the system matrix. The second strategy con-
denses the influence of the constrained degrees of freedom to
the right hand side and thus results in a better conditioning of
the stiffness matrix (see e.g. [85]).
As described in Section 2.3, weak Dirichlet boundary con-
ditions can be e.g. applied following the penalty or a Nitsche-
like method. Both approaches introduce additional boundary
integrals constraining the solution appropriately. To evalu-
ate these integrals, the WeakDirichletBoundaryCondition
class aggregates a list of geometric objects as boundary de-
scription and an integrator object (see Figure 16). The ac-
tual constraining algorithm is encapsulated by introducing
the AbsWeakConstrainingAlgorithm interface class, which
is then implemented by the WeakNitscheAlgorithm and
WeakPenaltyAlgorithm.
Neumann boundary conditions. Also in the case of Neumann
boundary conditions, two different cases have to be considered.
In the general case, the traction integral in (2c) has to be eval-
uated over the Neumann boundary. To this end, the WeakNeu-
mannBoundaryCondition class is introduced, which, in anal-
ogy to the weak Dirichlet case, aggregates a boundary descrip-
tion and an integrator object. The actual integrand is specified
as a handle to a load function (see Figure 17).
The second case is the application of a load vector, which
lumps the applied tractions in the nodal degrees of freedom
[58]. For this purpose, the NodalNeumannBoundaryCondi-
tion is defined.
To compute the mechanical reactions of the system under
consideration for different load settings, a LoadCase class is
introduced to which different body and surface loads can be as-
sociated.
3.3.9. Analysis
The analysis package is at the top level of the FCMLab tool-
box. Here the numerical problem is set up and run. For this
purpose, the abstract class AbsAnalysis is introduced, which
aggregates the mesh and boundary conditions (see Figure 18)
and specifies the interface functions listed in Table 5. These
are then implemented by concrete analyses. In its current state
FCMLab provides a quasi-static and an eigenmode analysis (see
Figure 18).
3.3.10. Post-processing
The final module to be discussed here is the post-processing
package. FCMLab offers two different ways to post-process nu-
EigenmodeAnalysis
LoadCaseMesh
QuasiStaticAnalysis
AbsAnalysis
+addLoadCases(...)+addDirichletBoundaryCondition(...)
+solve(...)
AbsDrichletBC
Figure 18: Class structure of analysis package5
Function Name Parameter
addLoadCases(...) list of load cases
addDBC(...) abstract Dirichlet BC
solve(...) none
Table 5: Interface-functions of analysis package
merical results: visual post-processing depicting the results as
line or surface plots and integrational post-processing allow-
ing the calculation of integral values, such as strain energy and
mass. Again following the strategy pattern, both post-processor
types operate on point-processors via an interface class Abs-
PointProcessor. These convert the numerical solution into
the physical quantities of interest, such as strains, stresses, and
energies (see Figure 19).
In the context of the Finite Cell Method, both post-processing
types have to be enhanced to operate on the non boundary-
conforming discretization. In case of integrational post-
processing, the quadrature package outlined in Section 3.3.4
is used for this purpose. For visual post-processing, a sepa-
rate post-processing mesh is introduced to visualize the results
in two or three dimensions. Different factories provided by
FCMLab allow for an easy creation of these meshes. The user
can also choose between different types of visualization, such
as line- or path- and surface-plots. For the latter plot type, also
the finite cells, the integration cells, and the boundary condition
mesh can be visualized.
3.4. Extensions to alternative differential operators and non-
linear problems
Currently the toolbox only supports simulations of linear
elastic problems. As shown by e.g. Schillinger et al., however,
the Finite Cell Method also yields excellent results in the con-
text of geometrically non-linear elasticity (see e.g [27]). The
modular setup of FCMLab, described in the previous sections,
allows to easily extend the toolbox for applications of this cat-
egory. As a guideline for users of the toolbox, the necessary
steps shall be briefly outlined in the following.
First, new elements have to be defined, which allow for large
deformations. To this end, new element classes have to be cre-
ated in the element package, which implement the AbsElement
11
VonMisesStress
SurfacePlot IntegrationMeshVisualizer
IntegrationPostProcessor
+integrate(...)
StrainEngery
Triangulation3D
AbsPostProcessor
+registerPointProcessor(...)
Triangulation2DStraightLine
VisualPostProcessor
+visualizeResults(...)
AbsPostProcessingMeshFactory
+createPostProcessingMesh(...)
AbsVisualizer
+visualizeResults(...)
L2ErrorDisplacement
LinePlot
PostProcessingMesh
AbsPointProcessor
+evaluate(...)
Figure 19: Class Structure of Post-Processing Package. Note that only a selection of the available point-processors, mesh factories, and visualizers is depicted.
interface.
In a second step, the respective material models (e.g. Moony-
Rivlin or Neo-Hooke [86]) have to be implemented in the
framework. This can be done easily by creating new sub-classes
in the material package that implement the AbsMaterial inter-
face.
The final step is the implementation of a non-linear solver,
which solves the non-linear system of equations iteratively e.g.
using the Newton’s method or a fix-point approach (see e.g.
[86]). This has to be carried out in the analysis package by
creating new classes, which implement the AbsAnalysis in-
terface.
Similarly, the framework could be extended into the domain
of fluid dynamics, where void and structure essentially inter-
change their role, see, e.g. [87]. For a convection diffusion
problem the penalization factor α is applied to the diffusion co-
efficient in the ’obstacle’ regime of the flow.
4. Examples
Having outlined the theoretical background and the basic
program structure in the previous sections, this part of the work
aims at demonstrating the usage of FCMLab. For this purpose,
examples from previous FCM-related publications are reused
for highlighting the different features of the toolbox. The sec-
tion starts with a two-dimensional benchmark example with an
explicit geometry description. In the second example, the me-
chanical behaviour of a three-dimensional femur (thigh bone)
is investigated using a voxel model. The section concludes
with a third example demonstrating the possibility of eigen-
mode analyses using the Finite Cell Method.
4.1. Analytical benchmark
This first example outlines the structure of a driver file to
setup an analysis within FCMLab. For this purpose, the dis-
placement of the annular plate depicted in Figure 20a shall be
computed, following [23, 42, 40]. Assuming a plane stress con-
figuration and the denoted material properties, the displacement
in polar coordinates caused by the stated radial loading can be
given analytically as:
ur = −r
2
ln r
ln 2
uθ = 0.
The corresponding polar stresses read
σr = εr =∂ur
∂r= −
1
2
ln(r) + 1
ln(2)
σθ = εθ =1
r
∂uθ
∂θ+
ur
r= −
1
2
ln(r)
ln(2)
σrθ = εrθ =1
2
(
1
r
∂ur
∂θ+∂uθ
∂r−
uθ
r
)
= 0.
The analysis can be separated into the parameter configura-
tion and the analysis setup. These two sections are explained
individually in the following paragraphs.
Parameter configuration. The driver file starts with the de-
scription of the discretization and material parameters:
1 MeshOrigin = [-1.1 -1.1 0.0];
2 MeshLengthX = 2.2;3 MeshLengthY = 2.2;4 NumberOfXDivisions = 4;
5 NumberOfYDivisions = 4;6 PolynomialDegree = 4;
7 NumberOfGaussPoints = PolynomialDegree+1;
8 YoungsModulus = 1.0;9 PoissonsRatio = 0.0;
10 Density = 1.0;
In a second step, the numerical parameters of the Finite Cell
Method are specified as follows:
11 SpaceTreeDepth = 3;
12 Alpha = 1e-10;13 Beta = 1e3;
Here the value of the indicator function α outside of the physi-
cal domain is chosen to be a small positive number in order to
avoid ill-conditioning of the system matrix.
12
The third step is to define the inner and outer radius of the
annular plate and the discretization of the boundary mesh:
14 Center = [ 0.0 0.0 0.0 ];15 OuterRadius = 1.0;
16 InnerRadius = 0.25;17 NumberOfSegments = 500;
Finally, the body forces and the boundary values need to be
specified as function handles:
18 bPolar = @(r,theta) [ 1/(r*log(2)) ; 0];
19 uxPolar = @(r,theta) 0.25* cos(theta);
20 uyPolar = @(r,theta) 0.25* sin(theta);
Analysis setup. After having specified the different numerical
parameters, the analysis can be setup. For this purpose, two
different materials are defined for the physical and the void do-
main:
21 Materials(1) = HookePlaneStress( YoungsModulus , ...22 PoissonsRatio , Density , Alpha );
23 Materials(2) = HookePlaneStress( YoungsModulus , ...24 PoissonsRatio , Density , 1 );
The next step is to define the physical domain and its bound-
ary. As the geometry can be described explicitly, the Annu-
larPlate implementation of the AbsDomain interface intro-
duced in Section 3.3.3 is used:
25 AnnularPlate = AnnularPlate( ...26 Center , OuterRadius , InnerRadius );
27 CounterClockWise = true;28 OuterBoundaryFactory = ...
29 CircularBoundaryFactory( Center, ...30 OuterRadius , NumberOfSegments , ...
31 CounterClockWise );
32 CounterClockWise = false;
33 InnerBoundaryFactory = ...34 CircularBoundaryFactory( Center, ...
35 InnerRadius , NumberOfSegments , ...36 CounterClockWise );
In a third step, the discretization is created using the element
and mesh factories described in Section 3.3.6 and 3.3.7:
37 DofDimension = 2;
38 ElementFactory = ...
39 ElementFactoryElasticQuadFCM( ...40 Materials , AnnularPlate , ...41 NumberOfGaussPoints, SpaceTreeDepth );
42 MeshFactory = MeshFactory2DUniform( ...
43 NumberOfXDivisions, NumberOfYDivisions ,...44 PolynomialDegree , PolynomialDegreeSorting, ...
45 DofDimension , MeshOrigin , MeshLengthX , ...46 MeshLengthY , ElementFactory );
With these entities, the quasi-static analysis can now be cre-
ated:
48 Analysis = QuasiStaticAnalysis( MeshFactory );
To apply the body forces, a new load case is set up and reg-
istered using the function handles defined above:
49 BodyForce = @(x,y,z) ...
50 polarToCartesian2DVector( x, y, bPolar );
51 LoadCase = LoadCase ();52 LoadCase .addBodyLoad( BodyForce );
53 Analysis .addLoadCases( LoadCase );
To specify the weak Dirichlet boundary conditions, a Nitsche
constraining algorithm and an integration scheme are specified.
These are then used to create three boundary conditions for the
inner and outer boundary in x- and y-direction, which are then
registered to the analysis:
54 % Select constraining strategy
55 ConstrainingAlgorithm = ...56 WeakNitscheDirichlet2DAlgorithm( Beta );
57 IntegrationScheme = ...58 GaussLegendre( NumberOfGaussPoints );
59 % Create outer boundary condition60 Boundary = ...
61 OuterBoundaryFactory.getBoundary();62 zeroBoundary = @(x,y,z) 0;63 ConstrainedDirections = [1 1];
64 OuterCondition = WeakDirichletBoundaryCondition( ...65 zeroBoundary , ConstrainedDirections, ...
66 IntegrationScheme, Boundary , ...67 ConstrainingAlgorithm );
68 % Create inner boundary condition in X69 Boundary = ...
70 InnerBoundaryFactory.getBoundary();71 Ux = @(x,y,z) polarToCartesian(x,y,uxPolar );
72 ConstrainedDirections = [1 0];73 InnerConditionX = WeakDirichletBoundaryCondition( ...74 Ux, ConstrainedDirections, IntegrationScheme ,...
75 Boundary , ConstrainingAlgorithm );
76 % Create inner boundary condition in Y77 Uy = @(x,y,z) polarToCartesian(x,y,uyPolar );
78 ConstrainedDirections = [0 1];79 InnerConditionY = WeakDirichletBoundaryCondition( ...80 Uy, ConstrainedDirections, IntegrationScheme ,...
81 Boundary , ConstrainingAlgorithm );
82 % Register boundary conditions at analysis83 Analysis .addDirichletBoundaryCondition( ...84 OuterCondition );
85 Analysis .addDirichletBoundaryCondition( ...86 InnerConditionX );
87 Analysis .addDirichletBoundaryCondition( ...88 InnerConditionY );
With this setup, the analysis can be executed as follows:
89 Analysis .solve();
As discussed in Section 3.3.10, FCMLab offers the possibli-
ties of visual and integral post-processing, which both work on
point-processors. These can, for example, be defined as fol-
lows:
90 indexOfPhysicalDomain = 2;91 loadCaseToVisualize = 1;
92 displacementNorm = DisplacementNorm( ...93 loadCaseToVisualize );
94 vonMises = VonMisesStress( loadCaseToVisualize, ...95 indexOfPhysicalDomain );96 strainEnergy = StrainEnergy( loadCaseToVisualize, ...
97 indexOfPhysicalDomain );
To visualize these results, a visual post-processor is created
to which different point-processors are registered:
98 FeMesh = Analysis .getMesh ();99 gridSize = 0.1;
100 postProcessingFactory = ...101 VisualPostProcessingFactory2DFCM( ...102 FeMesh, AnnularPlate , ...
103 indexOfPhysicalDomain, gridSize , ...104 OuterBoundaryFactory, ...
105 InnerBoundaryFactory );106 postProcessor = ...
107 postProcessingFactory.creatVisualPostProcessor();
13
x
y
r1 = 0.25
r2 = 1
L = 2.2
ur |r2= 0
ur |r1= 0.25
E = 1ν = 0
br =1
r ln 2
Ωphys
Ω f ict
(a) Benchmark setup
0.05 0.1 0.15 0.2 0.25
(b) Displacement norm
0.5 0.6 0.7 0.8 0.9
(c) von Mises stress
Figure 20: Visualization of annular plate results
108 postProcessor.registerPointProcessor( ...109 displacementNorm );
110 postProcessor.registerPointProcessor( vonMises );
111 postProcessor.visualizeResults( FeMesh );
The visualization of the displacement and stress obtained from
the registered post-processors is depicted in Figure 20.
In analogy, the results can also be integrated over the domain:
112 postProcessor = IntegrationPostProcessos( );
113 postProcessor.registerPointProcessor( strainEnergy );
114 postProcessor.registerPointProcessor( l2Error );
115 integrals = postProcessor.integrate( FeMesh );
4.2. Femur
The following example aims at demonstrating the ability of
FCMLab to work on geometries defined by voxel data. To this
end, the mechanical reaction of a human femur (thigh bone)
subjected to a hip-contact force is computed. Typically, inho-
mogeneous material models are applied in this context to cap-
ture the physical behaviour correctly (see e.g. [30, 88, 89]).
However, as the focus of this paper lies on demonstrating the
usage of different geometry models, a homogeneous, linear-
elastic material description is used.
As the analysis is again quasi-static, the general setup of the
driver file remains unchanged. However, an important differ-
ence is that the bone’s geometry is represented by a voxel-
model obtained from a CT6-scan of the patient. The data file
is loaded using the VoxelDomain implementation of the Abs-
Domain interface described in Section 3.3.3:
1 VoxelDataFile = ’BoneFF1_CTdata_cut.txt’;2 Bone = VoxelDomain( VoxelDataFile );
The second important difference is that the hip-contact force has
to be applied on the non boundary-conforming discretization.
To this end, a separate surface discretization of the hip-cap is
loaded from an STL-file and then used to create a Neumann
boundary condition:
6Computed Tomography
−30−20−10
010
0
5
10
15
20
25
30
−60
−40
−20
0
200
50
100
150
Figure 21: von Mises stress distribution in MPa
14
1 BinarySTLFile = ’HipCap.stl’;
2 LoadSurfaceFactory = ...3 STLBoundaryFactory( BinarySTLFile );
4 LoadBoundary = ...5 LoadSurfaceFactory.getBoundary();
6 BoundaryIntegrator = ...7 GaussLegendre( NumberOfGaussPoints );
8 pressure = -1;
9 Traction = @(x,y,z) [0;0; pressure ];10 Load = WeakNeumannBoundaryCondition( ...11 Traction , BoundaryIntegrator, ...
12 LoadBoundary );
13 LoadCase = LoadCase ();14 LoadCase .addNeumannBoundaryCondition( Load );15 Analysis .addLoadCases( LoadCase );
The remaining parts of the driver file follow in analogy to the
first example and are, thus, not recapitulated here.
Of course, also three-dimensional results can be post-
processed using FCMLab. Figure 21 depicts exemplarily the
von Mises’ stress distribution in the bone caused by the load-
ing. The figure also shows the traction surface used to apply the
hip-contact forces on the bones’ head.
4.3. Eigenmode analysis
This final example aims at demonstrating the use of FCMLab
in the context of an eigenmode analysis. For this purpose,
eigenmodes of the I-section beam depicted in Figure 22 are
computed.
In line with the annular plate example, the physical domain
is represented by an explicit geometry description. As shown in
Figure 22a, the beam is embedded in a slightly larger fictitious
domain being discretized by 5× 5× 5 finite cells of polynomial
order 3. The driver file for this setup follows in analogy to the
previous two examples. The important difference is that in this
application no quasi-static analysis is performed. Instead, the
EigenmodeAnalysis implementation of the AbsAnalysis in-
terface is applied in the following way:
1 NumberOfModesToCompute = 10;2 Analysis = EigenmodeAnalysis( ...
3 MeshFactory , NumberOfModesToCompute );
Results are depicted in Figure 23, and the corresponding fre-
quencies are listed in Table 6. The comparison to references
obtained from an ANSYS computation using 3200 quadratic
elements of type Solid186 (see [90]) demonstrates that the Fi-
nite Cell Method does not only allow to significantly simplify
the mesh generation process but also yields highly accurate re-
sults.
5. Conclusion
This work introduced FCMLab as an object-oriented MAT-
LAB toolbox for the Finite Cell Method allowing rapid-
prototyping of new algorithmic methods in the context of high-
order fictitious domain methods.
7Degrees of Freedom
FCMLab ANSYS Deviation
1st Frequency 7.308 7.307 1.37e-02 %
2nd Frequency 9.637 9.635 2.08e-02 %
3rd Frequency 33.452 33.325 3.81e-01 %
4th Frequency 44.317 44.305 2.71e-02 %
5th Frequency 54.783 54.706 1.41e-01 %
6th Frequency 104.241 103.816 4.09e-01 %
7th Frequency 118.374 118.242 1.12e-01 %
8th Frequency 126.189 126.189 1.29e-05 %
9th Frequency 136.045 135.601 3.27e-01 %
10th Frequency 185.731 184.869 4.66e-01 %
Number of Dofs7 12288 54720
Table 6: Eigenfrequencies of I-section beam [Hz]
To offer researchers an entry point for code extensions, the
paper firstly explained the different modules of the framework
in detail by pointing out the class structure and its internal de-
pendencies. Secondly, the usage of the toolbox was explained
by means of different examples demonstrating how explicit and
voxel-based geometry models can be used for quasi-static and
eigenmode analyses within FCMLab.
At the current stage, the toolbox’s scope allows to apply the
Finite Cell Method in the context of one-, two-, and three-
dimensional linear-elasticity. However, the framework is ex-
plicitly designed to allow for easy extensibility. It is, therefore,
conceivable to broaden the applicability to non-linear problems
or to implement alternative integration schemes. Also, the de-
velopment of new approaches for imposing Dirichlet bound-
ary conditions on the non-conforming discretization would be
very interesting. We, therefore, explicitly invite interested re-
searchers to join our development group at http://fcmlab.
cie.bgu.tum.de/. Here, you can download the full source
code of FCMLab and find a detailed Getting Started guide ex-
plaining the installation of the framework and how to setup and
run your own examples.
Acknowledgements
The first two and the last author gratefully acknowledge the
financial support of the German Research Foundation (DFG)
under grant RA 624/19-1 and RA 624/15-2. D. Schillinger ac-
knowledges support from the Institute for Computational En-
gineering and Sciences (ICES) at the University of Texas at
Austin and the German Research Foundation (DFG) under
grant SCHI 1249/1-2.
References
[1] T. Belytschko, Y. Krongauz, D. Organ, M. Fleming, P. Krysl, Mesh-
less methods: An overview and recent developments, Computer Meth-
ods in Applied Mechanics and Engineering 139 (1-4) (1996) 3–47, ISSN
00457825, doi:10.1016/S0045-7825(96)01078-X.
[2] T. Belytschko, Y. Y. Lu, L. Gu, Element-free Galerkin methods, Inter-
national Journal for Numerical Methods in Engineering 37 (2) (1994)
229–256, ISSN 0029-5981, doi:10.1002/nme.1620370205.
15
(a) FCM Discretization within FCMLab (Polynomial Degree p = 3) (b) FEM Discretization within ANSYS (Polynomial Degree p = 2)
Figure 22: Discretization of I-section beam
(a) 2nd Eigenmode (FCMLab) (b) 7th Eigenmode (FCMLab) (c) 10th Eigenmode (FCMLab)
(d) 2nd Eigenmode (ANSYS) (e) 7th Eigenmode (ANSYS) (f) 10th Eigenmode (ANSYS)
Figure 23: Comparison of the beams’ eigenmodes
16
[3] T. Strouboulis, I. Babuska, K. Copps, The design and analysis of the
Generalized Finite Element Method, Computer Methods in Applied
Mechanics and Engineering 181 (1-3) (2000) 43–69, ISSN 00457825,
doi:10.1016/S0045-7825(99)00072-9.
[4] T. Strouboulis, K. Copps, I. Babuska, The generalized finite ele-
ment method, Computer methods in applied mechanics and engineering
190 (32) (2001) 4081–4193.
[5] T. Fries, T. Belytschko, The extended/generalized finite element method:
An overview of the method and its applications, International Journal
for Numerical Methods in Engineering 84 (3) (2010) 253–304, ISSN
00295981, doi:10.1002/nme.2914.
[6] T. Ruberg, F. Cirak, Subdivision-stabilised immersed b-spline finite ele-
ments for moving boundary flows, Computer Methods in Applied Me-
chanics and Engineering 209-212 (2012) 266–283, ISSN 00457825,
doi:10.1016/j.cma.2011.10.007.
[7] R. Mittal, G. Iaccarino, Immersed boundary methods, Annu. Rev. Fluid
Mech. 37 (2005) 239–261.
[8] C. S. Peskin, The immersed boundary method, Acta Numerica 11 (Jan-
uary 2002), ISSN 0962-4929, doi:10.1017/S0962492902000077.
[9] R. Lohner, J. R. Cebral, F. F. Camelli, J. D. Baum, E. L. Mestreau,
O. A. Soto, Adaptive Embedded/Immersed Unstructured Grid Tech-
niques, Archives of Computational Methods in Engineering 14 (3) (2007)
279–301, ISSN 1134-3060, doi:10.1007/s11831-007-9008-4.
[10] I. Ramiere, P. Angot, M. Belliard, A fictitious domain approach with
spread interface for elliptic problems with general boundary conditions,
Computer Methods in Applied Mechanics and Engineering 196 (4-6)
(2007) 766–781, ISSN 00457825, doi:10.1016/j.cma.2006.05.012.
[11] E. Nadal, J. J. Rodenas, J. Albelda, M. Tur, J. E. Tarancon, F. J.
Fuenmayor, Efficient Finite Element Methodology Based on Carte-
sian Grids: Application to Structural Shape Optimization, Abstract
and Applied Analysis 2013 (2013) 1–19, ISSN 1085-3375, 1687-0409,
doi:10.1155/2013/953786.
[12] O. Marco Alacid, A shape sensitivity analysis module with geometric rep-
resentation by NURBs for a 2D finite element program based on Carte-
sian meshes independent of the geometry, Master’s thesis, Universitat
Politecnica de Valencia, Valencia, Spain, 2013.
[13] K. W. Cheng, T. Fries, Higher-order XFEM for curved strong and weak
discontinuities, International Journal for Numerical Methods in Engineer-
ing 82 (5) (2009) 564–590, ISSN 00295981, doi:10.1002/nme.2768.
[14] K. Dreau, N. Chevaugeon, N. Moes, Studied X-FEM enrichment to
handle material interfaces with higher order finite element, Computer
Methods in Applied Mechanics and Engineering 199 (29-32) (2010)
1922–1936, ISSN 00457825, doi:10.1016/j.cma.2010.01.021.
[15] G. Legrain, N. Chevaugeon, K. Dreau, High order X-FEM and lev-
elsets for complex microstructures: Uncoupling geometry and approxi-
mation, Computer Methods in Applied Mechanics and Engineering 241-
244 (2012) 172–189, ISSN 00457825, doi:10.1016/j.cma.2012.06.001.
[16] G. Legrain, A NURBS enhanced extended finite element approach for
unfitted CAD analysis, Computational Mechanics 52 (4) (2013) 913–929,
ISSN 0178-7675, 1432-0924, doi:10.1007/s00466-013-0854-7.
[17] M. Moumnassi, S. Belouettar, E. Bechet, S. P. Bordas, D. Quoirin,
M. Potier-Ferry, Finite element analysis on implicitly defined domains:
An accurate representation based on arbitrary parametric surfaces, Com-
puter Methods in Applied Mechanics and Engineering 200 (5-8) (2011)
774–796, ISSN 00457825, doi:10.1016/j.cma.2010.10.002.
[18] P. Vos, R. van Loon, S. J. Sherwin, A comparison of fictitious domain
methods appropriate for spectral/hp element discretisations, Computer
Methods in Applied Mechanics and Engineering 197 (25-28) (2007)
2275–2289, ISSN 00457825, doi:10.1016/j.cma.2007.11.023.
[19] H. Lian, S. Bordas, R. Sevilla, R. Simpson, Recent Developments
in the Integration of Computer Aided Design and Analysis, Com-
putational Technology Reviews 6 (2012) 1–36, ISSN 2044-8430,
doi:10.4203/ctr.6.1.
[20] J. Parvizian, A. Duster, E. Rank, Finite cell method, Com-
putational Mechanics 41 (1) (2007) 121–133, ISSN 0178-7675,
doi:10.1007/s00466-007-0173-y.
[21] A. Duster, J. Parvizian, Z. Yang, E. Rank, The finite cell method for three-
dimensional problems of solid mechanics, Computer Methods in Ap-
plied Mechanics and Engineering 197 (45-48) (2008) 3768–3782, ISSN
00457825, doi:10.1016/j.cma.2008.02.036.
[22] J. Parvizian, A. Duster, E. Rank, Topology optimization using the finite
cell method, Optimization and Engineering 13 (1) (2011) 57–78, ISSN
1389-4420, doi:10.1007/s11081-011-9159-x.
[23] D. Schillinger, M. Ruess, N. Zander, Y. Bazilevs, A. Duster, E. Rank,
Small and large deformation analysis with the p- and B-spline versions of
the Finite Cell Method, Computational Mechanics 50 (4) (2012) 445–478,
ISSN 0178-7675, doi:10.1007/s00466-012-0684-z.
[24] D. Schillinger, E. Rank, An unfitted hp-adaptive finite element method
based on hierarchical B-splines for interface problems of complex geom-
etry, Computer Methods in Applied Mechanics and Engineering 200 (47-
48) (2011) 3358–3380, ISSN 00457825, doi:10.1016/j.cma.2011.08.002.
[25] D. Schillinger, A. Duster, E. Rank, The hp-d-adaptive finite cell method
for geometrically nonlinear problems of solid mechanics, International
Journal for Numerical Methods in Engineering 89 (9) (2012) 1171–1202,
ISSN 1097-0207, doi:10.1002/nme.3289.
[26] D. Schillinger, L. Dede, M. A. Scott, J. A. Evans, M. J. Borden, E. Rank,
T. J. Hughes, An isogeometric design-through-analysis methodology
based on adaptive hierarchical refinement of NURBS, immersed bound-
ary methods, and T-spline CAD surfaces, Computer Methods in Applied
Mechanics and Engineering 249-252 (2012) 116–150, ISSN 00457825,
doi:10.1016/j.cma.2012.03.017.
[27] D. Schillinger, The p- and B-spline versions of the geometrically nonlin-
ear finite cell method and hierarchical refinement strategies for adaptive
isogeometric and embedded domain analysis, Doctoral thesis, Technische
Universitat Munchen, Chair for Computation in Engineering, 2012.
[28] Z. Yang, M. Ruess, S. Kollmannsberger, A. Duster, E. Rank, An efficient
integration technique for the voxel-based finite cell method, International
Journal for Numerical Methods in Engineering 91 (5) (2012) 457–471,
ISSN 00295981, doi:10.1002/nme.4269.
[29] Z. Yang, S. Kollmannsberger, A. Duster, M. Ruess, E. G. Gar-
cia, R. Burgkart, E. Rank, Non-standard bone simulation: interac-
tive numerical analysis by computational steering, Computing and
Visualization in Science 14 (5) (2012) 207–216, ISSN 1432-9360,
doi:10.1007/s00791-012-0175-y.
[30] M. Ruess, D. Tal, N. Trabelsi, Z. Yosibash, E. Rank, The finite cell
method for bone simulations: verification and validation., Biomechanics
and modeling in mechanobiology 11 (3-4) (2012) 425–37, ISSN 1617-
7940, doi:10.1007/s10237-011-0322-2.
[31] A. Duster, H. Sehlhorst, E. Rank, Numerical homogenization of hetero-
geneous and cellular materials utilizing the finite cell method, Computa-
tional Mechanics 50 (4) (2012) 413–431, ISSN 0178-7675, 1432-0924,
doi:10.1007/s00466-012-0681-2.
[32] A. Abedian, J. Parvizian, A. Duster, E. Rank, The finite cell method for
the J2 flow theory of plasticity, Finite Elements in Analysis and Design
69 (2013) 37–47, ISSN 0168874X, doi:10.1016/j.finel.2013.01.006.
[33] S. Duczek, M. Joulaian, A. Duster, U. Gabbert, Numerical analysis of
Lamb waves using the finite and spectral cell method, International Jour-
nal for Numerical Methods in Engineering (Accepted for publication,
2014).
[34] S. Duczek, M. Joulaian, A. Duster, U. Gabbert, Simulation of Lamb
waves using the spectral cell method, in: T. Kundu (Ed.), Proc.
SPIE 8695, Health Monitoring of Structural and Biological Systems,
doi:10.1117/12.2009983, 2013.
[35] M. Joulaian, A. Duster, Local enrichment of the finite cell
method for problems with material interfaces, Computational Me-
chanics 52 (4) (2013) 741–762, ISSN 0178-7675, 1432-0924,
doi:10.1007/s00466-013-0853-8.
[36] Q. Cai, S. Kollmannsberger, R. Mundani, E. Rank, The finite cell method
for solute transport problems in porous media, in: Proceedings of the
International Conference on Finite Elements in Flow Problems, 2011.
[37] Q. Cai, S. Kollmannsberger, R. Mundani, E. Rank, The Finite Cell
Method for spatially varying dispersions in coupled multispecies reactive
transport problems, in: Proc. of Coupled Problems 2011: Computational
Methods for Coupled Problems in Science and Engineering, 2011.
[38] E. Rank, S. Kollmannsberger, C. Sorger, A. Duster, Shell Fi-
nite Cell Method: A high order fictitious domain approach for
thin-walled structures, Computer Methods in Applied Mechanics
and Engineering 200 (45-46) (2011) 3200–3209, ISSN 00457825,
doi:10.1016/j.cma.2011.06.005.
[39] E. Rank, M. Ruess, S. Kollmannsberger, D. Schillinger, A. Duster, Geo-
metric modeling, isogeometric analysis and the finite cell method, Com-
puter Methods in Applied Mechanics and Engineering 249-252 (2012)
17
104–115, ISSN 00457825, doi:10.1016/j.cma.2012.05.022.
[40] M. Ruess, D. Schillinger, Y. Bazilevs, V. Varduhn, E. Rank, Weakly en-
forced essential boundary conditions for NURBS-embedded and trimmed
NURBS geometries on the basis of the finite cell method, International
Journal for Numerical Methods in Engineering 95 (10) (2013) 811–846,
ISSN 00295981, doi:10.1002/nme.4522.
[41] M. Ruess, D. Schillinger, A. I. Ozcan, E. Rank, Weak coupling for isoge-
ometric analysis of non-matching and trimmed multi-patch geometries,
Computer Methods in Applied Mechanics and Engineering 269 (2014)
46–71, ISSN 00457825, doi:10.1016/j.cma.2013.10.009.
[42] N. Zander, S. Kollmannsberger, M. Ruess, Z. Yosibash, E. Rank, The
Finite Cell Method for linear thermoelasticity, Computers & Mathe-
matics with Applications 64 (11) (2012) 3527–3541, ISSN 08981221,
doi:10.1016/j.camwa.2012.09.002.
[43] I. Tsukanov, V. Shapiro, Meshfree modeling and analysis of
physical fields in heterogeneous media, Advances in Computa-
tional Mathematics 23 (1-2) (2005) 95–124, ISSN 1019-7168,
doi:10.1007/s10444-004-1835-3.
[44] M. Aghdam, N. Shahmansouri, M. Mohammadi, Extended Kantorovich
method for static analysis of moderately thick functionally graded sector
plates, Mathematics and Computers in Simulation 86 (2012) 118–130,
ISSN 03784754, doi:10.1016/j.matcom.2010.07.029.
[45] R. Sanches, P. Bornemann, F. Cirak, Immersed b-spline (i-spline) finite
element method for geometrically complex domains, Computer Methods
in Applied Mechanics and Engineering 200 (13-16) (2011) 1432–1445,
ISSN 00457825, doi:10.1016/j.cma.2010.12.008.
[46] P. Bornemann, F. Cirak, A subdivision-based implementation of the hi-
erarchical b-spline finite element method, Computer Methods in Ap-
plied Mechanics and Engineering 253 (2013) 584–598, ISSN 00457825,
doi:10.1016/j.cma.2012.06.023.
[47] T. Vejchodsky, P. Solın, M. Zıtka, Modular hp-FEM system HER-
MES and its application to Maxwell’s equations, Mathematics and
Computers in Simulation 76 (1-3) (2007) 223–228, ISSN 03784754,
doi:10.1016/j.matcom.2007.02.001.
[48] Y. Renard, J. Pommier, GetFEM++, An open-source finite element li-
brary, http://download.gna.org/getfem/html/homepage/, 2014.
[49] W. Bangerth, R. Hartmann, G. Kanschat, deal.II—A general-
purpose object-oriented finite element library, ACM Transactions
on Mathematical Software 33 (4) (2007) 24–es, ISSN 00983500,
doi:10.1145/1268776.1268779.
[50] W. Bangerth, T. Heister, L. Heltai, G. Kanschat, M. Kronbichler,
M. Maier, B. Turcksin, T. D. Young, THE deal. II LIBRARY, VERSION
8.1, arXiv preprint arXiv:1312.2266 .
[51] S. Bordas, P. V. Nguyen, C. Dunant, A. Guidoum, H. Nguyen-Dang, An
extended finite element library, International Journal for Numerical Meth-
ods in Engineering 71 (6) (2007) 703–732, ISSN 00295981, 10970207,
doi:10.1002/nme.1966.
[52] V. P. Nguyen, T. Rabczuk, S. Bordas, M. Duflot, Meshless meth-
ods: A review and computer implementation aspects, Mathematics
and Computers in Simulation 79 (3) (2008) 763–813, ISSN 03784754,
doi:10.1016/j.matcom.2008.01.003.
[53] C. de Falco, A. Reali, R. Vazquez, GeoPDEs: A research
tool for Isogeometric Analysis of PDEs, Advances in Engi-
neering Software 42 (12) (2011) 1020–1034, ISSN 0965-9978,
doi:10.1016/j.advengsoft.2011.06.010.
[54] V. P. Nguyen, S. P. A. Bordas, T. Rabczuk, Isogeometric analysis: an
overview and computer implementation aspects, arXiv:1205.2129 .
[55] T. J. R. Hughes, The finite element method: linear static and dy-
namic finite element analysis, Dover Publications, Mineola, NY, ISBN
0486411818, 2000.
[56] O. Zienkiewicz, R. Taylor, J. Zhu, The finite element method: its basis
and fundamentals, Butterworth-Heinemann, 6 edn., ISBN 0750663200,
2005.
[57] B. A. Szabo, I. Babuska, Finite element analysis, John Wiley & Sons,
New York, ISBN 0471502731, 1991.
[58] K. J. Bathe, Finite element procedures, Prentice Hall, ISBN 097900490X,
2007.
[59] B. A. Szabo, A. Duster, E. Rank, The p-version of the finite element
method, in: E. Stein (Ed.), Encyclopedia of Computational mechanics,
John Wiley & Sons, Ltd, ISBN 9780470091357, 2004.
[60] J. Cottrell, T. J. Hughes, Y. Bazilevs, Isogeometric Analysis: Toward In-
tegration of CAD and FEA, John Wiley & Sons, New York, 2009.
[61] A. Duster, H. Broker, E. Rank, The p-version of the finite element method
for three-dimensional curved thin walled structures, International Journal
for Numerical Methods in Engineering 52 (7) (2001) 673–703.
[62] R. Sevilla, S. Fernandez-Mendez, A. Huerta, Comparison of high-
order curved finite elements, International Journal for Numerical
Methods in Engineering 87 (8) (2011) 719–734, ISSN 00295981,
doi:10.1002/nme.3129.
[63] R. Sevilla, S. Fernandez-Mendez, A. Huerta, NURBS-enhanced finite
element method (NEFEM), International Journal for Numerical Meth-
ods in Engineering 76 (1) (2008) 56–83, ISSN 00295981, 10970207,
doi:10.1002/nme.2311.
[64] R. Sevilla, S. Fernandez-Mendez, A. Huerta, 3D NURBS-enhanced
finite element method (NEFEM), International Journal for Numeri-
cal Methods in Engineering 88 (2) (2011) 103–125, ISSN 00295981,
doi:10.1002/nme.3164.
[65] A. Stavrev, The role of higher-order geometry approximation and accu-
rate quadrature in NURBS based immersed boundary methods, Master’s
thesis, Technische Universitat Munchen, 2012.
[66] L. Kudela, Highly Accurate Subcell Integration in the Context of The Fi-
nite Cell Method, Master’s thesis, Technische Universitat Munchen, Chair
for Computation in Engineering, 2013.
[67] A. Abedian, J. Parvizian, A. Duster, H. Khademyzadeh, E. Rank,
Performance of Different Integration Schemes in Facing Discontinu-
ities in the Finite Cell Method, International Journal of Computa-
tional Methods 10 (03) (2013) 1350002, ISSN 0219-8762, 1793-6969,
doi:10.1142/S0219876213500023.
[68] K. Hollig, U. Reif, J. Wipper, Weighted extended B-spline approxima-
tion of Dirichlet problems, SIAM Journal on Numerical Analysis 39 (2)
(2001) 442–462.
[69] X. Zhuang, Meshless methods: theory and application in 3D fracture
modelling with level sets, Ph.D. thesis, University of Durham, 2010.
[70] A. Gerstenberger, W. A. Wall, An embedded Dirichlet formulation for
3D continua, International Journal for Numerical Methods in Engineering
82 (5) (2010) 537–563, ISSN 1097-0207, doi:10.1002/nme.2755.
[71] J. Nitsche, Uber ein Variationsprinzip zur Losung von Dirichlet-
Problemen bei Verwendung von Teilraumen, die keinen Randbedingun-
gen unterworfen sind, Abhandlungen aus dem Mathematischen Sem-
inar der Universitat Hamburg 36 (1) (1971) 9–15, ISSN 0025-5858,
doi:10.1007/BF02995904.
[72] Y. Bazilevs, T. Hughes, Weak imposition of Dirichlet boundary condi-
tions in fluid mechanics, Computers & Fluids 36 (1) (2007) 12–26, ISSN
00457930, doi:10.1016/j.compfluid.2005.07.012.
[73] S. Fernandez-Mendez, A. Huerta, Imposing essential boundary condi-
tions in mesh-free methods, Computer Methods in Applied Mechan-
ics and Engineering 193 (12-14) (2004) 1257–1275, ISSN 00457825,
doi:10.1016/j.cma.2003.12.019.
[74] A. Embar, J. Dolbow, I. Harari, Imposing Dirichlet boundary condi-
tions with Nitsche’s method and spline-based finite elements, Interna-
tional Journal for Numerical Methods in Engineering 83 (March) (2010)
877–898, ISSN 00295981, doi:10.1002/nme.2863.
[75] P. Hansbo, Nitsche’s method for interface problems in computational me-
chanics, GAMM-Mitteilungen 28 (2) (2005) 183–206.
[76] D. N. Arnold, F. Brezzi, B. Cockburn, L. D. Marini, Unified Analysis
of Discontinuous Galerkin Methods for Elliptic Problems, SIAM Jour-
nal on Numerical Analysis 39 (5) (2002) 1749–1779, ISSN 0036-1429,
doi:10.1137/S0036142901384162.
[77] E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design patterns: El-
ements of reusable object-oriented software, Addison-Wesley, 1 edn.,
ISBN 0201633612, 1995.
[78] The MathWorks, Inc., Getting Started with MATLAB, Tech. Rep., 2013.
[79] C. B. Moler, Numerical Computing with MATLAB, Society for Industrial
and Applied Mathematics, 2 edn., ISBN 978-0898716603, 2010.
[80] R. C. Martin (Ed.), Clean code: a handbook of agile software craftsman-
ship, Prentice Hall, Upper Saddle River, NJ, ISBN 0132350882, 2009.
[81] K. Beck, C. Andres, Extreme programming explained, Addison-Wesley,
Boston, 2nd edn., ISBN 0321278658, 2005.
[82] The MathWorks, Inc., MATLAB Unit Testing Frame-
work, http://www.mathworks.de/de/help/matlab/matlab-unit-test-
framework.html, 2014.
[83] K. Kawaguchi, Jenkins CI, http://jenkins-ci.org/, 2014.
18
[84] Apache Software Foundation, Apache Subversion,
http://subversion.apache.org/, 2014.
[85] C. A. Felippa, Introduction to Finite Element Methods, 2013.
[86] J. Bonnet, R. D. Wood, Nonlinear Continuum Mechanics For Finite Ele-
ment Analysis, Cambrigde University Press, 2nd edn., 2008.
[87] Q. Cai, Finite Cell Method for Transport Problems in Porous Media, Doc-
toral thesis, Technische Universitat Munchen, Munich, 2013.
[88] N. Trabelsi, Z. Yosibash, C. Wutte, P. Augat, S. Eberle, Patient-specific
finite element analysis of the human femur–a double-blinded biomechan-
ical validation., Journal of Biomechanics 44 (9) (2011) 1666–72, ISSN
1873-2380, doi:10.1016/j.jbiomech.2011.03.024.
[89] H. Wille, E. Rank, Z. Yosibash, Prediction of the mechani-
cal response of the femur with uncertain elastic properties., Jour-
nal of Biomechanics 45 (7) (2012) 1140–8, ISSN 1873-2380,
doi:10.1016/j.jbiomech.2012.02.006.
[90] ANSYS, Inc., ANSYS Release 14.0, Help System, Element Reference,
2011.
19