-
-
Notifications
You must be signed in to change notification settings - Fork 346
GSoC 2018 Ideas
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.
- Sign up for the mailing list and introduce yourself - your background, where you're attending university, your interests, hobbies, etc.
- Read the documentation available at http://cantera.github.io/dev-docs/sphinx/html/index.html to understand what Cantera is for and about and review our Guide for Contributors
- Make sure you can build the most recent Git commit of Cantera, following the instructions on our Compiling page. If you're having trouble, post on the mailing list!
- Once you find a project that interests you, reach out to the mentor listed below on the mailing list and/or by email
- When you start working on your application, keep in mind the guidelines for applications provided by NumFOCUS at https://github.com/numfocus/gsoc/blob/master/CONTRIBUTING-students.md
- YOU MUST submit your application to the Summer of Code website to be considered. We are NOT allowed to accept applicants unless they apply through Google.
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
- Implement GPU solver for reactor simulations using SUNDIALS 3.1 interface
- Implement GPU solver for 1D flame simulations
- Implement a steady-state solver for 0-D systems
- Fix up Mixmaster
- Reproducible packaging
- Improve Jupyter notebook integration
- Implement a plug flow reactor model with surface chemistry
- Implement an interface to the CoolProp library
- Implement wrapped versions of Cantera classes that support units
- Develop tools to help users visualize and solve common input file errors
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
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
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
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
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
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
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
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
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
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
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