Introduction
LifeV (to be read Life Five) is an open source library for the numerical solution of partial differential equations with the finite element method. The choice of the finite element method is motivated by its rigorous mathematical background, with a sound control of the accuracy, coupled with excellent flexibility in managing complex geometries.
LifeV is written in C++ and is entirely coded with an Object Oriented approach and advanced programming features. The project started in 1999 from the collaboration of the Department of Mathematics at EPFL, Lausanne, Switzerland, of the Department of Mathematics at Politecnico di Milano, Italy and the INRIA Rocquencourt, France, under the supervision of Alfio Quarteroni. Nowadays, LifeV is concurrently developed and maintained by CMCS Lausanne (group coordinator), MOX di Milano, REO and ESTIME and the E(CM)2 group at the Department of Mathematics and Computer Science at Emory University, Atlanta (GA), USA.
As for now, the library includes solvers for incompressible fluid dynamics, (linear) structural problems, transport in porous media, fluidstructure interaction, electrical conduction in the heart. Even though this library is a research code oriented to the development and test of new numerical methods and algorithms, it is intended to be an effective tool for solving complex "reallife" engineering problems. One of the main field of applications (although not the only one) is cardiovascular mathematics.
The code is distributed under the LGPL license and is downloadable on CMCSFORGE.
There are two distributed versions of LifeV, one is parallel, for complex three dimensional engineering problems, the other is serial, for one, two and three dimensional problems (prototyping, testing). These pages review the parallel version.
For other details, see the LifeV web site.
Overview of LifeV
In the following we briefly describe the main features of LifeV.
Boundary Conditions
LifeV provides classes and methods to prescribe the most common boundary conditions (Dirichlet, Neumann, Robin). Normal and tangential boundary conditions are also allowed for vectorial (3D) fields. In addition, a few kinds of boundary conditions specific for flow problems are available. Boundary conditions are prescribed by modifying the system matrix and the righthand side after the assembling phase. The parameters of the boundary condition can be defined as functions of the space and time, or as finite element fields. The regions where to apply boundary conditions are determined by markers associated to the boundary faces of the mesh. Boundary conditions settings are stored in the BCHandler
class (BCHandler.hpp
), whereas the file BCManage.hpp
contains the routines used to prescribe the conditions. The BCInterface
class (BCInterface.hpp
) contains tools to set the boundary conditions directly from data files.
Time discretization
LifeV provides the class TimeAdvance
to integrate in time a generic nonlinear PDE with derivates in time of order m = 1, 2.
This class is a virtual class, that defines the main features of a generic time advancing scheme:
 it stores the unknown and its first, and second if m=2, derivatives;
 it provides methods for the extrapolation (in time) of the unknown, and of its first derivative if m=2 ;
 it computes the righthand side associated to the discretization of the first derivative, and of the second derivative if m=2;
 it provides methods to update the states of the stored unknown.
The needed coefficients, variables and methods are specified in derived classes.
LifeV provides two different implementations, namely:
 Backward Differentiation Formulae (BDF) schemes (
TimeAdvanceBDF.hpp
) of order p (with p<6) for m=1,2;  the family of methods obtained from the Newmark schemes for second order problems ( m=2), and the thetamethods for the first order problems (m=1) (
TimeAdvanceNewmark.hpp
).
Space discretization
LifeV provides classes to perform easily and quickly the assembly of the most common problems (e.g. advectiondiffusionreaction, Stokes and NavierStokes). These classes are called Assemblers and can be considered as building blocks that can be combined at will. The user has moreover access to lower level structures and instructions in order to provide the maximal flexibility.
Algebraic solvers and preconditioners
Linear systems are solved using the preconditioned GMRES method. LifeV provides the following preconditioners:
 Additive Schwarz;
 Multilevel Schwarz;
 Multigrid preconditioner;
It is also possible to develop new preconditioners using the abstract class Preconditioner
(Preconditioner.hpp
).
Physical solvers
In the following we briefly mention all the available physical solvers.

