Source code for snek5000.output.readers.pymech_
"""Read field files using ``pymech`` as ``xarray`` datasets."""
import pymech as pm
from ...log import logger
from . import ReaderBase
[docs]class ReaderPymech(ReaderBase):
tag = "pymech"
[docs] def load(self, prefix="", index=-1, t_approx=None, **kwargs):
"""Opens field files(s) as a xarray dataset. The data is cached in
:attr:`data`.
Parameters
----------
prefix: str
Field file prefix to load custom output files. Empty for default
field files.
index : int or str
When an integer is provided, it refers to the index position in a
sorted list of field files. When ``index == "all"`` all files are
loaded. When ``index`` is some other string, it is assumed to be
glob pattern for the final 5 digits of the field filename extension
(for example: ``"??20?"``).
t_approx: float
Find a file from approximate simulation time
**kwargs
Keyword arguments for ``pymech.open_*`` function
Returns
-------
ds: xarray.Dataset
"""
if isinstance(index, int):
path_file = self.output.get_field_file(prefix, index, t_approx)
ds = pm.open_dataset(path_file, **kwargs)
elif isinstance(index, str):
case = self.output.name_solver
path = self.output.path_session
ext = "?????" if index == "all" else index
pattern = f"{prefix}{case}0.f{ext}"
ds = pm.open_mfdataset(path.glob(pattern), **kwargs)
else:
raise ValueError("Parameter index should be int or str")
self.data = ds
return ds
[docs] def get_var(self, key):
"""Return a specific array.
Parameters
----------
key: str
Key indicating a DataArray in the loaded dataset stored in :attr:`data`.
Must be called after :meth:`load`.
Returns
-------
xarray.DataArray
"""
if not self.data:
logger.info("Using defaults of the load() method to read the data.")
self.load()
return self.data[key]
[docs]class ReaderPymechStats(ReaderPymech):
tag = "pymech_stats"
[docs] def load(self, prefix="sts", index=-1, **kwargs):
"""Opens statistics_ field files(s) as a xarray dataset
.. _statistics: https://kth-nek5000.github.io/KTH_Framework/group__stat.html
"""
return super().load(prefix, index, **kwargs)