Skip to content

Latest commit

 

History

History
106 lines (77 loc) · 5.66 KB

ideas-list-fenics.md

File metadata and controls

106 lines (77 loc) · 5.66 KB

FEniCS Project

About us

FEniCSx is a popular open-source (LGPLv3) computing platform for solving partial differential equations (PDEs). FEniCSx enables users to quickly translate scientific models into efficient finite element code. With the high-level Python and C++ interfaces to FEniCSx, it is easy to get started, but FEniCSx offers also powerful capabilities for more experienced programmers. FEniCSx runs on a multitude of platforms ranging from laptops to high-performance clusters.

Process

In all cases we recommend that prospective students join our Slack channel #gsoc2023 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!

We would ask that potential applicants install FEniCSx and try out the demos. The DOLFINx tutorial has an up-to-date description of using FEniCSx to solve partial differential equations.

FEniCSx vs FEniCS

The FEniCS Project has recently undergone an almost complete ground up redevelopment. Consequently, all projects will be additions to the new FEniCSx components (DOLFINx, FFCx, Basix) not the old components (DOLFIN, FFC and FIAT) All developent takes place on our our GitHub page. When looking for relevant examples you should see import dolfinx not import dolfin or from dolfin import * at the top.

Prior knowledge required

All projects will require knowledge of Modern C++ and Python. You will mainly be working with DOLFINx, the finite element solver of the FEniCS Project. Some knowledge of finite element methods and more generally in numerical computing would be a big advantage.

Expanding the DOLFINx demos (1)

Abstract

The DOLFINx Python and C++ demos are the main ways that our users get to know and learn the FEniCS Project. After an intensive period of recent work to smooth the design of the API of DOLFINx we are now ready to both polish and expand on our existing (limited!) set of demos. This project would be ideal for a participant with knowledge of finite element and numerical methods and a enthusiasm for writing very clear and precise examples for end users.

Description

Difficulty Priority Involves Mentors
Medium (175h) High Python and/or C++ Michal Habera, Jack S. Hale

Technical Details

You can see the current state of the demos on the main branch here.

A possible plan could be:

  • Look at the existing DOLFIN and DOLFINx demos and familarise yourself with the pipeline used to transform Python files into e.g. notebooks or Sphinx documentation.
  • Identify gaps in terms of concepts exposed by those demos. Try to minimise overlap in concepts shown between demos. For example, we do not need to explain the basics of mesh generation in a demo focused on showing users how to solve non-linear problems.
  • Define a set of new demos and/or ports of existing DOLFINx demos.
  • Propose API changes or new high-level functions where existing lower-level functions are producing a lot of boiler-plate code or potential errors. See e.g. fem.LinearProblem.

Extra knowledge

Because this task will involve writing some English language text to document the demos candidates should be reasonably proficient in written English.

Checkpointing support

Abstract

A widespread method for solving time-dependent partial differential equations (PDEs) is to employ a finite difference scheme in time and a finite element scheme in space. This method will produce a sequence of problems that have to be solved sequentially. For many PDEs, adaptive time stepping is crucial to get a stable solution. However, for complex problems, the stability criterion might not be known a priori, and has to be estimated by trial and error. For large problems, such an exploration can become very time consuming as the simulation has to start from the initial time step for every simulation. Having a checkpointing algorithm to store the solution to the finite element problem to disk at any time step would make it possible to restart the simulation from the last stable solution. Currently, FEniCSx does not support checkpointing of functions. In this project, you would extend FEniCSx to support checkpointing using ADIOS2.

Description

Difficulty Priority Involves Mentors
Hard (350h) Medium Python, C++ Jørgen Dokken, Chris Richardson

Technical Details

FEniCSx currently supports writing output with ADIOS2, and the implementation can be found here. The candidate would be expected to extend this interface, and a candidate should ideally be familiar with C++ and the fundamentals of finite element methods.

A possible plan could be:

  • Extend the ADIOS2-functionality in FEniCSx to be able to read in meshes in serial (from files produced with a single MPI process).
  • Familiarize with how ADIOS2 store data written in parallel using MPI, and how to read such data in a serial program.
  • Explore data written with a single MPI process is read with ADIOS2 when executed with multiple processes.
  • With the two previous concepts explored, extend the reading of meshes to parallel.
  • Extend the ADIOS2-IO in FEniCSx to checkpoint functions.