.. Research pages Research ======== My research addresses a variety of problems in scientific computing and computational mechanics. Areas of interest and activity include numerical analysis, software development methodologies and new numerical methods, as well as applications in solid mechanics, fluid mechanics, materials science and geophysics. The page presents some specific examples of past and ongoing research. *This page is presently being populated.* Automated computational mathematical modelling ---------------------------------------------- Much of this research is carried out with collaborators under the umbrella of the FEniCS Project (http://www.fenicsproject.org). A book on the FEniCS Project was published by Springer in 2012 (http://dx.doi.org/10.1007/978-3-642-23099-8). The book is available under the Creative Commons license at http://tinyurl.com/fenics-book. Domain specific languages for differential equations ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Domain-specific languages (DSL) are tailored to specific application areas. We work, together with collaborators, on the Unified Form Language (UFL) for the numerical solution of partial differential equations. The aim is to provide an expressive language that mirror mathematical syntax. Specifically, UFL works with partial differential equations posed in a *weak* form. UFL can be used for many different equations and in different application fields. It has been applied to a variety of complex, coupled nonlinear equations. For the Poisson equation the weak form the of Poisson equations is expressed as: find :math:`u \in V` such that .. math:: \int_{\Omega} \nabla u \cdot \nabla v \, d\Omega = \int_{\Omega} fv \, d\Omega \quad \forall \ v \in V The UFL input for this problem using a linear finite element basis is .. code-block:: python V = FiniteElement("Lagrange", triangle, 1) u = TrialFunction(V) v = TestFunction(V) f = Coefficient(V) a = dot(grad(u), grad(v))*dx L = f*v*dx The UFL input mirrors the mathematical abstractions and syntax. From the high-level UFL input, a code generator can produce low-level computer code in a generic language automatically. UFL is described in detail in the paper http://arxiv.org/abs/1211.4047 that will appear in ACM Transactions on Mathematical Software. Automated code generation ^^^^^^^^^^^^^^^^^^^^^^^^^ Our research into domain-specific compilers has shown that automated computer code generation can lead to highly efficient computer code. Computer code can be generated rapidly from high-level input, and the specialised optimisation applied can outperform standard compiler optimisations by more than an order of magnitude. .. figure:: ./research/images/runtime_hyperelasticity.svg :align: center :width: 70% :alt: FFC performance :figwidth: 90% Speed-ups obtained by using various domain-specific optimisations during code generation for a three-dimensional hyperelastic problem. This example demonstrates the speed-ups of orders of magnitude can be achieved. See http://dx.doi.org/10.1145/1644001.1644009. High-performance, expressive problem solving environments ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The below code is a complete program for the diffusion-reaction equation. .. code-block:: python # Import module from dolfin import * # Define problem mesh = UnitCube(64, 64, 64) V = FunctionSpace(mesh, "CG", 1) u = TrialFunction(V) v = TestFunction(V) f = Expression("sin(x[0])*sin(x[1])") a = dot(grad(u), grad(v))*dx + u*v*dx L = f*v*dx # Compute and plot solution to the screen problem = VariationalProblem(a, L) u = problem.solve() plot(u, interactive=True) This simple program can be run without modification in parallel on hundreds of processors via MPI. Large scale scientific computing -------------------------------- The solution of large-scale, three-dimensional problems is demanding in terms of computational resources and demands sophisticated, parallel solution techniques. .. figure:: ./research/images/partition_comp.png :align: center :width: 35% :alt: partitioned gear :figwidth: 90% A mesh of a gear partitioned into 12 parts for a distributed computation. The same mesh is shown below using X3DOM (http://www.x3dom.org/). You need a browser that supports WebGL to view the interactive gear. It can be rotated and zoomed interactively. .. raw:: html