Skip to content

Latest commit

 

History

History
180 lines (131 loc) · 8.16 KB

ideas-list-fenics.md

File metadata and controls

180 lines (131 loc) · 8.16 KB

FEniCS Project

In all cases, we recommend that prospective students join our Slack channel and work with us to write their project proposals. The below are just ideas; if you have your own idea, we are more than happy to discuss it with you!

Complex Number support in FEniCS

Abstract

Currently the finite element solver of the FEniCS Project, DOLFIN, supports real numbers represented as floating point arithmetic. However, many applications, such as electromagnetics, require complex numbers, represented as two floating point numbers representing a real and imaginary part. In this project you will adapt DOLFIN and FFC to support complex numbers, opening up the possibility of large-scale electromagnetics problems to the users of the FEniCS Project.

Description

Intensity **Priority Involves Mentors
Moderate Medium Python, C++ Chris Richardson

Technical Details

FEniCS has a C++ interface, called DOLFIN, and wrappers in pybind11 for a Python interface. The linear algebra backends supported by DOLFIN, which solve linear systems of the form Ax = b, already support complex numbers. You will need to adapt FFC, the FEniCS Form Compiler, to generate code with complex numbers. Furthermore, DOLFIN, the finite element solver, will also need to be modified to support complex numbers.

Open Source Development Experience

This project requires knowledge of C++ and Python.

First steps

Install FEniCS from https://bitbucket.org/fenics-project/dolfin and try out the demos. Install ParaView and view the output from the FEniCS demos. The FEniCS tutorial at https://fenicsproject.org/tutorial/ has an up-to-date description of using FEniCS to solve partial differential equations.

GMsh/XDMF/DOLFIN mesh processing pipeline

Abstract

Finite element methods require a discretisation of a domain into small elements, called a mesh. Typically, users of DOLFIN use an external mesh generation package, such as gmsh to construct meshes, before reading them into DOLFIN. In this project, you will work to ensure that gmsh, DOLFIN, and our preferred visualisation package, Paraview work seamlessly together. This will be a huge usability improvement for users working with very complex geometries.

Description

Intensity **Priority Involves Mentors
Moderate Medium Python, C++ Jack S. Hale

Technical Details

There are two possible paths that could be taken in this project:

  1. Modify gmsh to directly support XDMF format files. DOLFIN directly supports reading and writing XDMF.
  2. Contribute to and improve meshio a package for converting between different mesh file formats, e.g. gmsh's .msh and .xdmf.

Open Source Development Experience

This project requires knowledge of C++ and Python. You will mainly be working with DOLFIN, the finite element solver of the FEniCS Project, gmsh, meshio and Paraview. Some knowledge of finite element methods would also be desirable, but not necessary. Students with interest in computational geometry may find this project particularly suitable. Furthermore, students will be required to work with other open-source projects, requiring good interpersonal skills.

First steps

Install FEniCS from https://bitbucket.org/fenics-project/dolfin and try out the demos. Install ParaView and view the output from the FEniCS demos. The FEniCS tutorial at https://fenicsproject.org/tutorial/ has an up-to-date description of using FEniCS to solve partial differential equations.

Mixed-cell meshes

Abstract

Finite element methods require a discretisation of a domain into small cells (or elements), called a mesh. At the moment, FEniCS only supports meshes consisting of cells of a single type (e.g. triangles, tetrahedrons, quadrilaterials, or hexahedrons). However, in many applications, it is important to use meshes consisting of cells of multiple types. For example, to effectively mesh boundary layers around complex geometries in fluid mechanics problems, it is optimal to use mostly hexahedral cells with a few cells of alternative type for tractability of the meshing problem. In this project, you will extend FEniCS to fully support meshes with cells of multiple types.

Description

Intensity **Priority Involves Mentors
High Medium Python, C++ Jack S. Hale and Chris N. Richardson

Technical Details

You will need to:

  1. Allow DOLFIN's mesh class to support cells of multiple types.
  2. Extend DOLFIN's XDMF IO functionality to read and write meshes with multiple types.
  3. Extend the degree of freedom handler to correctly construct degree of freedom maps for meshes with cells of multiple types.
  4. Adapt DOLFIN's assembler to choose the correct element tensor construction on a per-cell basis.

Open Source Development Experience

This project requires knowledge of C++ and Python. You will mainly be working with DOLFIN, the finite element solver of the FEniCS Project. Some knowledge of finite element methods would also be desirable, but not necessary. Students with interest in computational geometry may find this project particularly suitable.

First steps

Install FEniCS from https://bitbucket.org/fenics-project/dolfin and try out the demos. Install ParaView and view the output from the FEniCS demos. The FEniCS tutorial at https://fenicsproject.org/tutorial/ has an up-to-date description of using FEniCS to solve partial differential equations.

Maximising performance on modern architectures with data-level parallelism

Abstract

Modern CPUs contain SIMD (Single-Instruction, Multiple Data) instructions that allow that exploit data-level parallelism to compute multiple floating operations in one CPU cycle. This is commonly called vectorisation. Taking advantage of SIMD operations is critical to acheive the maximum number of floating point operations (FLOPS) in numerical simulation codes, such as the FEniCS Project. However, FFC, the FEniCS Form Compiler, which compiles high-level UFL form language into C++ code, does not currently generate code with SIMD assembly instructions. In this project you will extend FFC to recognise structures that would benefit from SIMD acceleration, and output SIMD-friendly C/C++ code.

Intensity **Priority Involves Mentors
High     Medium     Python, C++ Jack S. Hale

Technical Details

Modern compiler toolchains (Intel, GCC) enable the automatic vectorisation of code, if they can detect loops and memory layouts (alignment) compatible with vectorisation. You will work to modify FFC to produce code compatible with automatic compiler vectorisation. Such features would ensure that modern CPU architectures are being used optimally.

Open Source Development Experience

This project requires knowledge of C++ and Python, and will require working with multiple git repositories and different teams with FEniCS developers. Some knowledge of finite element methods would also be desirable, but not necessary. Those who are interested compiler technology might also find this project suitable. The project would particularly suit students with a background in Computer Science.

First steps

Install FEniCS from https://bitbucket.org/fenics-project/dolfin and try out the demos. The FEniCS book https://fenicsproject.org/pub/book/book/fenics-book-2011-06-14.pdf (GNU Free Doc License) contains a description of the form compiler technology behind FEniCS. The FEniCS tutorial at https://fenicsproject.org/tutorial/ has an up-to-date description of using FEniCS to solve partial differential equations.