.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_how_to/example_sample_line.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_how_to_example_sample_line.py: Sample a field along a line =========================== ``line(mesh, name, start, end, n_points, field_name)`` builds a ``PointDataSet`` with the requested field already interpolated onto evenly spaced points between ``start`` and ``end``. This is the pyOFTools-side equivalent of OpenFOAM's ``uniform`` set in ``system/sampleDict``. .. GENERATED FROM PYTHON SOURCE LINES 12-14 Open the case ------------- .. GENERATED FROM PYTHON SOURCE LINES 14-37 .. code-block:: Python import os import subprocess import pyOFTools.patch_pybfoam # noqa: F401 from pyOFTools import clone_example CASE = clone_example("damBreak") subprocess.run( ["./Allrun"], cwd=CASE, check=True, env={**os.environ}, capture_output=True, text=True, ) from pybFoam import Time, fvMesh, volScalarField time = Time(str(CASE.parent), CASE.name) mesh = fvMesh(time) p_field = volScalarField.read_field(mesh, "p") .. GENERATED FROM PYTHON SOURCE LINES 38-45 Build the line -------------- A vertical probe through the middle of the water column. ``create_uniform_set`` takes the field object directly (``p_field``), which avoids re-reading it — the ``line()`` builder in :mod:`pyOFTools.builders` would do a second ``read_field`` and double-register the field in OpenFOAM. .. GENERATED FROM PYTHON SOURCE LINES 45-57 .. code-block:: Python from pyOFTools.sets import create_uniform_set dataset = create_uniform_set( mesh, name="vertical_p", start=(0.146, 0.0, 0.0073), end=(0.146, 0.584, 0.0073), n_points=100, field=p_field, ) .. GENERATED FROM PYTHON SOURCE LINES 58-60 Plot it ------- .. GENERATED FROM PYTHON SOURCE LINES 60-75 .. code-block:: Python import matplotlib.pyplot as plt import numpy as np distance = np.asarray(dataset.geometry.distance) pressure = np.asarray(dataset.field) fig, ax = plt.subplots(figsize=(6, 3.5)) ax.plot(distance, pressure) ax.set_xlabel("distance along line [m]") ax.set_ylabel("p [Pa]") ax.set_title("Pressure along a vertical line (damBreak, t=0)") fig.tight_layout() plt.show() .. image-sg:: /auto_how_to/images/sphx_glr_example_sample_line_001.png :alt: Pressure along a vertical line (damBreak, t=0) :srcset: /auto_how_to/images/sphx_glr_example_sample_line_001.png :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 76-81 Aggregate instead of plot ------------------------- The same ``PointDataSet`` flows into any reducer node. ``Mean`` gives the arithmetic mean over the sampled points (not a length-weighted mean — use a ``Sum`` with a manual scaling factor for that). .. GENERATED FROM PYTHON SOURCE LINES 81-89 .. code-block:: Python from pyOFTools.aggregators import Max, Mean from pyOFTools.workflow import WorkFlow mean_p = (WorkFlow(initial_dataset=dataset) | Mean()).compute() max_p = (WorkFlow(initial_dataset=dataset) | Max()).compute() print(f"mean p along line = {mean_p.values[0].value:.4g} Pa") print(f"max p along line = {max_p.values[0].value:.4g} Pa") .. rst-class:: sphx-glr-script-out .. code-block:: none mean p along line = 1e+05 Pa max p along line = 1e+05 Pa .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 10.682 seconds) .. _sphx_glr_download_auto_how_to_example_sample_line.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: example_sample_line.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: example_sample_line.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: example_sample_line.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_