Dr. Benjamin Uekermann
Scientific Computing in Computer Science
Technische Universität München
preCICE (Precise Code Interaction Coupling Environment) is a coupling library for partitioned multi-physics simulations, including, but not restricted to fluid-structure interaction and conjugate heat transfer simulations. Partitioned means that preCICE couples existing programs (solvers) capable of simulating a subpart of the complete physics involved in a simulation. This allows for the high flexibility that is needed to keep a decent time-to-solution for complex multi-physics scenarios. The software offers methods for transient equation coupling, communication means (based on MPI Ports or TCP/IP), and data mapping schemes. Ready-to-use adapters for well-known solvers, such as OpenFOAM, deal.II, FEniCS, SU2, or CalculiX, are available. Due to the minimally-invasive approach of preCICE, adapters for in-house codes can be implemented and validated in only a few weeks. preCICE is open-source software under the LGPLv3 license and is available on GitHub. The impact of preCICE has grown significantly in recent years. Today, we know of more than 100 research groups in academia, non-academic research centers, and industry that actively use preCICE.
In its current version, preCICE only allows the usage of static coupling meshes. The vertices of such meshes can only be defined once per coupled simulation (during the initialization of preCICE) and remain, as the name suggests, static during the simulation. For static coupling meshes, preCICE was parallelized and optimized in the ExaFSA project (Exascale Simulation of Fluid-Structure-Acoustics Interactions), which was part of the German Priority Program SPPEXA Software for Exascale Computing. To establish the parallel communication pattern between coupled solvers in the initialization, coupling meshes, partitioned over parallel ranks, are communicated from one solver to another and repartitioned in the receiving solver according to the latter’s local mesh partitions. An older, serial version of preCICE also supported dynamic meshes – meshes that can be altered after each timestep. During the parallelization of preCICE in the ExaFSA project, however, this feature needed to be dropped to decrease the complexity of the software architecture. The goal of this KONWIHR project was to extend preCICE with a brute-force re-initialization feature to re-enable (slow) dynamic meshes and to remove internal bottlenecks.
The current prototype implementation allows users to mark complete coupling meshes as invalid and re-define them in every timestep, which triggers a re-initialization of the parallel communication pattern of preCICE. This required additional synchronization points between the local ranks of a single participant as well as the overall coordination of coupled participants. The changed meshes also required a re-initialization of a majority of internal components including data mapping schemes between meshes, mesh exporters, and the overall partitioning information. This procedure is a slow algorithm for many coupled applications as it requires rerunning the majority of the work of the initialization step, but allows the users of preCICE to realize previously unsupported applications. Furthermore, we improved the data structures of the coupling meshes by reducing the overall bookkeeping. While increasing the computational cost for edge cases, this results in a smaller memory overhead and improved data locality overall.