-
-
Notifications
You must be signed in to change notification settings - Fork 350
GSoC 2020 Ideas
The page contains a list of ideas for students applying to Google Summer of Code 2020. 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.
- Read the documentation available at https://cantera.org 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 an interface to the CoolProp library
- Implement wrapped versions of Cantera classes that support units
- Improve CI Infrastructure support for Cantera
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, or by using the direct C++ support in MATLAB (added in R2019a, https://www.mathworks.com/help/releases/R2019a/matlab/call-cpp-library-functions.html).
Hard
C/C++/Matlab or Matlab/Python, depending on which option is pursued
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.
Medium
C++, CUDA/OpenCL
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.
Hard
C++, CUDA/OpenCL, Linear algebra/matrix computations
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.
Medium
C++
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/enhancements/issues/3
Medium-Easy
Python
Cantera uses Travis CI and Appveyor as our primary CI providers connected to our repositories on GitHub. However, we have identified several sore spots with these services, namely:
- Appveyor is limited to one build running at a time
- Travis CI experiences random failures due to build timeouts/errors for dependencies installed using Homebrew
- In some ways, these services duplicate our existing CI infrastructure provided via our BuildBot instance
Aside from these issues, we have identified several additional capabilities that would improve our productivity:
- Integrate build and running of our samples in the source repository as a regression test
- Integrate running our Jupyter Notebook samples, maintained in a separate repository, as a regression test
- More frequently run builds of our packaging infrastructure for conda, macOS, and Windows installer packages
- Test the install scripts on platforms that our core contributors don't use as frequently (Linux distributions other than Ubuntu, primarily)
This project will investigate, suggest, and implement improvements such as those listed above in our CI infrastructure.
Easy
Experience with CI services preferred, although not required