Ideas for contributing

This page contains ideas for interested contributors that would like to get involved with the development of G+Smo. You are mostly welcome to send your own ideas to the mailing list (Subscribe) or join us in the IRC channel #G+Smo on Freenode.

We group the ideas under 3 umbrellas.

  • Extensions and plugins

This group regards the creation of a link or interface between G+Smo and other open-source software. This is done in G+Smo either by writing plugins for third-party software (thus exporting functionality from G+Smo), or by creating extensions that import functionality from or link to other code.
The general aim is to use G+Smo to provide CAD data processing tools to the numerical simulation community and to provide simulation tools to the world of geometric design.

  • Efficiency and computation

This group collects ideas related to computational mathematics.
The potential student is expected to have a background in both mathematics and computer programming.

  • Web interface and file formats

This group is about developing components of a web-based front-end to G+Smo, as well as adding support for more file formats.

We do not tag the ideas with respect to difficulty. The reason is that each of these ideas can be turned into G+SoC projects of varying level of difficulty. The specific goals and tasks of each idea will be decided according to the profile of the student that will work on it. Get in touch with us to discuss and specify a competitive project suited to your profile!

Connect and interface

1. ParaView plugin

ParaView is an open-source data analysis and visualization application, built on top of the VTK library. It is a standard tool for visualization in the numerical simulation community, e.g. for displaying the solution of finite element analysis, creating animations for time-dependent phenomena, processing volumetric data, and so on. However, it lacks built-in support for B-spline geometry representation (curves, surfaces, tri-variate volumes). Certainly, one can generate a mesh out of a B-spline geometry and create a ParaView input file. This is how G+Smo currently outputs visualization data to ParaView.

This project aims at implementing a plugin (dynamic library) for inputting and processing G+Smo data to ParaView. The first step is the development of a plugin that contains a Reader for G+Smo's spline data file format. Apart from visualizing the spline geometry, one could display the control net of a B-spline geometry and also visualize the parameter domain together with the knot-lines or knot-planes, using ParaView filters. Finally, a writer will allow us to write back spline data from within ParaView. The final goal would be to contribute this plugin to ParaView.

2. Connect to an open-source CAD system

This idea regards the bi-directional communication between G+Smo and CAD/CAM software. In particular, we aim at developing a plugin for open-source CAD applications. Promising possibilities include BRL-CAD and Blender.

We are looking for students that have successfully worked in the past with other open-source projects and have experience with them. However, the source code should be developed in the G+Smo repository, use the API of the CAD system and linked dynamically with it after compilation.

3. Python scripting interface

In this project we would like to wrap G+Smo's spline classes and partial differential equation (PDE) discretization tools with Python. The strategic decision that we need to make first regards choosing one of several possible options to port the functionality in Python, and evaluate its pros and cons.

The idea is to get G+Smo to speak the Unified Form Language (UFL). Python UFL is a domain specific language for declaring finite element discretizations of variational forms. It offers a syntax which is close to mathematical notation that allows choosing finite element spaces and defining expressions for weak forms. The task in this project is to extend the language to isogeometric function spaces, which are supported in G+Smo.

Efficiency and computation

4. Half-edge mesh and B-rep data structures

A half-edge data structure is an efficient structure for representing the incidence information about the vertices, edges and faces of a mesh. We would like to develop a general purpose half-edge data structure implementation within G+Smo; use this structure to improve the efficiency and reduce code redundancy of mesh operations.

The half-edge data structure is the basis of surface-based boundary representations. As a second step one can re-build the B-rep class of G+Smo on top of the general purpose half-edge data structure. In doing so, we can move B-rep operations (eg. feature detection algorithm) to the half-edge structure, so that it becomes available and re-usable to other parts of the code.

5. Unit tests

Our nightly build show a code coverage of around 60 percent coming from our (around 130) test programs. This percentage can be improved. Moreover, our tests are hand-made and do not adhere a general testing framework.

In this project the goal is to introduce a test unit and verification framework to G+Smo. Such frameworks predefine assertions, levels of severity of test failure, various options for running the tests, automated test report generation, and so on. A big number of open-source possibilities exist, for instanse googletest, Catch, UnitTest++, xUnit++ suite and many others. Before starting such a project, we should carefully choose the most suitable framework for our needs.

Communication with our developer's base is going to be vital for the second stage this project. The student should get in touch with the authors of the current unit tests and get a rough idea of what each test does. Subsequently, the tests should be upgraded to the new framework, while improving the coverage by adding more tests when needed.

6. Parallelization

This idea suggests the parallelization of time consuming parts of the code.

The first task that we should parallelize is the matrix generation of a discretized PDE. This process is inheritly parallel, since it involves a loop over the cells of a domain, followed by a local computation on each cell individually. Then follows the accumulation of the local result to a global sparse matrix.

Secondly, the solution of the resulting sparse linear system is a computationally expensive procedure that needs to be distributed to many processing units (CPUs or GPUs). Open-source parallel linear system solver packages such as SuperLU or sparsesuite will be employed for this task. The efficiency and advantage of the parallel code will be demonstrated by a number of computationally demanding simulation examples. The parallel computing infrastructure is available for effective trial and testing of these ideas.

Web interface and file formats

7. Web database of geometric models and benchmark simulation problems

This project idea is inspired by other geometric model databases, such as Aim@Shape repository or Georgia Tech's geometric models archive. It regards the setup of a web database of isogeometric spline geometry and simulation data. The core task is the setup of a suitable web development toolkit (eg. Wt/Wt::Dbo, CppCMS/CppDB, or others) to support the web-site. The data processing will be done by a G+Smo process running in the background, providing thumbnail generation, real-time computations and visualization and conversion of uploaded data.

There is already an interesting collection of isogeometric data sets, including B-spline planar domains, surfaces, multi-patch volumetric data, boundary-represented solids, PDE benchmarks, boundary value problems with manufactured solutions, and so on, that we aim at adding to the database. In addition, the visitors of the web portal will be able to contribute data, uploaded in various file formats. The internal representation and download format will be the open-source XML format of G+Smo.

8. Web viewer using WebGL

WebGL opens new horizons to web programming and visualization. This idea suggests the setup of a web viewer for isogeometric data. It consists of developing a WebGL plugin that will communicate with G+Smo to generate output suitable for WebGL.

The viewer can be realized by means of different available tools, eg. using three.js, Babylon.js or witty to name a few. This choice is an important decision before starting the development of the viewer. One should make sure that the chosen framework meets our needs, for instance it enables easy communication with a dynamic library, it is suitable for spline data display, allows for user interaction, and so on.

9. Extend the XML and support more I/O formats

An important feature of a library related to CAD and simulation is file input and output. Several file formats are supported by our library, eg. the OpenNurbs, Siemens NX and the Object File Format. Several file formats are not yet supported, most importantly:

  • the X3D format
  • the STEP file format
  • the IGES file format

See for detailed information on each of them.

Moreover, for supporting the web front-end, it would be useful to export formats including

  • The PNG or JPG image format
  • Povray ray tracer format

A related task is to introduce data compression for the library's native XML format, in order to reduce the size of the XML files on the hard disk.

Last modified 4 years ago Last modified on 2015-03-06T19:37:13+01:00