Marking my third internship with Coupi, this year has helped me to learn a substantial amount about software development practices and some of the challenges faced by tech startup companies. Rather than further testing or simulation design, this year my role was focused on contributing as a developer to Coupi’s core software, Polyphysica. Ranging from language translation to new features to coupling with other physical modeling software, fulfilling that role provided a variety of experiences that will help me with future projects.
With many Discrete Element Method (DEM) modeling software, there is a limited set of particle shapes available for use. This takes the form of basic shapes such as spheres, cubes, or other simple polygons. Put simply, shapes are typically chosen based upon ease of collision detection algorithms. Custom particle shapes can often be created by loading object model files, but in most cases, this results in a slowdown for simulations due to handling collisions between complex particle shapes. One of the best ways to represent complex particle shapes is to use collections of spheres. Due to how efficient their collision detection algorithm is, even a collection of spheres is more efficient to use than a custom object model to represent a complex particle.
With that in mind, one of my projects over the course of this internship was to create a sphere importer for the software that would allow users to load in their custom set of spheres to use as a single ‘particle’. The user is still responsible for creating the particle configuration, but the algorithm will calculate the appropriate physical qualities of the resulting shape, such as the volume and the moments of inertia. The main challenge in the development of the algorithm was to account for spheres that overlap with one another, to make sure that overlapping volumes did not cause inaccuracies.
One of the more interesting projects I worked on this summer was the translation of one of the company’s older contact detection algorithms that hadn’t yet been brought up to the new language and current standards. Aside from just being able to learn more about different approaches to contact detection on the scale of a DEM model, this project proved to be an interesting challenge. I initially thought that translating from one language to another would prove to be a pretty straightforward task. Between updating data structures, bringing coding in line with new standards, and generating/fulfilling new unit tests, the process actually took a fair while longer to complete than I expected. While the development process itself was about what I expected, it did help teach me to better estimate development times.
Coupling with MSC Adams
The bulk of my work over this internship was focused on implementing a new feature for Polyphysica, the ability to run a co-simulation with another physical simulation software, specifically MSC Adams. The idea of co-simulations is to run equivalent representations of a physical simulation in several software products simultaneously. One software might be more specialized in analysis of physical simulations from a particular model design such as DEM or Finite Element Method (FEM) analysis. By running the same simulation in both software, you can feed data from one into the other so that each can focus on the calculations they are more specialized in.
All in all, this summer was a great experience that helped me to learn about professional software development. From the challenges involved with building libraries for specific operating systems to designing frameworks to handle general user input and interface between separate software, I have been able to encounter and develop many great coding practices that I’ll take with me into the future. I’m grateful for the opportunity to work with Coupi once again through this internship and look forward to seeing how they grow moving forward.