Run pybFoam in parallel¶
pybFoam scripts can run under MPI in the same way OpenFOAM solvers do: you
decompose the case, launch with mpirun, and the usual
Pstream facilities report your rank. The shipped Allrun-parallel
scripts in tests/pybind/ and examples/case/ are the canonical
reference.
Decompose the case¶
Use OpenFOAM’s decomposePar utility first. pybFoam does not re-wrap it —
invoke it the way you normally would:
cd /path/to/case
decomposePar -force
This creates processor0, processor1, … under the case directory.
Launch with MPI¶
mpirun -np 4 python my_script.py -parallel
The -parallel flag is parsed by argList on each rank; without it
OpenFOAM assumes serial and you will hit immediate errors about parallel
I/O. Build argList from sys.argv as usual:
import sys
import pybFoam
from pybFoam import Time, fvMesh
args = pybFoam.argList(sys.argv)
time = Time(args)
mesh = fvMesh(time)
Query parallel state from Python¶
The Pstream class exposes the same predicates as the C++ side:
from pybFoam import Pstream, Info
if Pstream.parRun():
Info(f"Rank {Pstream.myProcNo()} of {Pstream.nProcs()}")
# Only print from the master rank
if Pstream.master():
print("summary goes here")
In a serial run parRun() returns False, myProcNo() is 0,
nProcs() is 1, and master() is True — so the same script
works both ways.
Reconstruct afterwards¶
Once the parallel run finishes, reassemble the case in the host directory
with reconstructPar:
reconstructPar -latestTime
This too is a native OpenFOAM utility and is not wrapped by pybFoam.