Advection Diffusion Reaction solver: this solver (
ADRAssembler.hpp
) deals with the simplest PDE usually studied, but also maybe the most widely used. Indeed, this is the PDE that governs phenomena where diffusion, transport and reaction are relevant. This solver is used to solve this kind of problems in a simple and efficient manner. It can also deal with timedependent PDEs. 
Darcy solver: phenomenological law which describes the flow of a fluid through a porous medium. The implementation of the solver (
DarcySolver.hpp
) uses the dualmixedhybrid formulation, entailing good approximation of the velocity field as well as of the pressure field. The global system in saddle point form is recast to an equivalent positive definite system, using the hybridization and static condensation procedure. The finite element spaces used are piecewise constant for the pressure and lowest order RaviartThomas for the velocity. 
1D FluidStructure Interaction solver: a solver for the Euler equations for blood flow is available (
OneDFSISolver.hpp
). It is based on a second order TaylorGalerkin scheme, featuring excellent control of the dispersion error. In its current implementation, it can be used to study the pressure pulse wave propagation in an artery, assuming that the blood behaves as a Newtonian fluid, while the arterial wall behaves as a linearly elastic or viscoelastic structure. The presence of tapering in the arterial geometry can also be taken into account. 
3D FluidStructure Interaction solver: the FSI model consists of NavierStokes equations coupled with an elasticity equation by imposing the continuity of the velocity and of the forces at the interface. In LifeV both partitioned and monolithic FSI solver are implemented. For the formers the coupling obtained with separate fluid and structure solver iterations, while for the latters the fully coupled matrix is assembled and solved using a single "monolithic" solver (
FSIMonolithic.hpp
). Concerning the partitioned strategies the available choices are DirichletNeumann and RobinNeumann fixed–point algorithms, or the Newton algorithm applied to the "DirichletNeumann" fixed–point formulation. Various monolithic solver variants are obtained depending on the way the various nonlinearities (due mainly to the convective term of the fluid equations and to the domain motion) are treated. The main difference is among the geometric explicit (GE), for which the geometry is extrapolated from the previous time steps, and the geometric implicit (GI). Many parallel preconditioners for the monolithic problem are available, featuring the splitting of the matrix into several factors. 
Heart electrophysiological solver: both bidomain (
HeartBidomainSolver.hpp
) and monodomain (HeartMonodomainSolver.hpp
) models are available as models for the electrophysiology behavior of cardiac tissue. These models consist on anisotropic reactiondiffusion equations governing the propagation of electrical potentials, coupled with a system of ODEs describing the physics of the cellular membrane and time evolution of ionic quantities. Several variants for membrane models are already present in the library: LuoRudy phase I, RogersMcCulloch and MitchellSchaeffer models. The solver currently employs piecewise linear finite elements for all involved fields in the coupling.  VenantKirchhoff solver: the structural model available in LifeV is a linear elastic constitutive law. It is the linear approximation of the nonlinear St. VenantKirchhoff model. It is implemented in the
VenantKirchhoffSolver
class (VenantKirchhoffSolver.hpp
). It can be used both for purely structural dynamics problems (traction of a cube) or for coupled or multiscale problems. In fact, it has been integrated in the FSI (both segregated and monolithic) and in the Multiscale frameworks. At the moment, in the LifeV developers community there is a big effort to implement a general interface (i.e. a general solver) for solving structural mechanics problems. In particular, the efforts are focused on the implementation of other material laws and to exploit the general interface in the FSI and Multiscale frameworks.
Tools
In the following we briefly describe some of the main tools inside the library.

