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"