Source code for fdsreader.export.sim_exporter

import os
from typing_extensions import Literal
from . import export_slcf_raw, export_obst_raw, export_smoke_raw
from .. import Simulation


[docs] def export_sim(sim: Simulation, output_dir: str, ordering: Literal['C', 'F'] = 'C'): """Exports the 3d arrays to raw binary files with corresponding .yaml meta files. Warning: This method does not work for large simulations as some internal multiprocess buffers overflow after a few GB of data. Please export the simulation manually using the functions used in this method in separate python instances. :param sim: The :class:`Simulation` to export. :param output_dir: The directory in which to save all files. :param ordering: Whether to write the data in C or Fortran ordering. """ meta = {"Obstructions": list(), "Slices": list(), "Volumes": list(), "Hash": sim._hash} for obst in sim.obstructions: obst_path = export_obst_raw(obst, os.path.join(output_dir, "obst"), ordering) if obst_path: meta["Obstructions"].append(os.path.relpath(obst_path, output_dir).replace("\\", "/")) for slc in sim.slices: slice_path = export_slcf_raw(slc, os.path.join(output_dir, "slices", slc.quantity.name.replace(' ', '_').lower()), ordering) if slice_path: meta["Slices"].append(os.path.relpath(slice_path, output_dir).replace("\\", "/")) for smoke in sim.smoke_3d: volume_path = export_smoke_raw(smoke, os.path.join(output_dir, "smoke", smoke.quantity.name.replace(' ', '_').lower()), ordering) if volume_path: meta["Volumes"].append(os.path.relpath(volume_path, output_dir).replace("\\", "/")) meta["NumObstructions"] = len(meta["Obstructions"]) meta["NumSlices"] = len(meta["Slices"]) meta["NumVolumes"] = len(meta["Volumes"]) import yaml meta_file_path = os.path.join(output_dir, sim.chid + "-smv.yaml") with open(meta_file_path, 'w') as metafile: yaml.dump(meta, metafile) return meta_file_path