Importers and Exporters: LifeV can input mesh files stored in some common formats encountered in this field: GMSH, Inria, Netgen, mesh++. LifeV is designed with large parallel simulations in mind, which are usually performed on high performance computing hardware. In many such cases, the low amount of memory per compute node requires a change in the workflow. LifeV allows to perform the mesh partitioning phase offline, on a workstation where memory isn't an issue and use this data later, during online simulations on modern supercomputers. For postprocessing, it's possible to save data in the following formats, using the common interface provided in
Exporter.hpp:
 Ensight (
ExporterEnsight.hpp
);  HDF5 (
ExporterHDF5.hpp
);  VTK (
ExporterVTK.hpp
).
All of them are supported by ParaView, on which we rely for creating high quality visualizations.
 Ensight (
 Grammar parser for algebraic expression: the class
Parser
(Parser.hpp
)provides a general interface to parse any simple algebraic function given as a string. This tool is based onSpirit
which is a set of C++ libraries for parsing and output generation implemented as Domain Specific Embedded Languages (DSEL) using Expression Templates and Template MetaProgramming.
License
LifeV is available for download under the terms of the GNU Lesser General Public License.
Downloads
LifeV can be downloaded from the LifeV downloads page. For additional documentation about the LifeV architecture please check the LifeV documentation page.
Mailing lists
We recommend that users and developers subscribe to the following mailing lists as appropriate.
 LifeVUsers Mailing List  Discussion forum for users of LifeV. (Recommended)
 LifeVDevelopers Mailing List  Discussion forum for LifeV developers. (Developers)
 LifeVCheckins Mailing List  GIT Commit Messages (Active Developers)
LifeV contributors
LifeV is the joint collaboration between four institutions:
 École Polytechnique Fédérale de Lausanne (CMCS), Switzerland;
 Politecnico di Milano (MOX), Italy;
 INRIA (REO, ESTIME), France;
 Emory University (Math&CS), U.S.A.
The following people are active developers:
 Alessandro Melani, MOX  Politecnico di Milano
 Alessandro Veneziani, Math&CS  Emory University
 Alessio Fumagalli, MOX  Politecnico di Milano
 Alexis Aposporidis, Math&CS  Emory University
 Antonio Cervone, MOX  Politecnico di Milano
 Claudia Colciago, CMCS  École Polytechnique Fédérale de Lausanne
 Christian Vergara, MOX  Politecnico di Milano
 Cristiano Malossi, CMCS  École Polytechnique Fédérale de Lausanne
 Gianmarco Mengaldo, MOX  Politecnico di Milano
 Guido Iori, MOX  Politecnico di Milano
 Gwenol Grandperrin, CMCS  École Polytechnique Fédérale de Lausanne
 Jean Bonnemain, CMCS  École Polytechnique Fédérale de Lausanne
 Laura Cattaneo, MOX  Politecnico di Milano
 Luca Bertagna, MOX  Politecnico di Milano
 Luca Formaggia, MOX  Politecnico di Milano
 Lucia Mirabella, CFM Lab  Georgia Institute of Technology
 Marta D'Elia, Math&CS  Emory University
 Matteo Pozzoli, MOX  Politecnico di Milano
 Mauro Perego, Scientific Computing  Florida State University
 Michel Kern, ESTIME  INRIA
 Nur Fadel, MOX  Politecnico di Milano
 Paolo Crosetto, CMCS  École Polytechnique Fédérale de Lausanne
 Radu Popescu, CMCS  École Polytechnique Fédérale de Lausanne
 Ricardo Ruiz Baier, CMCS  École Polytechnique Fédérale de Lausanne
 Samuel Quinodoz, CMCS  École Polytechnique Fédérale de Lausanne
 Simone Deparis, CMCS  École Polytechnique Fédérale de Lausanne
 Simone Pezzuto, MOX  Politecnico di Milano
 Simone Rossi, CMCS  École Polytechnique Fédérale de Lausanne
 Tiziano Passerini, Math&CS  Emory University
 Toni Lassila, CMCS  École Polytechnique Fédérale de Lausanne
 Tricerri Paolo, CMCS  École Polytechnique Fédérale de Lausanne
 Umberto Emanuele Villa, Math&CS  Emory University
The following people are former developers:
 Alexandra Moura
 Andrea Manzoni, CMCS  École Polytechnique Fédérale de Lausanne
 Andreas Fischle
 Carlo de Falco
 Christoph Winkelmann, formerly at CMCS, École Polytechnique Fédérale de Lausanne
 Christophe Prud'homme, formerly at CMCS, École Polytechnique Fédérale de Lausanne
 Fabio Nobile, CMCS  École Polytechnique Fédérale de Lausanne
 Federico Bonelli
 Gilles Fourestey, CMCS  École Polytechnique Fédérale de Lausanne
 Laura Iapichino, CMCS  École Polytechnique Fédérale de Lausanne
 Lorenzo Tamellini, MOX  Politecnico di Milano
 Marco Discacciati, CMCS  École Polytechnique Fédérale de Lausanne
 Mariarita de Luca
 Matteo Astorino, CMCS  École Polytechnique Fédérale de Lausanne
 Matteo Lesinigo, CMCS  École Polytechnique Fédérale de Lausanne
 Nicola Parolini
 Paolo Ferrandi, MOX  Politecnico di Milano
 Sara Minisini, MOX  Politecnico di Milano
 Simone Cassani
 Susanna Carcano, MOX  Politecnico di Milano
 Zhen Wang, Math&CS  Emory University
For other questions and comments...
Please visit the LifeV web site.