Fluctuating Finite Element Analysis is a new molecular modelling algorithm, designed to support systems that are larger and more complex than those modelled by atomistic molecular dynamics. Instead of modelling biological systems as a collection of connected atoms, it models them as 3D volumes comprised of tetrahedrons. Unlike previous coarse-grained models, the models FFEA generates are visco-elastic continuum solids. Unlike other applications of Finite Element Analysis, these systems are subject to thermal fluctuations.

This technique has the potential to model large, complex systems, made of many molecules, and complex processes at the frontiers of molecular biology. As it does not not require an atomistic level of detail, it can also be used to simulate biological molecules that cannot be imaged using X-ray crystallography.


  • Protein Interactions:
    • A 6-12 Lennard-Jones Potential.
    • A repulsive potential that is proportional to the overlapping volume.
    • Specific interactions defined using precomputed potentials. More documentation can be found here.
  • Kinetic state changes can be simulated together with the continuum model to account for conformational changes and binding events.
  • Conversion tools for EM density data and atomistic structures into FFEA simulations.
  • A plugin for PyMOL, allowing the visualisation of FFEA systems and trajectories.
  • Initialisation and analysis tools available on the command line and under a Python API.
  • [KOBRA model](Using FFEA_rod} for slender biological objects such as coiled-coils.
  • Lees-Edwards boundary conditions.
  • An extremely high degree of reproducity - check out our integration tests!


Getting Started

FFEA is free to download and use under the GPLv3 software license. We provide binary releases, and building from source is relatively painless.

  • Download the most recent binary release of FFEA from BitBucket, or [compile from source](cloning the repository) by cloning the repository. For the latest bleeding-edge features, switch to the development branch instead.
  • If you're compiling from source, install FFEA according to the instructions found in the installation guide.
  • Once FFEA is installed, consult the first-time user tutorial. For KOBRA rods, try the rods tutorial instead.


  • Boost (>=1.54.0) is used for ease of programming at the initialisation phase. Modules "system", "filesystem" and "program-options" are required. A bundle of version 1.63 is shipped with FFEA.
  • Eigen (>=3.2.1). FFEA uses Eigen to calculate and solve linear approximations to the model i.e. Elastic / Dynamic Network Models. CMake will download and use Eigen 3.3.2 if not told otherwise.
  • RngStreams1,2 is shipped with FFEA and used as Random Number Generator (RNG). RngStreams allows the FFEA to safely generate random numbers when running on a number of threads, as well as safe restarts, recovering the state of the RNGs in the last saved time step.
  • Tet_a_tet3 is shipped with FFEA and used to detect element overlapping in the steric repulsion module.
  • Doxygen (>= 1.8) [OPTIONAL] is used to generate the documentation.
  • PyMOL (>=1.8) [OPTIONAL] can be used, using the plugin we provide, to visualise FFEA systems and trajectories as well as molecular and EM systems.
  • mtTkinter (0.4) is shipped with FFEA and used in the PyMOL plugin, allowing safe threading.
  • GTS (>=0.7.6)[OPTIONAL]. The GNU Triangulated Surface Libraries allowing the manipulation and coarsening of surface profiles.
  • NETGEN or TETGEN [OPTIONAL]. Programs which convert surface profile into volumetric meshes to be used by FFEA.
  • pyPcazip4 [OPTIONAL] Some of the Python FFEA analysis tools interact with the pyPcazip Principal Component Analysis libraries in order to generate standard PCA output(eigensystems, projections, animations etc) equivalent to those obtained from equivalent MD simulations. See here for their wiki.

1: P L'Ecuyer, "Good Parameter Sets for Combined Multiple Recursive Random Number Generators", (1999) Oper Res, 47(1):159-164.
2: P L'Ecuyer et al. "An Objected-Oriented Random-Number Package with Many Long Streams and Substreams", (2002) Oper Res, 50(6):1073-1075.
3: F Ganovelli, et al. "Fast tetrahedron-tetrahedron overlap algorithm", (2002) J.Graphics Tools. 7(2):17-25.
3: A Shkurti, et al. "pyPcazip: A PCA-based toolkit for compression and analysis of molecular simulation data", (2016) SoftwareX. 7:44-50.


Do you have a research question that FFEA could help to answer?

  • Try FFEA and let us know how you're using the software.
  • Send bug reports, questions and feature requests to our issue tracker
  • Fork us and help develop FFEA!

If you have questions and comments, please contact us! For biophysics, contact Sarah Harris (S.A.Harris@leeds.ac.uk). For finite elements, contact Oliver Harlen (O.G.Harlen@leeds.ac.uk). For KOBRA and stochastic enquiries, contact Daniel Read (D.J.Read@leeds.ac.uk). For software engineering, contact Joanna Leng (J.Leng@leeds.ac.uk).



  • Albert Solernou
  • Ben Hanson
  • Robin Richardson
  • Rob Welch
  • Tom Ridley



We want to thank everybody who has helped in making FFEA possible, from summer students, to experimental professors, we would not be here without you:

  • Stan Burgess
  • Stephen Muench
  • Tom Ridley
  • Kerrie Smith
  • Joanna Leng
  • Thijs van der Heijden
  • Kees Storm
  • Paul van der Schoot
  • Toni Collis
  • Neelofer Banglawala
  • Jana Boltersdorf
  • Ondřej Vysocký
  • Guanhao Lu
  • Jonathan Boyle
  • Mike Croucher
  • Christopher Woods
  • Katrina Goldman
  • Matthew Faulkner
  • Ashley Fenton