A coupler is a software tool allowing the concurrent execution and the intercommunication of programs not having been especially designed for that.
In addition to the data exchange issues, the coupler can take care of a number of services, such as intermediate computations on the exchanged data, grid to grid interpolations, parallel data redistribution.
The couplings, therefore, span from simple sequential code assembling (chaining) to applications involving tens of models.
Sometimes the codes must run in parallel, especially if the coupling takes place in the inner iterative processes of the computational entities.
More generally, a component coupling approach often allows to split a system into elementary computational entities that can be handled and maintained more comfortably. This approach has proved to be very effective for the design, the management and the monitoring of large complex systems as, for instance, data assimilation suites.
The main qualities of the OpenPALM coupler are its easy set-up, its flexibility, its performances, the simple updates and evolutions of the coupled application and the many side services and functions that it offers. The OpenPALM coupler is composed of three main elements: PALM, CWIPI and PrePALM
PALM (Projet d'Assimilation par Logiciel Multimethodes) has originally been designed for oceanographic data assimilation algorithms, but its application domain extends to every kind of scientific applications. In the framework of PALM, applications are split into elementary components that can exchange data though MPI communications. The main features of PALM are the dynamic launching of the coupled components, the full independence of the components from the application algorithm, the parallel data exchanges with redistribution and the separation of the physics from the algebraic manipulations performed by the PALM algebra toolbox. It can be defined as a dynamic coupler for its ability to deal with situations where the component execution scheduling and the data exchange patterns cannot be entirely defined before execution.
Static code coupling (left) and Dynamic code coupling(right)
Based on the BFT and FVM libraries, CWIPI (Coupling With Interpolation Parallel Interface) aims at providing a fully parallel communication layer for mesh based coupling between several parallel codes with MPI communications. Like most existing coupling libraries for multi-executables paradigm, CWIPI is a static coupler in the sense that all the components of the simulations are started at the beginning, exchange data during the run phase and finish together at the end. Coupling is made through 1D, 2D or 3D exchange zones that can be discretized in different ways in the coupled codes. The library takes into account all types of geometrical elements (polygon, polyhedral) with an unstructured description. CWIPI functionalities involve the construction of the communication graph between distributed geometric interfaces through geometrical localization, interpolation on non coincident meshes, exchange of coupling fields for massively parallel applications as well as visualization file building.
OpenPALM applications are implemented via a graphical user interface (GUI) called PrePALM. In this interface, the programmer initially defines the coupling algorithm: number of components, sequential and parallel sections, loops and conditional executions, resources management. Then he describes the actual communications between components. Options about synchronization, memory management and parallel computing can be set at this level and they allows the implementation of effective and flexible applications.