Note
Go to the end to download the full example code.
Run your first NeoFOAM case¶
Run the bundled pitzDaily benchmark end-to-end with the
incompressibleFluid solver and plot the final velocity field.
Imports¶
import contextlib
import subprocess
import pyvista as pv
from neofoam.solver import incompressibleFluid
from neofoam.tutorial import clone_case
Traceback (most recent call last):
File "/home/runner/work/NeoFOAM/NeoFOAM/examples/tutorials/example_01_run_incompressible_fluid.py", line 18, in <module>
from neofoam.solver import incompressibleFluid
ImportError: cannot import name 'incompressibleFluid' from 'neofoam.solver' (/opt/hostedtoolcache/Python/3.11.15/x64/lib/python3.11/site-packages/neofoam/solver/__init__.py)
Clone the bundled case¶
clone_case copies the case to a fresh tempdir and restores
0.orig/ to 0/ (what Allrun normally does). The
.foam marker satisfies pyvista’s OpenFOAMReader at the end.
case = clone_case("pitzDaily")
(case / "pitzDaily.foam").touch()
print(f"working copy: {case}")
Generate the mesh¶
blockMesh reads system/blockMeshDict and writes
constant/polyMesh/.
subprocess.run(["blockMesh", "-case", str(case)], check=True)
assert (case / "constant" / "polyMesh" / "points").exists()
Run the solver¶
Equivalent to running neofoam solver incompressiblefluid from
the shell — that CLI command calls the same run underneath.
We chdir into the case the way an Allrun script does.
with contextlib.chdir(case):
incompressibleFluid.run(["."])
Plot the final velocity field¶
pyvista colours by the magnitude of U automatically. A
flat-blue plot or zero-range colour bar would mean the solve
didn’t produce data — re-check the log in that case.
reader = pv.OpenFOAMReader(str(case / "pitzDaily.foam"))
reader.set_active_time_value(reader.time_values[-1])
mesh = reader.read()["internalMesh"]
pl = pv.Plotter(off_screen=True, window_size=(900, 360))
pl.add_mesh(
mesh,
scalars="U",
cmap="viridis",
scalar_bar_args={"title": "|U| [m/s]"},
)
pl.view_xy()
pl.camera.zoom(1.2)
pl.show()
Total running time of the script: (0 minutes 0.056 seconds)