Source code for pycif.plugins.datastreams.fluxes.edgar_v5.read


import datetime
import glob
import os
from netCDF4 import Dataset, num2date

import numpy as np
import xarray as xr

from logging import info


[docs] def read( self, name, varnames, dates, files, interpol_flx=False, tracer=None, model=None, **kwargs ): # Reading fluxes for periods within the simulation window trcr_flx = [] trcr_dates = [] for dd, file_flx in zip(dates, files): # Check if "time" is in variables # Do not do it with open_dataset which is slow with big files... with Dataset(file_flx, "r") as f: available_time = "time" in f.variables if available_time: with Dataset(file_flx, "r") as f: times = f.variables["time"] times = num2date(times[:], times.units, only_use_python_datetimes=True, only_use_cftime_datetimes=False) ind_data = np.where(times == dd[1])[0][0] # Now read the data at the correct index with Dataset(file_flx, "r") as f: data = f.variables[varnames][ind_data].data else: nc = xr.open_dataset(file_flx) data = nc[varnames].values trcr_flx.append( np.concatenate([data[:, :1800], data[:, 1800:]], axis=1)) trcr_dates.append(dd[0]) return xr.DataArray( np.array(trcr_flx)[:, np.newaxis, ...], coords={"time": trcr_dates}, dims=("time", "lev", "lat", "lon"), )