Skip to content
Bryan W. Weber edited this page Feb 19, 2018 · 26 revisions

Introduction

The page contains a list of ideas for students applying to Google Summer of Code 2018. Cantera is participating under the NumFOCUS umbrella, so students should apply to the NumFOCUS organization. The NumFOCUS organization has several tips for your application, see here. Please note that you MUST apply through the NumFOCUS page on the Summer of Code website.

Tips for Students

Project Ideas

The following ideas are not organized in any particular fashion at the moment and we think any of these ideas would make a good GSoC project. The particular project that you choose for your application will not affect our evaluation of your application; your application will be evaluated on its own strength, taking into account how well you address whichever project you choose.

Each idea below gives short description of the project, our best estimate at the difficulty, any required basic knowledge, and the project mentors you should contact regarding the project. We strongly encourage any interested students to reach out to the mentors by posting on our mailing list and/or emailing them directly by the email linked in their GitHub profiles.

Please feel free to propose your own project if you like. If you want to propose your own project, please follow the template from the ideas below and definitely post on the mailing list with your idea so that we can discuss and help refine it.


Re-implement the Matlab interface

Idea

We currently have a Matlab interface to the C++ core library, based on the "mex" extension interface, but it is difficult to maintain. We would like to look at ways of replacing this interface. Options under consideration include using the "loadlibrary" interface to more directly call Cantera's C wrapper functions, or by using Matlab to import/call the Python interface.

Difficulty

Medium

Required Knowledge

C/C++/Matlab or Matlab/Python, depending on which option is pursued

Mentors

Implement GPU solver for reactor simulations using SUNDIALS 3.1 interface

Idea

The matrices representing the systems of equations in Cantera are generally solved using SUNDIALS. Newer versions of SUNDIALS have a better interface to integrate with heterogeneous computing environments. This project will add GPU support to Cantera for reactor network integration.

Difficulty

Medium

Required Knowledge

C++, CUDA/OpenCL

Mentors

Implement GPU solver for 1D flame simulations

Idea

Solving 1D flame problems in Cantera requires the solution of linear systems with large, banded matrices. This problem is well-suited to GPUs, but current GPU libraries do not implement algorithms for this particular matrix structure. This project involves the implementation of standard algorithms for solving such systems on the GPU, and then using this algorithm within Cantera's 1D flame solver.

Difficulty

Hard

Required knowledge

C++, CUDA/OpenCL, Linear algebra/matrix computations

Mentors

Implement a steady-state solver for 0-D systems

Idea

Cantera can solve systems of equations representing physically zero-dimensional (i.e., time dependent-only) or one-dimensional (i.e., time + space) systems. The solution of the 1-D problems is done under the assumption of steady state, resulting in a differential-algebraic system of equations to solve. There is a solver implemented in Cantera as part of the 1-D code that solves these problems. 0-D systems can either be transient or steady state, represented by an ODE or algebraic equation respectively; at the moment, the only way to achieve solutions of the steady state problem is to integrate the transient problem until properties stop changing. We would like to modify or implement the existing steady-state 1-D solver for 0-D systems

Difficulty

Medium-Hard

Required Knowledge

C++

Mentors

Fix up Mixmaster

Idea

Mixmaster is our (very simple) GUI to access a limited subset of Cantera's functionality. It would be useful if this GUI were... well, useful. At the moment, it may be broken (not sure, haven't tried it recently), it cannot be installed on user systems very easily (it is a Python package, but missing the installation infrastructure), it is more-or-less entirely undocumented, and it would be nice if it were extended with a bit more functionality

Difficulty

Easy

Required Knowledge

Python

Mentors

Reproducible packaging

Idea

We target all three major platforms with a variety of binary packages for people to install. This includes Homebrew and Macports (although the Cantera recipe is currently broken) on macOS, a PPA on Ubuntu, MSI installers for Windows, and conda packages for all platforms. The infrastructure to build these packages needs help to be more reproducible and be upgraded, potentially to work with CI services. We would also like a pip package, which should be possible but hasn't been tried yet.

Difficulty

Easy

Required Knowledge

Python, conda (bonus)

Mentors

Improve Jupyter notebook integration

Idea

There is room to provide more integration between Cantera and Jupyter notebooks to enhance the interactive user experience in this environment. This project could start with things like HTML representations of phase "reports", and extend to things like progress indicator widgets for reactor networks or 1D flame integration. Another possibility would be generating notebook examples with slider based UIs for running common calculations.

Difficulty

Easy

Required Knowledge

Python

Mentors

Implement a plug flow reactor model with surface chemistry

Idea

The existing plug flow reactor model does not allow for surface reactions. The first step of this project would be to derive a general set of governing equations for such a model. The implementation of the solver for this model would then be the first application of the SUNDIALS IDA solver for differential-algebraic equations within Cantera.

Difficulty

Medium-Hard

Required Knowledge

C++, Fluid Mechanics, Combustion Chemistry (bonus)

Mentors

Implement an interface to the CoolProp library

Idea

Cantera currently provides equations of state for a limited number of pure substances covering the liquid/vapor/supercritical regions. The goal of this project would be to introduce a new class to wrap the CoolProp library and provide access to its large range of equations of state within Cantera.

Difficulty

Medium

Required Knowledge

C++

Mentors

Implement wrapped versions of Cantera classes that support units

Idea

Nearly all calculations in Cantera are done in SI units (K, Pa, kg, kmol), and the units of quantities available to the user are also in SI units. Although this is the most useful general case, it would be helpful if users could input other units to Cantera functions and the conversion to SI is done internally before conducting calculations. This project would implement a wrapper around Cantera classes and/or functions to enable the use of alternative units transparently. See also: https://github.com/Cantera/cantera/issues/202

Difficulty

Medium-Easy

Required Knowledge

Python

Mentors

Develop tools to help users visualize and solve common input file errors

Idea

The bedrock of any thermo-kinetic calculation is the chemical mechanism upon which these calculations are performed. Mechanism information is provided in the form of input files, which can be written from scratch by a user, adopted from various sources and repositories on the web, or via a hybrid of these two approaches. Unfortunately, this ad-hoc approach all to frequently can result in errors in the resulting mechanism files, leading to inaccurate or unexpected results, or sometimes syntax errors that prevent loading the mechanism at all. To complicate matters, such mechanism errors can be difficult to diagnose, particularly for larger mechanisms.

This project will develop tools to help users visualize and diagnose common mechanism file errors. There is currently some example code in the form of a Jupyter notebook, and the first step would be to flesh out, generalize, and add documentation to the ideas outlined there. After completing this first task, other aspects of the project could include:

  • Updating mechanism converter files to catch common errors
  • Writing scripts in other Cantera languages (Matlab, Python)
  • Design a GUI-based application to give users advanced options in visualizing errors in very large mechanisms (there may be some overlap with Fix up Mixmaster, here).

Difficulty

Medium-Easy

Required Knowledge

Python, Matlab

Mentors