Source code for pycif.plugins.domains.dynamico.read_domain
import os
import numpy as np
import xarray as xr
from ....utils.check.errclass import IllegalArgumentError
[docs]
def read_grid(domain, **kwargs):
"""Read Dynamico grid from a netCDF file.
Args:
domain (Domain): The domain object.
"""
domain.unstructured_domain = True
# Get path to grid file
if hasattr(domain, "dir") and hasattr(domain, "grid_dir"):
raise IllegalArgumentError(
"'dir' and 'dir_grid' arguments can not be used together")
dirname = getattr(domain, "dir", getattr(domain, "grid_dir", ""))
domain.grid_path = os.path.join(dirname, domain.grid_file)
with xr.open_dataset(domain.grid_path) as ds:
# Convention for unstructured domains: ncell in nlon and nlat set to one
domain.nlon = ds.sizes["cell"]
domain.nlat = 1
# Cell centers (shape (1, ncells))
domain.zlon = ds["lon"].values[np.newaxis, :]
domain.zlat = ds["lat"].values[np.newaxis, :]
# Cell vertices (shape (nvertices, ncells))
domain.zlonc = ds["bounds_lon"].values.T
domain.zlatc = ds["bounds_lat"].values.T
# Cell area (shape (1, ncells))
if "area" in ds:
domain.areas = ds["area"].values[np.newaxis, :]
# Get path to vcoord file
if hasattr(domain, "dir") and hasattr(domain, "vcoord_dir"):
raise IllegalArgumentError(
"'dir' and 'vcoord_dir' arguments can not be used together")
dirname = getattr(domain, "dir", getattr(domain, "vcoord_dir", ""))
domain.vcoord_path = os.path.join(dirname, domain.vcoord_file)
with xr.open_dataset(domain.vcoord_path) as ds:
domain.sigma_a = ds["ap"].values
domain.sigma_b = ds["bp"].values
domain.nlev = len(domain.sigma_a) - 1
domain.pressure_unit = "Pa"