pyPDAF - A Python interface to Parallel Data Assimilation FrameworkΒΆ
pyPDAF is a Python interface to the Parallel Data Assimilation Framwork (PDAF) written in Fortran. The latest pyPDAF supports PDAF-V2.3.
As an interface to PDAF, pyPDAF supports all PDAF functionalities. You can use pyPDAF to construct a parallel ensemble data assimilation system in pure Python. The pyPDAF is designed as a framework that defines the workflow of given DA algorithms. Considering the versatility of the software, information on the model and observations are passed to the DA algorithms through user-supplied functions. With pyPDAF, all user-supplied functions can be implemented in Python. We expect that the coding of the user-supplied functions will be easier and more flexible than in Fortran due to the rich Python ecosystem.
- pyPDAF can be used with two modes:
online mode: DA is performed without interrupting the model program. Here, the model code is extended by calling PDAF functions to generate a single program. In online mode, the filtering gets the model state and distributes the analysis to model by in-memory exchange. This is the recommended mode for better efficiency.
offline mode: DA is performed after the model program is finished. Here, a separate program is generated to perform DA. In offline mode, the filtering reads the model state from disk and writes the analysis to disk.
- The potential applications of pyPDAF include:
online DA systems with Python models, e.g., machine-learning models
offline DA systems
This is a great tool for researchers who want to test and develop new DA systems. Compared to Fortran systems, the efficiency is decreased mainly from user-supplied functions and overhead for array conversions between Fortran and Python. The core DA algorithms are as efficient as in PDAF. Note that, for computational intensive user-supplied functions, the efficiency can be improved by using just-in-time compilation tools such as numba.
- Here, we will provide a suite of examples and tutorials to demonstrate how to use pyPDAF. Currently, two examples are provided: