  In this article, we outline the development of a general-purpose Python-based
data analysis tool for OpenFOAM 8. Our implementation relies on the
construction of OpenFOAM applications that have bindings to data analysis
libraries in Python. Double precision data in OpenFOAM is cast to a NumPy array
using the NumPy C-API and Python modules may then be used for arbitrary data
analysis and manipulation on flow-field information. This document highlights
how the proposed framework may be used for an in-situ online singular value
decomposition (SVD) implemented in Python and accessed from the OpenFOAM solver
PimpleFOAM. Here, `in-situ' refers to a programming paradigm that allows for a
concurrent computation of the data analysis on the same computational resources
utilized for the partial differential equation solver. In addition, to
demonstrate data-parallel analyses, we deploy a distributed SVD, which collects
snapshot data across the ranks of a distributed simulation to compute the
global left singular vectors. Crucially, both OpenFOAM and Python share the
same message passing interface (MPI) communicator for this deployment which
allows Python objects and functions to exchange NumPy arrays across ranks. Our
experiments also demonstrate how customized data science libraries such as
TensorFlow may be leveraged through these bindings. Subsequently, we provide
scaling assessments of our framework and the selected algorithms on multiple
nodes of Intel Broadwell and KNL architectures for canonical test cases such as
the large eddy simulations of a backward facing step and a channel flow at
friction Reynolds number of 395.
