Source code for pycif.plugins.datastreams.fields.lmdz_inicond_ico.write

from __future__ import annotations

from os import PathLike
from typing import Any

import xarray as xr
from .....utils.check.errclass import CifTypeError
from .....utils.hdf5 import _hdf5_lock


[docs] def write( self, name: str, path: str | PathLike, data: xr.DataArray, metadata: dict[str, Any] | None = None, **kwargs, ): """Append a mixing-ratio initial condition (icosahedral grid) to a NetCDF file. Squeezes the singleton ``time`` and ``lat`` dimensions, renames ``lon`` to ``cell`` (the DYNAMICO cell index), builds coordinates via ``self.domain.get_domain_coords()``, and appends the resulting dataset to ``path``. Args: self (object): this plugin; ``self.domain`` supplies the coordinates. name (str): variable name to write. path (str): path to the target file to write. data (xarray.DataArray): data to write, with singleton ``time``/ ``lat`` dimensions. metadata: Unused. **kwargs: Unused. Raises: CifTypeError: If ``data`` is not an ``xarray.DataArray``. """ if not isinstance(data, xr.DataArray): plg = self.plugin plg_name = f"{plg.name} / {plg.version} / {plg.type}" raise CifTypeError( f"Plugin {plg_name} write method 'data' argument should of type " f"xarray.DataArray. Passed 'data' argument type: {type(data)}" ) data = data.squeeze(["time", "lat"]) data = data.rename({"lon": "cell"}) ds = xr.Dataset( {name: (data.dims, data.values)}, coords=self.domain.get_domain_coords(), ) with _hdf5_lock: ds.to_netcdf(path, mode="a")