Source code for fluidsimfoam.operators

"""Base class for the ``sim.oper`` object"""

import shutil
from subprocess import PIPE, run

from fluidsimfoam.foam_input_files.fields import VolVectorField


[docs]class Operators: def __init__(self, sim): self.sim = sim if hasattr(sim.output.input_files, "block_mesh_dict"): assert (sim.output.path_run / "system/blockMeshDict").exists()
[docs] def get_cells_coords(self): path_c = self.sim.path_run / "0/C" if not path_c.exists(): path_polymesh = self.sim.path_run / "constant/polyMesh/points" if not path_polymesh.exists(): self.sim.make.exec("polymesh", stdout=PIPE) if not path_polymesh.exists(): raise RuntimeError(f"{path_polymesh} does not exists") path_postProcess = shutil.which("postProcess") if path_postProcess is None: raise RuntimeError("OpenFOAM not available") run( ["postProcess", "-func", "writeCellCentres"], cwd=self.sim.path_run, stdout=PIPE, ) field = VolVectorField.from_path(path_c, skip_boundary_field=True) return field.get_components()