Coupling Julia-based simulations via preCICE
Date
Authors
Journal Title
Journal ISSN
Volume Title
Publisher
Abstract
The coupling library preCICE allows to couple single-physics solvers to partitioned multi-physics simulations in a black-box fashion. preCICE is a C++ library, but it offers language bindings to access the preCICE API from solvers written in other languages, such as C, Python, Fortran and MATLAB. The Julia Programming Language designed for numerical computing is a strong candidate to be supported by preCICE. While Julia provides a wide set of tools for interfacing with other languages, including C++, porting a library such as preCICE that is made for High Performance Computing and runs on a huge number of processes, requires little to no compromises. Multiple ways of wrapping a C/C++ library are presented and implemented. In addition come Julia’s own features, for example the Distributed base library, that deviate from classic standards of known scientific languages. To test the bindings, two dummy solvers are coupled and presented in an example setup, with an outlook on further development.
Die Kopplungsbibliothek preCICE ermöglicht es, Single-Physik Löser zu partitionierten Multi-Physik Simulationen in einer Black-Box-Manier zu koppeln. Zwar ist preCICE eine C++-Bibliothek, bietet sie Bindings für den Zugriff auf ihre API von Solvern, die in einer anderen Sprachen wie C, Python, Fortran und MATLAB geschrieben wurden, an. Die Programmiersprache Julia, die für die wissenschaftliche Programmierung entwickelt wurde, ist ein starker Kandidat für die Unterstützung von preCICE. Während Julia eine breite Auswahl für schnittstellen mit anderen Sprachen, einschließlich C++, bereitstellt, erfordert die Portierung einer Bibliothek wie preCICE, die für High Performance Computing entwickelt wurde und auf einer Vielzahl von Prozessesoren ausgeführt werdem kann, wenig bis gar keine Kompromisse. Es werden mehrere Möglichkeiten zum Portieren einer C/C ++-Bibliothek vorgestellt und implementiert. Hinzu kommen Julias eigene Features, zum Beispiel die Bibliothek Distributed, die von klassischen Standards bekannter Sprachen abweichen. Um die Bindings zu testen, werden zwei Dummy-Solver gekoppelt und in einem Beispielaufbau mit einem Ausblick auf die weitere Entwicklung vorgestellt.